Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add function to get EdifactFormat and Version of files, with tests #124

Merged
merged 12 commits into from
Jan 31, 2024

Conversation

hf-sheese
Copy link
Contributor

In order to sort files into format version specific folders, a function determining EdifactFormatVersion and EdifactFormat with tests is added.

@hf-kklein
Copy link
Contributor

hf-kklein commented Jan 30, 2024

Die alten Tests failen, weil die Foo | None Syntax erst ab 3.10(?) eingeführt wurde. also du müsstest auf die abwärtskopmatible Optional[Foo] zurückgreifen.

Copy link
Contributor

@hf-kklein hf-kklein left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ist schon schön test-driven :) Ein paar Sachen - v.a. die Testparametrisierung können wir noch ein bisschen besser machen

unittests/test_edienergyscraper.py Outdated Show resolved Hide resolved
src/edi_energy_scraper/__init__.py Outdated Show resolved Hide resolved
src/edi_energy_scraper/__init__.py Outdated Show resolved Hide resolved
src/edi_energy_scraper/__init__.py Outdated Show resolved Hide resolved
src/edi_energy_scraper/__init__.py Outdated Show resolved Hide resolved
@hf-kklein hf-kklein changed the title Add function to get edifactformat and version of files, with tests Add function to get EdifactFormat and Version of files, with tests Jan 31, 2024
Copy link
Contributor

@hf-kklein hf-kklein left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Passt für mich im großen und ganzen.

Allerdings fände ich es schöner, wenn wir leere listen statt [None] zurückgeben.

Dann würdest du dir sogar das Typing vereinfachen, weil der type dann nur noch list[EdifactFormat] ist statt list[Optional[EdifactFormat]] und man downstream nur noch prüfen muss, ob die liste einträge hat anstatt zu checken: hat die liste Einträage und sind diese Einträge nicht None.

Ich glaube das ist so gewachsen, weil wir erst dachten, es gäbe eines oder kein EdifactFormat (also nicht-None oder None). Dann hast du entdeckt, dass die CONTRL/APERAK AHBs mehrere Formaten zuzuordnen sind und wir sind auf eine Liste gewechselt. Mit der liste ist die Unterscheidung "keines/eines/mehrere" aber nicht mehr eine Entscheidung zwischen nicht-None und None, sondern wird einfch durch die länge der liste repräsentiert.

@hf-krechan was meinst du?

Comment on lines 319 to 325
edifactformat: List[Optional[EdifactFormat]] = []
for entry in EdifactFormat:
if str(entry) in filename:
edifactformat.append(entry)
if not edifactformat:
edifactformat = [None]
return version, edifactformat
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
edifactformat: List[Optional[EdifactFormat]] = []
for entry in EdifactFormat:
if str(entry) in filename:
edifactformat.append(entry)
if not edifactformat:
edifactformat = [None]
return version, edifactformat
edifactformats: List[Optional[EdifactFormat]] = []
for entry in EdifactFormat:
if str(entry) in filename:
edifactformats.append(entry)
if not any(edifactformats):
edifactformats = [None]
return version, edifactformats

plural dinge (wie listen) sollen plural namen haben

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ahja, oder so. Wie gesagt, nur plural S überlese ich leicht

@@ -301,6 +303,27 @@ async def _download(
raise
return file_path

@staticmethod
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

wenn es eine static-method ist, dann kannst du auch gleich eine function draus machen (die anders als methods) keiner klasse angehört.

@@ -301,6 +303,27 @@ async def _download(
raise
return file_path

@staticmethod
def get_edifact_format(path: Path) -> Tuple[EdifactFormatVersion, List[Optional[EdifactFormat]]]:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

vllt edifact_formats (plural) and version? wobei der return-ype hint ja schon viel verrät.

Copy link
Collaborator

@hf-krechan hf-krechan Jan 31, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

tjaja good old naming
vielleicht so get_edifact_version_and_formats

Comment on lines 323 to 324
if not edifactformat:
edifactformat = [None]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Das versteh ich nicht: warum adden wir None zur liste anstatt sie leer zu lassen?
Nach außen würde doch genügen, wenn wir eine leere liste haben anstatt eine liste mit None als einzigem Eintrag.
Für mich drückt eine leere liste genau das aus, was es ist: die datei kann len(formats)==0 formaten zugeordnet werden.

das None als einziger Eintrag scheint mir doppelt gemoppelt/nur zum selbstzweck.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ja würde ich auch rausnehmen. Spart auch zwei Zeilen Code :)

berlin = pytz.timezone("Europe/Berlin")
berlin_local_time = datetime.datetime.strptime(date_string, date_format).astimezone(berlin)
version = get_edifact_format_version(berlin_local_time)
edifactformat: List[Optional[EdifactFormat]] = []
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ich finde es angenehm wenn ich der variable ansehe, ob es sich um eine Liste/Array oder etwas Einzelnes handelt.
list_of_edifactformats . Reines Plural-S übersieht man leicht.

Copy link
Collaborator

@hf-krechan hf-krechan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sehr schöne Tests. Das mit dem None in der Liste würde ich noch rausmachen und das Plural bei der Liste.
Sonst passt das für mich.
Vielen lieben Dank 👍

@hf-sheese hf-sheese merged commit b6f72e4 into main Jan 31, 2024
23 checks passed
@hf-sheese hf-sheese deleted the determine_edifact_format_version branch January 31, 2024 12:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants