Passed
Pull Request — dev (#1138)
by
unknown
02:19
created

data.datasets.emobility.motorized_individual_travel.db_classes   A

Complexity

Total Complexity 0

Size/Duplication

Total Lines 254
Duplicated Lines 19.69 %

Importance

Changes 0
Metric Value
wmc 0
eloc 102
dl 50
loc 254
rs 10
c 0
b 0
f 0

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

1
"""
2
DB tables / SQLAlchemy ORM classes for motorized individual travel
3
"""
4
5
from sqlalchemy import (
6
    Boolean,
7
    Column,
8
    DateTime,
9
    Float,
10
    ForeignKey,
11
    Integer,
12
    SmallInteger,
13
    String,
14
)
15
from sqlalchemy.dialects.postgresql import REAL
16
from sqlalchemy.ext.declarative import declarative_base
17
18
from egon.data.datasets.mv_grid_districts import MvGridDistricts
19
from egon.data.datasets.scenario_parameters import EgonScenario
20
21
# from sqlalchemy.orm import relationship
22
23
24
Base = declarative_base()
25
26
27
class EgonEvPool(Base):
28
    """Motorized individual travel: EV pool
29
30
    Each row is one EV, uniquely defined by either (`ev_id`) or
31
    (`rs7_id`, `type`, `simbev_id`).
32
33
    Columns
34
    -------
35
    ev_id:
36
        Unique id of EV
37
    rs7_id:
38
        id of RegioStar7 region
39
    type:
40
        type of EV, one of
41
            * bev_mini
42
            * bev_medium
43
            * bev_luxury
44
            * phev_mini
45
            * phev_medium
46
            * phev_luxury
47
    simbev_ev_id:
48
        id of EV as exported by simBEV
49
    """
50
51
    __tablename__ = "egon_ev_pool"
52
    __table_args__ = {"schema": "demand"}
53
54
    scenario = Column(String, ForeignKey(EgonScenario.name), primary_key=True)
55
    ev_id = Column(Integer, primary_key=True)
56
    rs7_id = Column(SmallInteger)
57
    type = Column(String(11))
58
    simbev_ev_id = Column(Integer)
59
60
    # trips = relationship(
61
    #     "EgonEvTrip", cascade="all, delete", back_populates="ev"
62
    # )
63
    # mvgds = relationship(
64
    #     "EgonEvMvGridDistrict", cascade="all, delete", back_populates="ev"
65
    # )
66
67
68
class EgonEvTrip(Base):
69
    """Motorized individual travel: EVs' trips
70
71
    Each row is one event of a specific electric vehicle which is
72
    uniquely defined by `rs7_id`, `ev_id` and `event_id`.
73
74
    Columns
75
    -------
76
    scenario:
77
        Scenario
78
    event_id:
79
        Unique id of EV event
80
    egon_ev_pool_ev_id:
81
        id of EV, references EgonEvPool.ev_id
82
    simbev_event_id:
83
        id of EV event, unique within a specific EV dataset
84
    location:
85
        Location of EV event, one of
86
            * "0_work"
87
            * "1_business"
88
            * "2_school"
89
            * "3_shopping"
90
            * "4_private/ridesharing"
91
            * "5_leisure"
92
            * "6_home"
93
            * "7_charging_hub"
94
            * "driving"
95
    use_case:
96
        Use case of EV event, one of
97
            * "public" (public charging)
98
            * "home" (private charging at 6_home)
99
            * "work" (private charging at 0_work)
100
            * <empty> (driving events)
101
    charging_capacity_nominal:
102
        Nominal charging capacity in kW
103
    charging_capacity_grid:
104
        Charging capacity at grid side in kW,
105
        includes efficiency of charging infrastructure
106
    charging_capacity_battery:
107
        Charging capacity at battery side in kW,
108
        includes efficiency of car charger
109
    soc_start:
110
        State of charge at start of event
111
    soc_start:
112
        State of charge at end of event
113
    charging_demand:
114
        Energy demand during parking/charging event in kWh.
115
        0 if no charging takes place.
116
    park_start:
117
        Start timestep of parking event (15min interval, e.g. 4 = 1h)
118
    park_end:
119
        End timestep of parking event (15min interval)
120
    drive_start:
121
        Start timestep of driving event (15min interval)
122
    drive_end:
123
        End timestep of driving event (15min interval)
124
    consumption:
125
        Energy demand during driving event in kWh
126
127
    Notes
128
    -----
129
    pgSQL's REAL is sufficient for floats as simBEV rounds output to 4 digits.
130
    """
131
132
    __tablename__ = "egon_ev_trip"
133
    __table_args__ = {"schema": "demand"}
134
135
    # scenario = Column(
136
    #    String, ForeignKey(EgonEvPool.scenario), primary_key=True
137
    # )
138
    scenario = Column(String, ForeignKey(EgonScenario.name), primary_key=True)
139
    event_id = Column(Integer, primary_key=True)
140
    # egon_ev_pool_ev_id = Column(
141
    #    Integer, ForeignKey(EgonEvPool.ev_id), nullable=False, index=True
142
    # )
143
    egon_ev_pool_ev_id = Column(Integer, nullable=False, index=True)
144
    simbev_event_id = Column(Integer)
145
    location = Column(String(21))
146
    use_case = Column(String(8))
147
    charging_capacity_nominal = Column(REAL)
148
    charging_capacity_grid = Column(REAL)
149
    charging_capacity_battery = Column(REAL)
150
    soc_start = Column(REAL)
151
    soc_end = Column(REAL)
152
    charging_demand = Column(REAL)
153
    park_start = Column(Integer)
154
    park_end = Column(Integer)
155
    drive_start = Column(Integer)
156
    drive_end = Column(Integer)
157
    consumption = Column(REAL)
158
159
    # __table_args__ = (
160
    #    ForeignKeyConstraint([scenario, egon_ev_pool_ev_id],
161
    #                         [EgonEvPool.scenario, EgonEvPool.ev_id]),
162
    #    {"schema": "demand"},
163
    # )
164
165
    # ev = relationship("EgonEvPool", back_populates="trips")
166
167
168 View Code Duplication
class EgonEvCountRegistrationDistrict(Base):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
169
    """Electric vehicle counts per registration district"""
170
171
    __tablename__ = "egon_ev_count_registration_district"
172
    __table_args__ = {"schema": "demand"}
173
174
    scenario = Column(String, ForeignKey(EgonScenario.name), primary_key=True)
175
    scenario_variation = Column(String, primary_key=True)
176
    ags_reg_district = Column(Integer, primary_key=True)
177
    reg_district = Column(String)
178
    bev_mini = Column(Integer)
179
    bev_medium = Column(Integer)
180
    bev_luxury = Column(Integer)
181
    phev_mini = Column(Integer)
182
    phev_medium = Column(Integer)
183
    phev_luxury = Column(Integer)
184
185
186 View Code Duplication
class EgonEvCountMunicipality(Base):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
187
    """Electric vehicle counts per municipality"""
188
189
    __tablename__ = "egon_ev_count_municipality"
190
    __table_args__ = {"schema": "demand"}
191
192
    scenario = Column(String, ForeignKey(EgonScenario.name), primary_key=True)
193
    scenario_variation = Column(String, primary_key=True)
194
    ags = Column(Integer, primary_key=True)
195
    bev_mini = Column(Integer)
196
    bev_medium = Column(Integer)
197
    bev_luxury = Column(Integer)
198
    phev_mini = Column(Integer)
199
    phev_medium = Column(Integer)
200
    phev_luxury = Column(Integer)
201
    rs7_id = Column(SmallInteger)
202
203
204 View Code Duplication
class EgonEvCountMvGridDistrict(Base):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
205
    """Electric vehicle counts per MV grid district"""
206
207
    __tablename__ = "egon_ev_count_mv_grid_district"
208
    __table_args__ = {"schema": "demand"}
209
210
    scenario = Column(String, ForeignKey(EgonScenario.name), primary_key=True)
211
    scenario_variation = Column(String, primary_key=True)
212
    bus_id = Column(
213
        Integer, ForeignKey(MvGridDistricts.bus_id), primary_key=True
214
    )
215
    bev_mini = Column(Integer)
216
    bev_medium = Column(Integer)
217
    bev_luxury = Column(Integer)
218
    phev_mini = Column(Integer)
219
    phev_medium = Column(Integer)
220
    phev_luxury = Column(Integer)
221
    rs7_id = Column(SmallInteger)
222
223
224
class EgonEvMvGridDistrict(Base):
225
    """List of electric vehicles per MV grid district"""
226
227
    __tablename__ = "egon_ev_mv_grid_district"
228
    __table_args__ = {"schema": "demand"}
229
230
    id = Column(Integer, primary_key=True)
231
    scenario = Column(String, ForeignKey(EgonScenario.name), index=True)
232
    scenario_variation = Column(String, index=True)
233
    bus_id = Column(Integer, ForeignKey(MvGridDistricts.bus_id), index=True)
234
    # egon_ev_pool_ev_id = Column(Integer, ForeignKey(EgonEvPool.ev_id))
235
    egon_ev_pool_ev_id = Column(Integer, nullable=False)
236
237
    # ev = relationship("EgonEvPool", back_populates="mvgds")
238
239
240
class EgonEvMetadata(Base):
241
    """List of EV Pool Metadata"""
242
243
    __tablename__ = "egon_ev_metadata"
244
    __table_args__ = {"schema": "demand"}
245
246
    scenario = Column(String, primary_key=True)
247
    eta_cp = Column(Float)
248
    stepsize = Column(Integer)
249
    start_date = Column(DateTime)
250
    end_date = Column(DateTime)
251
    soc_min = Column(Float)
252
    grid_timeseries = Column(Boolean)
253
    grid_timeseries_by_usecase = Column(Boolean)
254