From 30152cd10afda3389789830b047e566db7d8ef55 Mon Sep 17 00:00:00 2001 From: GeoffreyCoulaud Date: Thu, 20 Jul 2023 10:29:39 +0200 Subject: [PATCH] simplified SourceIterator --- src/importer/sources/bottles_source.py | 8 ++------ src/importer/sources/flatpak_source.py | 4 ++-- src/importer/sources/heroic_source.py | 4 ++-- src/importer/sources/itch_source.py | 8 ++------ src/importer/sources/legendary_source.py | 3 +-- src/importer/sources/lutris_source.py | 8 ++------ src/importer/sources/source.py | 15 +++------------ src/importer/sources/steam_source.py | 8 ++------ 8 files changed, 16 insertions(+), 42 deletions(-) diff --git a/src/importer/sources/bottles_source.py b/src/importer/sources/bottles_source.py index d993598..f945740 100644 --- a/src/importer/sources/bottles_source.py +++ b/src/importer/sources/bottles_source.py @@ -26,17 +26,13 @@ import yaml from src import shared from src.game import Game from src.importer.sources.location import Location -from src.importer.sources.source import ( - SourceIterationResult, - SourceIterator, - URLExecutableSource, -) +from src.importer.sources.source import SourceIterator, URLExecutableSource class BottlesSourceIterator(SourceIterator): source: "BottlesSource" - def generator_builder(self) -> SourceIterationResult: + def __iter__(self): """Generator method producing games""" data = self.source.data_location["library.yml"].read_text("utf-8") diff --git a/src/importer/sources/flatpak_source.py b/src/importer/sources/flatpak_source.py index 6ec6262..4195d21 100644 --- a/src/importer/sources/flatpak_source.py +++ b/src/importer/sources/flatpak_source.py @@ -25,13 +25,13 @@ from gi.repository import GLib, Gtk from src import shared from src.game import Game from src.importer.sources.location import Location -from src.importer.sources.source import Source, SourceIterationResult, SourceIterator +from src.importer.sources.source import Source, SourceIterator class FlatpakSourceIterator(SourceIterator): source: "FlatpakSource" - def generator_builder(self) -> SourceIterationResult: + def __iter__(self): """Generator method producing games""" added_time = int(time()) diff --git a/src/importer/sources/heroic_source.py b/src/importer/sources/heroic_source.py index a3dce89..0a7038a 100644 --- a/src/importer/sources/heroic_source.py +++ b/src/importer/sources/heroic_source.py @@ -24,7 +24,7 @@ from hashlib import sha256 from json import JSONDecodeError from pathlib import Path from time import time -from typing import Optional, TypedDict, Generator, Iterable +from typing import Optional, TypedDict, Iterable from abc import abstractmethod from src import shared @@ -118,7 +118,7 @@ class SubSource(Iterable): return (game, additional_data) - def __iter__(self) -> Generator[SourceIterationResult, None, None]: + def __iter__(self): """ Iterate through the installed games with a generator :raises InvalidLibraryFileError: on initial call if the library file is bad diff --git a/src/importer/sources/itch_source.py b/src/importer/sources/itch_source.py index 141c9f9..6659f7c 100644 --- a/src/importer/sources/itch_source.py +++ b/src/importer/sources/itch_source.py @@ -25,18 +25,14 @@ from time import time from src import shared from src.game import Game from src.importer.sources.location import Location -from src.importer.sources.source import ( - SourceIterationResult, - SourceIterator, - URLExecutableSource, -) +from src.importer.sources.source import SourceIterator, URLExecutableSource from src.utils.sqlite import copy_db class ItchSourceIterator(SourceIterator): source: "ItchSource" - def generator_builder(self) -> SourceIterationResult: + def __iter__(self): """Generator method producing games""" # Query the database diff --git a/src/importer/sources/legendary_source.py b/src/importer/sources/legendary_source.py index 22392be..2e43948 100644 --- a/src/importer/sources/legendary_source.py +++ b/src/importer/sources/legendary_source.py @@ -21,7 +21,6 @@ import json import logging from json import JSONDecodeError from time import time -from typing import Generator from src import shared from src.game import Game @@ -65,7 +64,7 @@ class LegendarySourceIterator(SourceIterator): game = Game(values) return (game, data) - def generator_builder(self) -> Generator[SourceIterationResult, None, None]: + def __iter__(self): # Open library file = self.source.config_location["installed.json"] try: diff --git a/src/importer/sources/lutris_source.py b/src/importer/sources/lutris_source.py index ec4b066..9077591 100644 --- a/src/importer/sources/lutris_source.py +++ b/src/importer/sources/lutris_source.py @@ -24,18 +24,14 @@ from time import time from src import shared from src.game import Game from src.importer.sources.location import Location -from src.importer.sources.source import ( - SourceIterationResult, - SourceIterator, - URLExecutableSource, -) +from src.importer.sources.source import SourceIterator, URLExecutableSource from src.utils.sqlite import copy_db class LutrisSourceIterator(SourceIterator): source: "LutrisSource" - def generator_builder(self) -> SourceIterationResult: + def __iter__(self): """Generator method producing games""" # Query the database diff --git a/src/importer/sources/source.py b/src/importer/sources/source.py index cb9eb0c..2abfbde 100644 --- a/src/importer/sources/source.py +++ b/src/importer/sources/source.py @@ -29,25 +29,16 @@ from src.importer.sources.location import Location SourceIterationResult = None | Game | tuple[Game, tuple[Any]] -class SourceIterator(Iterator): +class SourceIterator: """Data producer for a source of games""" source: "Source" = None - generator: Generator = None def __init__(self, source: "Source") -> None: - super().__init__() self.source = source - self.generator = self.generator_builder() - - def __iter__(self) -> "SourceIterator": - return self - - def __next__(self) -> SourceIterationResult: - return next(self.generator) @abstractmethod - def generator_builder(self) -> Generator[SourceIterationResult, None, None]: + def __iter__(self) -> Generator[SourceIterationResult, None, None]: """ Method that returns a generator that produces games * Should be implemented as a generator method @@ -108,7 +99,7 @@ class Source(Iterable): if location is None: continue location.resolve() - return self.iterator_class(self) + return iter(self.iterator_class(self)) # pylint: disable=abstract-method diff --git a/src/importer/sources/steam_source.py b/src/importer/sources/steam_source.py index 975f369..a47a90c 100644 --- a/src/importer/sources/steam_source.py +++ b/src/importer/sources/steam_source.py @@ -27,11 +27,7 @@ from typing import Iterable from src import shared from src.game import Game from src.importer.sources.location import Location -from src.importer.sources.source import ( - SourceIterationResult, - SourceIterator, - URLExecutableSource, -) +from src.importer.sources.source import SourceIterator, URLExecutableSource from src.utils.steam import SteamFileHelper, SteamInvalidManifestError @@ -63,7 +59,7 @@ class SteamSourceIterator(SourceIterator): ) return manifests - def generator_builder(self) -> SourceIterationResult: + def __iter__(self): """Generator method producing games""" appid_cache = set() manifests = self.get_manifests()