From 1d06e931a53d3050df95f04eb2fdee35393a0570 Mon Sep 17 00:00:00 2001 From: Fabian Schindler <fabian.schindler.strauss@gmail.com> Date: Fri, 26 Nov 2021 18:06:21 +0100 Subject: [PATCH] Fixing linting and flake8 issues --- registrar/backend/__init__.py | 10 ++-- registrar/backend/abc.py | 6 +- registrar/backend/eoxserver.py | 15 ++--- registrar/cli.py | 103 ++++++++++++++++++++------------- registrar/daemon.py | 19 +++--- registrar/post_handlers.py | 27 ++------- registrar/registrar.py | 24 ++++---- registrar/source.py | 21 +++---- registrar/xml.py | 5 +- 9 files changed, 109 insertions(+), 121 deletions(-) diff --git a/registrar/backend/__init__.py b/registrar/backend/__init__.py index f01ae69..dfb8615 100644 --- a/registrar/backend/__init__.py +++ b/registrar/backend/__init__.py @@ -17,12 +17,12 @@ def get_backends(config: dict) -> List[ItemBackend]: backends: List[ItemBackend] = [] for cfg_backend in config["backends"]: # construct backend - backend_cls = import_by_path(cfg_backend['path']) + backend_cls = import_by_path(cfg_backend["path"]) backends.append( backend_cls( - *cfg_backend.get('args', []), - **cfg_backend.get('kwargs', {}), + *cfg_backend.get("args", []), + **cfg_backend.get("kwargs", {}), ) ) @@ -40,9 +40,9 @@ def get_path_backends(config: dict) -> List[PathBackend]: carried out """ backends = [] - for cfg_backend in config['path_backends']: + for cfg_backend in config["path_backends"]: # construct backend - backend_cls = import_by_path(cfg_backend['path']) + backend_cls = import_by_path(cfg_backend["path"]) backends.append( backend_cls( diff --git a/registrar/backend/abc.py b/registrar/backend/abc.py index b0e3d94..98497ca 100644 --- a/registrar/backend/abc.py +++ b/registrar/backend/abc.py @@ -4,19 +4,17 @@ from typing import TYPE_CHECKING, Optional if TYPE_CHECKING: from pystac import Item -from ..source import Source - class ItemBackend(ABC): def __repr__(self) -> str: return f"<{self.__class__.__name__}>" @abstractmethod - def item_exists(self, item: 'Item') -> bool: + def item_exists(self, item: "Item") -> bool: ... @abstractmethod - def register_item(self, item: 'Item'): + def register_item(self, item: "Item"): ... @abstractmethod diff --git a/registrar/backend/eoxserver.py b/registrar/backend/eoxserver.py index 7caf137..afcda97 100644 --- a/registrar/backend/eoxserver.py +++ b/registrar/backend/eoxserver.py @@ -15,7 +15,7 @@ from urllib.parse import urlparse import django from django.db import transaction -# from django.db.models import Q +from django.db.models import Q if TYPE_CHECKING: from pystac import Item @@ -313,12 +313,11 @@ class EOxServerBackend(Backend): """ # ugly, ugly hack from eoxserver.resources.coverages import models + try: logger.info(f"Deregistering product '{identifier}'") product = models.Product.objects.get(identifier=identifier) - grids = list(models.Grid.objects.filter( - coverage__parent_product=product - )) + grids = list(models.Grid.objects.filter(coverage__parent_product=product)) product.delete() # clean up grids @@ -331,15 +330,11 @@ class EOxServerBackend(Backend): if grid and not grid.name and not grid_used: grid.delete() except models.Product.DoesNotExist: - logger.info( - f"No product with identifier '{identifier}' found" - ) + logger.info(f"No product with identifier '{identifier}' found") # no product found with that id # return empty list return None - logger.info( - f"Deregistered product with identifier '{identifier}'" - ) + logger.info(f"Deregistered product with identifier '{identifier}'") # return the deleted identifier return identifier diff --git a/registrar/cli.py b/registrar/cli.py index afe659b..be90037 100644 --- a/registrar/cli.py +++ b/registrar/cli.py @@ -1,14 +1,16 @@ from os.path import join, dirname import logging.config -from typing import TextIO import click import yaml import jsonschema from .registrar import ( - deregister_path, register_item, register_path, deregister_item, - deregister_identifier + deregister_path, + register_item, + register_path, + deregister_item, + deregister_identifier, ) from .daemon import run_daemon from .config import load_config @@ -48,23 +50,33 @@ def cli(): pass -@cli.command(help='Run the registrar daemon, attaching to a Redis queue') -@click.option('--config-file', type=click.File('r')) -@click.option('--validate', is_flag=True) -@click.option('--replace', is_flag=True) -@click.option('--host', type=str) -@click.option('--port', type=int) -@click.option('--listen-queue', type=str) -@click.option('--deregister-queue', type=str) -@click.option('--progress-set', type=str) -@click.option('--failure-set', type=str) -@click.option('--success-set', type=str) -@click.option('--extra/-e', type=str, multiple=True, default=[]) -@click.option('--debug', is_flag=True) -def daemon(config_file=None, validate=False, replace=False, host=None, - port=None, listen_queue=None, progress_set=None, - failure_set=None, success_set=None, - deregister_queue=None, extra=None, debug=False): +@cli.command(help="Run the registrar daemon, attaching to a Redis queue") +@click.option("--config-file", type=click.File("r")) +@click.option("--validate", is_flag=True) +@click.option("--replace", is_flag=True) +@click.option("--host", type=str) +@click.option("--port", type=int) +@click.option("--listen-queue", type=str) +@click.option("--deregister-queue", type=str) +@click.option("--progress-set", type=str) +@click.option("--failure-set", type=str) +@click.option("--success-set", type=str) +@click.option("--extra/-e", type=str, multiple=True, default=[]) +@click.option("--debug", is_flag=True) +def daemon( + config_file=None, + validate=False, + replace=False, + host=None, + port=None, + listen_queue=None, + progress_set=None, + failure_set=None, + success_set=None, + deregister_queue=None, + extra=None, + debug=False, +): """ Run the registrar daemon to listen on the given queues and execute the (de-)registrations commands. @@ -96,25 +108,33 @@ def daemon(config_file=None, validate=False, replace=False, host=None, handlers[deregister_queue] = deregister_item for extra_handler in extra: - queue, _, path = extra_handler.partition('=') + queue, _, path = extra_handler.partition("=") handler = import_by_path(path.strip()) handlers[queue.strip()] = handler run_daemon( - config, replace, host, port, handlers, progress_set, - failure_set, success_set, deregister_queue + config, + replace, + host, + port, + handlers, + progress_set, + failure_set, + success_set, + deregister_queue, ) -@cli.command(help='Run a single, one-off registration') -@click.argument('item', type=str) -@click.option('--config-file', type=click.File('r')) -@click.option('--is-path', is_flag=True) -@click.option('--validate', is_flag=True) -@click.option('--replace', is_flag=True) -@click.option('--debug', is_flag=True) -def register(item, is_path=False, config_file=None, validate=False, - replace=False, debug=False): +@cli.command(help="Run a single, one-off registration") +@click.argument("item", type=str) +@click.option("--config-file", type=click.File("r")) +@click.option("--is-path", is_flag=True) +@click.option("--validate", is_flag=True) +@click.option("--replace", is_flag=True) +@click.option("--debug", is_flag=True) +def register( + item, is_path=False, config_file=None, validate=False, replace=False, debug=False +): setup_logging(debug) config = load_config(config_file) if validate: @@ -126,14 +146,15 @@ def register(item, is_path=False, config_file=None, validate=False, register_path(config, item, replace) -@cli.command(help='Run a single, one-off de-registration') -@click.argument('--path', type=str) -@click.argument('--identifier', type=str) -@click.option('--config-file', type=click.File('r')) -@click.option('--validate', is_flag=True) -@click.option('--debug', is_flag=True) -def deregister(file_path=None, identifier=None, config_file=None, - validate=False, debug=False): +@cli.command(help="Run a single, one-off de-registration") +@click.argument("--path", type=str) +@click.argument("--identifier", type=str) +@click.option("--config-file", type=click.File("r")) +@click.option("--validate", is_flag=True) +@click.option("--debug", is_flag=True) +def deregister( + file_path=None, identifier=None, config_file=None, validate=False, debug=False +): setup_logging(debug) config = load_config(config_file) if validate: @@ -145,5 +166,5 @@ def deregister(file_path=None, identifier=None, config_file=None, deregister_identifier(config, identifier) -if __name__ == '__main__': +if __name__ == "__main__": cli() diff --git a/registrar/daemon.py b/registrar/daemon.py index 878bb32..1ee95e6 100644 --- a/registrar/daemon.py +++ b/registrar/daemon.py @@ -19,10 +19,17 @@ logger = logging.getLogger(__name__) QueueItemHandler = Callable[[dict, str, bool], None] -def run_daemon(config: dict, replace: bool, host: str, port: int, - handlers: Dict[str, QueueItemHandler], - progress_set: str, failure_set: str, success_set: str): - """ Run the registrar daemon, listening on a redis queue +def run_daemon( + config: dict, + replace: bool, + host: str, + port: int, + handlers: Dict[str, QueueItemHandler], + progress_set: str, + failure_set: str, + success_set: str, +): + """Run the registrar daemon, listening on a redis queue for items to be (de-)registered. Args: @@ -41,9 +48,7 @@ def run_daemon(config: dict, replace: bool, host: str, port: int, """ # initialize the queue client - client = redis.Redis( - host=host, port=port, charset="utf-8", decode_responses=True - ) + client = redis.Redis(host=host, port=port, charset="utf-8", decode_responses=True) queue_names = list(handlers.keys()) logger.debug( f"waiting on items on redis " diff --git a/registrar/post_handlers.py b/registrar/post_handlers.py index 23ee9d3..9b10758 100644 --- a/registrar/post_handlers.py +++ b/registrar/post_handlers.py @@ -34,9 +34,7 @@ class ReportingPostHandler: def __call__(self, config: dict, item: "Item"): inserted = datetime.now() timestamp = inserted.strftime("%Y%m%dT%H%M%S") - sanitized_filename = self.sanitize_path( - f'item_{timestamp}_{item.id}.xml' - ) + sanitized_filename = self.sanitize_path(f"item_{timestamp}_{item.id}.xml") filename = os.path.join(self.reporting_dir, sanitized_filename) logger.info(f"Generating report for product {item.id} at {filename}") @@ -76,23 +74,6 @@ class ReportingPostHandler: <Service>WMS</Service> <URL>{wms_capabilities_url}</URL> </URL> -</DataAccessItem>\ -""".format( - identifier=escape(item.id), - availability_time=escape(isoformat(inserted)), - wcs_capabilities_url=escape( - '%s/ows?service=wcs&request=GetCapabilities' - '&cql=identifier="%s_%s"' - % ( - self.service_url, item.id, [ - i - for i in item.assets.keys() if i != "gsc_metadata" - ][0] - ) - ), - wms_capabilities_url=escape( - '%s/ows?service=wms&request=GetCapabilities' - '&cql=identifier="%s"' - % (self.service_url, item.id) - ), - ))) +</DataAccessItem>""" + ) + ) diff --git a/registrar/registrar.py b/registrar/registrar.py index f4de201..6608887 100644 --- a/registrar/registrar.py +++ b/registrar/registrar.py @@ -90,9 +90,7 @@ def register_path(config: dict, path: str, replace: bool = False): logger.info(f"Replacing '{path!r}'.") backend.register_path(source, path, replace=True) else: - raise RegistrationError( - f'Path {path!r} is already registered' - ) + raise RegistrationError(f"Path {path!r} is already registered") else: logger.info(f"Registering '{path!r}'.") backend.register_path(source, path, replace=False) @@ -105,8 +103,7 @@ def register_path(config: dict, path: str, replace: bool = False): post_handler(config, path) logger.info( - f"Successfully {'replaced' if replace else 'registered'} " - f"'{path!r}'" + f"Successfully {'replaced' if replace else 'registered'} " f"'{path!r}'" ) @@ -121,8 +118,7 @@ def deregister_identifier(config, identifier: str, _: bool = False): return _deregister_identifier(config, identifier) -def _deregister_identifier(config, identifier: str, - item: Optional[dict] = None): +def _deregister_identifier(config, identifier: str, item: Optional[dict] = None): for pre_handler in get_deregister_pre_handlers(config): pre_handler(config, identifier, item) @@ -187,15 +183,15 @@ def get_error_handlers(config): def get_path_pre_handlers(config): - return _get_handlers(config, 'path_pre_handlers') + return _get_handlers(config, "path_pre_handlers") def get_path_post_handlers(config): - return _get_handlers(config, 'path_post_handlers') + return _get_handlers(config, "path_post_handlers") def get_path_error_handlers(config): - return _get_handlers(config, 'path_error_handlers') + return _get_handlers(config, "path_error_handlers") def get_deregister_pre_handlers(config): @@ -207,16 +203,16 @@ def get_deregister_post_handlers(config): def get_deregister_error_handlers(config): - return _get_handlers(config, 'deregister_error_handlers') + return _get_handlers(config, "deregister_error_handlers") def get_deregister_path_pre_handlers(config): - return _get_handlers(config, 'deregister_path_pre_handlers') + return _get_handlers(config, "deregister_path_pre_handlers") def get_deregister_path_post_handlers(config): - return _get_handlers(config, 'deregister_path_post_handlers') + return _get_handlers(config, "deregister_path_post_handlers") def get_deregister_path_error_handlers(config): - return _get_handlers(config, 'deregister_path_error_handlers') + return _get_handlers(config, "deregister_path_error_handlers") diff --git a/registrar/source.py b/registrar/source.py index 2373b7f..5c6ea54 100644 --- a/registrar/source.py +++ b/registrar/source.py @@ -12,7 +12,6 @@ import shutil from glob import glob from fnmatch import fnmatch import logging -from urllib.parse import urlparse from typing import TYPE_CHECKING, Optional from abc import ABC, abstractmethod @@ -36,13 +35,13 @@ class RegistrationError(Exception): pass -class Source: +class Source(ABC): def __init__(self, name: str = None, endpoint_url: str = ""): self.name = name self.endpoint_url = endpoint_url def __repr__(self) -> str: - return f'<{self.__class__.__name__} name={self.name}>' + return f"<{self.__class__.__name__} name={self.name}>" @abstractmethod def get_container_and_path(self, path: str): @@ -382,10 +381,8 @@ def get_source(config: dict, item: "Item") -> Source: # no source found raise RegistrationError(f"Could not find a suitable source for {item!r}") - return SOURCE_TYPES[cfg_source['type']]( - cfg_source['name'], - *cfg_source.get('args', []), - **cfg_source.get('kwargs', {}) + return SOURCE_TYPES[cfg_source["type"]]( + cfg_source["name"], *cfg_source.get("args", []), **cfg_source.get("kwargs", {}) ) @@ -402,20 +399,18 @@ def get_source_from_path(config, path: str) -> Optional[Source]: Returns: Source: source of the data """ - cfg_sources = config['sources'] + cfg_sources = config["sources"] for cfg_source in cfg_sources: - if cfg_source.get('filter'): - f = cfg_source.get('filter') + if cfg_source.get("filter"): + f = cfg_source.get("filter") if any(filter(lambda item: re.match(f, item), path)): break else: break else: # no source found - raise RegistrationError( - f'Could not find a suitable source for {path!r}' - ) + raise RegistrationError(f"Could not find a suitable source for {path!r}") return SOURCE_TYPES[cfg_source["type"]]( cfg_source["name"], *cfg_source.get("args", []), **cfg_source.get("kwargs", {}) diff --git a/registrar/xml.py b/registrar/xml.py index 571d2ae..e22fc2d 100644 --- a/registrar/xml.py +++ b/registrar/xml.py @@ -41,10 +41,7 @@ def parse_metadata_schema( ) -> dict: out = {} for key, param in schema.items(): - values = tree.xpath( - param.xpath, - namespaces=param.namespaces or namespaces - ) + values = tree.xpath(param.xpath, namespaces=param.namespaces or namespaces) if param.multi: value = [param.parser(v) if param.parser else v for v in values] else: -- GitLab