Skip to content

Commit 8b973de

Browse files
authoredJan 22, 2024
Merge pull request #130 from ImperialCollegeLondon/new_report
Adds the new report model
2 parents 3423376 + ef2bf4b commit 8b973de

11 files changed

+1363
-19
lines changed
 

‎.github/workflows/ci.yml

+1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ jobs:
3838
run: |
3939
python -m pip install --upgrade pip wheel
4040
pip install -r requirements.txt
41+
pip install -r requirements-dev.txt
4142
- name: Run migrations
4243
run: python manage.py migrate
4344
- name: Run tests

‎Dockerfile

+2
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,10 @@ CMD ["/usr/local/bin/init.sh"]
1818

1919
# django
2020
COPY requirements.txt .
21+
COPY requirements-dev.txt .
2122
RUN apt-get update && apt-get install -y --no-install-recommends libmagic1 && rm -rf /var/lib/apt/lists/*
2223
RUN pip install --no-cache-dir -r requirements.txt
24+
RUN pip install --no-cache-dir -r requirements-dev.txt
2325
COPY . /usr/src/app
2426
WORKDIR /usr/src/app
2527
RUN mkdir log

‎djangomain/settings.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@
5656
"sensor.apps.SensorConfig",
5757
"variable.apps.VariableConfig",
5858
"formatting.apps.FormattingConfig",
59-
"measurement.apps.MeasurementConfig",
59+
"measurement",
6060
"validated.apps.ValidatedConfig",
6161
"hourly.apps.HourlyConfig",
6262
"daily.apps.DailyConfig",

‎measurement/admin.py

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
from django.contrib import admin
2+
3+
from .models import Measurement, Report
4+
5+
admin.site.site_header = "Paricia Administration - Measurements"
6+
7+
8+
class MeasurementBaseAdmin(admin.ModelAdmin):
9+
list_display = ["id", "station", "variable", "maximum", "minimum"]
10+
list_filter = ["station", "variable"]
11+
12+
13+
@admin.register(Report)
14+
class ReportAdmin(MeasurementBaseAdmin):
15+
list_display = ["id", "report_type"] + MeasurementBaseAdmin.list_display[1:]
16+
list_filter = ["report_type"] + MeasurementBaseAdmin.list_filter
17+
18+
19+
@admin.register(Measurement)
20+
class MeasurementAdmin(MeasurementBaseAdmin):
21+
list_display = [
22+
"id",
23+
"is_validated",
24+
"is_active",
25+
"overwritten",
26+
] + MeasurementBaseAdmin.list_display[1:]
27+
list_filter = ["is_validated", "is_active"] + MeasurementBaseAdmin.list_filter
28+
readonly_fields = [r for r in dir(Measurement) if r.startswith("raw_")]

‎measurement/migrations/0005_report.py

+108
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
# Generated by Django 4.2.7 on 2024-01-17 14:05
2+
3+
import django.db.models.deletion
4+
import timescale.db.models.fields
5+
from django.db import migrations, models
6+
7+
8+
class Migration(migrations.Migration):
9+
dependencies = [
10+
("variable", "0001_initial"),
11+
("station", "0003_alter_station_timezone"),
12+
("measurement", "0004_auto_20230623_0007"),
13+
]
14+
15+
operations = [
16+
migrations.CreateModel(
17+
name="Report",
18+
fields=[
19+
(
20+
"id",
21+
models.AutoField(
22+
auto_created=True,
23+
primary_key=True,
24+
serialize=False,
25+
verbose_name="ID",
26+
),
27+
),
28+
(
29+
"time",
30+
timescale.db.models.fields.TimescaleDateTimeField(interval="1 day"),
31+
),
32+
(
33+
"value",
34+
models.DecimalField(
35+
decimal_places=6, max_digits=14, verbose_name="value"
36+
),
37+
),
38+
(
39+
"maximum",
40+
models.DecimalField(
41+
decimal_places=6,
42+
max_digits=14,
43+
null=True,
44+
verbose_name="maximum",
45+
),
46+
),
47+
(
48+
"minimum",
49+
models.DecimalField(
50+
decimal_places=6,
51+
max_digits=14,
52+
null=True,
53+
verbose_name="minimum",
54+
),
55+
),
56+
(
57+
"report_type",
58+
models.CharField(
59+
choices=[
60+
("hourly", "Hourly"),
61+
("daily", "Daily"),
62+
("monthly", "Montly"),
63+
],
64+
max_length=7,
65+
),
66+
),
67+
(
68+
"used_for_daily",
69+
models.BooleanField(
70+
default=False,
71+
verbose_name="Has data been used already for a daily report?",
72+
),
73+
),
74+
(
75+
"used_for_monthly",
76+
models.BooleanField(
77+
default=False,
78+
verbose_name="Has data been used already for a montly report?",
79+
),
80+
),
81+
(
82+
"station",
83+
models.ForeignKey(
84+
on_delete=django.db.models.deletion.PROTECT,
85+
to="station.station",
86+
verbose_name="Station",
87+
),
88+
),
89+
(
90+
"variable",
91+
models.ForeignKey(
92+
on_delete=django.db.models.deletion.PROTECT,
93+
to="variable.variable",
94+
verbose_name="Variable",
95+
),
96+
),
97+
],
98+
options={
99+
"default_permissions": (),
100+
"indexes": [
101+
models.Index(
102+
fields=["report_type", "station", "time", "variable"],
103+
name="measurement_report__51fccc_idx",
104+
)
105+
],
106+
},
107+
),
108+
]
+160
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
# Generated by Django 4.2.7 on 2024-01-17 15:08
2+
3+
import django.db.models.deletion
4+
import timescale.db.models.fields
5+
from django.db import migrations, models
6+
7+
8+
class Migration(migrations.Migration):
9+
dependencies = [
10+
("station", "0003_alter_station_timezone"),
11+
("variable", "0001_initial"),
12+
("measurement", "0005_report"),
13+
]
14+
15+
operations = [
16+
migrations.CreateModel(
17+
name="Measurement",
18+
fields=[
19+
(
20+
"id",
21+
models.AutoField(
22+
auto_created=True,
23+
primary_key=True,
24+
serialize=False,
25+
verbose_name="ID",
26+
),
27+
),
28+
(
29+
"time",
30+
timescale.db.models.fields.TimescaleDateTimeField(interval="1 day"),
31+
),
32+
(
33+
"value",
34+
models.DecimalField(
35+
decimal_places=6, max_digits=14, verbose_name="value"
36+
),
37+
),
38+
(
39+
"maximum",
40+
models.DecimalField(
41+
decimal_places=6,
42+
max_digits=14,
43+
null=True,
44+
verbose_name="maximum",
45+
),
46+
),
47+
(
48+
"minimum",
49+
models.DecimalField(
50+
decimal_places=6,
51+
max_digits=14,
52+
null=True,
53+
verbose_name="minimum",
54+
),
55+
),
56+
(
57+
"depth",
58+
models.PositiveSmallIntegerField(null=True, verbose_name="depth"),
59+
),
60+
(
61+
"direction",
62+
models.DecimalField(
63+
decimal_places=6,
64+
max_digits=14,
65+
null=True,
66+
verbose_name="direction",
67+
),
68+
),
69+
(
70+
"raw_value",
71+
models.DecimalField(
72+
decimal_places=6,
73+
editable=False,
74+
max_digits=14,
75+
null=True,
76+
verbose_name="raw value",
77+
),
78+
),
79+
(
80+
"raw_maximum",
81+
models.DecimalField(
82+
decimal_places=6,
83+
editable=False,
84+
max_digits=14,
85+
null=True,
86+
verbose_name="raw maximum",
87+
),
88+
),
89+
(
90+
"raw_minimum",
91+
models.DecimalField(
92+
decimal_places=6,
93+
editable=False,
94+
max_digits=14,
95+
null=True,
96+
verbose_name="raw minimum",
97+
),
98+
),
99+
(
100+
"raw_direction",
101+
models.DecimalField(
102+
decimal_places=6,
103+
editable=False,
104+
max_digits=14,
105+
null=True,
106+
verbose_name="raw direction",
107+
),
108+
),
109+
(
110+
"raw_depth",
111+
models.PositiveSmallIntegerField(
112+
editable=False, null=True, verbose_name="raw depth"
113+
),
114+
),
115+
(
116+
"used_for_hourly",
117+
models.BooleanField(
118+
default=False,
119+
verbose_name="Has data been used already for an hourly report?",
120+
),
121+
),
122+
(
123+
"is_validated",
124+
models.BooleanField(
125+
default=False, verbose_name="Has data been validated?"
126+
),
127+
),
128+
(
129+
"is_active",
130+
models.BooleanField(default=True, verbose_name="Is data active?"),
131+
),
132+
(
133+
"station",
134+
models.ForeignKey(
135+
on_delete=django.db.models.deletion.PROTECT,
136+
to="station.station",
137+
verbose_name="Station",
138+
),
139+
),
140+
(
141+
"variable",
142+
models.ForeignKey(
143+
on_delete=django.db.models.deletion.PROTECT,
144+
to="variable.variable",
145+
verbose_name="Variable",
146+
),
147+
),
148+
],
149+
options={
150+
"abstract": False,
151+
"default_permissions": (),
152+
"indexes": [
153+
models.Index(
154+
fields=["station", "time", "variable"],
155+
name="measurement_station_322060_idx",
156+
)
157+
],
158+
},
159+
),
160+
]

0 commit comments

Comments
 (0)