diff --git a/.github/workflows/run-pytest.yml b/.github/workflows/run-pytest.yml deleted file mode 100644 index f871feb..0000000 --- a/.github/workflows/run-pytest.yml +++ /dev/null @@ -1,62 +0,0 @@ -name: Run All Pytests - -on: - push: - branches: - - develop - - releases/** - pull_request: - branches: - - main - - develop - - releases/** - -jobs: - build: - # runs-on must be a single non-matrixed image - runs-on: ubuntu-18.04 - # , ubuntu-20.04] - strategy: - fail-fast: false - matrix: - python-version: [3.7, 3.8] - - steps: - - uses: actions/checkout@v2 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 - with: - python-version: ${{ matrix.python-version }} - - - name: Install gridappsd-python - run: | - curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python3 - - source $HOME/.poetry/env - poetry build - poetry install - - - name: Run pytest - env: - GRIDAPPSD_USER: ${{ secrets.GRIDAPPSD_USER }} - GRIDAPPSD_PASSWORD: ${{ secrets.GRIDAPPSD_PASSWORD }} - run: | - source $HOME/.poetry/env - poetry run pytest -s -o junit_family=xunit1 --junitxml=output/test-${{ matrix.python-version }}-results.xml - - - name: Archive test results - uses: actions/upload-artifact@v2 - with: - name: pytest-report - path: output/test-${{ matrix.python-version }}-results.xml - -#--cov=com --cov-report=xml --cov-report=html -# pytest tests.py --doctest-modules --junitxml=junit/test-results.xml --cov=com --cov-report=xml --cov-report=html -# - name: Lint with flake8 -# run: | -# # stop the build if there are Python syntax errors or undefined names -# flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics -# # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide -# flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics -# - name: Test with pytest -# run: | -# pytest --junitxml=junit/test-results.xml --cov=com --cov-report=xml --cov-report=html diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index d748452..d1bd2e0 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -11,7 +11,7 @@ repos: - id: trailing-whitespace - id: check-merge-conflict - id: no-commit-to-branch # blocks main commits. To bypass do git commit --allow-empty - - id: pretty-format-json +# - id: pretty-format-json #- repo: https://github.com/pre-commit/mirrors-autopep8 diff --git a/gridappsd-field-bus-lib/gridappsd/__no_init__here b/gridappsd-field-bus-lib/gridappsd/__no_init__here deleted file mode 100644 index e69de29..0000000 diff --git a/gridappsd-field-bus-lib/gridappsd/field_interface/__init__.py b/gridappsd-field-bus-lib/gridappsd/field_interface/__init__.py deleted file mode 100644 index 3385c5f..0000000 --- a/gridappsd-field-bus-lib/gridappsd/field_interface/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -from typing import List - -from gridappsd.field_interface.context import LocalContext -from gridappsd.field_interface.interfaces import MessageBusDefinition - -__all__: List[str] = ["LocalContext", "MessageBusDefinition"] diff --git a/gridappsd-field-bus-lib/gridappsd_field_bus/__init__.py b/gridappsd-field-bus-lib/gridappsd_field_bus/__init__.py new file mode 100644 index 0000000..158a6a5 --- /dev/null +++ b/gridappsd-field-bus-lib/gridappsd_field_bus/__init__.py @@ -0,0 +1,2 @@ +from gridappsd_field_bus.field_interface.interfaces import FieldMessageBus +from gridappsd_field_bus.field_interface.interfaces import MessageBusDefinition \ No newline at end of file diff --git a/gridappsd-field-bus-lib/gridappsd_field_bus/field_interface/__init__.py b/gridappsd-field-bus-lib/gridappsd_field_bus/field_interface/__init__.py new file mode 100644 index 0000000..11174c1 --- /dev/null +++ b/gridappsd-field-bus-lib/gridappsd_field_bus/field_interface/__init__.py @@ -0,0 +1,8 @@ +from typing import List + +from gridappsd_field_bus.field_interface import interfaces +from gridappsd_field_bus.field_interface.context import LocalContext +from gridappsd_field_bus.field_interface.interfaces import MessageBusDefinition +from gridappsd_field_bus.field_interface import context_managers + +__all__: List[str] = ["LocalContext", "MessageBusDefinition", "context_managers", "interfaces"] diff --git a/gridappsd-field-bus-lib/gridappsd/field_interface/agents/__init__.py b/gridappsd-field-bus-lib/gridappsd_field_bus/field_interface/agents/__init__.py similarity index 75% rename from gridappsd-field-bus-lib/gridappsd/field_interface/agents/__init__.py rename to gridappsd-field-bus-lib/gridappsd_field_bus/field_interface/agents/__init__.py index b7a0bdd..f1e2141 100644 --- a/gridappsd-field-bus-lib/gridappsd/field_interface/agents/__init__.py +++ b/gridappsd-field-bus-lib/gridappsd_field_bus/field_interface/agents/__init__.py @@ -1,6 +1,6 @@ from typing import List -from gridappsd.field_interface.agents.agents import (FeederAgent, DistributedAgent, +from gridappsd_field_bus.field_interface.agents.agents import (FeederAgent, DistributedAgent, CoordinatingAgent, SwitchAreaAgent, SecondaryAreaAgent, SubstationAgent) diff --git a/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py b/gridappsd-field-bus-lib/gridappsd_field_bus/field_interface/agents/agents.py similarity index 98% rename from gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py rename to gridappsd-field-bus-lib/gridappsd_field_bus/field_interface/agents/agents.py index f6b9edf..ffbc971 100644 --- a/gridappsd-field-bus-lib/gridappsd/field_interface/agents/agents.py +++ b/gridappsd-field-bus-lib/gridappsd_field_bus/field_interface/agents/agents.py @@ -13,9 +13,9 @@ from gridappsd import DifferenceBuilder import gridappsd.topics as t -from gridappsd.field_interface.context import LocalContext -from gridappsd.field_interface.gridappsd_field_bus import GridAPPSDMessageBus -from gridappsd.field_interface.interfaces import (FieldMessageBus, MessageBusDefinition) +from gridappsd_field_bus.field_interface.context import LocalContext +from gridappsd_field_bus.field_interface.gridappsd_field_bus import GridAPPSDMessageBus +from gridappsd_field_bus.field_interface.interfaces import (FieldMessageBus, MessageBusDefinition) CIM_PROFILE = None IEC61970_301 = None diff --git a/gridappsd-field-bus-lib/gridappsd/field_interface/context.py b/gridappsd-field-bus-lib/gridappsd_field_bus/field_interface/context.py similarity index 97% rename from gridappsd-field-bus-lib/gridappsd/field_interface/context.py rename to gridappsd-field-bus-lib/gridappsd_field_bus/field_interface/context.py index 6527730..fe74afd 100644 --- a/gridappsd-field-bus-lib/gridappsd/field_interface/context.py +++ b/gridappsd-field-bus-lib/gridappsd_field_bus/field_interface/context.py @@ -1,5 +1,5 @@ from gridappsd import DifferenceBuilder -from gridappsd.field_interface.interfaces import FieldMessageBus +from gridappsd_field_bus.field_interface.interfaces import FieldMessageBus import dataclasses import gridappsd.topics as t import json diff --git a/gridappsd-field-bus-lib/gridappsd/field_interface/context_managers/__init__.py b/gridappsd-field-bus-lib/gridappsd_field_bus/field_interface/context_managers/__init__.py similarity index 78% rename from gridappsd-field-bus-lib/gridappsd/field_interface/context_managers/__init__.py rename to gridappsd-field-bus-lib/gridappsd_field_bus/field_interface/context_managers/__init__.py index 1105445..3df1f04 100644 --- a/gridappsd-field-bus-lib/gridappsd/field_interface/context_managers/__init__.py +++ b/gridappsd-field-bus-lib/gridappsd_field_bus/field_interface/context_managers/__init__.py @@ -1,6 +1,6 @@ from typing import List -from gridappsd.field_interface.context_managers.context_manager_agents import (SubstationAreaContextManager, +from gridappsd_field_bus.field_interface.context_managers.context_manager_agents import (SubstationAreaContextManager, FeederAreaContextManager, SwitchAreaContextManager, SecondaryAreaContextManager) diff --git a/gridappsd-field-bus-lib/gridappsd/field_interface/context_managers/centralized_context_managers.py b/gridappsd-field-bus-lib/gridappsd_field_bus/field_interface/context_managers/centralized_context_managers.py similarity index 91% rename from gridappsd-field-bus-lib/gridappsd/field_interface/context_managers/centralized_context_managers.py rename to gridappsd-field-bus-lib/gridappsd_field_bus/field_interface/context_managers/centralized_context_managers.py index 3451448..884c492 100644 --- a/gridappsd-field-bus-lib/gridappsd/field_interface/context_managers/centralized_context_managers.py +++ b/gridappsd-field-bus-lib/gridappsd_field_bus/field_interface/context_managers/centralized_context_managers.py @@ -9,9 +9,9 @@ from cimgraph.data_profile import CIM_PROFILE from gridappsd import GridAPPSD import gridappsd.topics as t -import gridappsd.field_interface.agents.agents as agents_mod -from gridappsd.field_interface.context_managers.utils import REQUEST_FIELD, get_MessageBusDefinition -from gridappsd.field_interface.context_managers.context_manager_agents import FeederAreaContextManager, SwitchAreaContextManager, SecondaryAreaContextManager +import gridappsd_field_bus.field_interface.agents.agents as agents_mod +from gridappsd_field_bus.field_interface.context_managers.utils import REQUEST_FIELD, get_MessageBusDefinition +from gridappsd_field_bus.field_interface.context_managers.context_manager_agents import FeederAreaContextManager, SwitchAreaContextManager, SecondaryAreaContextManager cim_profile = CIM_PROFILE.CIMHUB_2023.value agents_mod.set_cim_profile(cim_profile=cim_profile, iec61970_301=7) diff --git a/gridappsd-field-bus-lib/gridappsd/field_interface/context_managers/context_manager_agents.py b/gridappsd-field-bus-lib/gridappsd_field_bus/field_interface/context_managers/context_manager_agents.py similarity index 97% rename from gridappsd-field-bus-lib/gridappsd/field_interface/context_managers/context_manager_agents.py rename to gridappsd-field-bus-lib/gridappsd_field_bus/field_interface/context_managers/context_manager_agents.py index 6371115..4175566 100644 --- a/gridappsd-field-bus-lib/gridappsd/field_interface/context_managers/context_manager_agents.py +++ b/gridappsd-field-bus-lib/gridappsd_field_bus/field_interface/context_managers/context_manager_agents.py @@ -4,9 +4,9 @@ import gridappsd.topics as t from gridappsd import GridAPPSD -from gridappsd.field_interface.agents import (SubstationAgent, FeederAgent, SecondaryAreaAgent, SwitchAreaAgent) -from gridappsd.field_interface.interfaces import MessageBusDefinition -from gridappsd.field_interface.context_managers.utils import REQUEST_FIELD +from gridappsd_field_bus.field_interface.agents import (SubstationAgent, FeederAgent, SecondaryAreaAgent, SwitchAreaAgent) +from gridappsd_field_bus.field_interface.interfaces import MessageBusDefinition +from gridappsd_field_bus.field_interface.context_managers.utils import REQUEST_FIELD logging.basicConfig(level=logging.DEBUG) logging.getLogger('goss').setLevel(logging.ERROR) diff --git a/gridappsd-field-bus-lib/gridappsd/field_interface/context_managers/substation.py b/gridappsd-field-bus-lib/gridappsd_field_bus/field_interface/context_managers/substation.py similarity index 90% rename from gridappsd-field-bus-lib/gridappsd/field_interface/context_managers/substation.py rename to gridappsd-field-bus-lib/gridappsd_field_bus/field_interface/context_managers/substation.py index ea3b4c0..36300b4 100644 --- a/gridappsd-field-bus-lib/gridappsd/field_interface/context_managers/substation.py +++ b/gridappsd-field-bus-lib/gridappsd_field_bus/field_interface/context_managers/substation.py @@ -5,9 +5,9 @@ from cimgraph.data_profile import CIM_PROFILE -import gridappsd.field_interface.agents.agents as agents_mod -from gridappsd.field_interface.interfaces import MessageBusDefinition -from gridappsd.field_interface.context_managers.context_manager_agents import SubstationAreaContextManager +import gridappsd_field_bus.field_interface.agents.agents as agents_mod +from gridappsd_field_bus.field_interface.interfaces import MessageBusDefinition +from gridappsd_field_bus.field_interface.context_managers.context_manager_agents import SubstationAreaContextManager cim_profile = "cimhub_2023" diff --git a/gridappsd-field-bus-lib/gridappsd/field_interface/context_managers/utils.py b/gridappsd-field-bus-lib/gridappsd_field_bus/field_interface/context_managers/utils.py similarity index 91% rename from gridappsd-field-bus-lib/gridappsd/field_interface/context_managers/utils.py rename to gridappsd-field-bus-lib/gridappsd_field_bus/field_interface/context_managers/utils.py index d3791d6..6c10dd8 100644 --- a/gridappsd-field-bus-lib/gridappsd/field_interface/context_managers/utils.py +++ b/gridappsd-field-bus-lib/gridappsd_field_bus/field_interface/context_managers/utils.py @@ -1,7 +1,7 @@ import os import gridappsd.topics as t -from gridappsd.field_interface.interfaces import MessageBusDefinition +from gridappsd_field_bus.field_interface.interfaces import MessageBusDefinition #FieldBusManager's request topics. To be used only by context manager user role only. REQUEST_FIELD = ".".join((t.PROCESS_PREFIX, "request.field")) diff --git a/gridappsd-field-bus-lib/gridappsd/field_interface/field_proxy_forwarder.py b/gridappsd-field-bus-lib/gridappsd_field_bus/field_interface/field_proxy_forwarder.py similarity index 100% rename from gridappsd-field-bus-lib/gridappsd/field_interface/field_proxy_forwarder.py rename to gridappsd-field-bus-lib/gridappsd_field_bus/field_interface/field_proxy_forwarder.py diff --git a/gridappsd-field-bus-lib/gridappsd/field_interface/gridappsd_field_bus.py b/gridappsd-field-bus-lib/gridappsd_field_bus/field_interface/gridappsd_field_bus.py similarity index 91% rename from gridappsd-field-bus-lib/gridappsd/field_interface/gridappsd_field_bus.py rename to gridappsd-field-bus-lib/gridappsd_field_bus/field_interface/gridappsd_field_bus.py index 43c9963..e14e0b1 100644 --- a/gridappsd-field-bus-lib/gridappsd/field_interface/gridappsd_field_bus.py +++ b/gridappsd-field-bus-lib/gridappsd_field_bus/field_interface/gridappsd_field_bus.py @@ -1,6 +1,6 @@ from gridappsd import GridAPPSD -from gridappsd.field_interface.interfaces import FieldMessageBus -from gridappsd.field_interface.interfaces import MessageBusDefinition +from gridappsd_field_bus.field_interface.interfaces import FieldMessageBus +from gridappsd_field_bus.field_interface.interfaces import MessageBusDefinition from typing import Any diff --git a/gridappsd-field-bus-lib/gridappsd/field_interface/interfaces.py b/gridappsd-field-bus-lib/gridappsd_field_bus/field_interface/interfaces.py similarity index 100% rename from gridappsd-field-bus-lib/gridappsd/field_interface/interfaces.py rename to gridappsd-field-bus-lib/gridappsd_field_bus/field_interface/interfaces.py diff --git a/gridappsd-field-bus-lib/pyproject.toml b/gridappsd-field-bus-lib/pyproject.toml index 6cbc331..6fbc8dc 100644 --- a/gridappsd-field-bus-lib/pyproject.toml +++ b/gridappsd-field-bus-lib/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "gridappsd-field-bus" -version = "2024.8.1a1" +version = "2024.12.0.a1" description = "GridAPPS-D Field Bus Implementation" authors = [ "C. Allwardt <3979063+craig8@users.noreply.github.com>", @@ -12,13 +12,13 @@ license = "BSD-3-Clause" repository = "https://github.com/GRIDAPPSD/gridappsd-python" homepage = "https://gridappsd.readthedocs.io" -keywords = ["gridappsd", "grid", "activmq", "powergrid", "simulation", "library"] +keywords = ["gridappsd", "grid", "activemq", "powergrid", "simulation", "library"] readme = "README.md" packages = [ - { include = 'gridappsd'} + { include = 'gridappsd_field_bus'} ] [tool.poetry.scripts] @@ -27,16 +27,17 @@ packages = [ context_manager = 'gridappsd.field_interface.context_manager:_main' [tool.poetry.dependencies] -python = ">=3.8.1,<4.0" +python = ">=3.10,<4.0" gridappsd-python = { path="../gridappsd-python-lib", develop = true} cim-graph = ">=0.1.1a0" [tool.poetry.group.dev.dependencies] -pytest = "^6.2.2" +pytest = "^8.3.4" pytest-html = "^3.1.1" mock = "^4.0.3" docker = "^4.4.4" yapf = "^0.32.0" +pre-commit = "^4.1.0" [build-system] requires = ["poetry-core>=1.2.0"] diff --git a/gridappsd-field-bus-lib/tests/test_import_field_deprecated_from_gridappsd.py b/gridappsd-field-bus-lib/tests/test_import_field_deprecated_from_gridappsd.py new file mode 100644 index 0000000..b4a5205 --- /dev/null +++ b/gridappsd-field-bus-lib/tests/test_import_field_deprecated_from_gridappsd.py @@ -0,0 +1,28 @@ + + +def test_modules_are_the_same(): + import sys + + # Note these are dynamically loaded please use gridappsd_field_bus packages instead. + from gridappsd.field_interface import interfaces + from gridappsd.field_interface import context + from gridappsd.field_interface import context_managers + from gridappsd.field_interface import agents + from gridappsd.field_interface import gridappsd_field_bus + + from gridappsd_field_bus.field_interface import interfaces as field_bus_interfaces + from gridappsd_field_bus.field_interface import context as field_context + from gridappsd_field_bus.field_interface import context_managers as field_context_managers + from gridappsd_field_bus.field_interface import agents as field_agents + from gridappsd_field_bus.field_interface import gridappsd_field_bus as field_gridappsd_field_bus + + from gridappsd.field_interface.interfaces import FieldMessageBus + from gridappsd_field_bus.field_interface.interfaces import FieldMessageBus as field_FieldMessageBus + + + assert interfaces == field_bus_interfaces + assert context_managers == field_context_managers + assert context == field_context + assert agents == field_agents + assert gridappsd_field_bus == field_gridappsd_field_bus + assert FieldMessageBus == field_FieldMessageBus \ No newline at end of file diff --git a/gridappsd-python-lib/gridappsd/field_interface/__init__.py b/gridappsd-python-lib/gridappsd/field_interface/__init__.py new file mode 100644 index 0000000..a223e59 --- /dev/null +++ b/gridappsd-python-lib/gridappsd/field_interface/__init__.py @@ -0,0 +1,32 @@ +import logging +import sys + +_log = logging.getLogger(__name__) + +try: + import warnings + + import gridappsd_field_bus.field_interface.context as _context + import gridappsd_field_bus.field_interface.context_managers as _context_managers + import gridappsd_field_bus.field_interface as _field_interface + import gridappsd_field_bus.field_interface.agents as _agents + import gridappsd_field_bus.field_interface.field_proxy_forwarder as _field_proxy_forwarder + import gridappsd_field_bus.field_interface.gridappsd_field_bus as _gridappsd_field_bus + import gridappsd_field_bus.field_interface.interfaces as _interfaces + + sys.modules['gridappsd.field_interface'] = _field_interface + sys.modules['gridappsd.field_interface.interfaces'] = _interfaces + sys.modules['gridappsd.field_interface.context_managers'] = _context_managers + sys.modules['gridappsd_.context_managers'] = _context_managers + sys.modules['gridappsd.field_interface.agents'] = _agents + sys.modules['gridappsd.field_interface.field_proxy_forwarder'] = _field_proxy_forwarder + sys.modules['gridappsd.field_interface.gridappsd_field_bus'] = _gridappsd_field_bus + + + + + + warnings.warn(message="gridappsd.field_interface is deprecated and will be removed in a future release. Use gridappsd_field_bus.field_interface instead.", + category=DeprecationWarning) +except ImportError: + _log.error("Could not import field_interface install gridappsd-field-bus to get those functions.") diff --git a/gridappsd-python-lib/pyproject.toml b/gridappsd-python-lib/pyproject.toml index 20377a2..6bb128d 100644 --- a/gridappsd-python-lib/pyproject.toml +++ b/gridappsd-python-lib/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "gridappsd-python" -version = "2024.8.1a1" +version = "2024.12.0.a1" description = "A GridAPPS-D Python Adapter" authors = [ "C. Allwardt <3979063+craig8@users.noreply.github.com>", @@ -12,7 +12,7 @@ license = "BSD-3-Clause" repository = "https://github.com/GRIDAPPSD/gridappsd-python" homepage = "https://gridappsd.readthedocs.io" -keywords = ["gridappsd", "grid", "activmq", "powergrid", "simulation", "library"] +keywords = ["gridappsd", "grid", "activemq", "powergrid", "simulation", "library"] readme = "README.md" @@ -29,7 +29,7 @@ gridappsd-cli = 'gridappsd.cli:_main' [tool.poetry.dependencies] -python = ">=3.7.9,<4.0" +python = ">=3.10,<4.0" PyYAML = "^6.0" pytz = "^2022.7" dateutils = "^0.6.7" @@ -37,13 +37,14 @@ stomp-py = "6.0.0" requests = "2.28.2" [tool.poetry.group.dev.dependencies] -pytest = "^6.2.2" +pytest = "^8.3.4" pytest-html = "^3.1.1" mock = "^4.0.3" yapf = "^0.32.0" mypy = "^1.3.0" python-on-whales = "^0.60.1" gitpython = "^3.1.31" +pre-commit = "^4.1.0" [build-system] requires = ["poetry-core>=1.2.0"] diff --git a/pyproject.toml b/pyproject.toml index acbcea7..6d00416 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "gridappsd-python-workspace" -version = "2024.8.1a0" +version = "2024.12.0.a1" description = "A GridAPPS-D Python Adapter" authors = [ "C. Allwardt <3979063+craig8@users.noreply.github.com>", @@ -8,18 +8,18 @@ authors = [ "A. Fisher =1.2.0"] +requires = ["poetry-core>=2.0.0"] build-backend = "poetry.core.masonry.api" diff --git a/scripts/poetry_install.sh b/scripts/poetry_install.sh index f4a0bc5..c139b4c 100755 --- a/scripts/poetry_install.sh +++ b/scripts/poetry_install.sh @@ -1,7 +1,7 @@ #!/bin/sh # This script reflects the latest changes of pyproject.toml # into both the poetry.lock file and the virtualenv. -# by running `poetry lock --no-update && poetry install --sync` +# by running `poetry lock && poetry sync` # It first configures poetry to use the right python for creation of the virtual env set -x set -u @@ -17,5 +17,5 @@ for p in $_projects do cd "${DIR}/../${p}" || exit poetry env use $(which python3) || poetry env use 3.8 - poetry lock --no-update && poetry install --sync + poetry lock && poetry sync done diff --git a/scripts/poetry_update.sh b/scripts/poetry_update.sh index 4df08a9..5003d41 100755 --- a/scripts/poetry_update.sh +++ b/scripts/poetry_update.sh @@ -1,7 +1,7 @@ #!/bin/sh # This script reflects the latest changes of pyproject.toml # into both the poetry.lock file and the virtualenv. -# by running `poetry update && poetry install --sync` +# by running `poetry update && poetry install sync` # It first configures poetry to use the right python for creation of the virtual env set -x set -u @@ -17,5 +17,5 @@ for p in $_projects do cd "${DIR}/../${p}" || exit poetry env use $(which python3) || poetry env use 3.8 - poetry update && poetry install --sync + poetry update && poetry install sync done