* feat: IANA review email ingestor API
* refactor: Replace iana email api with generic one
* chore: Add type hint
* feat: Ingest ipr responses
* feat: Ingest nomcom feedback
* refactor: message -> msg
* fix: Typo
* feat: Send email on nomcom ingestion failure
* feat: Send email on IPR mail ingestion error
* feat: Check content type, handle more errs
* fix: drop additionalProperties: false
Unfortunately this does not mix well with
the conditional "year" property.
* test: Test ingest_email view
* Revert "test: Test ingest_email view"
This reverts commit e498022829f834a0d3cebcb0dafb0d5f5a5d162e.
* test: Test ingest_email view
* fix: pass new test
* test: Test ingest_review_email
* fix: Pass new test
* test: Test ipr ingest_response_email
* fix: pass new test
* test: test nomcom ingest_feedback_email
* chore: fix typo found in code reviw
* fix: De-lint
* refactor: Change import style for clarity
* feat: Add iana_changes_updates_task()
* chore: Squelch lint warning
My linter does not like variables defined outside
of __init__()
* feat: Add PeriodicTask for iana_changes_updates_task
* refactor: tasks instead of scripts on sync.views.notify()
* test: Test iana_changes_updates_task
* refactor: rename task for consistency
* feat: Add iana_protocols_update_task
* feat: Add PeriodicTask for iana protocols sync
* refactor: Use protocol sync task instead of script in view
* refactor: itertools.batched() not available until py312
* test: test iana_protocols_update_task
* feat: Add idindex_update_task()
Calls idindex generation functions and does the file
update dance to put them in place.
* chore: Add comments to bin/hourly
* fix: annotate types and fix bug
* feat: Create PeriodicTask for idindex_update_task
* refactor: Move helpers into a class
More testable this way
* refactor: Make TempFileManager a context mgr
* test: Test idindex_update_task
* test: Test TempFileManager
* fix: Fix bug in TestFileManager
yay testing
* feat: Add expire_ids_task()
* feat: Create PeriodicTask for expire_ids_task
* test: Test expire_ids_task
* test: Test request timeout in iana_protocols_update_task
* refactor: do not re-raise timeout exception
Not sure this is the right thing to do, but it's the
same as rfc_editor_index_update_task
* feat: Add notify_expirations_task
* feat: Add "weekly" celery beat crontab
* refactor: Reorder crontab fields
This matches the crontab file field order
* feat: Add PeriodicTask for notify_expirations
* test: Test notify_expirations_task
* test: Add annotation to satisfy mypy
* feat: insensitive username matching at django authentication
* feat: use iexact when using the User object manager
* fix: more places to ignore username case
* fix: remove unused management command
* fix: avoid get when probing for object existance
* fix: force lowercase new usernames in secr/rolodex
* fix: use explicit arguments when creating user
* refactor: replace datetime.now with timezone.now
* refactor: migrate model fields to use timezone.now as default
* refactor: replace datetime.today with timezone.now
datetime.datetime.today() is equivalent to datetime.datetime.now(); both
return a naive datetime with the current local time.
* refactor: rephrase datetime.now(tz) as timezone.now().astimezone(tz)
This is effectively the same, but is less likely to encourage accidental
use of naive datetimes.
* refactor: revert datetime.today() change to old migrations
* refactor: change a missed datetime.now to timezone.now
* chore: renumber timezone_now migration
* chore: renumber migrations
This handles the RFC-Editor and IANA sync external commands, but
need to be generalised, and applied to all external commands: TODO.
- Legacy-Id: 11646
The new API requires at least one event and will automatically save a
snapshot of the document and related state. Document.save() will now
throw an exception if called directly, as the new API is intended to
ensure that documents are saved with both an appropriate snapsnot and
relevant history log, both of which are easily defeated by just
calling .save() directly.
To simplify things, the snapshot is generated after the changes to a
document have been made (in anticipation of coming changes), instead
of before as was usual.
While revising the existing code to work with this API, a couple of
missing events was discovered:
- In draft expiry, a "Document has expired" event was only generated
in case an IESG process had started on the document - now it's
always generated, as the document changes its state in any case
- Synchronization updates like title and abstract amendmends from the
RFC Editor were silently (except for RFC publication) applied and
not accompanied by a descriptive event - they now are
- do_replace in the Secretariat tools now adds an event
- Proceedings post_process in the Secretariat tools now adds an event
- do_withdraw in the Secretariat tools now adds an event
A migration is needed for snapshotting all documents, takes a while to
run. It turns out that a single document had a bad foreign key so the
migration fixes that too.
- Legacy-Id: 10101
Django sets charset if you don't specify a content_type; if you specify
one you also must add a charset specification (if you want one).
Fixes issue #1647.
- Legacy-Id: 9348
from IANA as it turns out that the Datatracker is the authoritative
source on these states. Also improve logging so that the raw JSON from
IANA is dumped, the parsed JSON on imported changes is dumped and we
write to syslog before starting a sync script in the notification view.
- Legacy-Id: 5800
and put the thing to notify in the URL, like
/sync/iana/notify/changes/, instead of using POST parameters; refactor
the two sync views to use the same for IANA and RFC Editor; require
Secretariat or IANA/RFC Editor roles for triggering the updates and
support passing username and password for auth to make it easier in
the other end once we move away from HTTP Auth
- Legacy-Id: 4868
discrepancies report for seeing differences between the
Datatracker/RFC Editor/IANA, add tests of IANA/RFC Editor integration,
add script for weekly discrepancies emails
- Legacy-Id: 4851