Skip to content

feat: PackageCollector #20

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

Merged
merged 20 commits into from
Dec 1, 2022
Merged

feat: PackageCollector #20

merged 20 commits into from
Dec 1, 2022

Conversation

janbritz
Copy link
Contributor

@janbritz janbritz commented Nov 1, 2022

Der PackageCollector initialisiert und managt intern folgende Sub-Kollektoren, welche das Manifest von Paketen extrahieren und eine zugehörige Package-Klasse erstellen:

  • LocalCollector:

    • zuständig für alle Pakete im lokalen Ordner
    • berechnet den Hash dieser Pakete und ignoriert den Dateinamen
  • LMSCollector:

    • zuständig für alle Pakete, welche von LMSn gesendet werden
    • diese Pakete können nur über den Hash mit .get(hash) beim PackageCollector abgerufen werden
  • RepoCollector:

    • zuständig für alle Pakete in Repositories
    • dieser Kollektor ist noch nicht implementiert, da noch eine Repository-Struktur erarbeitet werden muss

Zusätzlich zu diesen Sub-Kollektoren wird ein Indexer initialisiert. Diese Klasse speichert alle Packages (jeglichen Ursprungs) intern ab und ermöglicht es, bei wiederholten Abfragen des selben Pakets direkt das gespeicherte Package zurückzugeben. Dadurch muss bei bereits indexierten Paketen nicht erneut das Manifest extrahiert werden. Nach einer vordefinierten Zeitspanne ruft der Indexer die .get_packages()-Methode des LocalCollectors und der RepoCollectoren auf, um den Index zu aktualisieren.

@github-actions
Copy link

github-actions bot commented Nov 1, 2022

Test Report

Report generated on 01-Dec-2022 at 12:52:53 by pytest-md

Summary

25 tests ran in 4.78 seconds

  • 25 passed

Coverage Report

Code Coverage

Package Line Rate Branch Rate Health
. 85% 73%
api 94% 75%
collector 96% 92%
factories 87% 0%
worker 82% 53%
worker.runtime 93% 69%
Summary 88% (1129 / 1277) 70% (178 / 255)

The `PackgeCollector` can currently handle a local directory and
packages from a LMS.
Copy link
Contributor

@MartinGauk MartinGauk left a comment

Choose a reason for hiding this comment

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

Bitte schreibe auch noch ein paar mehr Kommentare. Beispielsweise zur Besonderheit des LMSCollector.

Copy link
Member

@MHajoha MHajoha left a comment

Choose a reason for hiding this comment

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

Ich fände hier auch noch etwas mehr Doku wichtig. Zum Beispiel ist bei Indexer nicht klar, wo sich (un)register_package und update abgrenzen, d.h. welche Fälle sie jeweils abdecken.

Comment on lines +22 to +24
async def _get_manifest(self, path: Path) -> Manifest:
async with self._worker_pool.get_worker(path, 0, None) as worker:
return await worker.get_manifest()
Copy link
Member

Choose a reason for hiding this comment

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

Ist es wirklich nötig, einen Worker zu starten, um das Manifest zu lesen? Für das Lesen des Manifests muss doch kein Code des Pakets ausgeführt werden, sondern nur eine JSON-Datei daraus gelesen werden.

@MartinGauk MartinGauk merged commit 223ab77 into dev Dec 1, 2022
@MartinGauk MartinGauk mentioned this pull request Dec 1, 2022
@MartinGauk MartinGauk deleted the feature/collector branch December 1, 2022 15:29
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