Skip to content
Open
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
3 changes: 3 additions & 0 deletions .github/workflows/makefile.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@ jobs:
# Pages
run: uv sync --extra-index-url https://apsis-scheduler.github.io/procstar/simple

- name: Check Python linting
run: uv run ruff check

- name: Check Python formatting
run: uv run ruff format --check --diff

Expand Down
4 changes: 4 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@ repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.8.4
hooks:
- id: ruff
name: ruff check
args: [--fix]
types: [python]
- id: ruff-format
name: ruff format
description: Format Python code
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ testpaths = "test"
markers = ["local_ssh"]

[tool.ruff]
lint.select = ["F"]
lint.select = ["I"]
line-length = 100

[tool.bumpversion]
Expand Down
5 changes: 3 additions & 2 deletions python/apsis/actions/__init__.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import logging

from apsis import runs
from apsis.lib.json import check_schema

from .base import Action
from .condition import Condition
from .schedule import ScheduleAction
from apsis import runs
from apsis.lib.json import check_schema

log = logging.getLogger(__name__)

Expand Down
3 changes: 2 additions & 1 deletion python/apsis/actions/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@
import concurrent.futures
import logging

from .condition import Condition
from apsis.lib import py
from apsis.lib.json import TypedJso, check_schema

from .condition import Condition

log = logging.getLogger(__name__)

# -------------------------------------------------------------------------------
Expand Down
2 changes: 1 addition & 1 deletion python/apsis/actions/condition.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from apsis.lib.json import check_schema
from apsis.lib import py
from apsis.lib.json import check_schema
from apsis.states import State, states_from_jso, states_to_jso

# -------------------------------------------------------------------------------
Expand Down
7 changes: 4 additions & 3 deletions python/apsis/actions/schedule.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import logging

from .base import BaseAction
from .condition import Condition
from apsis.lib.json import check_schema
from apsis.runs import template_expand, Instance
from apsis.runs import Instance, template_expand
from apsis.states import State

from .base import BaseAction
from .condition import Condition

log = logging.getLogger(__name__)

# -------------------------------------------------------------------------------
Expand Down
5 changes: 3 additions & 2 deletions python/apsis/actions/test.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,12 @@

import logging

from .base import BaseAction, ThreadAction
from .condition import Condition
from apsis.lib import py
from apsis.lib.json import check_schema

from .base import BaseAction, ThreadAction
from .condition import Condition

log = logging.getLogger(__name__)

# -------------------------------------------------------------------------------
Expand Down
30 changes: 18 additions & 12 deletions python/apsis/apsis.py
Original file line number Diff line number Diff line change
@@ -1,32 +1,38 @@
import asyncio
from functools import partial
import gc
import logging
import math
from mmap import PAGESIZE
from ora import now, Time
import resource
import sys
import traceback
from functools import partial
from mmap import PAGESIZE

from ora import Time, now

from . import procstar
from . import procstar, runs
from .actions import Action
from .cond.base import PolledCondition, RunStoreCondition, NonmonotonicRunStoreCondition
from .cond.base import NonmonotonicRunStoreCondition, PolledCondition, RunStoreCondition
from .host_group import config_host_groups
from .jobs import Jobs, load_jobs_dir, diff_jobs_dirs
from .jobs import Jobs, diff_jobs_dirs, load_jobs_dir
from .lib.api import run_to_summary_jso
from .lib.asyn import TaskGroup, Publisher, KeyPublisher
from .lib.asyn import KeyPublisher, Publisher, TaskGroup
from .lib.py import more_gc_stats
from .lib.sys import to_signal
from .output import OutputStore
from .program.base import _InternalProgram
from .program.base import Output, OutputMetadata
from . import runs
from .program.base import Output, OutputMetadata, _InternalProgram
from .run_log import RunLog
from .run_snapshot import snapshot_run
from .running import _process_updates
from .runs import Run, RunStore, RunError, MissingArgumentError, ExtraArgumentError
from .runs import validate_args, bind
from .runs import (
ExtraArgumentError,
MissingArgumentError,
Run,
RunError,
RunStore,
bind,
validate_args,
)
from .scheduled import ScheduledRuns
from .scheduler import Scheduler, get_insts_to_schedule
from .service import messages
Expand Down
2 changes: 1 addition & 1 deletion python/apsis/check.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

from apsis.cond.dependency import Dependency
from apsis.jobs import Jobs
from apsis.runs import Instance, Run, is_template, validate_args, bind
from apsis.runs import Instance, Run, bind, is_template, validate_args
from apsis.scheduler import get_insts_to_schedule

# -------------------------------------------------------------------------------
Expand Down
5 changes: 3 additions & 2 deletions python/apsis/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,20 @@

import asyncio
import logging
from ora import now, Time
import random
import sys

import ujson
import yaml
from ora import Time, now

import apsis.cmdline
import apsis.jobs
import apsis.lib.argparse
import apsis.lib.itr
import apsis.lib.logging
from apsis.states import State
import apsis.service.client
from apsis.states import State

log = logging.getLogger(__name__)

Expand Down
6 changes: 3 additions & 3 deletions python/apsis/cmdline.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
from ora import Time, Daytime, now, get_display_time_zone
import rich.box
import rich.console
import rich.theme
import yaml
from ora import Daytime, Time, get_display_time_zone, now
from rich.style import Style
from rich.table import Table
from rich.text import Text
import rich.theme
import yaml

import apsis.lib.itr
import apsis.lib.memo
Expand Down
2 changes: 1 addition & 1 deletion python/apsis/cond/base.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import asyncio
import concurrent.futures
from dataclasses import dataclass
import logging
from dataclasses import dataclass

from apsis.lib import py
from apsis.lib.json import TypedJso, check_schema
Expand Down
1 change: 1 addition & 0 deletions python/apsis/cond/dependency.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from apsis.lib.py import format_ctor, iterize
from apsis.runs import Instance, get_bind_args, template_expand
from apsis.states import State, reachable

from .base import RunStoreCondition, _bind

log = logging.getLogger(__name__)
Expand Down
1 change: 1 addition & 0 deletions python/apsis/cond/max_running.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from apsis.lib.py import format_ctor
from apsis.runs import Instance, get_bind_args, template_expand
from apsis.states import State

from .base import Condition, NonmonotonicRunStoreCondition

log = logging.getLogger(__name__)
Expand Down
1 change: 1 addition & 0 deletions python/apsis/cond/skip_duplicate.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from apsis.lib.json import check_schema
from apsis.runs import Instance
from apsis.states import to_state, to_states

from .base import Condition, NonmonotonicRunStoreCondition

log = logging.getLogger(__name__)
Expand Down
5 changes: 3 additions & 2 deletions python/apsis/cond/test.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,11 @@
import logging
import time

from .base import ThreadPolledCondition
from apsis.lib.json import check_schema
from apsis.lib.py import format_ctor
from apsis.runs import template_expand, get_bind_args
from apsis.runs import get_bind_args, template_expand

from .base import ThreadPolledCondition

log = logging.getLogger(__name__)

Expand Down
3 changes: 2 additions & 1 deletion python/apsis/config.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import logging
from pathlib import Path
import warnings
from pathlib import Path

from ruamel.yaml import YAML

from .lib.json import to_array
Expand Down
7 changes: 4 additions & 3 deletions python/apsis/ctl.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,21 +10,22 @@
import gc
import logging
import os
import sys
from pathlib import Path

import sanic # must be imported before apsis.lib.asyn
import sys

import apsis.check
import apsis.cmdline
import apsis.config
from apsis.exc import JobsDirErrors
import apsis.lib.argparse
import apsis.lib.json
import apsis.lib.logging
from apsis.service import DEFAULT_PORT
import apsis.service.client
import apsis.service.main
import apsis.sqlite
from apsis.exc import JobsDirErrors
from apsis.service import DEFAULT_PORT
from apsis.sqlite import SqliteDB

log = logging.getLogger(__name__)
Expand Down
13 changes: 7 additions & 6 deletions python/apsis/jobs.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import aiofiles
import asyncio
import logging
import os
from pathlib import Path
import random
import string
from pathlib import Path

import aiofiles
import yaml
from ruamel.yaml import YAML
from ruamel.yaml.constructor import DuplicateKeyError
Expand All @@ -14,10 +15,10 @@
from .cond import Condition
from .exc import JobError, JobsDirErrors, SchemaError
from .lib import itr
from .lib.json import to_array, to_narray, check_schema
from .lib.py import tupleize, format_ctor
from .program import Program, NoOpProgram
from .schedule import schedule_to_jso, schedule_from_jso
from .lib.json import check_schema, to_array, to_narray
from .lib.py import format_ctor, tupleize
from .program import NoOpProgram, Program
from .schedule import schedule_from_jso, schedule_to_jso

log = logging.getLogger(__name__)

Expand Down
5 changes: 3 additions & 2 deletions python/apsis/lib/api.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import brotli
import gzip
import logging
import sanic
import zlib

import brotli
import sanic

from apsis.cond.dependency import Dependency
from apsis.runs import BIND_ARGS, eval_enabled, is_template, template_expand
from apsis.schedule import schedule_to_jso
Expand Down
5 changes: 2 additions & 3 deletions python/apsis/lib/asyn.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import asyncio
from contextlib import contextmanager, suppress
import weakref

import logging
import weakref
from contextlib import contextmanager, suppress

logger = logging.getLogger(__name__)

Expand Down
1 change: 1 addition & 0 deletions python/apsis/lib/calendar.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import functools

import ora.calendar

# -------------------------------------------------------------------------------
Expand Down
5 changes: 3 additions & 2 deletions python/apsis/lib/cmpr.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import asyncio
import brotli
from concurrent.futures import ThreadPoolExecutor
import logging
from concurrent.futures import ThreadPoolExecutor

import brotli

from .timing import Timer

Expand Down
2 changes: 1 addition & 1 deletion python/apsis/lib/email.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,12 @@
`{username, password}` dict.
"""

from email.mime.text import MIMEText
import logging
import os
import pwd
import smtplib
import socket
from email.mime.text import MIMEText

log = logging.getLogger(__name__)

Expand Down
3 changes: 2 additions & 1 deletion python/apsis/lib/json.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@
from typing import Mapping

from apsis.exc import SchemaError
from .imp import import_fqname, get_type_fqname

from .imp import get_type_fqname, import_fqname

# ------------------------------------------------------------------------------

Expand Down
5 changes: 3 additions & 2 deletions python/apsis/lib/logging.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
import asyncio
import logging
from logging import log, debug, info, warning, error, critical
import logging.handlers
import threading
from logging import critical, debug, error, info, log, warning

import ora
import rich.highlighter
import rich.logging
import rich.text
import threading

import apsis.cmdline

Expand Down
2 changes: 1 addition & 1 deletion python/apsis/lib/pidfile.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import errno
import fcntl
import os
from pathlib import Path
import time
from pathlib import Path

# -------------------------------------------------------------------------------

Expand Down
Loading
Loading