Skip to content

load_initial_data

utilities.load_initial_data ¤

Script to load initial data into the system such as stations, sensors, format types etc. Currently data is stored in home/data but this will change in the future when home is refactored.

Attributes¤

data_files = ['management_user', 'variable_unit', 'variable_variable', 'formatting_delimiter', 'formatting_extension', 'formatting_date', 'formatting_time', 'formatting_format', 'formatting_classification', 'sensor_brand', 'sensor_type', 'station_type', 'station_ecosystem', 'station_country', 'station_region', 'station_place', 'station_basin', 'station_placebasin', 'station_institution', 'station_station', 'measurement_airtemperature'] module-attribute ¤

Classes¤

Measurement ¤

Bases: MeasurementBase

Class to store the measurements and their validation status.

This class holds the value of a given variable and station at a specific time, as well as auxiliary information such as maximum and minimum values, depth and direction, for vector quantities. All of these have a raw version where a backup of the original data is kept, should this change at any point.

Flags to monitor its validation status, if the data is active (and therefore can be used for reporting) and if it has actually been used for that is also included.

Attributes:

Name Type Description
depth int

Depth of the measurement.

direction Decimal

Direction of the measurement, useful for vector quantities.

raw_value Decimal

Original value of the measurement.

raw_maximum Decimal

Original maximum value of the measurement.

raw_minimum Decimal

Original minimum value of the measurement.

raw_direction Decimal

Original direction of the measurement.

raw_depth int

Original depth of the measurement.

is_validated bool

Flag to indicate if the measurement has been validated.

is_active bool

Flag to indicate if the measurement is active. An inactive measurement is not used for reporting

Attributes¤
overwritten: bool property ¤

Indicates if any of the values associated to the entry have been overwritten.

Returns:

Name Type Description
bool bool

True if any raw field is different to the corresponding standard field.

raws: tuple[str, ...] property ¤

Return the raw fields of the measurement.

Returns:

Type Description
tuple[str, ...]

tuple[str]: Tuple with the names of the raw fields of the measurement.

Functions¤
clean() ¤

Check consistency of validation, reporting and backs-up values.

Source code in measurement\models.py
259
260
261
262
263
264
265
266
267
268
269
def clean(self) -> None:
    """Check consistency of validation, reporting and backs-up values."""
    # Check consistency of validation
    if not self.is_validated and not self.is_active:
        raise ValidationError("Only validated entries can be declared as inactive.")

    # Backup values to raws, if needed
    for r in self.raws:
        value = getattr(self, r.removeprefix("raw_"))
        if value and not getattr(self, r):
            setattr(self, r, value)

Functions¤

update_variables_for_station(*station_codes) ¤

Update the variables for the given station codes.

The variables are updated based on the measurements associated with the station. The variables are saved as a comma-separated string in the variables field of the station model.

Parameters:

Name Type Description Default
station_codes tuple[str]

Station codes for which to update the variables. If not provided, all station codes with measurements are considered.

()
Source code in station\functions.py
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
def update_variables_for_station(*station_codes) -> None:
    """Update the variables for the given station codes.

    The variables are updated based on the measurements associated with the station.
    The variables are saved as a comma-separated string in the variables field of the
    station model.

    Args:
        station_codes (tuple[str]): Station codes for which to update the variables.
            If not provided, all station codes with measurements are considered.
    """

    # We get the station codes from the Measurement model if not provided
    # Only station codes with measurements are considered
    station_codes = (
        station_codes
        or Measurement.objects.values_list(
            "station__station_code", flat=True
        ).distinct()
    )

    # Get the variables for each station and save them as a comma-separated string
    for station_code in station_codes:
        variables = (
            Measurement.objects.filter(station__station_code=station_code)
            .values_list("variable__variable_code", flat=True)
            .distinct()
        )
        if variables:
            station = Station.objects.get(station_code=station_code)
            station.variables = variables = ",".join(variables)
            station.full_clean()
            station.save()