Skip to content

Estación¤

Introducción¤

La Estación es el componente principal de Paricia. La Estación es propietaria de los datos de medición, que le permiten visualizar los datos existentes y añadir nuevos conjuntos, y captura una gran cantidad de metadatos sobre la ubicación geográfica de la estación, incluyendo longitud, latitud y altitud, pero también región, cuenca, ecosistema o área cubierta.

También posee otro parámetro clave utilizado durante el proceso de ingesta de datos: la zona horaria donde se encuentra la estación, que se utiliza para interpretar la hora de los conjuntos de datos.

Zona horaria incorrecta

Si este parámetro no se define correctamente, la hora de los datos asociados a la estación se interpretará de forma incorrecta. Compruebe el parámetro antes de cargar los datos, especialmente la primera vez.

Como se indica en la página de permisos, la visibilidad de las estaciones puede tomar una tercera opción, interna, que sólo permite a los usuarios registrados visualizar los datos de la estación. Las estaciones también requieren permiso de "cambio" para poder cargar datos asociados a esa estación y luego validarlos.

Diagrama UML de los modelos de la aplicación Station.
Figure 1: Diagrama UML de los modelos de la aplicación Station.

Componentes básicos¤

Country ¤

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})

Region ¤

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})

Ecosystem ¤

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 ¤

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})

StationType ¤

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})

Place ¤

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})

Basin ¤

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})

PlaceBasin ¤

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})

Componentes principales¤

Station ¤

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 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)