Skip to content

Commit

Permalink
Chore/dependencies/make s2 optional (#102)
Browse files Browse the repository at this point in the history
* chore: move s2 as an optional dep

Signed-off-by: Victor Garcia Reolid <victor@seita.nl>

* refactor: move s2 test to a dedicated module

Signed-off-by: Victor Garcia Reolid <victor@seita.nl>

* feat: add warnings of missing dep and how to fix it

Signed-off-by: Victor Garcia Reolid <victor@seita.nl>

* docs: update readme to include instructions on how to install fm-client with s2 support

Signed-off-by: Victor Garcia Reolid <victor@seita.nl>

* fix: move to start of cmd

Signed-off-by: Victor Garcia Reolid <victor@seita.nl>

* Revert "refactor: move s2 test to a dedicated module"

This reverts commit 98e0b6f.

* tests to dedicated s2 folder

Signed-off-by: Victor Garcia Reolid <victor@seita.nl>

* create __init__ for s2 folder

Signed-off-by: Victor Garcia Reolid <victor@seita.nl>

* add global conftest for package wise fixtures

Signed-off-by: Victor Garcia Reolid <victor@seita.nl>

* docs: little fix

Signed-off-by: Victor Garcia Reolid <victor@seita.nl>

* docs: install s2 and testing to develop s2 features

Signed-off-by: Victor Garcia Reolid <victor@seita.nl>

* fix: move test_client to parent folder

Signed-off-by: Victor Garcia Reolid <victor@seita.nl>

---------

Signed-off-by: Victor Garcia Reolid <victor@seita.nl>
  • Loading branch information
victorgarcia98 authored Jan 30, 2025
1 parent 12459f0 commit 20981c1
Show file tree
Hide file tree
Showing 22 changed files with 266 additions and 166 deletions.
5 changes: 5 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,11 @@ jobs:
pipx run --python '${{ steps.setup-python.outputs.python-path }}'
tox --installpkg '${{ needs.prepare.outputs.wheel-distribution }}'
-- -rFEx --durations 10 --color yes # pytest args
- name: Run tests (s2)
run: >-
pipx run --python '${{ steps.setup-python.outputs.python-path }}'
tox -e s2 --installpkg '${{ needs.prepare.outputs.wheel-distribution }}'
-- -rFEx --durations 10 --color yes # pytest args
# - name: Generate coverage report
# run: pipx run coverage lcov -o coverage.lcov
# - name: Upload partial coverage report
Expand Down
14 changes: 14 additions & 0 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,10 @@ Install using ``pip``::

pip install flexmeasures-client

To enable S2 features, you need to install extra requirements::

pip install flexmeasures-client[s2]

Initialization and authentication::

from flexmeasures_client import FlexMeasuresClient
Expand Down Expand Up @@ -144,6 +148,13 @@ If you want to develop this package it's necessary to install testing requiremen

pip install -e ".[testing]"

Moreover, if you need to work on S2 features, you need to install extra dependencies::

pip install -e ".[s2, testing]"




.. _pyscaffold-notes:


Expand All @@ -163,6 +174,9 @@ Running tests locally is crucial as well. Staying close to the CI workflow::
tox -e clean,build
tox -- -rFEx --durations 10 --color yes

For S2 features, you need to add `-e s2` to tox::

tox -e s2

This project uses `pre-commit`_, please make sure to install it before making any
changes::
Expand Down
2 changes: 2 additions & 0 deletions pytest.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
[pytest]
addopts = --ignore=tests/s2
7 changes: 3 additions & 4 deletions setup.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,6 @@ install_requires =
importlib-metadata; python_version<"3.8"
aiohttp
pandas>=2.1.4
s2-python>=0.4.1 # reason: be compatible with constraint pydantic>=2.8.2
async_timeout

[options.packages.find]
Expand All @@ -61,8 +60,8 @@ exclude =

[options.extras_require]
# Add here additional requirements for extra features, to install with:
# `pip install flexmeasures-client[PDF]` like:
# PDF = ReportLab; RXP
# `pip install flexmeasures-client[s2]` like:
s2=s2-python>=0.4.1 # reason: be compatible with constraint pydantic>=2.8.2

# Add here test requirements (semicolon/line-separated)
testing =
Expand All @@ -73,7 +72,6 @@ testing =
pytest-mock
aioresponses


[options.entry_points]
# Add here console scripts like:
# console_scripts =
Expand All @@ -85,6 +83,7 @@ testing =
# pyscaffold.cli =
# awesome = pyscaffoldext.awesome.extension:AwesomeExtension


[tool:pytest]
# Specify command line options as you would do when invoking pytest directly.
# e.g. --cov-report html (or xml) for html/xml output or --junitxml junit.xml
Expand Down
10 changes: 9 additions & 1 deletion src/flexmeasures_client/s2/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,15 @@
from typing import Callable, Coroutine, Dict, Type

import pydantic
from s2python.common import ReceptionStatus, ReceptionStatusValues, RevokeObject

try:
from s2python.common import ReceptionStatus, ReceptionStatusValues, RevokeObject
except ImportError:
raise ImportError(
"The 's2-python' package is required for this functionality. "
"Install it using `pip install flexmeasures-client[s2]`."
)


from flexmeasures_client.s2.utils import (
SizeLimitOrderedDict,
Expand Down
30 changes: 19 additions & 11 deletions src/flexmeasures_client/s2/cem.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,25 @@
from typing import Dict, Optional

import pydantic
from s2python.common import (
ControlType,
Handshake,
HandshakeResponse,
PowerMeasurement,
ReceptionStatus,
ReceptionStatusValues,
ResourceManagerDetails,
RevokeObject,
SelectControlType,
)

try:
from s2python.common import (
ControlType,
Handshake,
HandshakeResponse,
PowerMeasurement,
ReceptionStatus,
ReceptionStatusValues,
ResourceManagerDetails,
RevokeObject,
SelectControlType,
)
except ImportError:
raise ImportError(
"The 's2-python' package is required for this functionality. "
"Install it using `pip install flexmeasures-client[s2]`."
)


from flexmeasures_client.client import FlexMeasuresClient
from flexmeasures_client.s2 import Handler, register
Expand Down
30 changes: 19 additions & 11 deletions src/flexmeasures_client/s2/control_types/FRBC/__init__.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,25 @@
import asyncio

import pydantic
from s2python.common import ControlType, ReceptionStatusValues
from s2python.frbc import (
FRBCActuatorStatus,
FRBCFillLevelTargetProfile,
FRBCInstruction,
FRBCLeakageBehaviour,
FRBCStorageStatus,
FRBCSystemDescription,
FRBCTimerStatus,
FRBCUsageForecast,
)

try:
from s2python.common import ControlType, ReceptionStatusValues
from s2python.frbc import (
FRBCActuatorStatus,
FRBCFillLevelTargetProfile,
FRBCInstruction,
FRBCLeakageBehaviour,
FRBCStorageStatus,
FRBCSystemDescription,
FRBCTimerStatus,
FRBCUsageForecast,
)
except ImportError:
raise ImportError(
"The 's2-python' package is required for this functionality. "
"Install it using `pip install flexmeasures-client[s2]`."
)


from flexmeasures_client.s2 import SizeLimitOrderedDict, register
from flexmeasures_client.s2.control_types import ControlTypeHandler
Expand Down
14 changes: 13 additions & 1 deletion src/flexmeasures_client/s2/control_types/FRBC/frbc_simple.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,19 @@
from datetime import datetime, timedelta

import pytz
from s2python.frbc import FRBCActuatorStatus, FRBCStorageStatus, FRBCSystemDescription

try:
from s2python.frbc import (
FRBCActuatorStatus,
FRBCStorageStatus,
FRBCSystemDescription,
)
except ImportError:
raise ImportError(
"The 's2-python' package is required for this functionality. "
"Install it using `pip install flexmeasures-client[s2]`."
)


from flexmeasures_client.s2.control_types.FRBC import FRBC
from flexmeasures_client.s2.control_types.FRBC.utils import fm_schedule_to_instructions
Expand Down
26 changes: 17 additions & 9 deletions src/flexmeasures_client/s2/control_types/FRBC/frbc_tunes.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,23 @@
import pandas as pd
import pydantic
import pytz
from s2python.common import NumberRange, ReceptionStatus, ReceptionStatusValues
from s2python.frbc import (
FRBCActuatorStatus,
FRBCFillLevelTargetProfile,
FRBCInstruction,
FRBCStorageStatus,
FRBCSystemDescription,
FRBCUsageForecast,
)

try:
from s2python.common import NumberRange, ReceptionStatus, ReceptionStatusValues
from s2python.frbc import (
FRBCActuatorStatus,
FRBCFillLevelTargetProfile,
FRBCInstruction,
FRBCStorageStatus,
FRBCSystemDescription,
FRBCUsageForecast,
)
except ImportError:
raise ImportError(
"The 's2-python' package is required for this functionality. "
"Install it using `pip install flexmeasures-client[s2]`."
)


from flexmeasures_client.s2 import register
from flexmeasures_client.s2.control_types.FRBC import FRBC
Expand Down
10 changes: 9 additions & 1 deletion src/flexmeasures_client/s2/control_types/FRBC/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,15 @@
from typing import List

import pandas as pd
from s2python.frbc import FRBCInstruction, FRBCOperationMode, FRBCSystemDescription

try:
from s2python.frbc import FRBCInstruction, FRBCOperationMode, FRBCSystemDescription
except ImportError:
raise ImportError(
"The 's2-python' package is required for this functionality. "
"Install it using `pip install flexmeasures-client[s2]`."
)


from flexmeasures_client.s2.utils import get_unique_id

Expand Down
17 changes: 12 additions & 5 deletions src/flexmeasures_client/s2/control_types/translations.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,18 @@

import numpy as np
import pandas as pd
from s2python.frbc import (
FRBCFillLevelTargetProfile,
FRBCLeakageBehaviour,
FRBCUsageForecast,
)

try:
from s2python.frbc import (
FRBCFillLevelTargetProfile,
FRBCLeakageBehaviour,
FRBCUsageForecast,
)
except ImportError:
raise ImportError(
"The 's2-python' package is required for this functionality. "
"Install it using `pip install flexmeasures-client[s2]`."
)


def leakage_behaviour_to_storage_efficieny(
Expand Down
10 changes: 9 additions & 1 deletion src/flexmeasures_client/s2/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,15 @@
from uuid import uuid4

import pydantic
from s2python.common import ReceptionStatus, ReceptionStatusValues

try:
from s2python.common import ReceptionStatus, ReceptionStatusValues
except ImportError:
raise ImportError(
"The 's2-python' package is required for this functionality. "
"Install it using `pip install flexmeasures-client[s2]`."
)


KT = TypeVar("KT")
VT = TypeVar("VT")
Expand Down
9 changes: 8 additions & 1 deletion src/flexmeasures_client/s2/wrapper.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,14 @@
from datetime import datetime

from pydantic import BaseModel, Field
from s2python.message import S2Message

try:
from s2python.message import S2Message
except ImportError:
raise ImportError(
"The 's2-python' package is required for this functionality. "
"Install it using `pip install flexmeasures-client[s2]`."
)


class MetaData(BaseModel):
Expand Down
Loading

0 comments on commit 20981c1

Please sign in to comment.