• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

openwisp / openwisp-utils
97%

Build:
DEFAULT BRANCH: master
Repo Added 23 Jun 2017 08:44AM UTC
Files 66
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

LAST BUILD ON BRANCH master
branch: SELECT
CHANGE BRANCH
x
  • No branch selected
  • 1.0
  • 1.2
  • auto-assign-bot-too-eager
  • browser-logs
  • bump-drf
  • bump-version
  • change/copyable-admin-default-uuid
  • changelog-bot-change-excl
  • changelog-generator-line-length
  • channels-4.3.0
  • chore/port-changelog-1.2.1
  • chore/port-changelog-1.2.2
  • chores/improve-ci-failure-bot
  • ci-bot-context-fix
  • ci-failure-refinements
  • ci-selenium-firefox
  • ci-selenium-improvements
  • ci/disable-stale-pr-auto-close
  • ci/fix_bot_changelog
  • ci/retention_policy
  • codex/issue-628-cache-bot-deps
  • copilot/update-module-version-alpha
  • css-fixes
  • dependabot/github_actions/actions/cache-5
  • dependabot/github_actions/actions/checkout-4
  • dependabot/github_actions/actions/checkout-5
  • dependabot/github_actions/actions/checkout-6
  • dependabot/github_actions/actions/create-github-app-token-2
  • dependabot/github_actions/actions/create-github-app-token-3
  • dependabot/github_actions/actions/download-artifact-8
  • dependabot/github_actions/actions/setup-python-5
  • dependabot/github_actions/actions/setup-python-6
  • dependabot/github_actions/actions/upload-artifact-7
  • dependabot/github_actions/pypa/gh-action-pypi-publish-1.12.3
  • dependabot/github_actions/pypa/gh-action-pypi-publish-1.12.4
  • dependabot/github_actions/pypa/gh-action-pypi-publish-1.14.0
  • dependabot/pip/black-gte-23.12.1-and-lt-25.2.0
  • dependabot/pip/black-gte-25.1-and-lt-25.10
  • dependabot/pip/black-gte-25.1-and-lt-25.12
  • dependabot/pip/black-gte-25.1-and-lt-25.13
  • dependabot/pip/black-gte-25.1-and-lt-26.2
  • dependabot/pip/black-gte-25.1-and-lt-26.4
  • dependabot/pip/celery-approx-eq-5.6.1
  • dependabot/pip/celery-gte-5.4-and-lt-5.6
  • dependabot/pip/channels-redis-gte-4.2.1-and-lt-4.4.0
  • dependabot/pip/coverage-gte-7.10.0-and-lt-7.14.0
  • dependabot/pip/coverage-gte-7.10.6-and-lt-7.12.0
  • dependabot/pip/coverage-gte-7.6.1-and-lt-7.9.0
  • dependabot/pip/django-filter-gte-23.2-and-lt-26.0
  • dependabot/pip/django-model-utils-gte-4.5-and-lt-5.1
  • dependabot/pip/djangorestframework-approx-eq-3.17.1
  • dependabot/pip/djangorestframework-gte-3.14-and-lt-3.16.1
  • dependabot/pip/docstrfmt-gte-1.8-and-lt-1.11
  • dependabot/pip/drf-yasg-1.21.14
  • dependabot/pip/git-cliff-approx-eq-2.11.0
  • dependabot/pip/git-cliff-approx-eq-2.12.0
  • dependabot/pip/git-cliff-approx-eq-2.13.1
  • dependabot/pip/isort-gte-6.0.1-and-lt-7.1.0
  • dependabot/pip/isort-gte-6.0.1-and-lt-8.1.0
  • dependabot/pip/pytest-asyncio-gte-0.24-and-lt-0.27
  • dependabot/pip/pytest-asyncio-gte-0.24-and-lt-1.4
  • dependabot/pip/pytest-django-gte-4.10-and-lt-4.12
  • dependabot/pip/pytest-django-gte-4.10-and-lt-4.13
  • dependabot/pip/selenium-gte-4.10-and-lt-4.29
  • dependabot/pip/selenium-gte-4.10-and-lt-4.30
  • dependabot/pip/selenium-gte-4.10-and-lt-4.35
  • dependabot/pip/selenium-gte-4.10-and-lt-4.36
  • dependabot/pip/selenium-gte-4.10-and-lt-4.39
  • dependabot/pip/selenium-gte-4.10-and-lt-4.40
  • dependabot/pip/selenium-gte-4.10-and-lt-4.41
  • dependabot/pip/selenium-gte-4.10-and-lt-4.42
  • dependabot/pip/selenium-gte-4.10-and-lt-4.44
  • dependabot/pip/swapper-gte-1.3-and-lt-1.5
  • dependabot/pip/tblib-approx-eq-3.2.2
  • dependabot/pip/tblib-gte-3.1-and-lt-3.3
  • django-5-css
  • django-5-theme
  • docs/changelog_bot
  • docs/changelog_bot_update
  • drop-coveralls
  • duplicate-1.2.0
  • exclude_validation
  • feat/496-changes-gen
  • feature/480-map-icon
  • feature/517-add-netjsongraph-static
  • feature/AI_created_changelog
  • feature/multi-package-support
  • feature/reusable-autoassign-workflow
  • feature/reusable_pagination
  • fix-ci
  • fix-ci-failure-bot-retry
  • fix-commitizen
  • fix-commitizen-coverage
  • fix-cz-rules
  • fix-dashboard-double-encoding
  • fix-docs-url
  • fix-email-darkmode
  • fix-inline-heading-border
  • fix-selenium-hide-loading-overlay
  • fix-seleniumtextmixin
  • fix/bot-changelog
  • fix/call_gemini
  • fix/changelog_imports
  • fix/changelog_retry
  • fix/changelog_system_prompt
  • fix/ci-bot-ref-path
  • fix/ci-failure-bot
  • fix/ci-failure-bot-transient-error
  • fix/fix-tagging-failure-bot
  • fix/minor-fixes-failure-bot
  • fix/readonlyadmin-cascade-delete
  • fix/selenium-parallel-skip-handling
  • fix/stale-pr-bot-bot-reviewer-false-positives
  • fix/transient-error-markers
  • fix/transient-error-rerun
  • fix/validated-model-serializer-update-validation
  • gsoc25-map-adjustments
  • ignore-files-qa-check-299
  • improve-email-template
  • improve-email-ux
  • improve-reusable-version-branch
  • issues/110-commit-convention-standardization
  • issues/1231-fallback-fileds-db-migrations
  • issues/186-use-separate-db-for-migration-checks
  • issues/254-select2-autocomplete-fields
  • issues/328-remove-depre-UUID
  • issues/344-ReceiveUrlAdmin-inherit-CopyableFieldAdmin
  • issues/367-switch-to-prettier
  • issues/388-channels
  • issues/400-flaky-test-autocomplete-shelf-filter
  • issues/431-falky-test-input-filter
  • issues/439-deps
  • issues/448-withdraw-consent
  • issues/464-retry-selenium
  • issues/482-remove-email-tempalte-setting
  • issues/487-theme-color-variables
  • issues/501-automate-backporting-fixes
  • issues/517-netjsongraph-static-files
  • issues/524-ci-failure-bot
  • issues/532-releaser-backport-changelog-fix
  • issues/552-fix-releaser-git-add
  • issues/552-releaser-untracked-changes
  • issues/565-clean
  • issues/565-collectstatic-error
  • issues/565-error-malformed-css
  • issues/571-automate-assigning-unassigning-issues
  • issues/616-ci-failure-bot-refinements
  • issues/633-ValidatedModelSerializer
  • issues/643-add-state-category-vars
  • issues/646-releaser-auto-branch-selection
  • issues/649-fix-bot-assignment-silent-failure
  • issues/669-changelogbot-commitizen-import-error
  • issues/904-change-to-ChannelsLiveServerTestCase
  • made-ow-rules-standard
  • master
  • migrate-to-importlib
  • openwisp-theme
  • patch-1
  • prettier-update
  • qa-deps
  • refactor-seleniumtextmixin
  • refactor/transient-rerun-mechanism
  • refine-reusable-autoassign-workflow
  • release/1.2.0
  • release/1.2.2
  • releaser-ai-false
  • releaser-git-pull-tags
  • remove-chatgpt-integration
  • remove-python-3.9
  • selenium-chromedriver
  • selenium-helpers
  • selenium-mixin-chores
  • selenium-test-case
  • selenium-test-methods
  • seleniumtestmixin-free-port
  • send-email-configurable-template
  • system-info-improvements
  • tidy-up-tests
  • ui
  • update-backport-workflow-docs
  • update-email-template
  • update-qa
  • update-releaser-new-version
  • upgrade-django-channels
  • upgrade-docstrfmt

29 May 2026 11:18PM UTC coverage: 97.447% (-0.04%) from 97.488%
26667101397

push

github

nemesifier
[fix] Fixed ValidatedModelSerializer: validation of PUT/PATCH & relationships #633

Updated ValidatedModelSerializer.validate() to:
- Use copy() for existing instances to avoid mutating the original
- Skip reverse relations (ForeignObjectRel) during setattr
- Skip nested relationships
- Convert Django ValidationError to DRF ValidationError so errors
  are properly serialized in API responses and picklable in the
  parallel test runner

Fixes #633

---------

Co-authored-by: BHARATH0153 <bharath@openwisp.org>
Co-authored-by: Federico Capoano <f.capoano@openwisp.io>

3932 of 4035 relevant lines covered (97.45%)

13.64 hits per line

Relevant lines Covered
Build:
Build:
4035 RELEVANT LINES 3932 COVERED LINES
13.64 HITS PER LINE
Source Files on master
  • Tree
  • List 66
  • Changed 1
  • Source Changed 0
  • Coverage Changed 1
Coverage ∆ File Lines Relevant Covered Missed Hits/Line

Recent builds

Builds Branch Commit Type Ran Committer Via Coverage
26667101397 master [fix] Fixed ValidatedModelSerializer: validation of PUT/PATCH & relationships #633 Updated ValidatedModelSerializer.validate() to: - Use copy() for existing instances to avoid mutating the original - Skip reverse relations (ForeignObjectRel) duri... push 29 May 2026 11:21PM UTC nemesifier github
97.45
26666614898 feature/reusable_pagination Merge 1f009bbf0 into 20714218c Pull #587 29 May 2026 11:05PM UTC web-flow github
97.46
26664744657 fix/validated-model-serializer-update-validation Merge 82da70bd7 into 021cf0c2c Pull #679 29 May 2026 10:12PM UTC web-flow github
97.45
26664669930 fix/validated-model-serializer-update-validation Merge d29152ed5 into 021cf0c2c Pull #679 29 May 2026 10:09PM UTC web-flow github
97.45
26663786247 feature/reusable_pagination Merge f6c442869 into 021cf0c2c Pull #587 29 May 2026 09:50PM UTC web-flow github
97.49
26663782385 feature/reusable_pagination Merge 0a9b48ab8 into 021cf0c2c Pull #587 29 May 2026 09:47PM UTC web-flow github
97.49
26663737461 master [chores] Changelog bot: prevented long body lines Gemini can return squash commit descriptions as one long paragraph. That makes the changelog bot propose commit messages that are hard to reuse without manual wrapping. Validate generated body li... push 29 May 2026 09:45PM UTC nemesifier github
97.49
26662455135 changelog-generator-line-length Merge 021cf0c2c into 59805417a Pull #682 29 May 2026 09:15PM UTC web-flow github
97.49
26652581016 fix/validated-model-serializer-update-validation Merge 65de615ac into 59805417a Pull #679 29 May 2026 05:42PM UTC web-flow github
97.45
26554729244 fix/validated-model-serializer-update-validation Merge cb758b32d into 59805417a Pull #679 28 May 2026 04:32AM UTC web-flow github
97.45
See All Builds (2027)
  • Repo on GitHub
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc