Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions .cruft.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"template": "https://github.com/sunpy/package-template",
"commit": "7b0225e0a206b7b6249752991334dea7e9ffcfd4",
"commit": "4ca8e60aac805d5f736de80c45ae0aba96b4cb85",
"checkout": null,
"context": {
"cookiecutter": {
Expand All @@ -16,7 +16,8 @@
"enable_dynamic_dev_versions": "y",
"include_example_code": "n",
"include_cruft_update_github_workflow": "y",
"_sphinx_theme": "alabaster",
"use_extended_ruff_linting": "y",
"_sphinx_theme": "sunpy",
"_parent_project": "",
"_install_requires": "",
"_copy_without_render": [
Expand Down
50 changes: 32 additions & 18 deletions .github/workflows/sub_package_update.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,6 @@ jobs:
runs-on: ubuntu-latest
strategy:
fail-fast: true
matrix:
include:
- add-paths: .
body: apply the changes to this repo.
branch: cruft/update
commit-message: "Automatic package template update"
title: Updates from the package template

steps:
- uses: actions/checkout@v4

Expand All @@ -37,7 +29,7 @@ jobs:
python-version: "3.11"

- name: Install Cruft
run: python -m pip install git+https://github.com/Cadair/cruft@patch-p1
run: python -m pip install cruft

- name: Check if update is available
continue-on-error: false
Expand All @@ -55,25 +47,47 @@ jobs:
echo "has_changes=$CHANGES" >> "$GITHUB_OUTPUT"

- name: Run update if available
id: cruft_update
if: steps.check.outputs.has_changes == '1'
run: |
git config --global user.email "${{ github.actor }}@users.noreply.github.com"
git config --global user.name "${{ github.actor }}"

cruft update --skip-apply-ask --refresh-private-variables
cruft_output=$(cruft update --skip-apply-ask --refresh-private-variables)
echo $cruft_output
git restore --staged .

- name: Create pull request
if [[ "$cruft_output" == *"Failed to cleanly apply the update, there may be merge conflicts."* ]]; then
echo merge_conflicts=1 >> $GITHUB_OUTPUT
else
echo merge_conflicts=0 >> $GITHUB_OUTPUT
fi

- name: Check if only .cruft.json is modified
id: cruft_json
if: steps.check.outputs.has_changes == '1'
run: |
git status --porcelain=1
if [[ "$(git status --porcelain=1)" == " M .cruft.json" ]]; then
echo "Only .cruft.json is modified. Exiting workflow early."
echo "has_changes=0" >> "$GITHUB_OUTPUT"
else
echo "has_changes=1" >> "$GITHUB_OUTPUT"
fi

- name: Create pull request
if: steps.cruft_json.outputs.has_changes == '1'
uses: peter-evans/create-pull-request@v7
with:
token: ${{ secrets.GITHUB_TOKEN }}
add-paths: ${{ matrix.add-paths }}
commit-message: ${{ matrix.commit-message }}
branch: ${{ matrix.branch }}
add-paths: "."
commit-message: "Automatic package template update"
branch: "cruft/update"
delete-branch: true
branch-suffix: timestamp
title: ${{ matrix.title }}
draft: ${{ steps.cruft_update.outputs.merge_conflicts == '1' }}
title: "Updates from the package template"
body: |
This is an autogenerated PR, which will ${{ matrix.body }}.
[Cruft](https://cruft.github.io/cruft/) has detected updates from the Package Template
This is an autogenerated PR, which will applies the latest changes from the [SunPy Package Template](https://github.com/sunpy/package-template).
If this pull request has been opened as a draft there are conflicts which need fixing.

**To run the CI on this pull request you will need to close it and reopen it.**
2 changes: 1 addition & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
repos:
# This should be before any formatting hooks like isort
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: "v0.6.9"
rev: "v0.7.0"
hooks:
- id: ruff
args: ["--fix"]
Expand Down
89 changes: 71 additions & 18 deletions .ruff.toml
Original file line number Diff line number Diff line change
@@ -1,38 +1,91 @@
target-version = "py310"
line-length = 110
exclude = [
".git,",
"__pycache__",
"build",
"sunpy_soar/version.py",
"tools/**",
line-length = 120
exclude=[
".git,",
"__pycache__",
"build",
"tools/**",
]

[lint]
select = ["E", "F", "W", "UP", "PT"]
select = [
"E",
"F",
"W",
"N",
"UP",
"PT",
"BLE",
"A",
"C4",
"INP",
"PIE",
"T20",
"RET",
"TID",
"PTH",
"PD",
"PLC",
"PLE",
"FLY",
"NPY",
"PERF",
"RUF",
]

extend-ignore = [
# pycodestyle (E, W)
"E501", # LineTooLong # TODO! fix
"E501", # ignore line length will use a formatter instead
# pyupgrade (UP)
"UP038", # Use | in isinstance - not compatible with models and is slower
# pytest (PT)
"PT001", # Always use pytest.fixture()
"PT004", # Fixtures which don't return anything should have leading _
"PT007", # Parametrize should be lists of tuples # TODO! fix
"PT011", # Too broad exception assert # TODO! fix
"PT023", # Always use () on pytest decorators
# flake8-pie (PIE)
"PIE808", # Disallow passing 0 as the first argument to range
# flake8-use-pathlib (PTH)
"PTH123", # open() should be replaced by Path.open()
# Ruff (RUF)
"RUF003", # Ignore ambiguous quote marks, doesn't allow ' in comments
"RUF012", # Mutable class attributes should be annotated with `typing.ClassVar`
"RUF013", # PEP 484 prohibits implicit `Optional`
"RUF015", # Prefer `next(iter(...))` over single element slice
]

[lint.per-file-ignores]
# Part of configuration, not a package.
"setup.py" = ["INP001"]
"conftest.py" = ["INP001"]
"examples/*.py" = [
"INP001", # Implicit namespace package
"T201", # Use print
"B018", # Not print but display
"ERA001", # Commented out code
]
"setup.py" = [
"INP001", # File is part of an implicit namespace package.
]
"conftest.py" = [
"INP001", # File is part of an implicit namespace package.
]
"docs/conf.py" = [
"E402" # Module imports not at top of file
"E402", # Module imports not at top of file
"INP001", # conf.py is part of an implicit namespace package
]
"docs/*.py" = [
"INP001", # Implicit-namespace-package. The examples are not a package.
"INP001", # File is part of an implicit namespace package.
]
"examples/**.py" = [
"T201", # allow use of print in examples
"INP001", # File is part of an implicit namespace package.
]
"__init__.py" = [
"E402", # Module level import not at top of cell
"F401", # Unused import
"F403", # from {name} import * used; unable to detect undefined names
"F405", # {name} may be undefined, or defined from star imports
]
"test_*.py" = [
"E402", # Module level import not at top of cell
]
"__init__.py" = ["E402", "F401", "F403"]
"test_*.py" = ["B011", "D", "E402", "PGH001", "S101"]

[lint.pydocstyle]
convention = "numpy"
Expand Down
28 changes: 25 additions & 3 deletions docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@
# The full version, including alpha/beta/rc tags
from sunpy_soar import __version__

# -- Project information -----------------------------------------------------


_version = Version(__version__)
version = release = str(_version)
# Avoid "post" appearing in version string in rendered docs
Expand All @@ -26,7 +29,7 @@
is_release = not(_version.is_prerelease or _version.is_devrelease)

project = "sunpy-soar"
copyright = f"{datetime.datetime.now().year}, The SunPy Community" # NOQA: A001, DTZ005
copyright = f"{datetime.datetime.now().year}, The SunPy Community" # noqa: A001
author = "The SunPy Community"

# -- General configuration ---------------------------------------------------
Expand All @@ -50,7 +53,7 @@
]

# Add any paths that contain templates here, relative to this directory.
# templates_path = ["_templates"] # NOQA: ERA001
# templates_path = ["_templates"]

# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
Expand All @@ -67,6 +70,9 @@
# Treat everything in single ` as a Python reference.
default_role = "py:obj"

# Treat everything in single ` as a Python reference.
default_role = "py:obj"

# -- Options for intersphinx extension ---------------------------------------

intersphinx_mapping = {
Expand All @@ -91,6 +97,22 @@
"parfive": ("https://parfive.readthedocs.io/en/stable/", None),
}

# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
html_theme = "sunpy"

# Render inheritance diagrams in SVG
graphviz_output_format = "svg"

graphviz_dot_args = [
"-Nfontsize=10",
"-Nfontname=Helvetica Neue, Helvetica, Arial, sans-serif",
"-Efontsize=10",
"-Efontname=Helvetica Neue, Helvetica, Arial, sans-serif",
"-Gfontsize=10",
"-Gfontname=Helvetica Neue, Helvetica, Arial, sans-serif",
]

# -- Options for HTML output -------------------------------------------------

# The theme to use for HTML and HTML Help pages. See the documentation for
Expand All @@ -112,7 +134,7 @@
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
# html_static_path = ["_static"] # NOQA: ERA001
# html_static_path = ["_static"]

# By default, when rendering docstrings for classes, sphinx.ext.autodoc will
# make docs with the class-level docstring and the class-method docstrings,
Expand Down
1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ tests = [
"responses>=0.20.0",
"sunpy[map,net]>=6.0.0",
]

docs = [
"sphinx",
"sphinx-automodapi",
Expand Down
10 changes: 4 additions & 6 deletions sunpy_soar/_dev/scm_version.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,8 @@
try:
from setuptools_scm import get_version

version = get_version(root=Path("..") / "..", relative_to=__file__)
except ImportError as e:
msg = "setuptools_scm not installed"
raise ImportError(msg) from e
version = get_version(root=Path('../..'), relative_to=__file__)
except ImportError:
raise
except Exception as e:
msg = f"setuptools_scm broken with {e}"
raise ValueError(msg) from e
raise ValueError('setuptools_scm can not determine version.') from e
20 changes: 10 additions & 10 deletions sunpy_soar/attrs.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ class Distance(Range):
"""

@quantity_input(dist_min=u.m, dist_max=u.m)
def __init__(self, dist_min: u.Quantity, dist_max: u.Quantity): # NOQA: ANN204
def __init__(self, dist_min: u.Quantity, dist_max: u.Quantity):
# Ensure both dist_min and dist_max are scalar values
if not all([dist_min.isscalar, dist_max.isscalar]):
msg = "Both dist_min and dist_max must be scalar values."
Expand Down Expand Up @@ -133,14 +133,14 @@ def apply_and(wlk, and_attr, params) -> None:


@walker.add_applier(a.Time)
def _(wlk, attr, params) -> None: # NOQA: ARG001
def _(wlk, attr, params) -> None:
start = attr.start.strftime("%Y-%m-%d %H:%M:%S")
end = attr.end.strftime("%Y-%m-%d %H:%M:%S")
params.append(f"begin_time>='{start}' AND begin_time<='{end}'")


@walker.add_applier(a.Level)
def _(wlk, attr, params) -> None: # NOQA: ARG001
def _(wlk, attr, params) -> None:
level = attr.value
if isinstance(level, int):
level = f"L{level}"
Expand All @@ -158,39 +158,39 @@ def _(wlk, attr, params) -> None: # NOQA: ARG001


@walker.add_applier(a.Instrument)
def _(wlk, attr, params) -> None: # NOQA: ARG001
def _(wlk, attr, params) -> None:
params.append(f"instrument='{attr.value}'")


@walker.add_applier(Product)
def _(wlk, attr, params) -> None: # NOQA: ARG001
def _(wlk, attr, params) -> None:
params.append(f"descriptor='{attr.value}'")


@walker.add_applier(a.Provider)
def _(wlk, attr, params) -> None: # NOQA: ARG001
def _(wlk, attr, params) -> None:
params.append(f"provider='{attr.value}'")


@walker.add_applier(SOOP)
def _(wlk, attr, params) -> None: # NOQA: ARG001
def _(wlk, attr, params) -> None:
params.append(f"soop_name='{attr.value}'")


@walker.add_applier(a.Detector)
def _(wlk, attr, params) -> None: # NOQA: ARG001
def _(wlk, attr, params) -> None:
params.append(f"Detector='{attr.value}'")


@walker.add_applier(a.Wavelength)
def _(wlk, attr, params) -> None: # NOQA: ARG001
def _(wlk, attr, params) -> None:
wavemin = attr.min.value
wavemax = attr.max.value
params.append(f"Wavemin='{wavemin}' AND Wavemax='{wavemax}'")


@walker.add_applier(Distance)
def _(wlk, attr, params): # NOQA: ARG001
def _(wlk, attr, params):
# The `Distance` attribute is used to filter the query by solar distance
# without relying on a specific distance column. It is commonly used
# to filter the query without time consideration.
Expand Down
Loading