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
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ jobs:
strategy:
fail-fast: false
matrix:
netbox_version: &nb_versions [v4.4.10, v4.5.8, v4.6.3]
netbox_version: &nb_versions [v4.5.8, v4.6.10, v4.7.0]
steps:
- name: Checkout
uses: actions/checkout@v3
Expand Down
2 changes: 1 addition & 1 deletion development/docker-compose.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ services:


postgres:
image: postgres:14-alpine
image: postgres:17-alpine
env_file: .env
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB} -h 127.0.0.1"]
Expand Down
4 changes: 2 additions & 2 deletions validity/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ class NetBoxValidityConfig(PluginConfig):
version = "3.5.2"
base_url = "validity"
django_apps = ["django_bootstrap5"]
min_version = "4.4.0"
max_version = "4.6.99"
min_version = "4.5.0"
max_version = "4.7.99"
graphql_schema = "graphql.schema"

# custom field
Expand Down
3 changes: 2 additions & 1 deletion validity/graphql/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,12 @@
from core.models import Job
from dcim.graphql.filters import DeviceFilter
from django.db.models import Q, QuerySet
from netbox.graphql.filters import BaseModelFilter, NetBoxModelFilter
from strawberry.scalars import ID
from strawberry_django import FilterLookup

from validity import models
from validity.netbox_changes import BaseModelFilter, NetBoxModelFilter, StrFilterLookup
from validity.netbox_changes import StrFilterLookup


@strawberry_django.filter_type(Job, lookups=True)
Expand Down
2 changes: 1 addition & 1 deletion validity/graphql/types.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@

@strawberry_django.type(
Job,
fields="__all__",
exclude=["execution_time"],
)
class VJobType(BaseObjectType):
pass
Expand Down
4 changes: 2 additions & 2 deletions validity/netbox_changes/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ def get_base_table_kwargs(self):

StrFilterLookup = locate("strawberry_django.StrFilterLookup") if config.netbox_version >= "4.5.5" else FilterLookup[str]

if config.netbox_version >= "4.6.0":
if config.netbox_version >= "4.7.0":
from .current import *
elif config.netbox_version >= "4.5.0":
elif config.netbox_version >= "4.6.0":
from .old import *
else:
from .oldest import *
6 changes: 1 addition & 5 deletions validity/netbox_changes/current.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,4 @@
# NetBox 4.6
# NetBox 4.7

from pydoc import locate

from .old import *


ChoicesType = locate("django.db.models.enums.ChoicesType")
5 changes: 2 additions & 3 deletions validity/netbox_changes/old.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
# NetBox 4.5
# NetBox 4.6
from pydoc import locate

from .oldest import *


BaseModelFilter = locate("netbox.graphql.filters.BaseModelFilter")
NetBoxModelFilter = locate("netbox.graphql.filters.NetBoxModelFilter")
ChoicesType = locate("django.db.models.enums.ChoicesType")
4 changes: 1 addition & 3 deletions validity/netbox_changes/oldest.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
# NetBox 4.4
# NetBox 4.5
from pydoc import locate


BaseModelFilter = locate("netbox.graphql.filter_mixins.BaseFilterMixin")
NetBoxModelFilter = locate("netbox.graphql.filter_mixins.NetBoxModelFilterMixin")
ChoicesType = locate("django.db.models.enums.ChoicesMeta")
5 changes: 2 additions & 3 deletions validity/scripts/keeper.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,11 @@ def __enter__(self):
def __exit__(self, exc_type, exc, tb):
with self.logger:
if exc_type:
return self.terminate_errored_job(exc)
self.terminate_errored_job(exc)
elif self.job.status == JobStatusChoices.STATUS_RUNNING and self.auto_terminate:
self.terminate_job()

def terminate_errored_job(self, error: Exception) -> bool:
def terminate_errored_job(self, error: Exception) -> None:
if isinstance(error, AbortScript):
self.logger.messages.extend(error.logs)
self.logger.failure(str(error))
Expand All @@ -41,7 +41,6 @@ def terminate_errored_job(self, error: Exception) -> bool:
status = JobStatusChoices.STATUS_ERRORED
self.error_callback(self, error)
self.terminate_job(status=status, error=repr(error))
return isinstance(error, AbortScript)

def terminate_job(
self, status: str = JobStatusChoices.STATUS_COMPLETED, error: str | None = None, output=None
Expand Down
3 changes: 2 additions & 1 deletion validity/tests/migrations/apply/0001_initial.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from django.contrib.postgres.operations import CreateCollation
from django.contrib.postgres.operations import CreateCollation, CreateExtension
from django.db import migrations
import sys

Expand All @@ -8,4 +8,5 @@ class Migration(migrations.Migration):

operations = [
CreateCollation('natural_sort', provider='icu', locale='und-u-kn-true'),
CreateExtension('ltree'),
]
4 changes: 3 additions & 1 deletion validity/tests/test_scripts/runtests/test_combine.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

from validity.scripts.data_models import ExecutionResult, Message
from validity.scripts.data_models import TestResultRatio as ResultRatio
from validity.scripts.exceptions import AbortScript
from validity.scripts.runtests.combine import CombineWorker
from validity.utils.logger import Logger

Expand Down Expand Up @@ -55,7 +56,8 @@ def test_call_abort(worker, full_runtests_params, job_extractor, monkeypatch):
job_extractor.parents[1].job.result.errored = True
monkeypatch.setattr(timezone, "now", lambda: datetime.datetime(2020, 1, 1))
worker.job_extractor_factory = lambda: job_extractor
worker(full_runtests_params)
with pytest.raises(AbortScript):
worker(full_runtests_params)
job = full_runtests_params.get_job()
assert job.status == "errored"
assert job.log_entries == [
Expand Down
3 changes: 2 additions & 1 deletion validity/tests/test_scripts/test_backup.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
from validity.integrations.errors import IntegrationError
from validity.scripts.backup import perform_backup
from validity.scripts.data_models import FullBackUpParams
from validity.scripts.exceptions import AbortScript


@pytest.fixture
Expand Down Expand Up @@ -41,7 +42,7 @@ def test_backup_success(di, params):
def test_backup_failure(di, params):
job = params.get_job()
backend = Mock(side_effect=IntegrationError("ERROR!!!"))
with di.override({BackupBackend: lambda: backend}):
with pytest.raises(AbortScript), di.override({BackupBackend: lambda: backend}):
perform_backup(params)
backend.assert_called_once_with(job.object)
job.refresh_from_db()
Expand Down
7 changes: 4 additions & 3 deletions validity/tests/test_scripts/test_keeper.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,10 @@ def test_keeper_noerror(timezone_now):
@pytest.mark.django_db
def test_keeper_abort(timezone_now):
timezone_now(datetime.datetime(2000, 1, 1, 1, 0, 0, 0, tzinfo=datetime.timezone.utc))
with JobKeeper(job=DSBackupJobFactory(), logger=Logger()) as keeper:
keeper.logger.info("msg1")
raise AbortScript("abort_msg", logs=[Message("warning", "extra_msg")])
with pytest.raises(AbortScript):
with JobKeeper(job=DSBackupJobFactory(), logger=Logger()) as keeper:
keeper.logger.info("msg1")
raise AbortScript("abort_msg", logs=[Message("warning", "extra_msg")])
keeper.job.refresh_from_db()
assert keeper.job.status == "failed"
assert keeper.job.log_entries == [
Expand Down
Loading