From 3badeabba62dd02e4ebb04ee7dfd3de7f76f7056 Mon Sep 17 00:00:00 2001 From: goatwu1993 Date: Fri, 14 Oct 2022 23:43:01 +0800 Subject: [PATCH] style: make flake8 happy --- django_celery_beat/__init__.py | 1 - django_celery_beat/admin.py | 20 ++++++--------- django_celery_beat/clockedschedule.py | 3 ++- django_celery_beat/models.py | 12 ++++----- django_celery_beat/schedulers.py | 27 ++++++++----------- django_celery_beat/signals.py | 11 +++----- django_celery_beat/tzcrontab.py | 3 +-- django_celery_beat/utils.py | 1 + docs/conf.py | 22 ++++++++-------- setup.py | 14 ++++++---- t/unit/conftest.py | 7 +++-- t/unit/test_admin.py | 18 +++++-------- t/unit/test_models.py | 22 ++++++---------- t/unit/test_schedulers.py | 37 ++++++++++++--------------- 14 files changed, 87 insertions(+), 111 deletions(-) diff --git a/django_celery_beat/__init__.py b/django_celery_beat/__init__.py index d1bd7d68..71167b54 100644 --- a/django_celery_beat/__init__.py +++ b/django_celery_beat/__init__.py @@ -3,7 +3,6 @@ # All rights reserved. # :license: BSD (3 Clause), see LICENSE for more details. import re - from collections import namedtuple import django diff --git a/django_celery_beat/admin.py b/django_celery_beat/admin.py index ff4212bb..aa717e3b 100644 --- a/django_celery_beat/admin.py +++ b/django_celery_beat/admin.py @@ -1,21 +1,17 @@ """Periodic Task Admin interface.""" +from celery import current_app +from celery.utils import cached_property from django import forms from django.conf import settings from django.contrib import admin, messages -from django.db.models import When, Value, Case +from django.db.models import Case, Value, When from django.forms.widgets import Select from django.template.defaultfilters import pluralize from django.utils.translation import gettext_lazy as _ - -from celery import current_app -from celery.utils import cached_property from kombu.utils.json import loads -from .models import ( - PeriodicTask, PeriodicTasks, - IntervalSchedule, CrontabSchedule, - SolarSchedule, ClockedSchedule -) +from .models import (ClockedSchedule, CrontabSchedule, IntervalSchedule, + PeriodicTask, PeriodicTasks, SolarSchedule) from .utils import is_database_scheduler @@ -26,7 +22,7 @@ class TaskSelectWidget(Select): _choices = None def tasks_as_choices(self): - _ = self._modules # noqa + _ = self._modules tasks = list(sorted(name for name in self.celery_app.tasks if not name.startswith('celery.'))) return (('', ''), ) + tuple(zip(tasks, tasks)) @@ -149,7 +145,7 @@ def changelist_view(self, request, extra_context=None): extra_context = extra_context or {} scheduler = getattr(settings, 'CELERYBEAT_SCHEDULER', None) extra_context['wrong_scheduler'] = not is_database_scheduler(scheduler) - return super(PeriodicTaskAdmin, self).changelist_view( + return super().changelist_view( request, extra_context) def get_queryset(self, request): @@ -215,7 +211,7 @@ def run_tasks(self, request, queryset): self.message_user( request, - _('task "{0}" not found'.format(not_found_task_name)), + _(f'task "{not_found_task_name}" not found'), level=messages.ERROR, ) return diff --git a/django_celery_beat/clockedschedule.py b/django_celery_beat/clockedschedule.py index 94f9885e..93bf98ac 100644 --- a/django_celery_beat/clockedschedule.py +++ b/django_celery_beat/clockedschedule.py @@ -2,6 +2,7 @@ from celery import schedules from celery.utils.time import maybe_make_aware + from .utils import NEVER_CHECK_TIMEOUT @@ -27,7 +28,7 @@ def is_due(self, last_run_at): return schedules.schedstate(is_due=False, next=remaining_s) def __repr__(self): - return ''.format(self.clocked_time) + return f'' def __eq__(self, other): if isinstance(other, clocked): diff --git a/django_celery_beat/models.py b/django_celery_beat/models.py index f7fce371..6bfc6506 100644 --- a/django_celery_beat/models.py +++ b/django_celery_beat/models.py @@ -3,10 +3,11 @@ from zoneinfo import available_timezones except ImportError: from backports.zoneinfo import available_timezones + from datetime import timedelta import timezone_field -from celery import schedules, current_app +from celery import current_app, schedules from django.conf import settings from django.core.exceptions import MultipleObjectsReturned, ValidationError from django.core.validators import MaxValueValidator, MinValueValidator @@ -14,10 +15,9 @@ from django.utils.translation import gettext_lazy as _ from . import querysets, validators +from .clockedschedule import clocked from .tzcrontab import TzAwareCrontab from .utils import make_aware, now -from .clockedschedule import clocked - DAYS = 'days' HOURS = 'hours' @@ -129,7 +129,7 @@ def from_schedule(cls, schedule): return cls(**spec) def __str__(self): - return '{0} ({1}, {2})'.format( + return '{} ({}, {})'.format( self.get_event_display(), self.latitude, self.longitude @@ -224,7 +224,7 @@ class Meta: ordering = ['clocked_time'] def __str__(self): - return '{}'.format(make_aware(self.clocked_time)) + return f'{make_aware(self.clocked_time)}' @property def schedule(self): @@ -314,7 +314,7 @@ class Meta: 'day_of_week', 'hour', 'minute', 'timezone'] def __str__(self): - return '{0} {1} {2} {3} {4} (m/h/dM/MY/d) {5}'.format( + return '{} {} {} {} {} (m/h/dM/MY/d) {}'.format( cronexp(self.minute), cronexp(self.hour), cronexp(self.day_of_month), cronexp(self.month_of_year), cronexp(self.day_of_week), str(self.timezone) diff --git a/django_celery_beat/schedulers.py b/django_celery_beat/schedulers.py index dcdf8761..e73057ae 100644 --- a/django_celery_beat/schedulers.py +++ b/django_celery_beat/schedulers.py @@ -2,29 +2,22 @@ import datetime import logging import math - from multiprocessing.util import Finalize -from celery import current_app -from celery import schedules -from celery.beat import Scheduler, ScheduleEntry - +from celery import current_app, schedules +from celery.beat import ScheduleEntry, Scheduler from celery.utils.log import get_logger from celery.utils.time import maybe_make_aware -from kombu.utils.encoding import safe_str, safe_repr -from kombu.utils.json import dumps, loads - from django.conf import settings -from django.db import transaction, close_old_connections -from django.db.utils import DatabaseError, InterfaceError from django.core.exceptions import ObjectDoesNotExist +from django.db import close_old_connections, transaction +from django.db.utils import DatabaseError, InterfaceError +from kombu.utils.encoding import safe_repr, safe_str +from kombu.utils.json import dumps, loads -from .models import ( - PeriodicTask, PeriodicTasks, - CrontabSchedule, IntervalSchedule, - SolarSchedule, ClockedSchedule -) from .clockedschedule import clocked +from .models import (ClockedSchedule, CrontabSchedule, IntervalSchedule, + PeriodicTask, PeriodicTasks, SolarSchedule) from .utils import NEVER_CHECK_TIMEOUT # This scheduler must wake up more frequently than the @@ -169,7 +162,7 @@ def to_model_schedule(cls, schedule): model_schedule.save() return model_schedule, model_field raise ValueError( - 'Cannot convert schedule type {0!r} to model'.format(schedule)) + f'Cannot convert schedule type {schedule!r} to model') @classmethod def from_entry(cls, name, app=None, **entry): @@ -205,7 +198,7 @@ def _unpack_options(cls, queue=None, exchange=None, routing_key=None, } def __repr__(self): - return ''.format( + return ''.format( safe_str(self.name), self.task, safe_repr(self.args), safe_repr(self.kwargs), self.schedule, ) diff --git a/django_celery_beat/signals.py b/django_celery_beat/signals.py index 9fd68a95..94d526bd 100644 --- a/django_celery_beat/signals.py +++ b/django_celery_beat/signals.py @@ -3,14 +3,9 @@ def signals_connect(): Connect to signals. """ from django.db.models import signals - from .models import ( - ClockedSchedule, - PeriodicTask, - PeriodicTasks, - IntervalSchedule, - CrontabSchedule, - SolarSchedule - ) + + from .models import (ClockedSchedule, CrontabSchedule, IntervalSchedule, + PeriodicTask, PeriodicTasks, SolarSchedule) signals.pre_save.connect( PeriodicTasks.changed, sender=PeriodicTask diff --git a/django_celery_beat/tzcrontab.py b/django_celery_beat/tzcrontab.py index 236299a7..3c41f9f5 100644 --- a/django_celery_beat/tzcrontab.py +++ b/django_celery_beat/tzcrontab.py @@ -1,9 +1,8 @@ """Timezone aware Cron schedule Implementation.""" -from celery import schedules - from collections import namedtuple from datetime import datetime, timezone +from celery import schedules schedstate = namedtuple('schedstate', ('is_due', 'next')) diff --git a/django_celery_beat/utils.py b/django_celery_beat/utils.py index c19f4edb..efd309ac 100644 --- a/django_celery_beat/utils.py +++ b/django_celery_beat/utils.py @@ -41,6 +41,7 @@ def is_database_scheduler(scheduler): if not scheduler: return False from kombu.utils import symbol_by_name + from .schedulers import DatabaseScheduler return ( scheduler == 'django' diff --git a/docs/conf.py b/docs/conf.py index f1e04801..29e80319 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- import os from sphinx_celery import conf @@ -23,16 +22,19 @@ r'django_celery_beat.migrations.*', ], extlinks={ - 'github_project': ( - 'https://github.com/%s', - 'GitHub project %s', - ), - 'github_pr': ( - 'https://github.com/celery/django-celery-beat/pull/%s', - 'GitHub PR #%s', - ), + 'github_project': ( + 'https://github.com/%s', + 'GitHub project %s', + ), + 'github_pr': ( + 'https://github.com/celery/django-celery-beat/pull/%s', + 'GitHub PR #%s', + ), }, extra_intersphinx_mapping={ - 'django-celery-results': ('https://django-celery-results.readthedocs.io/en/latest/', None), + 'django-celery-results': ( + 'https://django-celery-results.readthedocs.io/en/latest/', + None + ), }, )) diff --git a/setup.py b/setup.py index 429fa5eb..d5360634 100644 --- a/setup.py +++ b/setup.py @@ -18,7 +18,7 @@ def _pyimp(): NAME = 'django-celery-beat' PACKAGE = 'django_celery_beat' -E_UNSUPPORTED_PYTHON = '%s 1.0 requires %%s %%s or later!' % (NAME,) +E_UNSUPPORTED_PYTHON = f'{NAME} 1.0 requires %s %s or later!' PYIMP = _pyimp() PY37_OR_LESS = sys.version_info < (3, 7) @@ -65,6 +65,7 @@ def add_default(m): def add_doc(m): return (('doc', m.groups()[0]),) + pats = {re_meta: add_default, re_doc: add_doc} here = os.path.abspath(os.path.dirname(__file__)) @@ -80,8 +81,9 @@ def add_doc(m): # -*- Installation Requires -*- -def strip_comments(l): - return l.split('#', 1)[0].strip() + +def strip_comments(line): + return line.split('#', 1)[0].strip() def _pip_requirement(req): @@ -94,7 +96,7 @@ def _pip_requirement(req): def _reqs(*f): return [ _pip_requirement(r) for r in ( - strip_comments(l) for l in open( + strip_comments(line) for line in open( os.path.join(os.getcwd(), 'requirements', *f)).readlines() ) if r] @@ -104,11 +106,12 @@ def reqs(*f): # -*- Long Description -*- + if os.path.exists('README.rst'): long_description = codecs.open('README.rst', 'r', 'utf-8').read() long_description_content_type = 'text/x-rst' else: - long_description = 'See http://pypi.python.org/pypi/%s' % (NAME,) + long_description = f'See http://pypi.python.org/pypi/{NAME}' long_description_content_type = 'text/markdown' # -*- %%% -*- @@ -125,6 +128,7 @@ def run_tests(self): import pytest sys.exit(pytest.main(self.pytest_args)) + setuptools.setup( name=NAME, packages=setuptools.find_packages(exclude=[ diff --git a/t/unit/conftest.py b/t/unit/conftest.py index a3a033a1..5e3f9440 100644 --- a/t/unit/conftest.py +++ b/t/unit/conftest.py @@ -1,11 +1,10 @@ import pytest - # we have to import the pytest plugin fixtures here, # in case user did not do the `python setup.py develop` yet, # that installs the pytest plugin into the setuptools registry. -from celery.contrib.pytest import (celery_app, celery_enable_logging, - celery_parameters, depends_on_current_app, - celery_config, use_celery_app_trap) +from celery.contrib.pytest import (celery_app, celery_config, + celery_enable_logging, celery_parameters, + depends_on_current_app, use_celery_app_trap) from celery.contrib.testing.app import TestApp, Trap # Tricks flake8 into silencing redefining fixtures warnings. diff --git a/t/unit/test_admin.py b/t/unit/test_admin.py index cca2c3cc..6d35c17c 100644 --- a/t/unit/test_admin.py +++ b/t/unit/test_admin.py @@ -1,18 +1,14 @@ -import pytest +from itertools import combinations +from unittest import mock +import pytest from django.core.exceptions import ValidationError from django.test import TestCase -from itertools import combinations -from unittest import mock from django_celery_beat.admin import PeriodicTaskAdmin -from django_celery_beat.models import \ - DAYS, \ - PeriodicTask, \ - CrontabSchedule, \ - IntervalSchedule, \ - SolarSchedule, \ - ClockedSchedule +from django_celery_beat.models import (DAYS, ClockedSchedule, CrontabSchedule, + IntervalSchedule, PeriodicTask, + SolarSchedule) @pytest.mark.django_db() @@ -103,7 +99,7 @@ def test_validate_unique_raises_for_multiple_schedules(self): 'must be set' ) for i, options in enumerate(combinations(schedules, 2)): - name = 'task{}'.format(i) + name = f'task{i}' options_dict = dict(options) with self.assertRaises(ValidationError) as cm: PeriodicTask(name=name, **options_dict).validate_unique() diff --git a/t/unit/test_models.py b/t/unit/test_models.py index e975f9bc..c28b8489 100644 --- a/t/unit/test_models.py +++ b/t/unit/test_models.py @@ -2,32 +2,26 @@ import os try: - from zoneinfo import available_timezones, ZoneInfo + from zoneinfo import ZoneInfo, available_timezones except ImportError: from backports.zoneinfo import available_timezones, ZoneInfo import pytest - from celery import schedules -from django.test import TestCase, override_settings from django.apps import apps -from django.db.migrations.state import ProjectState +from django.conf import settings from django.db.migrations.autodetector import MigrationAutodetector from django.db.migrations.loader import MigrationLoader from django.db.migrations.questioner import NonInteractiveMigrationQuestioner +from django.db.migrations.state import ProjectState +from django.test import TestCase, override_settings from django.utils import timezone -from django.conf import settings from django_celery_beat import migrations as beat_migrations -from django_celery_beat.models import ( - crontab_schedule_celery_timezone, - SolarSchedule, - CrontabSchedule, - ClockedSchedule, - IntervalSchedule, - PeriodicTasks, - DAYS, -) +from django_celery_beat.models import (DAYS, ClockedSchedule, CrontabSchedule, + IntervalSchedule, PeriodicTasks, + SolarSchedule, + crontab_schedule_celery_timezone) from t.proj.models import O2OToPeriodicTasks diff --git a/t/unit/test_schedulers.py b/t/unit/test_schedulers.py index fdc575e8..5eb4d41c 100644 --- a/t/unit/test_schedulers.py +++ b/t/unit/test_schedulers.py @@ -1,27 +1,24 @@ import math import os import time -import pytest - from datetime import datetime, timedelta from itertools import count from time import monotonic +import pytest +from celery.schedules import crontab, schedule, solar from django.contrib.admin.sites import AdminSite from django.contrib.messages.storage.fallback import FallbackStorage from django.test import RequestFactory, override_settings from django.utils import timezone -from celery.schedules import schedule, crontab, solar - from django_celery_beat import schedulers -from django_celery_beat.clockedschedule import clocked from django_celery_beat.admin import PeriodicTaskAdmin -from django_celery_beat.models import ( - PeriodicTask, PeriodicTasks, IntervalSchedule, CrontabSchedule, - SolarSchedule, ClockedSchedule, DAYS -) -from django_celery_beat.utils import make_aware, NEVER_CHECK_TIMEOUT +from django_celery_beat.clockedschedule import clocked +from django_celery_beat.models import (DAYS, ClockedSchedule, CrontabSchedule, + IntervalSchedule, PeriodicTask, + PeriodicTasks, SolarSchedule) +from django_celery_beat.utils import NEVER_CHECK_TIMEOUT, make_aware _ids = count(0) @@ -85,9 +82,9 @@ def create_model_clocked(self, schedule, **kwargs): return self.create_model(clocked=clocked, one_off=True, **kwargs) def create_conf_entry(self): - name = 'thefoo{0}'.format(next(_ids)) + name = f'thefoo{next(_ids)}' return name, dict( - task='djcelery.unittest.add{0}'.format(next(_ids)), + task=f'djcelery.unittest.add{next(_ids)}', schedule=timedelta(0, 600), args=(), relative=False, @@ -97,8 +94,8 @@ def create_conf_entry(self): def create_model(self, Model=PeriodicTask, **kwargs): entry = dict( - name='thefoo{0}'.format(next(_ids)), - task='djcelery.unittest.add{0}'.format(next(_ids)), + name=f'thefoo{next(_ids)}', + task=f'djcelery.unittest.add{next(_ids)}', args='[2, 2]', kwargs='{"callback": "foo"}', queue='xaz', @@ -587,7 +584,7 @@ def test_heap_always_return_the_first_item(self): time.sleep(tick_interval) if s.should_sync(): s.sync() - assert len(tried) == 1 and tried == set([e1.name]) + assert len(tried) == 1 and tried == {e1.name} @pytest.mark.django_db() @@ -615,14 +612,14 @@ def test_CrontabSchedule_unicode(self): def test_PeriodicTask_unicode_interval(self): p = self.create_model_interval(schedule(timedelta(seconds=10))) - assert str(p) == '{0}: every 10.0 seconds'.format(p.name) + assert str(p) == f'{p.name}: every 10.0 seconds' def test_PeriodicTask_unicode_crontab(self): p = self.create_model_crontab(crontab( hour='4, 5', day_of_week='4, 5', )) - assert str(p) == """{0}: * 4,5 * * 4,5 (m/h/dM/MY/d) UTC""".format( + assert str(p) == """{}: * 4,5 * * 4,5 (m/h/dM/MY/d) UTC""".format( p.name ) @@ -630,7 +627,7 @@ def test_PeriodicTask_unicode_solar(self): p = self.create_model_solar( solar('solar_noon', 48.06, 12.86), name='solar_event' ) - assert str(p) == 'solar_event: {0} ({1}, {2})'.format( + assert str(p) == 'solar_event: {} ({}, {})'.format( 'Solar noon', '48.06', '12.86' ) @@ -639,7 +636,7 @@ def test_PeriodicTask_unicode_clocked(self): p = self.create_model_clocked( clocked(time), name='clocked_event' ) - assert str(p) == '{0}: {1}'.format( + assert str(p) == '{}: {}'.format( 'clocked_event', str(time) ) @@ -663,7 +660,7 @@ def test_PeriodicTask_schedule_property(self): def test_PeriodicTask_unicode_no_schedule(self): p = self.create_model() - assert str(p) == '{0}: {{no schedule}}'.format(p.name) + assert str(p) == f'{p.name}: {{no schedule}}' def test_CrontabSchedule_schedule(self): s = CrontabSchedule(