Skip to content

Commit

Permalink
Update requirements and formatted code
Browse files Browse the repository at this point in the history
  • Loading branch information
leona-ya committed Sep 26, 2020
1 parent 038e445 commit 42c4951
Show file tree
Hide file tree
Showing 13 changed files with 166 additions and 108 deletions.
1 change: 1 addition & 0 deletions .gitignore
Expand Up @@ -130,3 +130,4 @@ dmypy.json

.idea
CACHE
*.iml
10 changes: 6 additions & 4 deletions FahrplanDatenGarten/DBApis/hafasImport.py
Expand Up @@ -4,8 +4,8 @@
from pyhafas import HafasClient
from pyhafas.profile import DBProfile

from core.models import (Agency, Journey, Source, StopID,
StopIDKind, JourneyStop)
from core.models import (Agency, Journey, JourneyStop, Source, StopID,
StopIDKind)


class HafasImport:
Expand Down Expand Up @@ -56,7 +56,7 @@ def import_timetable(
def import_journey(self, journey):
try:
trip = self.hafasclient.trip(journey.journey_id)
except: # TODO: Implement correct Exception when pyhafas has them
except BaseException: # TODO: Implement correct Exception when pyhafas has them
return
for stopover in trip.stopovers:
eva_id = stopover.stop.id[-8:]
Expand All @@ -65,7 +65,9 @@ def import_journey(self, journey):
source=self.dbapis
).first()
if dbStopID is None:
print("The Stop {} with ID {} could not be found!".format(stopover.stop.name, eva_id))
print(
"The Stop {} with ID {} could not be found!".format(
stopover.stop.name, eva_id))
continue
dbStop = dbStopID.stop
if JourneyStop.objects.filter(
Expand Down
Expand Up @@ -6,9 +6,8 @@
import requests
from django.core.management.base import BaseCommand


from DBApis.tasks import dbapis_importstations_parse_station_row
from core.models import Agency, Source, StopIDKind
from DBApis.tasks import dbapis_importstations_parse_station_row


class Command(BaseCommand):
Expand Down Expand Up @@ -37,4 +36,5 @@ def handle(self, *args, **options):
csv_file.seek(0)
reader = csv.DictReader(csv_file, delimiter=';')
for row in reader:
dbapis_importstations_parse_station_row.delay(row, agency.pk, source.pk, kind.pk)
dbapis_importstations_parse_station_row.delay(
row, agency.pk, source.pk, kind.pk)
43 changes: 24 additions & 19 deletions FahrplanDatenGarten/DBApis/tasks.py
@@ -1,45 +1,49 @@
import datetime

from celery.schedules import crontab
from celery.task import periodic_task, task
from celery.utils.log import get_task_logger
from django.conf import settings
from django.core.exceptions import ObjectDoesNotExist
from pyhafas import HafasClient
from pyhafas.profile import DBProfile

from core.models import Journey, Stop, StopName, StopID, StopLocation, Agency, Source, StopIDKind
from FahrplanDatenGarten.celery import app
from core.models import (Agency, Journey, Source, Stop, StopID, StopIDKind,
StopLocation, StopName)
from DBApis.hafasImport import HafasImport

logger = get_task_logger(__name__)


@periodic_task(
run_every=(
@app.on_after_finalize.connect
def setup_dbapis_configure_periodic_tasks(sender, **kwargs):
sender.add_periodic_task(
crontab(
hour=settings.PERIODIC_IMPORT_TIMETABLES[0],
minute=settings.PERIODIC_IMPORT_TIMETABLES[1])),
name="import_all_timetables",
ignore_result=True)
minute=settings.PERIODIC_IMPORT_TIMETABLES[1]),
import_all_timetables.s()
)
sender.add_periodic_task(
crontab(
hour=settings.PERIODIC_IMPORT_JOURNEYS[0],
minute=settings.PERIODIC_IMPORT_JOURNEYS[1]),
import_all_journeys.s()
)


@app.task(name="import_all_timetables", ignore_result=True)
def import_all_timetables():
for stop in Stop.objects.filter(stopid__kind__name='eva').all():
import_timetable.delay(stop.pk)


@task(name="import_timetable")
@app.task(name="import_timetable")
def import_timetable(stop_pk):

hafasimport = HafasImport()
hafasimport.import_timetable(Stop.objects.get(pk=stop_pk))


@periodic_task(
run_every=(
crontab(
hour=settings.PERIODIC_IMPORT_JOURNEYS[0],
minute=settings.PERIODIC_IMPORT_JOURNEYS[1])),
name="import_all_journeys",
ignore_result=True)
@app.task(name="import_all_journeys", ignore_result=True)
def import_all_journeys():
for journey in Journey.objects.filter(
agency__name='db',
Expand All @@ -48,14 +52,15 @@ def import_all_journeys():
import_journey.delay(journey.pk)


@task(name="import_journey")
@app.task(name="import_journey")
def import_journey(journey_pk):
hafasimport = HafasImport()
hafasimport.import_journey(Journey.objects.get(pk=journey_pk))


@task(name="dbapis_importstations_parse_station_row")
def dbapis_importstations_parse_station_row(row, agency_pk, source_pk, kind_pk):
@app.task(name="dbapis_importstations_parse_station_row")
def dbapis_importstations_parse_station_row(
row, agency_pk, source_pk, kind_pk):
hafas_client = HafasClient(DBProfile())

agency = Agency.objects.get(pk=agency_pk)
Expand Down
3 changes: 2 additions & 1 deletion FahrplanDatenGarten/FGRFiller/forms/data.py
@@ -1,6 +1,7 @@
from django import forms

from FGRFiller.utils import FillFormFieldsCompensation, FillFormFieldsBahnCard100SeasonTicket
from FGRFiller.utils import (FillFormFieldsBahnCard100SeasonTicket,
FillFormFieldsCompensation)


class FGRFillerDataForm(forms.Form):
Expand Down
71 changes: 48 additions & 23 deletions FahrplanDatenGarten/FGRFiller/utils.py
Expand Up @@ -49,46 +49,71 @@ def fill_form_fields(
"S1F7": arrival_stop_name, # Zielbahnhof
"S1F8": arrival_planned_time.strftime("%H"), # Planankunft HH
"S1F9": arrival_planned_time.strftime("%M"), # Planankunft MM
"S1F10": arrival_actual_datetime.strftime("%d"), # Reales Ankunftsdatum DD
"S1F11": arrival_actual_datetime.strftime("%m"), # Reales Ankunftsdatum MM
"S1F12": arrival_actual_datetime.strftime("%y"), # Reales Ankunftsdatum YY
# Reales Ankunftsdatum DD
"S1F10": arrival_actual_datetime.strftime("%d"),
# Reales Ankunftsdatum MM
"S1F11": arrival_actual_datetime.strftime("%m"),
# Reales Ankunftsdatum YY
"S1F12": arrival_actual_datetime.strftime("%y"),
"S1F13": arrival_actual_product_type, # Reale Ankunft Zugart
"S1F14": arrival_actual_product_number, # Reale Ankunft Zugnummer
"S1F15": arrival_actual_datetime.strftime("%H"), # Reale Ankunft HH
"S1F16": arrival_actual_datetime.strftime("%M"), # Reale Ankunft MM
"S1F17": first_delayed_train_product_type, # Erster verspaeteter Zug (Zugart)
"S1F18": first_delayed_train_product_number, # Erster verspaeteter Zug (Zugnummer)
"S1F19": first_delayed_train_departure_planned.strftime("%H"), # Erster verspaeteter Zug (Planabfahrt HH)
"S1F20": first_delayed_train_departure_planned.strftime("%M"), # Erster verspaeteter Zug (Planabfahrt MM)
"S1F21": "Ja" if kwargs.get('connecting_train_missed', False) else "Off", # Anschlusszug verpasst? (Ja/Off)
"S1F22": kwargs.get('connecting_train_missed_station', ''), # Anschlusszug verpasst -> Bahnhofsname
"S1F23": "Ja" if kwargs.get('changed_train', False) else "Off", # Umgestiegen?
"S1F24": kwargs.get('changed_train_last_station', ''), # Umgestiegen -> Bahnhofsname
"S1F25": "Ja" if kwargs.get('journey_not_start_or_cut_short', False) else "Off", # Reise nicht angetreten/abgebrochen? (Ja/Off)
"S1F26": kwargs.get('journey_not_start_or_cut_short_station', ''), # Reise nicht angetreten/abgebrochen -> Name des Bahnhofs wo abgebrochen
"S1F27": "Ja" if kwargs.get('journey_cut_short_additional_costs', False) else "Off", # Reise abgebrochen mit Zusatzkosten? (Ja/Off)
"S1F28": kwargs.get('journey_cut_short_additional_costs_station', ''), # Reise abgebrochen mit Zusatzkosten -> Name des Bahnhofs wo abgebrochen
"S1F29": compensation.value if compensation is not None else "Off", # "Gutschein" oder "Auszahlung oder Ueberweisung"?
"S2F20": kwargs.get('bank_details_account_holder', ''), # Ueberweisung -> Kontoinhaber
# Erster verspaeteter Zug (Zugart)
"S1F17": first_delayed_train_product_type,
# Erster verspaeteter Zug (Zugnummer)
"S1F18": first_delayed_train_product_number,
# Erster verspaeteter Zug (Planabfahrt HH)
"S1F19": first_delayed_train_departure_planned.strftime("%H"),
# Erster verspaeteter Zug (Planabfahrt MM)
"S1F20": first_delayed_train_departure_planned.strftime("%M"),
# Anschlusszug verpasst? (Ja/Off)
"S1F21": "Ja" if kwargs.get('connecting_train_missed', False) else "Off",
# Anschlusszug verpasst -> Bahnhofsname
"S1F22": kwargs.get('connecting_train_missed_station', ''),
# Umgestiegen?
"S1F23": "Ja" if kwargs.get('changed_train', False) else "Off",
# Umgestiegen -> Bahnhofsname
"S1F24": kwargs.get('changed_train_last_station', ''),
# Reise nicht angetreten/abgebrochen? (Ja/Off)
"S1F25": "Ja" if kwargs.get('journey_not_start_or_cut_short', False) else "Off",
# Reise nicht angetreten/abgebrochen -> Name des Bahnhofs wo
# abgebrochen
"S1F26": kwargs.get('journey_not_start_or_cut_short_station', ''),
# Reise abgebrochen mit Zusatzkosten? (Ja/Off)
"S1F27": "Ja" if kwargs.get('journey_cut_short_additional_costs', False) else "Off",
# Reise abgebrochen mit Zusatzkosten -> Name des Bahnhofs wo
# abgebrochen
"S1F28": kwargs.get('journey_cut_short_additional_costs_station', ''),
# "Gutschein" oder "Auszahlung oder Ueberweisung"?
"S1F29": compensation.value if compensation is not None else "Off",
# Ueberweisung -> Kontoinhaber
"S2F20": kwargs.get('bank_details_account_holder', ''),
"S2F21": kwargs.get('bank_details_iban', ''), # Ueberweisung -> IBAN
"S2F22": kwargs.get('bank_details_bic', ''), # Ueberweisung -> BIC
"S2F1": 'Off', # "Geschlecht" (Frau/Herr/Off)
"S2F2": kwargs.get('academic_title', ''), # Titel
"S2F3": kwargs.get('company', ''), # Firma
"S2F4": kwargs.get('last_name', ''), # Nachname
"S2F5": kwargs.get('first_name', ''), # Vorname
"S2F6": kwargs.get('address_c_o_extra_details', ''), # c/o oder Adresszusatz
# c/o oder Adresszusatz
"S2F6": kwargs.get('address_c_o_extra_details', ''),
"S2F7": kwargs.get('telephone_number', ''), # Telefonummer
"S2F8": kwargs.get('address_street', ''), # Strase
"S2F9": kwargs.get('address_house_nr', ''), # Hausnummer
"S2F10": kwargs.get('address_country', ''), # Staat (wenn != D)
"S2F11": kwargs.get('address_postal_code', ''), # PLZ
"S2F12": kwargs.get('address_city', ''), # Wohnort
"S2F13": kwargs['bahncard_100_season_ticket'].value if kwargs.get('bahncard_100_season_ticket') is not None else "Off", # "BahnCard 100-Nr."? "Zeitkarten-Nr."?
"S2F15": kwargs.get('bahncard_100_season_ticket_number', ''), # BahnCard 100-/Zeitkarten Nummer
"S2F16": kwargs['date_of_birth'].strftime('%d') if kwargs.get('date_of_birth') is not None else '', # Geburtsdatum DD
"S2F17": kwargs['date_of_birth'].strftime('%m') if kwargs.get('date_of_birth') is not None else '', # Geburtsdatum MM
"S2F18": kwargs['date_of_birth'].strftime('%Y') if kwargs.get('date_of_birth') is not None else '', # Geburtsdatum YYYY
# "BahnCard 100-Nr."? "Zeitkarten-Nr."?
"S2F13": kwargs['bahncard_100_season_ticket'].value if kwargs.get('bahncard_100_season_ticket') is not None else "Off",
# BahnCard 100-/Zeitkarten Nummer
"S2F15": kwargs.get('bahncard_100_season_ticket_number', ''),
# Geburtsdatum DD
"S2F16": kwargs['date_of_birth'].strftime('%d') if kwargs.get('date_of_birth') is not None else '',
# Geburtsdatum MM
"S2F17": kwargs['date_of_birth'].strftime('%m') if kwargs.get('date_of_birth') is not None else '',
# Geburtsdatum YYYY
"S2F18": kwargs['date_of_birth'].strftime('%Y') if kwargs.get('date_of_birth') is not None else '',
"S2F19": '', # E-Mail Adresse (Marktforschung)
"S2F23": '', # Einverstädnis Marktforschung?
}
Expand Down
37 changes: 22 additions & 15 deletions FahrplanDatenGarten/FGRFiller/views.py
Expand Up @@ -9,10 +9,12 @@
from lxml import etree

import FGRFiller.utils
from FGRFiller.forms.assistant_order_number import FGRFillerAsstiantOrderNumberForm
from FGRFiller.forms.data import FGRFillerDataForm
from FGRFiller.utils import FillFormFieldsBahnCard100SeasonTicket, FillFormFieldsCompensation
from core.models import JourneyStop
from FGRFiller.forms.assistant_order_number import \
FGRFillerAsstiantOrderNumberForm
from FGRFiller.forms.data import FGRFillerDataForm
from FGRFiller.utils import (FillFormFieldsBahnCard100SeasonTicket,
FillFormFieldsCompensation)


class StartView(View):
Expand All @@ -32,7 +34,8 @@ def post(self, request, *args, **kwargs):
assistant_form = FGRFillerAsstiantOrderNumberForm(request.POST)
if assistant_form.is_valid():
xml = '<rqorder on="{}"/><authname tln="{}"/>'.format(
assistant_form.cleaned_data['order_number'], assistant_form.cleaned_data['last_name'])
assistant_form.cleaned_data['order_number'],
assistant_form.cleaned_data['last_name'])
url = 'https://fahrkarten.bahn.de/mobile/dbc/xs.go'
tnr = random.getrandbits(64)
ts = datetime.datetime.now().strftime('%Y-%m-%dT%H:%M:%S')
Expand All @@ -56,14 +59,16 @@ def post(self, request, *args, **kwargs):
train.find('arr').attrib['t'])
try:
if JourneyStop.objects.filter(
journey__name=train.find('gat').text + " " + train.find('zugnr').text,
stop__stopid__name=train.find('arr').find('nr').text,
stop__stopid__kind__name="eva",
planned_arrival_time=timezone.make_aware(datetime.datetime.fromisoformat(
journey__name=train.find('gat').text + " " + train.find('zugnr').text,
stop__stopid__name=train.find('arr').find('nr').text,
stop__stopid__kind__name="eva",
planned_arrival_time=timezone.make_aware(
datetime.datetime.fromisoformat(
train.find('arr').attrib['dt']).replace(
hour=train_arrival_planned_time.hour,
minute=train_arrival_planned_time.minute)),
).first().actual_arrival_delay >= datetime.timedelta(minutes=5):
).first().actual_arrival_delay >= datetime.timedelta(
minutes=5):
first_delayed_train = train
break
except AttributeError:
Expand Down Expand Up @@ -108,10 +113,12 @@ def post(self, request, *args, **kwargs):
"form": form
})
else:
return render(request, "FGRFiller/start.html", {
"assistant_order_number_form": assistant_form,
"assistant_order_number_form_error": parsed_response.find('error').find('txt').text
})
return render(
request,
"FGRFiller/start.html",
{
"assistant_order_number_form": assistant_form,
"assistant_order_number_form_error": parsed_response.find('error').find('txt').text})
else:
return render(request, "FGRFiller/start.html", {
"assistant_order_number_form": assistant_form
Expand Down Expand Up @@ -157,7 +164,7 @@ def post(self, request, *args, **kwargs):
form.cleaned_data['compensation'],
FillFormFieldsCompensation) else FillFormFieldsCompensation[
form.cleaned_data['compensation'].split('.')[1]] if form.cleaned_data[
'compensation'] != '' else None,
'compensation'] != '' else None,
academic_title=form.cleaned_data['academic_title'],
company=form.cleaned_data['company'],
first_name=form.cleaned_data['first_name'],
Expand All @@ -173,7 +180,7 @@ def post(self, request, *args, **kwargs):
form.cleaned_data['bahncard_100_season_ticket'],
FillFormFieldsBahnCard100SeasonTicket) else FillFormFieldsBahnCard100SeasonTicket[
form.cleaned_data['bahncard_100_season_ticket'].split('.')[1]] if form.cleaned_data[
'bahncard_100_season_ticket'] != '' else None,
'bahncard_100_season_ticket'] != '' else None,
bahncard_100_season_ticket_number=form.cleaned_data['bahncard_100_season_ticket_number'],
date_of_birth=form.cleaned_data['date_of_birth'])
return FileResponse(
Expand Down
2 changes: 1 addition & 1 deletion FahrplanDatenGarten/FahrplanDatenGarten/celery.py
Expand Up @@ -13,7 +13,7 @@
# the configuration object to child processes.
# - namespace='CELERY' means all celery-related configuration keys
# should have a `CELERY_` prefix.
app.config_from_object('django.conf:settings', namespace='CELERY')
app.config_from_object('django.conf:settings', namespace='CELERYCONF')

# Load task modules from all registered Django app configs.
app.autodiscover_tasks()
Expand Down
10 changes: 5 additions & 5 deletions FahrplanDatenGarten/FahrplanDatenGarten/settings.py
Expand Up @@ -164,22 +164,22 @@
# Celery configuration
# https://docs.celeryproject.org/en/latest/userguide/configuration.html

CELERY_RESULT_BACKEND = config.get(
CELERYCONF_RESULT_BACKEND = config.get(
'celery',
'result_backend',
fallback='redis://localhost/0')

CELERY_BROKER_URL = config.get(
CELERYCONF_BROKER_URL = config.get(
'celery',
'broker_url',
fallback='redis://localhost/0')

CELERY_TASK_SERIALIZER = 'json'
CELERYCONF_TASK_SERIALIZER = 'json'

CELERY_TASK_IGNORE_RESULT = config.getboolean(
CELERYCONF_TASK_IGNORE_RESULT = config.getboolean(
'celery', 'task_ignore_result', fallback=False)

CELERY_TASK_STORE_ERRORS_EVEN_IF_IGNORED = config.getboolean(
CELERYCONF_TASK_STORE_ERRORS_EVEN_IF_IGNORED = config.getboolean(
'celery', 'task_store_errors_even_if_ignored', fallback=True)

# FahrplanDatenGarten's custom configuration
Expand Down
2 changes: 1 addition & 1 deletion FahrplanDatenGarten/netzkarte

0 comments on commit 42c4951

Please sign in to comment.