cetk 0.0.4.dev0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. cetk/__init__.py +87 -0
  2. cetk/db.py +41 -0
  3. cetk/edb/__init__.py +0 -0
  4. cetk/edb/apps.py +9 -0
  5. cetk/edb/cache.py +249 -0
  6. cetk/edb/const.py +26 -0
  7. cetk/edb/copy.py +18 -0
  8. cetk/edb/exporters.py +551 -0
  9. cetk/edb/importers/__init__.py +36 -0
  10. cetk/edb/importers/activity_import.py +279 -0
  11. cetk/edb/importers/codeset_import.py +124 -0
  12. cetk/edb/importers/gridsource_import.py +256 -0
  13. cetk/edb/importers/roadsource_import.py +1602 -0
  14. cetk/edb/importers/source_import.py +958 -0
  15. cetk/edb/importers/timevar_import.py +115 -0
  16. cetk/edb/importers/utils.py +92 -0
  17. cetk/edb/importers/validation.py +207 -0
  18. cetk/edb/ltreefield.py +76 -0
  19. cetk/edb/migrations/0001_initial.py +1731 -0
  20. cetk/edb/migrations/0002_data.py +156 -0
  21. cetk/edb/migrations/0003_create_gpkg_tables.py +14 -0
  22. cetk/edb/migrations/__init__.py +0 -0
  23. cetk/edb/models/__init__.py +49 -0
  24. cetk/edb/models/base.py +52 -0
  25. cetk/edb/models/common_models.py +144 -0
  26. cetk/edb/models/fleets.py +160 -0
  27. cetk/edb/models/gridsource_models.py +163 -0
  28. cetk/edb/models/road_classes.py +197 -0
  29. cetk/edb/models/road_models.py +413 -0
  30. cetk/edb/models/source_models.py +399 -0
  31. cetk/edb/models/timevar_models.py +111 -0
  32. cetk/edb/rasterize/__init__.py +1 -0
  33. cetk/edb/rasterize/rasterizer.py +1544 -0
  34. cetk/edb/signals.py +43 -0
  35. cetk/edb/traffic.py +75 -0
  36. cetk/edb/units.py +160 -0
  37. cetk/emissions/__init__.py +0 -0
  38. cetk/emissions/aggregate_emissions.sql +303 -0
  39. cetk/emissions/areasource_emissions.sql +53 -0
  40. cetk/emissions/calc.py +148 -0
  41. cetk/emissions/filters.py +179 -0
  42. cetk/emissions/gridsource_emissions.sql +52 -0
  43. cetk/emissions/pointsource_emissions.sql +53 -0
  44. cetk/emissions/queries.py +221 -0
  45. cetk/emissions/roadsource_emissions.sql +211 -0
  46. cetk/emissions/used_substances.sql +56 -0
  47. cetk/emissions/views.py +89 -0
  48. cetk/logging.py +68 -0
  49. cetk/settings.py +85 -0
  50. cetk/tools/__init__.py +1 -0
  51. cetk/tools/cetk_command.py +599 -0
  52. cetk/tools/manage.py +24 -0
  53. cetk/tools/utils.py +334 -0
  54. cetk/utils.py +62 -0
  55. cetk-0.0.4.dev0.dist-info/LICENSE +201 -0
  56. cetk-0.0.4.dev0.dist-info/METADATA +297 -0
  57. cetk-0.0.4.dev0.dist-info/RECORD +60 -0
  58. cetk-0.0.4.dev0.dist-info/WHEEL +5 -0
  59. cetk-0.0.4.dev0.dist-info/entry_points.txt +3 -0
  60. cetk-0.0.4.dev0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,1731 @@
1
+ # Generated by Django 4.2.2 on 2024-05-06 06:27
2
+
3
+ import django.contrib.gis.db.models.fields
4
+ import django.db.models.deletion
5
+ from django.db import migrations, models
6
+
7
+ import cetk.edb.ltreefield
8
+ import cetk.edb.models.fleets
9
+ import cetk.edb.models.road_classes
10
+ import cetk.edb.models.road_models
11
+ import cetk.edb.models.source_models
12
+
13
+
14
+ class Migration(migrations.Migration):
15
+ initial = True
16
+
17
+ dependencies = []
18
+
19
+ operations = [
20
+ migrations.CreateModel(
21
+ name="Activity",
22
+ fields=[
23
+ (
24
+ "id",
25
+ models.AutoField(
26
+ auto_created=True,
27
+ primary_key=True,
28
+ serialize=False,
29
+ verbose_name="ID",
30
+ ),
31
+ ),
32
+ (
33
+ "name",
34
+ models.CharField(
35
+ max_length=100, unique=True, verbose_name="name of activity"
36
+ ),
37
+ ),
38
+ (
39
+ "unit",
40
+ models.CharField(max_length=100, verbose_name="unit of activity"),
41
+ ),
42
+ ],
43
+ options={
44
+ "default_related_name": "activities",
45
+ },
46
+ ),
47
+ migrations.CreateModel(
48
+ name="ActivityCode",
49
+ fields=[
50
+ (
51
+ "id",
52
+ models.AutoField(
53
+ auto_created=True,
54
+ primary_key=True,
55
+ serialize=False,
56
+ verbose_name="ID",
57
+ ),
58
+ ),
59
+ ("code", cetk.edb.ltreefield.LtreeField(verbose_name="activity code")),
60
+ (
61
+ "label",
62
+ models.CharField(
63
+ max_length=100, verbose_name="activity code label"
64
+ ),
65
+ ),
66
+ ],
67
+ ),
68
+ migrations.CreateModel(
69
+ name="AreaSource",
70
+ fields=[
71
+ (
72
+ "id",
73
+ models.AutoField(
74
+ auto_created=True,
75
+ primary_key=True,
76
+ serialize=False,
77
+ verbose_name="ID",
78
+ ),
79
+ ),
80
+ ("name", models.CharField(max_length=100, verbose_name="name")),
81
+ (
82
+ "created",
83
+ models.DateTimeField(
84
+ auto_now_add=True, verbose_name="time of creation"
85
+ ),
86
+ ),
87
+ (
88
+ "updated",
89
+ models.DateTimeField(
90
+ auto_now=True, verbose_name="time of last update"
91
+ ),
92
+ ),
93
+ (
94
+ "tags",
95
+ models.JSONField(
96
+ blank=True,
97
+ null=True,
98
+ verbose_name="user-defined key-value pairs",
99
+ ),
100
+ ),
101
+ (
102
+ "geom",
103
+ django.contrib.gis.db.models.fields.PolygonField(
104
+ db_index=True,
105
+ geography=True,
106
+ srid=4326,
107
+ verbose_name="the extent of the area source",
108
+ ),
109
+ ),
110
+ ],
111
+ options={
112
+ "abstract": False,
113
+ "default_related_name": "areasources",
114
+ },
115
+ ),
116
+ migrations.CreateModel(
117
+ name="AreaSourceActivity",
118
+ fields=[
119
+ (
120
+ "id",
121
+ models.AutoField(
122
+ auto_created=True,
123
+ primary_key=True,
124
+ serialize=False,
125
+ verbose_name="ID",
126
+ ),
127
+ ),
128
+ ("rate", models.FloatField(verbose_name="activity rate")),
129
+ ],
130
+ options={
131
+ "abstract": False,
132
+ "default_related_name": "activities",
133
+ },
134
+ ),
135
+ migrations.CreateModel(
136
+ name="AreaSourceSubstance",
137
+ fields=[
138
+ (
139
+ "id",
140
+ models.AutoField(
141
+ auto_created=True,
142
+ primary_key=True,
143
+ serialize=False,
144
+ verbose_name="ID",
145
+ ),
146
+ ),
147
+ ("value", models.FloatField(default=0, verbose_name="source emission")),
148
+ (
149
+ "updated",
150
+ models.DateTimeField(
151
+ auto_now=True, verbose_name="date of last update"
152
+ ),
153
+ ),
154
+ ],
155
+ options={
156
+ "abstract": False,
157
+ "default_related_name": "substances",
158
+ },
159
+ ),
160
+ migrations.CreateModel(
161
+ name="CodeSet",
162
+ fields=[
163
+ (
164
+ "id",
165
+ models.AutoField(
166
+ auto_created=True,
167
+ primary_key=True,
168
+ serialize=False,
169
+ verbose_name="ID",
170
+ ),
171
+ ),
172
+ ("name", models.CharField(max_length=64)),
173
+ ("slug", models.SlugField(max_length=64, unique=True)),
174
+ (
175
+ "description",
176
+ models.CharField(
177
+ blank=True,
178
+ max_length=200,
179
+ null=True,
180
+ verbose_name="description",
181
+ ),
182
+ ),
183
+ ],
184
+ options={
185
+ "db_table": "codesets",
186
+ "default_related_name": "codesets",
187
+ },
188
+ ),
189
+ migrations.CreateModel(
190
+ name="ColdstartTimevar",
191
+ fields=[
192
+ (
193
+ "id",
194
+ models.AutoField(
195
+ auto_created=True,
196
+ primary_key=True,
197
+ serialize=False,
198
+ verbose_name="ID",
199
+ ),
200
+ ),
201
+ ("name", models.CharField(max_length=100, unique=True)),
202
+ (
203
+ "typeday",
204
+ models.CharField(
205
+ default="[[100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0]]", # noqa
206
+ max_length=12240,
207
+ ),
208
+ ),
209
+ (
210
+ "month",
211
+ models.CharField(
212
+ default="[100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0]", # noqa
213
+ max_length=840,
214
+ ),
215
+ ),
216
+ ("typeday_sum", models.FloatField(editable=False)),
217
+ ("_normalization_constant", models.FloatField(editable=False)),
218
+ ],
219
+ options={
220
+ "abstract": False,
221
+ "default_related_name": "coldstart_timevars",
222
+ },
223
+ ),
224
+ migrations.CreateModel(
225
+ name="CongestionProfile",
226
+ fields=[
227
+ (
228
+ "id",
229
+ models.AutoField(
230
+ auto_created=True,
231
+ primary_key=True,
232
+ serialize=False,
233
+ verbose_name="ID",
234
+ ),
235
+ ),
236
+ (
237
+ "name",
238
+ models.CharField(
239
+ max_length=100,
240
+ unique=True,
241
+ verbose_name="name of congestion profile",
242
+ ),
243
+ ),
244
+ (
245
+ "traffic_condition",
246
+ models.CharField(
247
+ default=cetk.edb.models.road_models.default_congestion_profile_data, # noqa
248
+ max_length=50,
249
+ ),
250
+ ),
251
+ ],
252
+ options={
253
+ "default_related_name": "congestion_profiles",
254
+ },
255
+ ),
256
+ migrations.CreateModel(
257
+ name="EmissionFactor",
258
+ fields=[
259
+ (
260
+ "id",
261
+ models.AutoField(
262
+ auto_created=True,
263
+ primary_key=True,
264
+ serialize=False,
265
+ verbose_name="ID",
266
+ ),
267
+ ),
268
+ ("factor", models.FloatField(default=0)),
269
+ ],
270
+ options={
271
+ "default_related_name": "emissionfactors",
272
+ },
273
+ ),
274
+ migrations.CreateModel(
275
+ name="Facility",
276
+ fields=[
277
+ (
278
+ "id",
279
+ models.AutoField(
280
+ auto_created=True,
281
+ primary_key=True,
282
+ serialize=False,
283
+ verbose_name="ID",
284
+ ),
285
+ ),
286
+ ("name", models.CharField(max_length=100, verbose_name="name")),
287
+ (
288
+ "created",
289
+ models.DateTimeField(
290
+ auto_now_add=True, verbose_name="time of creation"
291
+ ),
292
+ ),
293
+ (
294
+ "updated",
295
+ models.DateTimeField(
296
+ auto_now=True, verbose_name="time of last update"
297
+ ),
298
+ ),
299
+ (
300
+ "tags",
301
+ models.JSONField(
302
+ blank=True,
303
+ null=True,
304
+ verbose_name="user-defined key-value pairs",
305
+ ),
306
+ ),
307
+ (
308
+ "official_id",
309
+ models.CharField(
310
+ db_index=True,
311
+ max_length=100,
312
+ unique=True,
313
+ verbose_name="official_id",
314
+ ),
315
+ ),
316
+ ],
317
+ options={
318
+ "default_related_name": "facilities",
319
+ },
320
+ ),
321
+ migrations.CreateModel(
322
+ name="Fleet",
323
+ fields=[
324
+ (
325
+ "id",
326
+ models.AutoField(
327
+ auto_created=True,
328
+ primary_key=True,
329
+ serialize=False,
330
+ verbose_name="ID",
331
+ ),
332
+ ),
333
+ ("name", models.CharField(max_length=100, unique=True)),
334
+ ("default_heavy_vehicle_share", models.FloatField()),
335
+ ("tags", models.JSONField(blank=True, default=dict)),
336
+ ],
337
+ options={
338
+ "default_related_name": "fleets",
339
+ },
340
+ managers=[
341
+ ("objects", cetk.edb.models.fleets.FleetManager()),
342
+ ],
343
+ ),
344
+ migrations.CreateModel(
345
+ name="FleetMember",
346
+ fields=[
347
+ (
348
+ "id",
349
+ models.AutoField(
350
+ auto_created=True,
351
+ primary_key=True,
352
+ serialize=False,
353
+ verbose_name="ID",
354
+ ),
355
+ ),
356
+ ("fraction", models.FloatField(default=0.0)),
357
+ ("coldstart_fraction", models.FloatField(default=0.0)),
358
+ (
359
+ "coldstart_timevar",
360
+ models.ForeignKey(
361
+ blank=True,
362
+ null=True,
363
+ on_delete=django.db.models.deletion.SET_NULL,
364
+ related_name="+",
365
+ to="edb.coldstarttimevar",
366
+ ),
367
+ ),
368
+ (
369
+ "fleet",
370
+ models.ForeignKey(
371
+ on_delete=django.db.models.deletion.CASCADE,
372
+ related_name="vehicles",
373
+ to="edb.fleet",
374
+ ),
375
+ ),
376
+ ],
377
+ ),
378
+ migrations.CreateModel(
379
+ name="FlowTimevar",
380
+ fields=[
381
+ (
382
+ "id",
383
+ models.AutoField(
384
+ auto_created=True,
385
+ primary_key=True,
386
+ serialize=False,
387
+ verbose_name="ID",
388
+ ),
389
+ ),
390
+ ("name", models.CharField(max_length=100, unique=True)),
391
+ (
392
+ "typeday",
393
+ models.CharField(
394
+ default="[[100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0]]", # noqa
395
+ max_length=12240,
396
+ ),
397
+ ),
398
+ (
399
+ "month",
400
+ models.CharField(
401
+ default="[100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0]", # noqa
402
+ max_length=840,
403
+ ),
404
+ ),
405
+ ("typeday_sum", models.FloatField(editable=False)),
406
+ ("_normalization_constant", models.FloatField(editable=False)),
407
+ ],
408
+ options={
409
+ "abstract": False,
410
+ "default_related_name": "flow_timevars",
411
+ },
412
+ ),
413
+ migrations.CreateModel(
414
+ name="GridSource",
415
+ fields=[
416
+ (
417
+ "id",
418
+ models.AutoField(
419
+ auto_created=True,
420
+ primary_key=True,
421
+ serialize=False,
422
+ verbose_name="ID",
423
+ ),
424
+ ),
425
+ ("name", models.CharField(max_length=100, verbose_name="name")),
426
+ (
427
+ "created",
428
+ models.DateTimeField(
429
+ auto_now_add=True, verbose_name="time of creation"
430
+ ),
431
+ ),
432
+ (
433
+ "updated",
434
+ models.DateTimeField(
435
+ auto_now=True, verbose_name="time of last update"
436
+ ),
437
+ ),
438
+ (
439
+ "tags",
440
+ models.JSONField(
441
+ blank=True,
442
+ null=True,
443
+ verbose_name="user-defined key-value pairs",
444
+ ),
445
+ ),
446
+ (
447
+ "activitycode1",
448
+ models.ForeignKey(
449
+ blank=True,
450
+ null=True,
451
+ on_delete=django.db.models.deletion.PROTECT,
452
+ related_name="+",
453
+ to="edb.activitycode",
454
+ ),
455
+ ),
456
+ (
457
+ "activitycode2",
458
+ models.ForeignKey(
459
+ blank=True,
460
+ null=True,
461
+ on_delete=django.db.models.deletion.PROTECT,
462
+ related_name="+",
463
+ to="edb.activitycode",
464
+ ),
465
+ ),
466
+ (
467
+ "activitycode3",
468
+ models.ForeignKey(
469
+ blank=True,
470
+ null=True,
471
+ on_delete=django.db.models.deletion.PROTECT,
472
+ related_name="+",
473
+ to="edb.activitycode",
474
+ ),
475
+ ),
476
+ ],
477
+ options={
478
+ "abstract": False,
479
+ "default_related_name": "gridsources",
480
+ },
481
+ ),
482
+ migrations.CreateModel(
483
+ name="PointSource",
484
+ fields=[
485
+ (
486
+ "id",
487
+ models.AutoField(
488
+ auto_created=True,
489
+ primary_key=True,
490
+ serialize=False,
491
+ verbose_name="ID",
492
+ ),
493
+ ),
494
+ ("name", models.CharField(max_length=100, verbose_name="name")),
495
+ (
496
+ "created",
497
+ models.DateTimeField(
498
+ auto_now_add=True, verbose_name="time of creation"
499
+ ),
500
+ ),
501
+ (
502
+ "updated",
503
+ models.DateTimeField(
504
+ auto_now=True, verbose_name="time of last update"
505
+ ),
506
+ ),
507
+ (
508
+ "tags",
509
+ models.JSONField(
510
+ blank=True,
511
+ null=True,
512
+ verbose_name="user-defined key-value pairs",
513
+ ),
514
+ ),
515
+ (
516
+ "chimney_height",
517
+ models.FloatField(default=0, verbose_name="chimney height [m]"),
518
+ ),
519
+ (
520
+ "chimney_outer_diameter",
521
+ models.FloatField(
522
+ default=1.0, verbose_name="chimney outer diameter [m]"
523
+ ),
524
+ ),
525
+ (
526
+ "chimney_inner_diameter",
527
+ models.FloatField(
528
+ default=0.9, verbose_name="chimney inner diameter [m]"
529
+ ),
530
+ ),
531
+ (
532
+ "chimney_gas_speed",
533
+ models.FloatField(
534
+ default=1.0, verbose_name="chimney gas speed [m/s]"
535
+ ),
536
+ ),
537
+ (
538
+ "chimney_gas_temperature",
539
+ models.FloatField(
540
+ default=373.0, verbose_name="chimney gas temperature [K]"
541
+ ),
542
+ ),
543
+ (
544
+ "house_width",
545
+ models.IntegerField(
546
+ default=0,
547
+ verbose_name="house width [m] (to estimate down draft)",
548
+ ),
549
+ ),
550
+ (
551
+ "house_height",
552
+ models.IntegerField(
553
+ default=0,
554
+ verbose_name="house height [m] (to estimate down draft)",
555
+ ),
556
+ ),
557
+ (
558
+ "geom",
559
+ django.contrib.gis.db.models.fields.PointField(
560
+ db_index=True,
561
+ geography=True,
562
+ srid=4326,
563
+ verbose_name="the position of the point-source",
564
+ ),
565
+ ),
566
+ (
567
+ "activitycode1",
568
+ models.ForeignKey(
569
+ blank=True,
570
+ null=True,
571
+ on_delete=django.db.models.deletion.PROTECT,
572
+ related_name="+",
573
+ to="edb.activitycode",
574
+ ),
575
+ ),
576
+ (
577
+ "activitycode2",
578
+ models.ForeignKey(
579
+ blank=True,
580
+ null=True,
581
+ on_delete=django.db.models.deletion.PROTECT,
582
+ related_name="+",
583
+ to="edb.activitycode",
584
+ ),
585
+ ),
586
+ (
587
+ "activitycode3",
588
+ models.ForeignKey(
589
+ blank=True,
590
+ null=True,
591
+ on_delete=django.db.models.deletion.PROTECT,
592
+ related_name="+",
593
+ to="edb.activitycode",
594
+ ),
595
+ ),
596
+ (
597
+ "facility",
598
+ models.ForeignKey(
599
+ blank=True,
600
+ null=True,
601
+ on_delete=django.db.models.deletion.SET_NULL,
602
+ to="edb.facility",
603
+ ),
604
+ ),
605
+ ],
606
+ options={
607
+ "abstract": False,
608
+ "default_related_name": "pointsources",
609
+ },
610
+ ),
611
+ migrations.CreateModel(
612
+ name="RoadAttribute",
613
+ fields=[
614
+ (
615
+ "id",
616
+ models.AutoField(
617
+ auto_created=True,
618
+ primary_key=True,
619
+ serialize=False,
620
+ verbose_name="ID",
621
+ ),
622
+ ),
623
+ ("name", models.CharField(max_length=64, unique=True)),
624
+ ("slug", models.SlugField(max_length=64, unique=True)),
625
+ ("order", models.PositiveSmallIntegerField(unique=True)),
626
+ ],
627
+ options={
628
+ "ordering": ["order"],
629
+ "default_related_name": "road_attributes",
630
+ },
631
+ ),
632
+ migrations.CreateModel(
633
+ name="RoadAttributeValue",
634
+ fields=[
635
+ (
636
+ "id",
637
+ models.AutoField(
638
+ auto_created=True,
639
+ primary_key=True,
640
+ serialize=False,
641
+ verbose_name="ID",
642
+ ),
643
+ ),
644
+ ("value", models.CharField(max_length=64)),
645
+ (
646
+ "attribute",
647
+ models.ForeignKey(
648
+ on_delete=django.db.models.deletion.CASCADE,
649
+ related_name="values",
650
+ to="edb.roadattribute",
651
+ ),
652
+ ),
653
+ ],
654
+ ),
655
+ migrations.CreateModel(
656
+ name="RoadClass",
657
+ fields=[
658
+ (
659
+ "id",
660
+ models.AutoField(
661
+ auto_created=True,
662
+ primary_key=True,
663
+ serialize=False,
664
+ verbose_name="ID",
665
+ ),
666
+ ),
667
+ (
668
+ "attribute_values",
669
+ models.ManyToManyField(to="edb.roadattributevalue"),
670
+ ),
671
+ ],
672
+ options={
673
+ "default_related_name": "road_classes",
674
+ },
675
+ managers=[
676
+ ("objects", cetk.edb.models.road_classes.RoadClassManager()),
677
+ ],
678
+ ),
679
+ migrations.CreateModel(
680
+ name="Substance",
681
+ fields=[
682
+ (
683
+ "id",
684
+ models.AutoField(
685
+ auto_created=True,
686
+ primary_key=True,
687
+ serialize=False,
688
+ verbose_name="ID",
689
+ ),
690
+ ),
691
+ (
692
+ "name",
693
+ models.CharField(max_length=64, unique=True, verbose_name="name"),
694
+ ),
695
+ (
696
+ "slug",
697
+ models.SlugField(max_length=64, unique=True, verbose_name="slug"),
698
+ ),
699
+ (
700
+ "long_name",
701
+ models.CharField(max_length=64, verbose_name="long name"),
702
+ ),
703
+ ],
704
+ options={
705
+ "db_table": "substances",
706
+ "default_related_name": "substances",
707
+ },
708
+ ),
709
+ migrations.CreateModel(
710
+ name="Timevar",
711
+ fields=[
712
+ (
713
+ "id",
714
+ models.AutoField(
715
+ auto_created=True,
716
+ primary_key=True,
717
+ serialize=False,
718
+ verbose_name="ID",
719
+ ),
720
+ ),
721
+ ("name", models.CharField(max_length=100, unique=True)),
722
+ (
723
+ "typeday",
724
+ models.CharField(
725
+ default="[[100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0], [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0]]", # noqa
726
+ max_length=12240,
727
+ ),
728
+ ),
729
+ (
730
+ "month",
731
+ models.CharField(
732
+ default="[100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0]", # noqa
733
+ max_length=840,
734
+ ),
735
+ ),
736
+ ("typeday_sum", models.FloatField(editable=False)),
737
+ ("_normalization_constant", models.FloatField(editable=False)),
738
+ ],
739
+ options={
740
+ "abstract": False,
741
+ "default_related_name": "timevars",
742
+ },
743
+ ),
744
+ migrations.CreateModel(
745
+ name="TrafficSituation",
746
+ fields=[
747
+ (
748
+ "id",
749
+ models.AutoField(
750
+ auto_created=True,
751
+ primary_key=True,
752
+ serialize=False,
753
+ verbose_name="ID",
754
+ ),
755
+ ),
756
+ (
757
+ "ts_id",
758
+ models.CharField(
759
+ max_length=50, unique=True, verbose_name="traffic situation id"
760
+ ),
761
+ ),
762
+ ],
763
+ options={
764
+ "default_related_name": "traffic_situations",
765
+ },
766
+ ),
767
+ migrations.CreateModel(
768
+ name="Vehicle",
769
+ fields=[
770
+ (
771
+ "id",
772
+ models.AutoField(
773
+ auto_created=True,
774
+ primary_key=True,
775
+ serialize=False,
776
+ verbose_name="ID",
777
+ ),
778
+ ),
779
+ ("name", models.CharField(max_length=100, unique=True)),
780
+ ("info", models.CharField(blank=True, max_length=100, null=True)),
781
+ ("isheavy", models.BooleanField(default=False)),
782
+ (
783
+ "max_speed",
784
+ models.IntegerField(
785
+ blank=True,
786
+ choices=[
787
+ (20, "20"),
788
+ (30, "30"),
789
+ (40, "40"),
790
+ (50, "50"),
791
+ (60, "60"),
792
+ (70, "70"),
793
+ (80, "80"),
794
+ (90, "90"),
795
+ (100, "100"),
796
+ (110, "110"),
797
+ (120, "120"),
798
+ (130, "130"),
799
+ (140, "140"),
800
+ ],
801
+ default=130,
802
+ null=True,
803
+ ),
804
+ ),
805
+ ],
806
+ options={
807
+ "default_related_name": "vehicles",
808
+ },
809
+ ),
810
+ migrations.CreateModel(
811
+ name="VehicleFuel",
812
+ fields=[
813
+ (
814
+ "id",
815
+ models.AutoField(
816
+ auto_created=True,
817
+ primary_key=True,
818
+ serialize=False,
819
+ verbose_name="ID",
820
+ ),
821
+ ),
822
+ ("name", models.CharField(max_length=100, unique=True)),
823
+ ],
824
+ options={
825
+ "default_related_name": "vehicle_fuels",
826
+ },
827
+ ),
828
+ migrations.CreateModel(
829
+ name="VerticalDist",
830
+ fields=[
831
+ (
832
+ "id",
833
+ models.AutoField(
834
+ auto_created=True,
835
+ primary_key=True,
836
+ serialize=False,
837
+ verbose_name="ID",
838
+ ),
839
+ ),
840
+ ("name", models.CharField(max_length=64)),
841
+ ("slug", models.SlugField(max_length=64, unique=True)),
842
+ (
843
+ "weights",
844
+ models.CharField(
845
+ default=cetk.edb.models.source_models.default_vertical_dist,
846
+ max_length=100,
847
+ ),
848
+ ),
849
+ ],
850
+ options={
851
+ "db_table": "vertical_distributions",
852
+ "default_related_name": "vertical_distributions",
853
+ },
854
+ ),
855
+ migrations.CreateModel(
856
+ name="VehicleFuelComb",
857
+ fields=[
858
+ (
859
+ "id",
860
+ models.AutoField(
861
+ auto_created=True,
862
+ primary_key=True,
863
+ serialize=False,
864
+ verbose_name="ID",
865
+ ),
866
+ ),
867
+ (
868
+ "activitycode1",
869
+ models.ForeignKey(
870
+ blank=True,
871
+ null=True,
872
+ on_delete=django.db.models.deletion.PROTECT,
873
+ related_name="+",
874
+ to="edb.activitycode",
875
+ ),
876
+ ),
877
+ (
878
+ "activitycode2",
879
+ models.ForeignKey(
880
+ blank=True,
881
+ null=True,
882
+ on_delete=django.db.models.deletion.PROTECT,
883
+ related_name="+",
884
+ to="edb.activitycode",
885
+ ),
886
+ ),
887
+ (
888
+ "activitycode3",
889
+ models.ForeignKey(
890
+ blank=True,
891
+ null=True,
892
+ on_delete=django.db.models.deletion.PROTECT,
893
+ related_name="+",
894
+ to="edb.activitycode",
895
+ ),
896
+ ),
897
+ (
898
+ "fuel",
899
+ models.ForeignKey(
900
+ on_delete=django.db.models.deletion.PROTECT,
901
+ to="edb.vehiclefuel",
902
+ ),
903
+ ),
904
+ (
905
+ "vehicle",
906
+ models.ForeignKey(
907
+ on_delete=django.db.models.deletion.PROTECT, to="edb.vehicle"
908
+ ),
909
+ ),
910
+ ],
911
+ options={
912
+ "default_related_name": "vehiclefuelcombs",
913
+ },
914
+ ),
915
+ migrations.CreateModel(
916
+ name="VehicleEF",
917
+ fields=[
918
+ (
919
+ "id",
920
+ models.AutoField(
921
+ auto_created=True,
922
+ primary_key=True,
923
+ serialize=False,
924
+ verbose_name="ID",
925
+ ),
926
+ ),
927
+ ("freeflow", models.FloatField(default=0)),
928
+ ("heavy", models.FloatField(default=0)),
929
+ ("saturated", models.FloatField(default=0)),
930
+ ("stopngo", models.FloatField(default=0)),
931
+ ("coldstart", models.FloatField(default=0)),
932
+ (
933
+ "fuel",
934
+ models.ForeignKey(
935
+ on_delete=django.db.models.deletion.PROTECT,
936
+ related_name="+",
937
+ to="edb.vehiclefuel",
938
+ ),
939
+ ),
940
+ (
941
+ "substance",
942
+ models.ForeignKey(
943
+ on_delete=django.db.models.deletion.PROTECT,
944
+ related_name="+",
945
+ to="edb.substance",
946
+ ),
947
+ ),
948
+ (
949
+ "traffic_situation",
950
+ models.ForeignKey(
951
+ on_delete=django.db.models.deletion.PROTECT,
952
+ to="edb.trafficsituation",
953
+ ),
954
+ ),
955
+ (
956
+ "vehicle",
957
+ models.ForeignKey(
958
+ on_delete=django.db.models.deletion.PROTECT, to="edb.vehicle"
959
+ ),
960
+ ),
961
+ ],
962
+ options={
963
+ "verbose_name_plural": "Vehicle emission factors",
964
+ "default_related_name": "emissionfactors",
965
+ },
966
+ ),
967
+ migrations.CreateModel(
968
+ name="Settings",
969
+ fields=[
970
+ (
971
+ "id",
972
+ models.AutoField(
973
+ auto_created=True,
974
+ primary_key=True,
975
+ serialize=False,
976
+ verbose_name="ID",
977
+ ),
978
+ ),
979
+ (
980
+ "srid",
981
+ models.IntegerField(
982
+ help_text="Spatial reference system identifier",
983
+ verbose_name="SRID",
984
+ ),
985
+ ),
986
+ (
987
+ "extent",
988
+ django.contrib.gis.db.models.fields.PolygonField(
989
+ geography=True, srid=4326, verbose_name="extent"
990
+ ),
991
+ ),
992
+ ("timezone", models.CharField(max_length=64, verbose_name="timezone")),
993
+ (
994
+ "codeset1",
995
+ models.ForeignKey(
996
+ null=True,
997
+ on_delete=django.db.models.deletion.SET_NULL,
998
+ related_name="+",
999
+ to="edb.codeset",
1000
+ ),
1001
+ ),
1002
+ (
1003
+ "codeset2",
1004
+ models.ForeignKey(
1005
+ null=True,
1006
+ on_delete=django.db.models.deletion.SET_NULL,
1007
+ related_name="+",
1008
+ to="edb.codeset",
1009
+ ),
1010
+ ),
1011
+ (
1012
+ "codeset3",
1013
+ models.ForeignKey(
1014
+ null=True,
1015
+ on_delete=django.db.models.deletion.SET_NULL,
1016
+ related_name="+",
1017
+ to="edb.codeset",
1018
+ ),
1019
+ ),
1020
+ ],
1021
+ options={
1022
+ "db_table": "settings",
1023
+ "default_related_name": "settings",
1024
+ },
1025
+ ),
1026
+ migrations.CreateModel(
1027
+ name="RoadSource",
1028
+ fields=[
1029
+ (
1030
+ "id",
1031
+ models.AutoField(
1032
+ auto_created=True,
1033
+ primary_key=True,
1034
+ serialize=False,
1035
+ verbose_name="ID",
1036
+ ),
1037
+ ),
1038
+ ("name", models.CharField(max_length=100, verbose_name="name")),
1039
+ (
1040
+ "created",
1041
+ models.DateTimeField(
1042
+ auto_now_add=True, verbose_name="time of creation"
1043
+ ),
1044
+ ),
1045
+ (
1046
+ "updated",
1047
+ models.DateTimeField(
1048
+ auto_now=True, verbose_name="time of last update"
1049
+ ),
1050
+ ),
1051
+ (
1052
+ "tags",
1053
+ models.JSONField(
1054
+ blank=True,
1055
+ null=True,
1056
+ verbose_name="user-defined key-value pairs",
1057
+ ),
1058
+ ),
1059
+ (
1060
+ "aadt",
1061
+ models.IntegerField(
1062
+ default=0, verbose_name="Annual average day traffic"
1063
+ ),
1064
+ ),
1065
+ (
1066
+ "nolanes",
1067
+ models.IntegerField(default=2, verbose_name="Number of lanes"),
1068
+ ),
1069
+ (
1070
+ "speed",
1071
+ models.IntegerField(
1072
+ choices=[
1073
+ (20, "20"),
1074
+ (30, "30"),
1075
+ (40, "40"),
1076
+ (50, "50"),
1077
+ (60, "60"),
1078
+ (70, "70"),
1079
+ (80, "80"),
1080
+ (90, "90"),
1081
+ (100, "100"),
1082
+ (110, "110"),
1083
+ (120, "120"),
1084
+ (130, "130"),
1085
+ (140, "140"),
1086
+ ],
1087
+ default=70,
1088
+ verbose_name="Road sign speed [km/h]",
1089
+ ),
1090
+ ),
1091
+ (
1092
+ "width",
1093
+ models.FloatField(default=20.0, verbose_name="Road width [meters]"),
1094
+ ),
1095
+ ("median_strip_width", models.FloatField(default=0)),
1096
+ (
1097
+ "slope",
1098
+ models.IntegerField(
1099
+ choices=[
1100
+ (-10, "-10"),
1101
+ (-9, "-9"),
1102
+ (-8, "-8"),
1103
+ (-7, "-7"),
1104
+ (-6, "-6"),
1105
+ (-5, "-5"),
1106
+ (-4, "-4"),
1107
+ (-3, "-3"),
1108
+ (-2, "-2"),
1109
+ (-1, "-1"),
1110
+ (0, "0"),
1111
+ (1, "1"),
1112
+ (2, "2"),
1113
+ (3, "3"),
1114
+ (4, "4"),
1115
+ (5, "5"),
1116
+ (6, "6"),
1117
+ (7, "7"),
1118
+ (8, "8"),
1119
+ (9, "9"),
1120
+ ],
1121
+ default=0,
1122
+ verbose_name="Slope [°]",
1123
+ ),
1124
+ ),
1125
+ ("heavy_vehicle_share", models.FloatField(blank=True, null=True)),
1126
+ (
1127
+ "geom",
1128
+ django.contrib.gis.db.models.fields.LineStringField(
1129
+ db_index=True,
1130
+ geography=True,
1131
+ srid=4326,
1132
+ verbose_name="the road coordinates",
1133
+ ),
1134
+ ),
1135
+ (
1136
+ "congestion_profile",
1137
+ models.ForeignKey(
1138
+ blank=True,
1139
+ null=True,
1140
+ on_delete=django.db.models.deletion.SET_NULL,
1141
+ related_name="+",
1142
+ to="edb.congestionprofile",
1143
+ ),
1144
+ ),
1145
+ (
1146
+ "fleet",
1147
+ models.ForeignKey(
1148
+ blank=True,
1149
+ null=True,
1150
+ on_delete=django.db.models.deletion.SET_NULL,
1151
+ related_name="+",
1152
+ to="edb.fleet",
1153
+ ),
1154
+ ),
1155
+ (
1156
+ "roadclass",
1157
+ models.ForeignKey(
1158
+ on_delete=django.db.models.deletion.PROTECT,
1159
+ related_name="+",
1160
+ to="edb.roadclass",
1161
+ ),
1162
+ ),
1163
+ ],
1164
+ options={
1165
+ "default_related_name": "roadsources",
1166
+ },
1167
+ ),
1168
+ migrations.AddField(
1169
+ model_name="roadclass",
1170
+ name="traffic_situation",
1171
+ field=models.ForeignKey(
1172
+ on_delete=django.db.models.deletion.CASCADE, to="edb.trafficsituation"
1173
+ ),
1174
+ ),
1175
+ migrations.CreateModel(
1176
+ name="PointSourceSubstance",
1177
+ fields=[
1178
+ (
1179
+ "id",
1180
+ models.AutoField(
1181
+ auto_created=True,
1182
+ primary_key=True,
1183
+ serialize=False,
1184
+ verbose_name="ID",
1185
+ ),
1186
+ ),
1187
+ ("value", models.FloatField(default=0, verbose_name="source emission")),
1188
+ (
1189
+ "updated",
1190
+ models.DateTimeField(
1191
+ auto_now=True, verbose_name="date of last update"
1192
+ ),
1193
+ ),
1194
+ (
1195
+ "source",
1196
+ models.ForeignKey(
1197
+ on_delete=django.db.models.deletion.CASCADE,
1198
+ to="edb.pointsource",
1199
+ ),
1200
+ ),
1201
+ (
1202
+ "substance",
1203
+ models.ForeignKey(
1204
+ on_delete=django.db.models.deletion.PROTECT,
1205
+ related_name="+",
1206
+ to="edb.substance",
1207
+ ),
1208
+ ),
1209
+ ],
1210
+ options={
1211
+ "abstract": False,
1212
+ "default_related_name": "substances",
1213
+ },
1214
+ ),
1215
+ migrations.CreateModel(
1216
+ name="PointSourceActivity",
1217
+ fields=[
1218
+ (
1219
+ "id",
1220
+ models.AutoField(
1221
+ auto_created=True,
1222
+ primary_key=True,
1223
+ serialize=False,
1224
+ verbose_name="ID",
1225
+ ),
1226
+ ),
1227
+ ("rate", models.FloatField(verbose_name="activity rate")),
1228
+ (
1229
+ "activity",
1230
+ models.ForeignKey(
1231
+ on_delete=django.db.models.deletion.PROTECT,
1232
+ related_name="+",
1233
+ to="edb.activity",
1234
+ ),
1235
+ ),
1236
+ (
1237
+ "source",
1238
+ models.ForeignKey(
1239
+ on_delete=django.db.models.deletion.CASCADE,
1240
+ to="edb.pointsource",
1241
+ ),
1242
+ ),
1243
+ ],
1244
+ options={
1245
+ "abstract": False,
1246
+ "default_related_name": "activities",
1247
+ },
1248
+ ),
1249
+ migrations.AddField(
1250
+ model_name="pointsource",
1251
+ name="timevar",
1252
+ field=models.ForeignKey(
1253
+ blank=True,
1254
+ null=True,
1255
+ on_delete=django.db.models.deletion.SET_NULL,
1256
+ related_name="+",
1257
+ to="edb.timevar",
1258
+ ),
1259
+ ),
1260
+ migrations.CreateModel(
1261
+ name="Parameter",
1262
+ fields=[
1263
+ (
1264
+ "id",
1265
+ models.AutoField(
1266
+ auto_created=True,
1267
+ primary_key=True,
1268
+ serialize=False,
1269
+ verbose_name="ID",
1270
+ ),
1271
+ ),
1272
+ (
1273
+ "name",
1274
+ models.CharField(max_length=64, unique=True, verbose_name="name"),
1275
+ ),
1276
+ (
1277
+ "slug",
1278
+ models.SlugField(max_length=64, unique=True, verbose_name="slug"),
1279
+ ),
1280
+ (
1281
+ "quantity",
1282
+ models.CharField(max_length=30, verbose_name="physical quantity"),
1283
+ ),
1284
+ (
1285
+ "substance",
1286
+ models.ForeignKey(
1287
+ null=True,
1288
+ on_delete=django.db.models.deletion.CASCADE,
1289
+ to="edb.substance",
1290
+ verbose_name="substance",
1291
+ ),
1292
+ ),
1293
+ ],
1294
+ options={
1295
+ "db_table": "parameters",
1296
+ "default_related_name": "parameters",
1297
+ },
1298
+ ),
1299
+ migrations.CreateModel(
1300
+ name="GridSourceSubstance",
1301
+ fields=[
1302
+ (
1303
+ "id",
1304
+ models.AutoField(
1305
+ auto_created=True,
1306
+ primary_key=True,
1307
+ serialize=False,
1308
+ verbose_name="ID",
1309
+ ),
1310
+ ),
1311
+ ("value", models.FloatField(default=0, verbose_name="source emission")),
1312
+ (
1313
+ "updated",
1314
+ models.DateTimeField(
1315
+ auto_now=True, verbose_name="date of last update"
1316
+ ),
1317
+ ),
1318
+ (
1319
+ "raster",
1320
+ models.CharField(
1321
+ max_length=100, verbose_name="distribution raster"
1322
+ ),
1323
+ ),
1324
+ (
1325
+ "source",
1326
+ models.ForeignKey(
1327
+ on_delete=django.db.models.deletion.CASCADE, to="edb.gridsource"
1328
+ ),
1329
+ ),
1330
+ (
1331
+ "substance",
1332
+ models.ForeignKey(
1333
+ on_delete=django.db.models.deletion.PROTECT,
1334
+ related_name="+",
1335
+ to="edb.substance",
1336
+ ),
1337
+ ),
1338
+ ],
1339
+ options={
1340
+ "abstract": False,
1341
+ "default_related_name": "substances",
1342
+ },
1343
+ ),
1344
+ migrations.CreateModel(
1345
+ name="GridSourceActivity",
1346
+ fields=[
1347
+ (
1348
+ "id",
1349
+ models.AutoField(
1350
+ auto_created=True,
1351
+ primary_key=True,
1352
+ serialize=False,
1353
+ verbose_name="ID",
1354
+ ),
1355
+ ),
1356
+ ("rate", models.FloatField(verbose_name="activity rate")),
1357
+ (
1358
+ "raster",
1359
+ models.CharField(
1360
+ max_length=100, verbose_name="distribution raster"
1361
+ ),
1362
+ ),
1363
+ (
1364
+ "activity",
1365
+ models.ForeignKey(
1366
+ on_delete=django.db.models.deletion.PROTECT,
1367
+ related_name="+",
1368
+ to="edb.activity",
1369
+ ),
1370
+ ),
1371
+ (
1372
+ "source",
1373
+ models.ForeignKey(
1374
+ on_delete=django.db.models.deletion.CASCADE, to="edb.gridsource"
1375
+ ),
1376
+ ),
1377
+ ],
1378
+ options={
1379
+ "abstract": False,
1380
+ "default_related_name": "activities",
1381
+ },
1382
+ ),
1383
+ migrations.AddField(
1384
+ model_name="gridsource",
1385
+ name="timevar",
1386
+ field=models.ForeignKey(
1387
+ blank=True,
1388
+ null=True,
1389
+ on_delete=django.db.models.deletion.SET_NULL,
1390
+ related_name="+",
1391
+ to="edb.timevar",
1392
+ ),
1393
+ ),
1394
+ migrations.CreateModel(
1395
+ name="FleetMemberFuel",
1396
+ fields=[
1397
+ (
1398
+ "id",
1399
+ models.AutoField(
1400
+ auto_created=True,
1401
+ primary_key=True,
1402
+ serialize=False,
1403
+ verbose_name="ID",
1404
+ ),
1405
+ ),
1406
+ ("fraction", models.FloatField(default=0.0)),
1407
+ (
1408
+ "fleet_member",
1409
+ models.ForeignKey(
1410
+ on_delete=django.db.models.deletion.CASCADE,
1411
+ related_name="fuels",
1412
+ to="edb.fleetmember",
1413
+ ),
1414
+ ),
1415
+ (
1416
+ "fuel",
1417
+ models.ForeignKey(
1418
+ on_delete=django.db.models.deletion.PROTECT,
1419
+ related_name="+",
1420
+ to="edb.vehiclefuel",
1421
+ ),
1422
+ ),
1423
+ ],
1424
+ ),
1425
+ migrations.AddField(
1426
+ model_name="fleetmember",
1427
+ name="timevar",
1428
+ field=models.ForeignKey(
1429
+ blank=True,
1430
+ null=True,
1431
+ on_delete=django.db.models.deletion.SET_NULL,
1432
+ related_name="+",
1433
+ to="edb.flowtimevar",
1434
+ ),
1435
+ ),
1436
+ migrations.AddField(
1437
+ model_name="fleetmember",
1438
+ name="vehicle",
1439
+ field=models.ForeignKey(
1440
+ on_delete=django.db.models.deletion.PROTECT,
1441
+ related_name="+",
1442
+ to="edb.vehicle",
1443
+ ),
1444
+ ),
1445
+ migrations.AddConstraint(
1446
+ model_name="fleet",
1447
+ constraint=models.CheckConstraint(
1448
+ check=models.Q(("default_heavy_vehicle_share__range", (0, 1))),
1449
+ name="fleet_default_heavy_vehicle_share_between_0_and_1",
1450
+ ),
1451
+ ),
1452
+ migrations.AddField(
1453
+ model_name="emissionfactor",
1454
+ name="activity",
1455
+ field=models.ForeignKey(
1456
+ on_delete=django.db.models.deletion.PROTECT, to="edb.activity"
1457
+ ),
1458
+ ),
1459
+ migrations.AddField(
1460
+ model_name="emissionfactor",
1461
+ name="substance",
1462
+ field=models.ForeignKey(
1463
+ on_delete=django.db.models.deletion.PROTECT,
1464
+ related_name="+",
1465
+ to="edb.substance",
1466
+ ),
1467
+ ),
1468
+ migrations.AddField(
1469
+ model_name="areasourcesubstance",
1470
+ name="source",
1471
+ field=models.ForeignKey(
1472
+ on_delete=django.db.models.deletion.CASCADE, to="edb.areasource"
1473
+ ),
1474
+ ),
1475
+ migrations.AddField(
1476
+ model_name="areasourcesubstance",
1477
+ name="substance",
1478
+ field=models.ForeignKey(
1479
+ on_delete=django.db.models.deletion.PROTECT,
1480
+ related_name="+",
1481
+ to="edb.substance",
1482
+ ),
1483
+ ),
1484
+ migrations.AddField(
1485
+ model_name="areasourceactivity",
1486
+ name="activity",
1487
+ field=models.ForeignKey(
1488
+ on_delete=django.db.models.deletion.PROTECT,
1489
+ related_name="+",
1490
+ to="edb.activity",
1491
+ ),
1492
+ ),
1493
+ migrations.AddField(
1494
+ model_name="areasourceactivity",
1495
+ name="source",
1496
+ field=models.ForeignKey(
1497
+ on_delete=django.db.models.deletion.CASCADE, to="edb.areasource"
1498
+ ),
1499
+ ),
1500
+ migrations.AddField(
1501
+ model_name="areasource",
1502
+ name="activitycode1",
1503
+ field=models.ForeignKey(
1504
+ blank=True,
1505
+ null=True,
1506
+ on_delete=django.db.models.deletion.PROTECT,
1507
+ related_name="+",
1508
+ to="edb.activitycode",
1509
+ ),
1510
+ ),
1511
+ migrations.AddField(
1512
+ model_name="areasource",
1513
+ name="activitycode2",
1514
+ field=models.ForeignKey(
1515
+ blank=True,
1516
+ null=True,
1517
+ on_delete=django.db.models.deletion.PROTECT,
1518
+ related_name="+",
1519
+ to="edb.activitycode",
1520
+ ),
1521
+ ),
1522
+ migrations.AddField(
1523
+ model_name="areasource",
1524
+ name="activitycode3",
1525
+ field=models.ForeignKey(
1526
+ blank=True,
1527
+ null=True,
1528
+ on_delete=django.db.models.deletion.PROTECT,
1529
+ related_name="+",
1530
+ to="edb.activitycode",
1531
+ ),
1532
+ ),
1533
+ migrations.AddField(
1534
+ model_name="areasource",
1535
+ name="facility",
1536
+ field=models.ForeignKey(
1537
+ blank=True,
1538
+ null=True,
1539
+ on_delete=django.db.models.deletion.SET_NULL,
1540
+ to="edb.facility",
1541
+ ),
1542
+ ),
1543
+ migrations.AddField(
1544
+ model_name="areasource",
1545
+ name="timevar",
1546
+ field=models.ForeignKey(
1547
+ blank=True,
1548
+ null=True,
1549
+ on_delete=django.db.models.deletion.SET_NULL,
1550
+ related_name="+",
1551
+ to="edb.timevar",
1552
+ ),
1553
+ ),
1554
+ migrations.AddField(
1555
+ model_name="activitycode",
1556
+ name="code_set",
1557
+ field=models.ForeignKey(
1558
+ on_delete=django.db.models.deletion.CASCADE,
1559
+ related_name="codes",
1560
+ to="edb.codeset",
1561
+ ),
1562
+ ),
1563
+ migrations.AddField(
1564
+ model_name="activitycode",
1565
+ name="vertical_dist",
1566
+ field=models.ForeignKey(
1567
+ blank=True,
1568
+ null=True,
1569
+ on_delete=django.db.models.deletion.SET_NULL,
1570
+ related_name="+",
1571
+ to="edb.verticaldist",
1572
+ ),
1573
+ ),
1574
+ migrations.AddIndex(
1575
+ model_name="vehiclefuelcomb",
1576
+ index=models.Index(
1577
+ fields=["vehicle", "fuel"], name="edb_vehicle_vehicle_603f1f_idx"
1578
+ ),
1579
+ ),
1580
+ migrations.AddConstraint(
1581
+ model_name="vehiclefuelcomb",
1582
+ constraint=models.UniqueConstraint(
1583
+ fields=("vehicle", "fuel"),
1584
+ name="vehiclefuelcomb_vehicle_fuel_unique_together",
1585
+ ),
1586
+ ),
1587
+ migrations.AddConstraint(
1588
+ model_name="vehicleef",
1589
+ constraint=models.UniqueConstraint(
1590
+ fields=("vehicle", "fuel", "substance", "traffic_situation"),
1591
+ name="vehicleef_unique_in_efset",
1592
+ ),
1593
+ ),
1594
+ migrations.AddConstraint(
1595
+ model_name="roadsource",
1596
+ constraint=models.CheckConstraint(
1597
+ check=models.Q(("aadt__gte", 0)), name="road_source_aadt_gte_0"
1598
+ ),
1599
+ ),
1600
+ migrations.AddConstraint(
1601
+ model_name="roadsource",
1602
+ constraint=models.CheckConstraint(
1603
+ check=models.Q(("nolanes__gt", 0)), name="road_source_nolanes_gt_0"
1604
+ ),
1605
+ ),
1606
+ migrations.AddConstraint(
1607
+ model_name="roadsource",
1608
+ constraint=models.CheckConstraint(
1609
+ check=models.Q(("width__gt", 0)), name="road_source_width_gt_0"
1610
+ ),
1611
+ ),
1612
+ migrations.AddConstraint(
1613
+ model_name="roadsource",
1614
+ constraint=models.CheckConstraint(
1615
+ check=models.Q(
1616
+ ("median_strip_width__gte", 0),
1617
+ ("median_strip_width__lt", models.F("width")),
1618
+ ),
1619
+ name="road_source_median_strip_width_between_0_and_width",
1620
+ ),
1621
+ ),
1622
+ migrations.AddConstraint(
1623
+ model_name="roadsource",
1624
+ constraint=models.CheckConstraint(
1625
+ check=models.Q(("heavy_vehicle_share__range", (0, 1))),
1626
+ name="road_source_heavy_vehicle_share_between_0_and_1",
1627
+ ),
1628
+ ),
1629
+ migrations.AddConstraint(
1630
+ model_name="roadattributevalue",
1631
+ constraint=models.UniqueConstraint(
1632
+ fields=("value", "attribute"), name="unique_road_attribute_value"
1633
+ ),
1634
+ ),
1635
+ migrations.AlterUniqueTogether(
1636
+ name="pointsourcesubstance",
1637
+ unique_together={("source", "substance")},
1638
+ ),
1639
+ migrations.AddConstraint(
1640
+ model_name="pointsourceactivity",
1641
+ constraint=models.UniqueConstraint(
1642
+ fields=("source", "activity"),
1643
+ name="pointsourceactivity_unique_activity_in_source",
1644
+ ),
1645
+ ),
1646
+ migrations.AddIndex(
1647
+ model_name="pointsource",
1648
+ index=models.Index(
1649
+ fields=["activitycode1", "activitycode2", "activitycode3"],
1650
+ name="pointsource_activities_idx",
1651
+ ),
1652
+ ),
1653
+ migrations.AlterUniqueTogether(
1654
+ name="pointsource",
1655
+ unique_together={("facility", "name")},
1656
+ ),
1657
+ migrations.AlterUniqueTogether(
1658
+ name="gridsourcesubstance",
1659
+ unique_together={("source", "substance")},
1660
+ ),
1661
+ migrations.AddConstraint(
1662
+ model_name="gridsourceactivity",
1663
+ constraint=models.UniqueConstraint(
1664
+ fields=("source", "activity"),
1665
+ name="gridsourceactivity_unique_activity_in_source",
1666
+ ),
1667
+ ),
1668
+ migrations.AddIndex(
1669
+ model_name="gridsource",
1670
+ index=models.Index(
1671
+ fields=["activitycode1", "activitycode2", "activitycode3"],
1672
+ name="gridsource_activities_idx",
1673
+ ),
1674
+ ),
1675
+ migrations.AddConstraint(
1676
+ model_name="gridsource",
1677
+ constraint=models.UniqueConstraint(
1678
+ fields=("name",), name="gridsource_unique_name"
1679
+ ),
1680
+ ),
1681
+ migrations.AddConstraint(
1682
+ model_name="fleetmemberfuel",
1683
+ constraint=models.UniqueConstraint(
1684
+ fields=("fleet_member", "fuel"),
1685
+ name="fleetmemberfuel_unique_fuel_in_fleetmember",
1686
+ ),
1687
+ ),
1688
+ migrations.AddConstraint(
1689
+ model_name="fleetmember",
1690
+ constraint=models.UniqueConstraint(
1691
+ fields=("fleet", "vehicle"), name="fleetmember_unique_vehicle_in_fleet"
1692
+ ),
1693
+ ),
1694
+ migrations.AddConstraint(
1695
+ model_name="emissionfactor",
1696
+ constraint=models.UniqueConstraint(
1697
+ fields=("activity", "substance"),
1698
+ name="emissionfactor_activity_substance_unique_together",
1699
+ ),
1700
+ ),
1701
+ migrations.AlterUniqueTogether(
1702
+ name="areasourcesubstance",
1703
+ unique_together={("source", "substance")},
1704
+ ),
1705
+ migrations.AddConstraint(
1706
+ model_name="areasourceactivity",
1707
+ constraint=models.UniqueConstraint(
1708
+ fields=("source", "activity"),
1709
+ name="areasourceactivity_unique_activity_in_source",
1710
+ ),
1711
+ ),
1712
+ migrations.AddIndex(
1713
+ model_name="areasource",
1714
+ index=models.Index(
1715
+ fields=["activitycode1", "activitycode2", "activitycode3"],
1716
+ name="areasource_activities_idx",
1717
+ ),
1718
+ ),
1719
+ migrations.AddConstraint(
1720
+ model_name="areasource",
1721
+ constraint=models.UniqueConstraint(
1722
+ fields=("facility", "name"), name="areasource_unique_facility_and_name"
1723
+ ),
1724
+ ),
1725
+ migrations.AddConstraint(
1726
+ model_name="activitycode",
1727
+ constraint=models.UniqueConstraint(
1728
+ fields=("code_set", "code"), name="unique code in codeset"
1729
+ ),
1730
+ ),
1731
+ ]