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

akvo / akvo-mis / #1382
91%

Build:
DEFAULT BRANCH: main
Ran 06 Oct 2026 12:09PM UTC
Jobs 1
Files 148
Run time 1min
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

06 Oct 2026 12:01PM UTC coverage: 90.586% (+0.05%) from 90.538%
#1382

push

coveralls-python

web-flow
[#511] Refuse reserved, country and profane workspace names at sign-up (#519)

* [#511] Vendor the LDNOOBW profanity wordlist and pin its two libraries

The workspace-name rules need a profanity list and a list of country
names. `better_profanity` supplies the matching engine but not the
words: its bundled wordlist refuses `hiv`, `menstruation`, `urine` and
`gay` as whole tokens, which on a public-health and WASH information
system is a worse failure than anything it prevents. So the words come
from LDNOOBW's `en` and `fr` files, vendored here under CC BY 4.0 with
the upstream commit recorded, which keeps registration off the network
and makes a future refresh a diff somebody reads.

`pycountry` is held at 24.6.1 on purpose: it is the last release that
supports Python 3.8, which is what the backend image runs. Unpinning it
breaks the build rather than upgrading anything.

The smoke test exists because the usual failure here is a container
still running a pre-requirements image, which surfaces as an unrelated
ModuleNotFoundError somewhere else entirely.

* [#511] Move the duplicated subdomain host checks into one module

`RegisterSerializer` and `TenantRenameSerializer` each carried a
byte-identical copy of the console-host and embed-host checks. Both now
call `utils.workspace_name.host_collision_reason`.

The new module is where the rest of issue #511's rules will go, and the
split it introduces is the scope decision: host collisions are security
properties and apply to every path that sets a subdomain, while the
rules coming next apply only to self-service sign-up. Doing the
de-duplication first means those rules get added in one place instead
of two.

`host_collision_reason` returns the message rather than raising, so the
rules can be tested without a serializer and the caller keeps control
of the status code and the field the error attaches to. No behaviour
changed; the existing register and rename suites are the test.

* [#511] Refuse reserved sys... (continued)

8347 of 9452 branches covered (88.31%)

Branch coverage included in aggregate %.

15382 of 16743 relevant lines covered (91.87%)

0.92 hits per line

Coverage Regressions

Lines Coverage ∆ File
34
92.15
-0.07% api/v1/v1_users/serializers.py
17
91.45
0.04% api/v1/v1_users/views.py
2
96.55
1.35% api/v1/v1_users/admin_serializers.py
2
94.69
-0.48% utils/custom_generator.py
Jobs
ID Job ID Ran Files Coverage
1 #1382.1 06 Oct 2026 12:09PM UTC 148
90.59
Source Files on build #1382
  • Tree
  • List 148
  • Changed 4
  • Source Changed 0
  • Coverage Changed 4
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • c6d0915a on github
  • Prev Build on main
  • Next Build on main
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc