Skip to content
Snippets Groups Projects
Verified Commit e1178a1a authored by Karel van Klink's avatar Karel van Klink :smiley_cat:
Browse files

Revert "auto-fix a lot of styling errors, and ignore documentation warnings in test files"

This reverts commit 4bdcafb2
parent afb6ab5c
No related branches found
No related tags found
No related merge requests found
Pipeline #84550 failed
Showing
with 561 additions and 1605 deletions
# -- Project information -----------------------------------------------------
project = "GÉANT Service Orchestrator"
copyright = "2023, GÉANT Vereniging"
author = "GÉANT Orchestration and Automation Team"
project = 'GÉANT Service Orchestrator'
copyright = '2023, GÉANT Vereniging'
author = 'GÉANT Orchestration and Automation Team'
# -- General configuration ---------------------------------------------------
extensions = ["sphinx_rtd_theme", "sphinx.ext.autodoc", "sphinxcontrib.jquery"]
extensions = ['sphinx_rtd_theme', 'sphinx.ext.autodoc', 'sphinxcontrib.jquery']
templates_path = ["templates"]
exclude_patterns = ["build", "Thumbs.db", ".DS_Store", "venv", "vale", "__init__.py"]
templates_path = ['templates']
exclude_patterns = ['build', 'Thumbs.db', '.DS_Store', 'venv', 'vale', '__init__.py']
# -- Options for HTML output -------------------------------------------------
html_theme = "sphinx_rtd_theme"
html_static_path = ["static"]
html_theme = 'sphinx_rtd_theme'
html_static_path = ['static']
html_theme_options = {
"style_nav_header_background": "rgb(0 63 95)",
'style_nav_header_background': 'rgb(0 63 95)',
}
html_css_files = ["custom.css"]
html_js_files = ["custom.js"]
html_logo = "static/geant_logo_white.svg"
html_css_files = ['custom.css']
html_js_files = ['custom.js']
html_logo = 'static/geant_logo_white.svg'
# Both the class' and the ``__init__`` method's docstring are concatenated and inserted.
autoclass_content = "both"
autodoc_typehints = "none"
autoclass_content = 'both'
autodoc_typehints = 'none'
# Display todos by setting to True
todo_include_todos = True
......@@ -4,8 +4,7 @@ import typer
from orchestrator import OrchestratorCore, app_settings
from orchestrator.cli.main import app as cli_app
# noinspection PyUnresolvedReferences
import gso.products
import gso.products # noqa: F401
import gso.workflows # noqa: F401
from gso.api import router as api_router
from gso.cli import netbox
......
......@@ -130,9 +130,8 @@ class IptrunkImportModel(BaseModel):
"""Validate that the customer exists."""
try:
get_customer_by_name(value)
except CustomerNotFoundError as e:
msg = f"Customer {value} not found"
raise ValueError(msg) from e
except CustomerNotFoundError:
raise ValueError(f"Customer {value} not found")
return value
......@@ -140,8 +139,7 @@ class IptrunkImportModel(BaseModel):
def check_if_router_side_is_available(cls, value: str) -> str:
"""Both sides of the trunk must exist in :term:`GSO`."""
if value not in cls._get_active_routers():
msg = f"Router {value} not found"
raise ValueError(msg)
raise ValueError(f"Router {value} not found")
return value
......@@ -149,8 +147,7 @@ class IptrunkImportModel(BaseModel):
def check_side_uniqueness(cls, value: list[str]) -> list[str]:
""":term:`LAG` members must be unique."""
if len(value) != len(set(value)):
msg = "Items must be unique"
raise ValueError(msg)
raise ValueError("Items must be unique")
return value
......@@ -165,24 +162,20 @@ class IptrunkImportModel(BaseModel):
len_b = len(side_b_members)
if len_a < min_links:
msg = f"Side A members should be at least {min_links} (iptrunk_minimum_links)"
raise ValueError(msg)
raise ValueError(f"Side A members should be at least {min_links} (iptrunk_minimum_links)")
if len_a != len_b:
msg = "Mismatch between Side A and B members"
raise ValueError(msg)
raise ValueError("Mismatch between Side A and B members")
return values
def _start_process(process_name: str, data: dict) -> UUID:
"""Start a process and handle common exceptions."""
pid: UUID = processes.start_process(process_name, [data])
if pid is None:
raise HTTPException(
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
detail="Failed to start the process.",
)
raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail="Failed to start the process.")
process = processes._get_process(pid) # noqa: SLF001
if process.last_status == "failed":
......@@ -222,6 +215,7 @@ def import_router(router_data: RouterImportModel) -> dict[str, Any]:
:raises HTTPException: If there's an error in the process.
"""
pid = _start_process("import_router", router_data.dict())
return {"detail": "Router added successfully", "pid": pid}
......@@ -238,5 +232,6 @@ def import_iptrunk(iptrunk_data: IptrunkImportModel) -> dict[str, Any]:
:raises HTTPException: If there's an error in the process.
"""
pid = _start_process("import_iptrunk", iptrunk_data.dict())
return {"detail": "Iptrunk added successfully", "pid": pid}
......@@ -11,18 +11,10 @@ from orchestrator.services.subscriptions import build_extended_domain_model
from gso.services.subscriptions import get_active_router_subscriptions
router = APIRouter(
prefix="/subscriptions",
tags=["Subscriptions"],
dependencies=[Depends(opa_security_default)],
)
router = APIRouter(prefix="/subscriptions", tags=["Subscriptions"], dependencies=[Depends(opa_security_default)])
@router.get(
"/routers",
status_code=status.HTTP_200_OK,
response_model=list[SubscriptionDomainModelSchema],
)
@router.get("/routers", status_code=status.HTTP_200_OK, response_model=list[SubscriptionDomainModelSchema])
def subscription_routers() -> list[dict[str, Any]]:
"""Retrieve all active routers subscriptions."""
subscriptions = []
......
......@@ -32,10 +32,7 @@ def run_migrations_offline() -> None:
"""
url = config.get_main_option("sqlalchemy.url")
context.configure(
url=url,
target_metadata=target_metadata,
literal_binds=True,
dialect_opts={"paramstyle": "named"},
url=url, target_metadata=target_metadata, literal_binds=True, dialect_opts={"paramstyle": "named"}
)
with context.begin_transaction():
......
......@@ -9,8 +9,8 @@ import sqlalchemy as sa
from alembic import op
# revision identifiers, used by Alembic.
revision = "3657611f0dfc"
down_revision = "91047dd30b40"
revision = '3657611f0dfc'
down_revision = '91047dd30b40'
branch_labels = None
depends_on = None
......@@ -22,14 +22,14 @@ new_workflows = [
"name": "create_router",
"target": "CREATE",
"description": "Create router",
"product_type": "Router",
"product_type": "Router"
},
{
"name": "terminate_router",
"target": "TERMINATE",
"description": "Terminate router",
"product_type": "Router",
},
"product_type": "Router"
}
]
......
......@@ -9,8 +9,8 @@ import sqlalchemy as sa
from alembic import op
# revision identifiers, used by Alembic.
revision = "91047dd30b40"
down_revision = "97436160a422"
revision = '91047dd30b40'
down_revision = '97436160a422'
branch_labels = None
depends_on = None
......@@ -22,7 +22,7 @@ new_workflows = [
"name": "create_site",
"target": "CREATE",
"description": "Create Site",
"product_type": "Site",
"product_type": "Site"
}
]
......
......@@ -9,8 +9,8 @@ import sqlalchemy as sa
from alembic import op
# revision identifiers, used by Alembic.
revision = "a6eefd32c4f7"
down_revision = "3657611f0dfc"
revision = 'a6eefd32c4f7'
down_revision = '3657611f0dfc'
branch_labels = None
depends_on = None
......@@ -22,26 +22,26 @@ new_workflows = [
"name": "create_iptrunk",
"target": "CREATE",
"description": "Create IP trunk",
"product_type": "Iptrunk",
"product_type": "Iptrunk"
},
{
"name": "terminate_iptrunk",
"target": "TERMINATE",
"description": "Terminate IPtrunk",
"product_type": "Iptrunk",
"product_type": "Iptrunk"
},
{
"name": "modify_trunk_interface",
"target": "MODIFY",
"description": "Modify IP Trunk interface",
"product_type": "Iptrunk",
"product_type": "Iptrunk"
},
{
"name": "modify_isis_metric",
"target": "MODIFY",
"description": "Modify IP trunk",
"product_type": "Iptrunk",
},
"product_type": "Iptrunk"
}
]
......
......@@ -9,8 +9,8 @@ import sqlalchemy as sa
from alembic import op
# revision identifiers, used by Alembic.
revision = "e68720f2ec32"
down_revision = "a6eefd32c4f7"
revision = 'e68720f2ec32'
down_revision = 'a6eefd32c4f7'
branch_labels = None
depends_on = None
......@@ -22,7 +22,7 @@ new_workflows = [
"name": "migrate_iptrunk",
"target": "MODIFY",
"description": "Migrate an IP Trunk",
"product_type": "Iptrunk",
"product_type": "Iptrunk"
}
]
......
......@@ -9,162 +9,78 @@ import sqlalchemy as sa
from alembic import op
# revision identifiers, used by Alembic.
revision = "394dc60d5c02"
down_revision = "01e42c100448"
revision = '394dc60d5c02'
down_revision = '01e42c100448'
branch_labels = None
depends_on = None
def upgrade() -> None:
conn = op.get_bind()
conn.execute(
sa.text(
"""
conn.execute(sa.text("""
DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkSideBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_side_ae_members_description'))
"""
)
)
conn.execute(
sa.text(
"""
"""))
conn.execute(sa.text("""
DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkSideBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_side_ae_members_description'))
"""
)
)
conn.execute(
sa.text(
"""
"""))
conn.execute(sa.text("""
DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkSideBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_side_ae_members'))
"""
)
)
conn.execute(
sa.text(
"""
"""))
conn.execute(sa.text("""
DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkSideBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_side_ae_members'))
"""
)
)
conn.execute(
sa.text(
"""
"""))
conn.execute(sa.text("""
DELETE FROM subscription_instance_values WHERE subscription_instance_values.resource_type_id IN (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_side_ae_members_description', 'iptrunk_side_ae_members'))
"""
)
)
conn.execute(
sa.text(
"""
"""))
conn.execute(sa.text("""
DELETE FROM resource_types WHERE resource_types.resource_type IN ('iptrunk_side_ae_members_description', 'iptrunk_side_ae_members')
"""
)
)
conn.execute(
sa.text(
"""
"""))
conn.execute(sa.text("""
INSERT INTO product_blocks (name, description, tag, status) VALUES ('IptrunkInterfaceBlock', 'Interface in a LAG as part of an IP trunk', 'IPTINT', 'active') RETURNING product_blocks.product_block_id
"""
)
)
conn.execute(
sa.text(
"""
"""))
conn.execute(sa.text("""
INSERT INTO resource_types (resource_type, description) VALUES ('interface_description', 'Description of a LAG interface') RETURNING resource_types.resource_type_id
"""
)
)
conn.execute(
sa.text(
"""
"""))
conn.execute(sa.text("""
INSERT INTO resource_types (resource_type, description) VALUES ('interface_name', 'Interface name of a LAG member') RETURNING resource_types.resource_type_id
"""
)
)
conn.execute(
sa.text(
"""
"""))
conn.execute(sa.text("""
INSERT INTO product_block_relations (in_use_by_id, depends_on_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkSideBlock')), (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkInterfaceBlock')))
"""
)
)
conn.execute(
sa.text(
"""
"""))
conn.execute(sa.text("""
INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkInterfaceBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('interface_description')))
"""
)
)
conn.execute(
sa.text(
"""
"""))
conn.execute(sa.text("""
INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkInterfaceBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('interface_name')))
"""
)
)
"""))
def downgrade() -> None:
conn = op.get_bind()
conn.execute(
sa.text(
"""
conn.execute(sa.text("""
DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkInterfaceBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('interface_description'))
"""
)
)
conn.execute(
sa.text(
"""
"""))
conn.execute(sa.text("""
DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkInterfaceBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('interface_description'))
"""
)
)
conn.execute(
sa.text(
"""
"""))
conn.execute(sa.text("""
DELETE FROM product_block_resource_types WHERE product_block_resource_types.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkInterfaceBlock')) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('interface_name'))
"""
)
)
conn.execute(
sa.text(
"""
"""))
conn.execute(sa.text("""
DELETE FROM subscription_instance_values USING product_block_resource_types WHERE subscription_instance_values.subscription_instance_id IN (SELECT subscription_instances.subscription_instance_id FROM subscription_instances WHERE subscription_instances.subscription_instance_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkInterfaceBlock'))) AND product_block_resource_types.resource_type_id = (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('interface_name'))
"""
)
)
conn.execute(
sa.text(
"""
"""))
conn.execute(sa.text("""
DELETE FROM subscription_instance_values WHERE subscription_instance_values.resource_type_id IN (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('interface_description', 'interface_name'))
"""
)
)
conn.execute(
sa.text(
"""
"""))
conn.execute(sa.text("""
DELETE FROM resource_types WHERE resource_types.resource_type IN ('interface_description', 'interface_name')
"""
)
)
conn.execute(
sa.text(
"""
"""))
conn.execute(sa.text("""
DELETE FROM product_block_relations WHERE product_block_relations.in_use_by_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkSideBlock')) AND product_block_relations.depends_on_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkInterfaceBlock'))
"""
)
)
conn.execute(
sa.text(
"""
"""))
conn.execute(sa.text("""
DELETE FROM subscription_instances WHERE subscription_instances.product_block_id IN (SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('IptrunkInterfaceBlock'))
"""
)
)
conn.execute(
sa.text(
"""
"""))
conn.execute(sa.text("""
DELETE FROM product_blocks WHERE product_blocks.name IN ('IptrunkInterfaceBlock')
"""
)
)
"""))
......@@ -16,18 +16,8 @@ branch_labels = None
depends_on = None
new_workflows = [
{
"name": "modify_site",
"target": "MODIFY",
"description": "Modify site",
"product_type": "Site",
},
{
"name": "terminate_site",
"target": "TERMINATE",
"description": "Terminate site",
"product_type": "Site",
},
{"name": "modify_site", "target": "MODIFY", "description": "Modify site", "product_type": "Site"},
{"name": "terminate_site", "target": "TERMINATE", "description": "Terminate site", "product_type": "Site"},
]
......
......@@ -26,5 +26,5 @@ SUBSCRIPTION_MODEL_REGISTRY.update(
"Site": Site,
"Router": Router,
"IP trunk": Iptrunk,
},
}
)
......@@ -7,11 +7,7 @@ from orchestrator.domain.base import ProductBlockModel
from orchestrator.forms.validators import UniqueConstrainedList
from orchestrator.types import SubscriptionLifecycle, strEnum
from gso.products.product_blocks.router import (
RouterBlock,
RouterBlockInactive,
RouterBlockProvisioning,
)
from gso.products.product_blocks.router import RouterBlock, RouterBlockInactive, RouterBlockProvisioning
class PhyPortCapacity(strEnum):
......@@ -41,9 +37,7 @@ class LAGMemberList(UniqueConstrainedList[T_co]): # type: ignore[type-var]
class IptrunkInterfaceBlockInactive(
ProductBlockModel,
lifecycle=[SubscriptionLifecycle.INITIAL],
product_block_name="IptrunkInterfaceBlock",
ProductBlockModel, lifecycle=[SubscriptionLifecycle.INITIAL], product_block_name="IptrunkInterfaceBlock"
):
"""An inactive IP trunk interface."""
......@@ -74,9 +68,7 @@ class IptrunkSides(UniqueConstrainedList[T_co]): # type: ignore[type-var]
class IptrunkSideBlockInactive(
ProductBlockModel,
lifecycle=[SubscriptionLifecycle.INITIAL],
product_block_name="IptrunkSideBlock",
ProductBlockModel, lifecycle=[SubscriptionLifecycle.INITIAL], product_block_name="IptrunkSideBlock"
):
"""An inactive IP trunk side."""
......@@ -105,9 +97,7 @@ class IptrunkSideBlock(IptrunkSideBlockProvisioning, lifecycle=[SubscriptionLife
class IptrunkBlockInactive(
ProductBlockModel,
lifecycle=[SubscriptionLifecycle.INITIAL],
product_block_name="IptrunkBlock",
ProductBlockModel, lifecycle=[SubscriptionLifecycle.INITIAL], product_block_name="IptrunkBlock"
):
"""A trunk that's currently inactive, see :class:`IptrunkBlock`."""
......
......@@ -6,11 +6,7 @@ from orchestrator.domain.base import ProductBlockModel
from orchestrator.types import SubscriptionLifecycle, strEnum
from pydantic import ConstrainedInt
from gso.products.product_blocks.site import (
SiteBlock,
SiteBlockInactive,
SiteBlockProvisioning,
)
from gso.products.product_blocks.site import SiteBlock, SiteBlockInactive, SiteBlockProvisioning
class RouterVendor(strEnum):
......@@ -39,9 +35,7 @@ class PortNumber(ConstrainedInt):
class RouterBlockInactive(
ProductBlockModel,
lifecycle=[SubscriptionLifecycle.INITIAL],
product_block_name="RouterBlock",
ProductBlockModel, lifecycle=[SubscriptionLifecycle.INITIAL], product_block_name="RouterBlock"
):
"""A router that's being currently inactive. See :class:`RouterBlock`."""
......
......@@ -34,8 +34,7 @@ class LatitudeCoordinate(ConstrainedStr):
def validate(cls, value: str) -> str:
"""Validate that a latitude coordinate is valid."""
if not cls.regex.match(value):
msg = "Invalid latitude coordinate. Valid examples: '40.7128', '-74.0060', '90', '-90', '0'."
raise ValueError(msg)
raise ValueError("Invalid latitude coordinate. Valid examples: '40.7128', '-74.0060', '90', '-90', '0'.")
return value
......@@ -54,17 +53,12 @@ class LongitudeCoordinate(ConstrainedStr):
def validate(cls, value: str) -> str:
"""Validate that a longitude coordinate is valid."""
if not cls.regex.match(value):
msg = "Invalid longitude coordinate. Valid examples: '40.7128', '-74.0060', '180', '-180'"
raise ValueError(msg)
raise ValueError("Invalid longitude coordinate. Valid examples: '40.7128', '-74.0060', '180', '-180'")
return value
class SiteBlockInactive(
ProductBlockModel,
lifecycle=[SubscriptionLifecycle.INITIAL],
product_block_name="SiteBlock",
):
class SiteBlockInactive(ProductBlockModel, lifecycle=[SubscriptionLifecycle.INITIAL], product_block_name="SiteBlock"):
"""A site that's currently inactive, see :class:`SiteBlock`."""
site_name: str | None = None
......
......@@ -3,11 +3,7 @@
from orchestrator.domain.base import SubscriptionModel
from orchestrator.types import SubscriptionLifecycle
from gso.products.product_blocks.iptrunk import (
IptrunkBlock,
IptrunkBlockInactive,
IptrunkBlockProvisioning,
)
from gso.products.product_blocks.iptrunk import IptrunkBlock, IptrunkBlockInactive, IptrunkBlockProvisioning
class IptrunkInactive(SubscriptionModel, is_base=True):
......
......@@ -3,11 +3,7 @@
from orchestrator.domain.base import SubscriptionModel
from orchestrator.types import SubscriptionLifecycle
from gso.products.product_blocks.router import (
RouterBlock,
RouterBlockInactive,
RouterBlockProvisioning,
)
from gso.products.product_blocks.router import RouterBlock, RouterBlockInactive, RouterBlockProvisioning
class RouterInactive(SubscriptionModel, is_base=True):
......
......@@ -3,11 +3,7 @@
from orchestrator.domain.base import SubscriptionModel
from orchestrator.types import SubscriptionLifecycle
from gso.products.product_blocks.site import (
SiteBlock,
SiteBlockInactive,
SiteBlockProvisioning,
)
from gso.products.product_blocks.site import SiteBlock, SiteBlockInactive, SiteBlockProvisioning
class SiteInactive(SubscriptionModel, is_base=True):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment