Skip to content

handlers

station.signals.handlers ¤

Attributes¤

User = get_user_model() module-attribute ¤

Classes¤

Basin ¤

Bases: PermissionsBase

River(s) basin where the station is located e.g. El Carmen.

Attributes:

Name Type Description
id int

Primary key.

name str

Name of the basin, e.g. El Carmen.

image ImageField

Photography/Map of the basin.

file FileField

PDF file with details of the basin.

Functions¤
__str__() ¤

Return the basin name.

Source code in station\models.py
228
229
230
def __str__(self) -> str:
    """Return the basin name."""
    return str(self.name)
get_absolute_url() ¤

Return the absolute url of the basin.

Source code in station\models.py
232
233
234
def get_absolute_url(self) -> str:
    """Return the absolute url of the basin."""
    return reverse("station:basin_detail", kwargs={"pk": self.pk})

Country ¤

Bases: PermissionsBase

The country where a station or region is in.

Attributes:

Name Type Description
id int

Primary key.

name str

Country name.

Functions¤
__str__() ¤

Return the country name.

Source code in station\models.py
47
48
49
def __str__(self) -> str:
    """Return the country name."""
    return str(self.name)
get_absolute_url() ¤

Return the absolute url of the country.

Source code in station\models.py
51
52
53
def get_absolute_url(self) -> str:
    """Return the absolute url of the country."""
    return reverse("station:country_detail", kwargs={"pk": self.pk})

Ecosystem ¤

Bases: PermissionsBase

The ecosystem associated with a station.

Attributes:

Name Type Description
id int

Primary key.

name str

Name of the ecosystem, e.g. rain forest.

Functions¤
__str__() ¤

Return the ecosystem name.

Source code in station\models.py
107
108
109
def __str__(self) -> str:
    """Return the ecosystem name."""
    return str(self.name)
get_absolute_url() ¤

Return the absolute url of the ecosystem.

Source code in station\models.py
111
112
113
def get_absolute_url(self) -> str:
    """Return the absolute url of the ecosystem."""
    return reverse("station:ecosystem_detail", kwargs={"pk": self.pk})

Institution ¤

Bases: PermissionsBase

Institutional partner responsible for a station.

Attributes:

Name Type Description
id int

Primary key.

name str

Name of the institution.

Functions¤
__str__() ¤

Return the institution name.

Source code in station\models.py
130
131
132
def __str__(self) -> str:
    """Return the institution name."""
    return str(self.name)
get_absolute_url() ¤

Return the absolute url of the institution.

Source code in station\models.py
134
135
136
def get_absolute_url(self) -> str:
    """Return the absolute url of the institution."""
    return reverse("station:institution_detail", kwargs={"pk": self.pk})

Place ¤

Bases: PermissionsBase

Specific place that a station is situated.

Attributes:

Name Type Description
id int

Primary key.

name str

Name of the place, e.g. Huaraz.

image ImageField

Photography/Map of the location.

Functions¤
__str__() ¤

Return the place name.

Source code in station\models.py
187
188
189
def __str__(self) -> str:
    """Return the place name."""
    return str(self.name)
get_absolute_url() ¤

Return the absolute url of the place.

Source code in station\models.py
191
192
193
def get_absolute_url(self) -> str:
    """Return the absolute url of the place."""
    return reverse("station:place_detail", kwargs={"pk": self.pk})

PlaceBasin ¤

Bases: PermissionsBase

Associates a Basin with a Place and an image.

Attributes:

Name Type Description
id int

Primary key.

place Place

Place of the association.

basin Basin

Basin of the association.

image ImageField

Photography/Map of the place within the basin.

Functions¤
__str__() ¤

Return the place-basin association.

Source code in station\models.py
273
274
275
def __str__(self) -> str:
    """Return the place-basin association."""
    return str(self.place) + " - " + str(self.basin)
get_absolute_url() ¤

Return the absolute url of the place-basin association.

Source code in station\models.py
277
278
279
def get_absolute_url(self) -> str:
    """Return the absolute url of the place-basin association."""
    return reverse("station:placebasin_detail", kwargs={"pk": self.pk})

Region ¤

Bases: PermissionsBase

A region within a country.

Attributes:

Name Type Description
id int

Primary key.

name str

Name of the region.

country Country

Country where the region is located.

Functions¤
__str__() ¤

Return the region name.

Source code in station\models.py
82
83
84
def __str__(self) -> str:
    """Return the region name."""
    return str(self.name)
get_absolute_url() ¤

Return the absolute url of the region.

Source code in station\models.py
86
87
88
def get_absolute_url(self) -> str:
    """Return the absolute url of the region."""
    return reverse("station:region_detail", kwargs={"pk": self.pk})

Station ¤

Bases: PermissionsBase

Main representation of a station, including several metadata.

Attributes:

Name Type Description
visibility str

Visibility level of the object, including an "internal" option.

station_id int

Primary key.

station_code str

Unique code for the station.

station_name str

Brief description of the station.

station_type StationType

Type of the station.

country Country

Country where the station is located.

region Region

Region within the Country where the station is located.

ecosystem Ecosystem

Ecosystem associated with the station.

institution Institution

Institutional partner responsible for the station.

place_basin PlaceBasin

Place-Basin association.

station_state bool

Is the station operational?

timezone str

Timezone of the station.

station_latitude Decimal

Latitude of the station, in degrees [-90 to 90].

station_longitude Decimal

Longitude of the station, in degrees [-180 to 180].

station_altitude int

Altitude of the station.

influence_km Decimal

Area of influence in km2.

station_file ImageField

Photography of the station.

station_external bool

Is the station external?

variables str

Comma-separated list of variables measured by the station.

Attributes¤
variables_list: list[str] property ¤

Return the list of variables measured by the station.

Only variables with data in the database are returned.

Returns:

Type Description
list[str]

list[str]: List of variables measured by the station.

Functions¤
__str__() ¤

Return the station code.

Source code in station\models.py
458
459
460
def __str__(self) -> str:
    """Return the station code."""
    return str(self.station_code)
get_absolute_url() ¤

Return the absolute url of the station.

Source code in station\models.py
462
463
464
def get_absolute_url(self) -> str:
    """Return the absolute url of the station."""
    return reverse("station:station_detail", kwargs={"pk": self.pk})
set_object_permissions() ¤

Set object-level permissions.

This method is called by the save method of the model to set the object-level permissions based on the visibility level of the object. In addition to the standard permissions for the station, the view_measurements permission is set which controls who can view the measurements associated to the station.

Source code in station\models.py
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
def set_object_permissions(self) -> None:
    """Set object-level permissions.

    This method is called by the save method of the model to set the object-level
    permissions based on the visibility level of the object. In addition to the
    standard permissions for the station, the view_measurements permission is set
    which controls who can view the measurements associated to the station.
    """
    super().set_object_permissions()

    standard_group = Group.objects.get(name="Standard")
    anonymous_user = get_anonymous_user()

    # Assign view_measurements permission based on permissions level
    if self.visibility == "public":
        assign_perm("view_measurements", standard_group, self)
        assign_perm("view_measurements", anonymous_user, self)
        if self.owner:
            remove_perm("view_measurements", self.owner, self)
    elif self.visibility == "internal":
        assign_perm("view_measurements", standard_group, self)
        remove_perm("view_measurements", anonymous_user, self)
        if self.owner:
            remove_perm("view_measurements", self.owner, self)
    elif self.visibility == "private":
        remove_perm("view_measurements", standard_group, self)
        remove_perm("view_measurements", anonymous_user, self)
        if self.owner:
            assign_perm("view_measurements", self.owner, self)

StationType ¤

Bases: PermissionsBase

Type of the station, indicating what it measures.

Attributes:

Name Type Description
id int

Primary key.

name str

Name of the station type, e.g. pluvometric, hydrological.

Functions¤
__str__() ¤

Return the station type name.

Source code in station\models.py
156
157
158
def __str__(self) -> str:
    """Return the station type name."""
    return str(self.name)
get_absolute_url() ¤

Return the absolute url of the station type.

Source code in station\models.py
160
161
162
def get_absolute_url(self) -> str:
    """Return the absolute url of the station type."""
    return reverse("station:stationtype_detail", kwargs={"pk": self.pk})

Functions¤

set_model_permissions(sender, **kwargs) ¤

Set model-level permissions.

Source code in station\signals\handlers.py
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
@receiver(post_migrate)
def set_model_permissions(sender, **kwargs):
    """Set model-level permissions."""
    for model in [
        Country,
        Region,
        Ecosystem,
        Institution,
        StationType,
        Place,
        Basin,
        PlaceBasin,
        Station,
    ]:
        model.set_model_permissions()

set_object_permissions(sender, instance, **kwargs) ¤

Set object-level permissions.

Source code in station\signals\handlers.py
20
21
22
23
24
25
26
27
28
29
30
31
@receiver(post_save, sender=Country)
@receiver(post_save, sender=Region)
@receiver(post_save, sender=Ecosystem)
@receiver(post_save, sender=Institution)
@receiver(post_save, sender=StationType)
@receiver(post_save, sender=Place)
@receiver(post_save, sender=Basin)
@receiver(post_save, sender=PlaceBasin)
@receiver(post_save, sender=Station)
def set_object_permissions(sender, instance, **kwargs):
    """Set object-level permissions."""
    instance.set_object_permissions()