diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index b07c89f..f80d421 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -11,17 +11,17 @@ repos: args: ['--in-place', '--remove-all-unused-imports', '--remove-unused-variable'] exclude: ".*(.fits|.fts|.fit|.txt|tca.*|extern.*|.rst|.md|docs/conf.py)$" - repo: https://github.com/charliermarsh/ruff-pre-commit - rev: 'v0.1.6' + rev: 'v0.1.9' hooks: - id: ruff args: ['--fix', '--unsafe-fixes'] - repo: https://github.com/psf/black - rev: 23.11.0 + rev: 23.12.1 hooks: - id: black exclude: ".*(.fits|.fts|.fit|.txt|.csv)$" - repo: https://github.com/PyCQA/isort - rev: 5.12.0 + rev: 5.13.2 hooks: - id: isort exclude: ".*(.fits|.fts|.fit|.txt|.csv)$" diff --git a/docs/conf.py b/docs/conf.py index bdf1191..d924abd 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -14,7 +14,6 @@ project = "drms" author = "The SunPy Project" copyright = f"{datetime.datetime.now().year}, {author}" # NOQA: A001 - # The full version, including alpha/beta/rc tags release = __version__ is_development = ".dev" in __version__ @@ -37,25 +36,14 @@ "sphinx.ext.todo", "sphinx.ext.viewcode", ] - -# Set automodapi to generate files inside the generated directory automodapi_toctreedirnm = "generated/api" -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -# This pattern also affects html_static_path and html_extra_path. exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] -# The suffix(es) of source filenames. -# You can specify multiple suffix as a list of string: source_suffix = ".rst" -# The master toctree document. master_doc = "index" -# The reST default role (used for this markup: `text`) to use for all -# documents. Set to the "smart" one. default_role = "obj" # -- Options for hoverxref ----------------------------------------------------- if os.environ.get("READTHEDOCS"): - # Building on Read the Docs hoverxref_api_host = "https://readthedocs.org" if os.environ.get("PROXIED_API_ENDPOINT"): # Use the proxied API endpoint @@ -65,7 +53,6 @@ hoverxref_tooltip_maxwidth = 600 # RTD main window is 696px hoverxref_auto_ref = True hoverxref_mathjax = True -# hoverxref has to be applied to these hoverxref_domains = ["py"] hoverxref_role_types = { # roles with py domain @@ -111,7 +98,9 @@ } # -- Options for HTML output ------------------------------------------------- -# Render inheritance diagrams in SVG +# JSOC email os env +# see https://github.com/sunpy/sunpy/wiki/Home:-JSOC +os.environ["JSOC_EMAIL"] = "jsoc@sunpy.org" graphviz_output_format = "svg" sphinx_gallery_conf = { "backreferences_dir": Path("generated") / "modules", diff --git a/drms/__init__.py b/drms/__init__.py index cd8a478..c911283 100644 --- a/drms/__init__.py +++ b/drms/__init__.py @@ -9,14 +9,17 @@ * Homepage: https://github.com/sunpy/drms * Documentation: https://docs.sunpy.org/projects/drms/en/stable/ """ +import logging from pathlib import Path -from .client import Client, ExportRequest, SeriesInfo -from .config import ServerConfig, register_server -from .exceptions import DrmsError, DrmsExportError, DrmsOperationNotSupported, DrmsQueryError -from .json import HttpJsonClient, HttpJsonRequest, JsocInfoConstants -from .utils import to_datetime -from .version import version as __version__ +logger = logging.getLogger(__name__) + +from .client import Client, ExportRequest, SeriesInfo # NOQA: E402 +from .config import ServerConfig, register_server # NOQA: E402 +from .exceptions import DrmsError, DrmsExportError, DrmsOperationNotSupported, DrmsQueryError # NOQA: E402 +from .json import HttpJsonClient, HttpJsonRequest, JsocInfoConstants # NOQA: E402 +from .utils import to_datetime # NOQA: E402 +from .version import version as __version__ # NOQA: E402 def _get_bibtex(): @@ -53,4 +56,5 @@ def _get_bibtex(): "SeriesInfo", "ServerConfig", "to_datetime", + "logger", ] diff --git a/drms/client.py b/drms/client.py index 9874a5f..4794afd 100644 --- a/drms/client.py +++ b/drms/client.py @@ -1,7 +1,6 @@ import os import re import time -import logging from pathlib import Path from collections import OrderedDict from urllib.error import URLError, HTTPError @@ -11,6 +10,8 @@ import numpy as np import pandas as pd +from drms import logger + from .exceptions import DrmsExportError, DrmsOperationNotSupported, DrmsQueryError from .json import HttpJsonClient from .utils import _extract_series_name, _pd_to_numeric_coerce, _split_arg @@ -455,7 +456,7 @@ def wait(self, *, timeout=None, sleep=5, retries_notfound=5): while True: idstr = str(None) if self._requestid is None else (f"{self._requestid}") - logging.info(f"Export request pending. [id={idstr}, status={self._status}]") + logger.info(f"Export request pending. [id={idstr}, status={self._status}]") # Use the user-provided sleep value or the server's wait value. # In case neither is available, wait for 5 seconds. @@ -471,7 +472,7 @@ def wait(self, *, timeout=None, sleep=5, retries_notfound=5): if t_start + timeout + wait_secs - time.time() < 0: return False - logging.info(f"Waiting for {int(round(wait_secs))} seconds...") + logger.info(f"Waiting for {int(round(wait_secs))} seconds...") time.sleep(wait_secs) if self.has_finished(): @@ -481,7 +482,7 @@ def wait(self, *, timeout=None, sleep=5, retries_notfound=5): # Raise exception, if no retries are left. if retries_notfound <= 0: self._raise_on_error(notfound_ok=False) - logging.info(f"Request not found on server, {retries_notfound} retries left.") + logger.info(f"Request not found on server, {retries_notfound} retries left.") retries_notfound -= 1 def download(self, directory, *, index=None, fname_from_rec=None): @@ -565,18 +566,18 @@ def download(self, directory, *, index=None, fname_from_rec=None): fpath = Path(out_dir) / filename fpath_new = self._next_available_filename(fpath) fpath_tmp = self._next_available_filename(f"{fpath_new}.part") - logging.info(f"Downloading file {int(i + 1)} of {int(ndata)}...") - logging.info(f" record: {di.record}") - logging.info(f" filename: {di.filename}") + logger.info(f"Downloading file {int(i + 1)} of {int(ndata)}...") + logger.info(f" record: {di.record}") + logger.info(f" filename: {di.filename}") try: urlretrieve(di.url, fpath_tmp) except (HTTPError, URLError): fpath_new = None - logging.info(" -> Error: Could not download file") + logger.info(" -> Error: Could not download file") else: fpath_new = self._next_available_filename(fpath) Path(fpath_tmp).rename(fpath_new) - logging.info(f" -> {os.path.relpath(fpath_new)}") + logger.info(f" -> {os.path.relpath(fpath_new)}") downloads.append(fpath_new) res = data[["record", "url"]].copy() @@ -650,7 +651,7 @@ def _generate_filenamefmt(self, sname): si = self.info(sname) except Exception as e: # NOQA: BLE001 # Cannot generate filename format for unknown series. - logging.warning(f"Cannot generate filename format for unknown series '{sname}' with {e}") + logger.warning(f"Cannot generate filename format for unknown series '{sname}' with {e}") return None pkfmt_list = [] @@ -700,7 +701,7 @@ def _filename_from_export_record(self, rs, *, old_fname=None): si = self.info(sname) except Exception as e: # NOQA: BLE001 # Cannot generate filename for unknown series. - logging.warning(f"Cannot generate filename format for unknown series '{sname}' with {e}") + logger.warning(f"Cannot generate filename format for unknown series '{sname}' with {e}") return None if pkeys is not None: diff --git a/drms/json.py b/drms/json.py index a909997..c5ceb96 100644 --- a/drms/json.py +++ b/drms/json.py @@ -1,9 +1,10 @@ import json as _json -import logging from enum import Enum from urllib.parse import urlencode, quote_plus from urllib.request import HTTPError, urlopen +from drms import logger + from .config import ServerConfig, _server_configs from .utils import _split_arg @@ -86,7 +87,7 @@ def __repr__(self): return f"" def _json_request(self, url): - logging.info(url) + logger.info(url) return HttpJsonRequest(url, self._server.encoding) @property diff --git a/drms/main.py b/drms/main.py index 3102a7b..162321c 100644 --- a/drms/main.py +++ b/drms/main.py @@ -1,5 +1,4 @@ import sys -import logging import argparse @@ -7,15 +6,13 @@ def main(): import drms args = parse_args(sys.argv[1:]) - # Create a Client instance client = drms.Client(server=args.server, email=args.email) - logging.info(f"client: {client}") + drms.logger.info(f"client: {client}") def parse_args(args): import drms - # Handle command line options parser = argparse.ArgumentParser(description="drms, access HMI, AIA and MDI data with python") parser.add_argument( "--version",