+from configparser import ConfigParser
+from csv import DictReader
+from datetime import datetime, timedelta
+from logging import getLogger
+from logging.config import fileConfig
+from pathlib import Path
+
+fileConfig((Path.cwd() / 'config') / 'logging.cfg')
+logger = getLogger()
+
+
+class Target:
+
+ def __init__(self, config_file = None,
+ start = None, end = None, timestep = None):
+
+ self._config = ConfigParser()
+ self._config.read(config_file)
+
+ self._start = start
+ self._end = end
+ self._timestep = timestep
+
+ logger.info('Initialization of target variable')
+ self._y = {}
+ current = self._start
+ while current <= self._end:
+ self._y[current] = 0
+ current += self._timestep
+
+ self._timestep = timestep
+ self._stream_file = eval(self._config['DATA']['csv_file'])
+ self._get_located_interventions()
+
+
+
+ @property
+ def start(self):
+ return self._start
+
+ @start.setter
+ def start(self, x):
+ self._start = x
+
+
+ @property
+ def end(self):
+ return self._end
+
+ @end.setter
+ def end(self, x):
+ self._end = x
+
+
+ @property
+ def y(self):
+ return self._y
+
+ @y.setter
+ def end(self, y):
+ self._y = y
+
+
+
+ def _get_located_interventions(self):
+ if not self._config['SPECIFICATION'].getboolean('origin')\
+ and not self._config['SPECIFICATION'].getboolean('destination'):
+ logger.info('Integrating interventions for the whole area')
+ with open(self._stream_file) as f:
+ reader = DictReader(f, delimiter=',')
+ for row in reader:
+ if row['start'] != '':
+ start_interv = datetime.strptime(row['start'], '%d/%m/%Y %H:%M:%S')
+ start_interv = start_interv.replace(minute=0)
+ end_interv = datetime.strptime(row['end'], '%d/%m/%Y %H:%M:%S')
+ end_interv = end_interv.replace(minute=0)
+ if not (start_interv > self._end or end_interv < self._start):
+ if start_interv < self._start and end_interv <= self._end:
+ current = self._start
+ while current <= end_interv:
+ self._y[current] += 1
+ current += self._timestep
+ elif start_interv >= self._start and end_interv > self._end:
+ current = start_interv
+ while current not in self._y:
+ current -= timedelta(hours=1)
+ while current <= self._end:
+ self._y[current] += 1
+ current += self._timestep
+ elif start_interv >= self._start and end_interv <= self._end:
+ current = start_interv
+ while current not in self._y:
+ current -= timedelta(hours=1)
+ while current <= end_interv:
+ self._y[current] += 1
+ current += self._timestep
+
+
+
+
+
+
+