From c50633647bd8277ae8f99d7ab0e302b1980551d2 Mon Sep 17 00:00:00 2001 From: Karel van Klink <karel.vanklink@geant.org> Date: Mon, 13 Nov 2023 15:17:08 +0000 Subject: [PATCH] resolve linting errors in product types and blocks, and schedules --- gso/api/v1/imports.py | 6 +++--- gso/products/product_blocks/site.py | 2 ++ gso/products/product_types/iptrunk.py | 8 ++++++++ gso/products/product_types/router.py | 8 ++++++++ gso/products/product_types/site.py | 8 ++++++++ gso/schedules/__init__.py | 1 + gso/schedules/scheduling.py | 2 ++ gso/schedules/task_vacuum.py | 3 +++ gso/schedules/validate_products.py | 3 +++ gso/schedules/validate_subscriptions.py | 3 +++ pyproject.toml | 1 + 11 files changed, 42 insertions(+), 3 deletions(-) diff --git a/gso/api/v1/imports.py b/gso/api/v1/imports.py index 65002389..fcc4a89a 100644 --- a/gso/api/v1/imports.py +++ b/gso/api/v1/imports.py @@ -50,14 +50,14 @@ class SiteImportModel(BaseModel): @validator("site_ts_address", allow_reuse=True) def validate_ts_address(cls, site_ts_address: str) -> str: - """A terminal server address must be valid.""" + """Validate the terminal server address.""" validate_site_fields_is_unique("site_ts_address", site_ts_address) validate_ipv4_or_ipv6(site_ts_address) return site_ts_address @validator("site_country_code", allow_reuse=True) def country_code_must_exist(cls, country_code: str) -> str: - """A country code must exist.""" + """Validate the country code such that it exists.""" validate_country_code(country_code) return country_code @@ -126,7 +126,7 @@ class IptrunkImportModel(BaseModel): @validator("customer") def check_if_customer_exists(cls, value: str) -> str: - """The customer must exist.""" + """Validate that the customer exists.""" try: get_customer_by_name(value) except CustomerNotFoundError as e: diff --git a/gso/products/product_blocks/site.py b/gso/products/product_blocks/site.py index ce5ec5f1..89c63768 100644 --- a/gso/products/product_blocks/site.py +++ b/gso/products/product_blocks/site.py @@ -31,6 +31,7 @@ class LatitudeCoordinate(ConstrainedStr): @classmethod 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) @@ -50,6 +51,7 @@ class LongitudeCoordinate(ConstrainedStr): @classmethod 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) diff --git a/gso/products/product_types/iptrunk.py b/gso/products/product_types/iptrunk.py index 82b283b6..70612d49 100644 --- a/gso/products/product_types/iptrunk.py +++ b/gso/products/product_types/iptrunk.py @@ -1,3 +1,5 @@ +"""The product type for IP trunks, does not contain any special variables apart from the corresponding product block.""" + from orchestrator.domain.base import SubscriptionModel from orchestrator.types import SubscriptionLifecycle @@ -9,12 +11,18 @@ from gso.products.product_blocks.iptrunk import ( class IptrunkInactive(SubscriptionModel, is_base=True): + """An IP trunk that is inactive.""" + iptrunk: IptrunkBlockInactive class IptrunkProvisioning(IptrunkInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]): + """An IP trunk that is being provisioned.""" + iptrunk: IptrunkBlockProvisioning class Iptrunk(IptrunkProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]): + """An IP trunk that is active.""" + iptrunk: IptrunkBlock diff --git a/gso/products/product_types/router.py b/gso/products/product_types/router.py index e0cfa3b0..d6a59c12 100644 --- a/gso/products/product_types/router.py +++ b/gso/products/product_types/router.py @@ -1,3 +1,5 @@ +"""A router product type.""" + from orchestrator.domain.base import SubscriptionModel from orchestrator.types import SubscriptionLifecycle @@ -9,12 +11,18 @@ from gso.products.product_blocks.router import ( class RouterInactive(SubscriptionModel, is_base=True): + """An inactive router.""" + router: RouterBlockInactive class RouterProvisioning(RouterInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]): + """A router that is being provisioned.""" + router: RouterBlockProvisioning class Router(RouterProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]): + """A router that is currently active.""" + router: RouterBlock diff --git a/gso/products/product_types/site.py b/gso/products/product_types/site.py index 5a78adff..ec09962e 100644 --- a/gso/products/product_types/site.py +++ b/gso/products/product_types/site.py @@ -1,3 +1,5 @@ +"""The product type for sites. Used for tying together shared information between the products that reside here.""" + from orchestrator.domain.base import SubscriptionModel from orchestrator.types import SubscriptionLifecycle @@ -9,12 +11,18 @@ from gso.products.product_blocks.site import ( class SiteInactive(SubscriptionModel, is_base=True): + """A site that is inactive.""" + site: SiteBlockInactive class SiteProvisioning(SiteInactive, lifecycle=[SubscriptionLifecycle.PROVISIONING]): + """A site that is being provisioned.""" + site: SiteBlockProvisioning class Site(SiteProvisioning, lifecycle=[SubscriptionLifecycle.ACTIVE]): + """A site that is currently active.""" + site: SiteBlock diff --git a/gso/schedules/__init__.py b/gso/schedules/__init__.py index e69de29b..8257a874 100644 --- a/gso/schedules/__init__.py +++ b/gso/schedules/__init__.py @@ -0,0 +1 @@ +"""Tasks that are scheduled to run periodically in :term:`GSO`.""" diff --git a/gso/schedules/scheduling.py b/gso/schedules/scheduling.py index 8202bd3b..d7044351 100644 --- a/gso/schedules/scheduling.py +++ b/gso/schedules/scheduling.py @@ -1,3 +1,5 @@ +"""Definition of the decorator that allows for scheduling tasks in :term:`GSO` that are to run periodically.""" + import inspect from collections.abc import Callable from functools import wraps diff --git a/gso/schedules/task_vacuum.py b/gso/schedules/task_vacuum.py index ef90479e..98e05343 100644 --- a/gso/schedules/task_vacuum.py +++ b/gso/schedules/task_vacuum.py @@ -1,3 +1,5 @@ +"""Metatask that runs all cleanup tasks.""" + from orchestrator.services.processes import start_process from gso.schedules.scheduling import scheduler @@ -7,4 +9,5 @@ from gso.worker import celery @celery.task @scheduler(name="Clean up tasks", hour="*/6") def vacuum_tasks() -> None: + """Run all cleanup tasks every 6 hours.""" start_process("task_clean_up_tasks") diff --git a/gso/schedules/validate_products.py b/gso/schedules/validate_products.py index 4140df8e..cb9ecc67 100644 --- a/gso/schedules/validate_products.py +++ b/gso/schedules/validate_products.py @@ -1,3 +1,5 @@ +"""Scheduled task that validates all products and inactive subscriptions in :term:`GSO`.""" + from orchestrator.services.processes import start_process from gso.schedules.scheduling import scheduler @@ -8,5 +10,6 @@ from gso.worker import celery @celery.task @scheduler(name="Validate Products and inactive subscriptions", minute="30", hour="2") def validate_products() -> None: + """Validate all products.""" if count_incomplete_validate_products() > 0: start_process("task_validate_products") diff --git a/gso/schedules/validate_subscriptions.py b/gso/schedules/validate_subscriptions.py index 78525caf..7c440435 100644 --- a/gso/schedules/validate_subscriptions.py +++ b/gso/schedules/validate_subscriptions.py @@ -1,3 +1,5 @@ +"""Scheduled task that runs a validation workflow for all active subscriptions.""" + import structlog from orchestrator.services.processes import get_execution_context from orchestrator.services.subscriptions import TARGET_DEFAULT_USABLE_MAP, WF_USABLE_MAP @@ -13,6 +15,7 @@ logger = structlog.get_logger(__name__) @celery.task @scheduler(name="Subscriptions Validator", minute="10", hour="0") def validate_subscriptions() -> None: + """Validate all subscriptions using their corresponding validation workflow.""" subscriptions = get_insync_subscriptions() if not subscriptions: logger.info("No subscriptions to validate") diff --git a/pyproject.toml b/pyproject.toml index 943f74b3..bcc10d8c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -42,6 +42,7 @@ ignore = [ "D213", "N805", "PLR0913", + "PLR0904" ] line-length = 120 select = [ -- GitLab