diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 415163b..54d8c3f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -11,11 +11,12 @@ jobs: strategy: fail-fast: false matrix: - python-version: ['3.9', '3.10'] - django-version: ['3.2', '4.0', '4.1', 'dev'] - + python-version: ['3.10', '3.11'] + django-version: ['4.1', '4.2', 'dev'] + exclude: + - python-version: '3.10' + django-version: 'dev' services: - mysql: image: mysql:latest env: @@ -32,20 +33,19 @@ jobs: sudo apt-get -y update sudo apt-get install libcups2-dev wamerican - - uses: actions/checkout@v2 - + - uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} - name: Get pip cache dir id: pip-cache run: | - echo "::set-output name=dir::$(pip cache dir)" + echo "dir=$(pip cache dir)" >>$GITHUB_OUTPUT - name: Cache - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: ${{ steps.pip-cache.outputs.dir }} key: @@ -65,7 +65,7 @@ jobs: env: DJANGO: ${{ matrix.django-version }} - - name: Upload coverage - uses: codecov/codecov-action@v1 + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v3 with: name: Python ${{ matrix.python-version }} diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 0fe3d7a..718de57 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -3,32 +3,32 @@ exclude: tests/etc/user-* repos: - repo: https://github.com/PyCQA/bandit - rev: 1.7.4 + rev: 1.7.5 hooks: - id: bandit args: - "-x *test*.py" - repo: https://github.com/psf/black - rev: 22.6.0 + rev: 23.3.0 hooks: - id: black - language_version: python3.9 + language_version: python3.10 - repo: https://github.com/pycqa/flake8 - rev: 5.0.4 + rev: 6.0.0 hooks: - id: flake8 args: - "--config=setup.cfg" - repo: https://github.com/PyCQA/isort - rev: 5.10.1 + rev: 5.12.0 hooks: - id: isort - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.3.0 + rev: v4.4.0 hooks: - id: requirements-txt-fixer files: requirements/.*\.txt$ @@ -42,7 +42,7 @@ repos: - id: detect-private-key - repo: https://github.com/adrienverge/yamllint - rev: v1.27.1 + rev: v1.31.0 hooks: - id: yamllint args: diff --git a/VERSION b/VERSION deleted file mode 100644 index 0b69c00..0000000 --- a/VERSION +++ /dev/null @@ -1 +0,0 @@ -0.3.14 diff --git a/edc_reference/admin.py b/edc_reference/admin.py index e6bd1f5..8325923 100644 --- a/edc_reference/admin.py +++ b/edc_reference/admin.py @@ -7,7 +7,6 @@ @admin.register(Reference, site=edc_reference_admin) class ReferenceAdmin(TemplatesModelAdminMixin, admin.ModelAdmin): - date_hierarchy = "report_datetime" list_display = ( diff --git a/edc_reference/apps.py b/edc_reference/apps.py index 734c9d8..d9aa983 100644 --- a/edc_reference/apps.py +++ b/edc_reference/apps.py @@ -13,7 +13,6 @@ class AppConfig(DjangoAppConfig): include_in_administration_section = True def ready(self): - sys.stdout.write(f"Loading {self.verbose_name} ...\n") site_reference_configs.autodiscover() diff --git a/edc_reference/management/commands/populate_references.py b/edc_reference/management/commands/populate_references.py index a776e2b..02b6780 100644 --- a/edc_reference/management/commands/populate_references.py +++ b/edc_reference/management/commands/populate_references.py @@ -5,11 +5,9 @@ class Command(BaseCommand): - help = "Populates the reference model" def add_arguments(self, parser): - parser.add_argument( "--names", dest="names", diff --git a/edc_reference/management/commands/validate_references.py b/edc_reference/management/commands/validate_references.py index 82070df..12f21dc 100644 --- a/edc_reference/management/commands/validate_references.py +++ b/edc_reference/management/commands/validate_references.py @@ -4,7 +4,6 @@ class Command(BaseCommand): - help = "Validates the reference model config" def handle(self, *args, **options): diff --git a/edc_reference/migrations/0001_initial.py b/edc_reference/migrations/0001_initial.py index 0bf76e9..647dd3a 100644 --- a/edc_reference/migrations/0001_initial.py +++ b/edc_reference/migrations/0001_initial.py @@ -10,7 +10,6 @@ class Migration(migrations.Migration): - initial = True dependencies = [] diff --git a/edc_reference/migrations/0002_reference_value_uuid.py b/edc_reference/migrations/0002_reference_value_uuid.py index 7710413..f5a616f 100644 --- a/edc_reference/migrations/0002_reference_value_uuid.py +++ b/edc_reference/migrations/0002_reference_value_uuid.py @@ -4,7 +4,6 @@ class Migration(migrations.Migration): - dependencies = [("edc_reference", "0001_initial")] operations = [ diff --git a/edc_reference/migrations/0003_reference_related_name.py b/edc_reference/migrations/0003_reference_related_name.py index c466326..ea76fbf 100644 --- a/edc_reference/migrations/0003_reference_related_name.py +++ b/edc_reference/migrations/0003_reference_related_name.py @@ -4,7 +4,6 @@ class Migration(migrations.Migration): - dependencies = [("edc_reference", "0002_reference_value_uuid")] operations = [ diff --git a/edc_reference/migrations/0004_auto_20180116_1528.py b/edc_reference/migrations/0004_auto_20180116_1528.py index c3e1ff4..44748a4 100644 --- a/edc_reference/migrations/0004_auto_20180116_1528.py +++ b/edc_reference/migrations/0004_auto_20180116_1528.py @@ -6,7 +6,6 @@ class Migration(migrations.Migration): - dependencies = [ ("sites", "0002_alter_domain_unique"), ("edc_reference", "0003_reference_related_name"), diff --git a/edc_reference/migrations/0005_auto_20190305_0123.py b/edc_reference/migrations/0005_auto_20190305_0123.py index 2e9751c..0c11937 100644 --- a/edc_reference/migrations/0005_auto_20190305_0123.py +++ b/edc_reference/migrations/0005_auto_20190305_0123.py @@ -7,7 +7,6 @@ class Migration(migrations.Migration): - dependencies = [("edc_reference", "0004_auto_20180116_1528")] operations = [ diff --git a/edc_reference/migrations/0006_auto_20190706_0137.py b/edc_reference/migrations/0006_auto_20190706_0137.py index b6477b4..0709fdf 100644 --- a/edc_reference/migrations/0006_auto_20190706_0137.py +++ b/edc_reference/migrations/0006_auto_20190706_0137.py @@ -4,7 +4,6 @@ class Migration(migrations.Migration): - dependencies = [("edc_reference", "0005_auto_20190305_0123")] operations = [ diff --git a/edc_reference/migrations/0007_auto_20190706_0706.py b/edc_reference/migrations/0007_auto_20190706_0706.py index a19f511..4569243 100644 --- a/edc_reference/migrations/0007_auto_20190706_0706.py +++ b/edc_reference/migrations/0007_auto_20190706_0706.py @@ -4,7 +4,6 @@ class Migration(migrations.Migration): - dependencies = [("edc_reference", "0006_auto_20190706_0137")] operations = [ diff --git a/edc_reference/migrations/0008_auto_20190708_0605.py b/edc_reference/migrations/0008_auto_20190708_0605.py index f3a106e..c55d134 100644 --- a/edc_reference/migrations/0008_auto_20190708_0605.py +++ b/edc_reference/migrations/0008_auto_20190708_0605.py @@ -4,7 +4,6 @@ class Migration(migrations.Migration): - dependencies = [("edc_reference", "0007_auto_20190706_0706")] operations = [ diff --git a/edc_reference/migrations/0009_auto_20190714_2303.py b/edc_reference/migrations/0009_auto_20190714_2303.py index ff1fa23..dbf2acf 100644 --- a/edc_reference/migrations/0009_auto_20190714_2303.py +++ b/edc_reference/migrations/0009_auto_20190714_2303.py @@ -6,7 +6,6 @@ class Migration(migrations.Migration): - dependencies = [("edc_reference", "0008_auto_20190708_0605")] operations = [ diff --git a/edc_reference/migrations/0010_auto_20191024_1000.py b/edc_reference/migrations/0010_auto_20191024_1000.py index 87d8579..d918e41 100644 --- a/edc_reference/migrations/0010_auto_20191024_1000.py +++ b/edc_reference/migrations/0010_auto_20191024_1000.py @@ -5,7 +5,6 @@ class Migration(migrations.Migration): - dependencies = [("edc_reference", "0009_auto_20190714_2303")] operations = [ diff --git a/edc_reference/migrations/0011_auto_20200929_0238.py b/edc_reference/migrations/0011_auto_20200929_0238.py index dc34d98..30e6dea 100644 --- a/edc_reference/migrations/0011_auto_20200929_0238.py +++ b/edc_reference/migrations/0011_auto_20200929_0238.py @@ -4,7 +4,6 @@ class Migration(migrations.Migration): - dependencies = [ ("edc_reference", "0010_auto_20191024_1000"), ] diff --git a/edc_reference/model_mixins.py b/edc_reference/model_mixins.py index bc9736d..4ed192a 100644 --- a/edc_reference/model_mixins.py +++ b/edc_reference/model_mixins.py @@ -8,7 +8,6 @@ class ReferenceModelMixinError(Exception): class ReferenceModelMixin(models.Model): - reference_deleter_cls = ReferenceDeleter reference_updater_cls = ReferenceUpdater diff --git a/edc_reference/models/reference.py b/edc_reference/models/reference.py index db765e8..01b79f8 100644 --- a/edc_reference/models/reference.py +++ b/edc_reference/models/reference.py @@ -10,7 +10,6 @@ class ReferenceFieldDatatypeNotFound(Exception): class Reference(BaseUuidModel): - identifier = models.CharField(max_length=50) visit_schedule_name = models.CharField(max_length=150, null=True) diff --git a/edc_reference/populater.py b/edc_reference/populater.py index 2506034..72b548e 100644 --- a/edc_reference/populater.py +++ b/edc_reference/populater.py @@ -20,7 +20,6 @@ def __init__(self, **kwargs): class Populater: - reference_updater_cls = ReferenceUpdater def __init__( diff --git a/edc_reference/reference/reference_updater.py b/edc_reference/reference/reference_updater.py index 2c3d475..dfcb1bf 100644 --- a/edc_reference/reference/reference_updater.py +++ b/edc_reference/reference/reference_updater.py @@ -18,7 +18,6 @@ class ReferenceUpdater: getter_cls = ReferenceGetter def __init__(self, model_obj=None): - reference_fields = site_reference_configs.get_fields(name=model_obj.reference_name) # loop through fields and update or create each # reference model instance diff --git a/edc_reference/reference_model_config.py b/edc_reference/reference_model_config.py index 7c0565a..693030a 100644 --- a/edc_reference/reference_model_config.py +++ b/edc_reference/reference_model_config.py @@ -18,7 +18,6 @@ class ReferenceFieldAlreadyAdded(Exception): class ReferenceModelConfig: - reference_model = "edc_reference.reference" def __init__(self, name=None, fields=None): diff --git a/edc_reference/site_reference.py b/edc_reference/site_reference.py index b86d228..d660b51 100644 --- a/edc_reference/site_reference.py +++ b/edc_reference/site_reference.py @@ -50,7 +50,6 @@ def update(name=None, fields=None, get_config=None): class SiteReference: - reference_updater = ReferenceUpdater() def __init__(self): diff --git a/edc_reference/tests/reference_test_helper.py b/edc_reference/tests/reference_test_helper.py index a4f1c29..e3af8b9 100644 --- a/edc_reference/tests/reference_test_helper.py +++ b/edc_reference/tests/reference_test_helper.py @@ -12,7 +12,6 @@ class ReferenceTestHelperError(Exception): class ReferenceTestHelper: - visit_model = None field_types = { diff --git a/edc_reference/tests/tests/test_model.py b/edc_reference/tests/tests/test_model.py index c44672b..2a18f87 100644 --- a/edc_reference/tests/tests/test_model.py +++ b/edc_reference/tests/tests/test_model.py @@ -7,7 +7,6 @@ class TestModel(TestCase): - reference_model_cls = Reference subject_identifier = "11111" visit_schedule_name = "visit_schedule" diff --git a/edc_reference/views.py b/edc_reference/views.py index c449a4d..4b53fa8 100644 --- a/edc_reference/views.py +++ b/edc_reference/views.py @@ -7,7 +7,6 @@ class HomeView(EdcViewMixin, NavbarViewMixin, TemplateView): - template_name = f"edc_reference/bootstrap{get_bootstrap_version()}/home.html" navbar_name = "edc_reference" navbar_selected_item = "reference" diff --git a/pyproject.toml b/pyproject.toml index 57dcca1..6f04eb7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,16 +7,16 @@ write_to = "_version.py" [tool.black] line-length = 95 -target-version = ["py39"] +target-version = ["py310"] extend-exclude = '''^(.*\/)*\b(migrations)\b($|\/.*$)''' [tool.isort] profile = "black" -py_version = "39" +py_version = "310" skip = [".tox", ".eggs", "migrations"] [tool.coverage.run] -parallel = true +parallel = false branch = true source = ["edc_reference"] @@ -27,27 +27,30 @@ source = ["edc_reference"] show_missing = true skip_covered = true omit = ["requirements.txt"] +exclude_lines = [ + "pragma: no cover", + "if TYPE_CHECKING:", +] [tool.tox] legacy_tox_ini = """ [tox] envlist = - py{38,39,310}-dj{32,40,41,dev}, + py{310}-dj{41,42}, + py{311}-dj{41,42,dev}, lint isolated_build = true [gh-actions] python = - 3.8: py38 - 3.9: py39, lint 3.10: py310 + 3.11: py311, lint [gh-actions:env] DJANGO = - 3.2: dj32, lint - 4.0: dj40 4.1: dj41 + 4.2: dj42, lint dev: djdev [testenv] @@ -56,13 +59,12 @@ deps = -r https://raw.githubusercontent.com/clinicedc/edc/develop/requirements.tests/test_utils.txt -r https://raw.githubusercontent.com/clinicedc/edc/develop/requirements.tests/edc.txt -r https://raw.githubusercontent.com/clinicedc/edc/develop/requirements.tests/third_party_dev.txt - dj32: Django>=3.2,<3.3 - dj40: Django>=4.0,<4.1 dj41: Django>=4.1,<4.2 + dj42: Django>=4.2,<5.0 djdev: https://github.com/django/django/tarball/main commands = - pip install -U pip + pip install -U pip coverage[toml] pip --version pip freeze coverage run -a runtests.py diff --git a/reference_app/models.py b/reference_app/models.py index 3cb19d5..bd94877 100644 --- a/reference_app/models.py +++ b/reference_app/models.py @@ -31,12 +31,10 @@ class OnSchedule(SiteModelMixin, OnScheduleModelMixin, BaseUuidModel): - pass class OffSchedule(SiteModelMixin, OffScheduleModelMixin, BaseUuidModel): - pass @@ -46,7 +44,6 @@ class Meta(OffstudyModelMixin.Meta): class DeathReport(UniqueSubjectIdentifierFieldMixin, SiteModelMixin, BaseUuidModel): - objects = SubjectIdentifierManager() def natural_key(self): @@ -62,7 +59,6 @@ class SubjectConsent( SiteModelMixin, BaseUuidModel, ): - on_site = CurrentSiteManager() objects = SubjectIdentifierManager() @@ -78,7 +74,6 @@ class SubjectVisit( SiteModelMixin, BaseUuidModel, ): - on_site = CurrentSiteManager() @@ -100,7 +95,6 @@ class Meta: class SubjectRequisition( CrfModelMixin, PanelModelMixin, RequisitionReferenceModelMixin, BaseUuidModel ): - subject_visit = models.ForeignKey(SubjectVisit, on_delete=PROTECT) report_datetime = models.DateTimeField(default=get_utcnow) @@ -109,7 +103,6 @@ class SubjectRequisition( class TestModel(CrfModelMixin, ReferenceModelMixin, BaseUuidModel): - subject_visit = models.ForeignKey(SubjectVisit, on_delete=PROTECT) report_datetime = models.DateTimeField(default=get_utcnow) @@ -118,7 +111,6 @@ class TestModel(CrfModelMixin, ReferenceModelMixin, BaseUuidModel): class TestModelBad(CrfModelMixin, BaseUuidModel): - subject_visit = models.ForeignKey(SubjectVisit, on_delete=PROTECT) report_datetime = models.DateTimeField(default=get_utcnow) @@ -127,7 +119,6 @@ class TestModelBad(CrfModelMixin, BaseUuidModel): class CrfOne(CrfModelMixin, ReferenceModelMixin, BaseUuidModel): - subject_visit = models.ForeignKey(SubjectVisit, on_delete=PROTECT) report_datetime = models.DateTimeField(default=get_utcnow) @@ -142,7 +133,6 @@ class CrfOne(CrfModelMixin, ReferenceModelMixin, BaseUuidModel): class CrfWithBadField(CrfModelMixin, ReferenceModelMixin, BaseUuidModel): - subject_visit = models.ForeignKey(SubjectVisit, on_delete=PROTECT) report_datetime = models.DateTimeField(default=get_utcnow) @@ -157,7 +147,6 @@ class CrfWithBadField(CrfModelMixin, ReferenceModelMixin, BaseUuidModel): class CrfWithDuplicateField(CrfModelMixin, ReferenceModelMixin, BaseUuidModel): - subject_visit = models.ForeignKey(SubjectVisit, on_delete=PROTECT) report_datetime = models.DateTimeField(default=get_utcnow) @@ -172,7 +161,6 @@ class CrfWithDuplicateField(CrfModelMixin, ReferenceModelMixin, BaseUuidModel): class CrfWithUnknownDatatype(CrfModelMixin, ReferenceModelMixin, BaseUuidModel): - subject_visit = models.ForeignKey(SubjectVisit, on_delete=PROTECT) report_datetime = models.DateTimeField(default=get_utcnow) diff --git a/setup.cfg b/setup.cfg index a44a6b0..6be9617 100644 --- a/setup.cfg +++ b/setup.cfg @@ -12,20 +12,17 @@ keywords = django, edc, clinicedc, clinical trials classifiers= Environment :: Web Environment Framework :: Django - Framework :: Django :: 3.2 - Framework :: Django :: 4.0 Framework :: Django :: 4.1 Intended Audience :: Developers Intended Audience :: Science/Research Operating System :: OS Independent - Programming Language :: Python :: 3.8 - Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.10 + Programming Language :: Python :: 3.11 License :: OSI Approved :: GNU General Public License v3 (GPLv3) [options] -python_requires = >=3.9 +python_requires = >=3.10 zip_safe = False include_package_data = True packages = find: