From 04c19b5cd9f573793cf0321257a431c7461cf63f Mon Sep 17 00:00:00 2001 From: "F.N. Claessen" Date: Thu, 21 Apr 2022 12:09:47 +0200 Subject: [PATCH 1/4] Allow passing tuple of sources, while modernizing type annotations and expanding docstring Signed-off-by: F.N. Claessen --- flexmeasures/data/models/parsing_utils.py | 29 ++++++++++++++++------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/flexmeasures/data/models/parsing_utils.py b/flexmeasures/data/models/parsing_utils.py index 86f0b07a3..de4afe01d 100644 --- a/flexmeasures/data/models/parsing_utils.py +++ b/flexmeasures/data/models/parsing_utils.py @@ -1,24 +1,37 @@ -from typing import Optional, Union, List +from __future__ import annotations + +import collections.abc +from typing import Optional, Union from flask import current_app from flexmeasures.data import db from flexmeasures.data.models.data_sources import DataSource +sequence = collections.abc.Sequence + def parse_source_arg( - source: Optional[ - Union[DataSource, List[DataSource], int, List[int], str, List[str]] - ] -) -> Optional[List[DataSource]]: - """Parse the "source" argument by looking up DataSources corresponding to any given ids or names.""" + source: DataSource + | int + | str + | sequence[DataSource] + | sequence[int] + | sequence[str] + | None, +) -> list[DataSource] | None: + """Parse the "source" argument by looking up DataSources corresponding to any given ids or names. + + Passes None as is (i.e. no source argument is given). + Accepts ids and names as list or tuples, always converting them to a list. + """ if source is None: return source - if not isinstance(source, list): + if isinstance(source, (DataSource, str, int)): sources = [source] else: sources = source - parsed_sources: List[DataSource] = [] + parsed_sources: list[DataSource] = [] for source in sources: if isinstance(source, int): parsed_source = ( From 6fa3b3198db0c149fd49518d2b45b6b2e8471229 Mon Sep 17 00:00:00 2001 From: "F.N. Claessen" Date: Thu, 21 Apr 2022 12:21:34 +0200 Subject: [PATCH 2/4] flake8 Signed-off-by: F.N. Claessen --- flexmeasures/data/models/parsing_utils.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/flexmeasures/data/models/parsing_utils.py b/flexmeasures/data/models/parsing_utils.py index de4afe01d..e60c8debc 100644 --- a/flexmeasures/data/models/parsing_utils.py +++ b/flexmeasures/data/models/parsing_utils.py @@ -1,7 +1,6 @@ from __future__ import annotations -import collections.abc -from typing import Optional, Union +import collections from flask import current_app from flexmeasures.data import db From ae41c6422be81d647b3507575bfb5b7017e0f2a8 Mon Sep 17 00:00:00 2001 From: "F.N. Claessen" Date: Thu, 21 Apr 2022 12:23:21 +0200 Subject: [PATCH 3/4] Changelog entry Signed-off-by: F.N. Claessen --- documentation/changelog.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/documentation/changelog.rst b/documentation/changelog.rst index a8cb0596f..d29556cb5 100644 --- a/documentation/changelog.rst +++ b/documentation/changelog.rst @@ -17,6 +17,7 @@ Infrastructure / Support ---------------------- * Unit conversion prefers shorter units in general [see `PR #415 `_] * Shorter CI builds in Github Actions by caching Python environment [see `PR #361 `_] +* Allow to filter data by source using a tuple instead of a list [see `PR #421 `_] v0.9.3 | April 15, 2022 From de541182e62ed04f156bbea788cc82d07080a12f Mon Sep 17 00:00:00 2001 From: "F.N. Claessen" Date: Thu, 21 Apr 2022 12:25:20 +0200 Subject: [PATCH 4/4] Refactor import Signed-off-by: F.N. Claessen --- flexmeasures/data/models/parsing_utils.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/flexmeasures/data/models/parsing_utils.py b/flexmeasures/data/models/parsing_utils.py index e60c8debc..19bcb03a1 100644 --- a/flexmeasures/data/models/parsing_utils.py +++ b/flexmeasures/data/models/parsing_utils.py @@ -1,22 +1,20 @@ from __future__ import annotations -import collections +from collections.abc import Sequence from flask import current_app from flexmeasures.data import db from flexmeasures.data.models.data_sources import DataSource -sequence = collections.abc.Sequence - def parse_source_arg( source: DataSource | int | str - | sequence[DataSource] - | sequence[int] - | sequence[str] + | Sequence[DataSource] + | Sequence[int] + | Sequence[str] | None, ) -> list[DataSource] | None: """Parse the "source" argument by looking up DataSources corresponding to any given ids or names.