Commit graph

58 commits

Author SHA1 Message Date
Jennifer Richards 2d875d534d
chore: migrate fields whose defaults changed to date_today 2022-10-18 12:46:14 -03:00
Jennifer Richards ebebdbed3e
refactor: replace datetime.now and datetime.today with timezone.now (#4211)
* 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
2022-08-25 13:45:16 -03:00
Jennifer Richards 727feabfff
chore: create stale submission cleanup task and other deployment tweaks (#4358)
* chore: disable beat container for dev

* chore: use init option with celery container

* chore: create cancel_stale_submissions task via migration

* chore: revert accidental change included in last commit

* chore: terminate celery docker-init.sh on failed command
2022-08-24 12:29:48 -05:00
Jennifer Richards 3705bedfcd
feat: Celery support and asynchronous draft submission API (#4037)
* ci: add Dockerfile and action to build celery worker image

* ci: build celery worker on push to jennifer/celery branch

* ci: also build celery worker for main branch

* ci: Add comment to celery Dockerfile

* chore: first stab at a celery/rabbitmq docker-compose

* feat: add celery configuration and test task / endpoint

* chore: run mq/celery containers for dev work

* chore: point to ghcr.io image for celery worker

* refactor: move XML parsing duties into XMLDraft

Move some PlaintextDraft methods into the Draft base class and
implement for the XMLDraft class. Use xml2rfc code from ietf.submit
as a model for the parsing.

This leaves some mismatch between the PlaintextDraft and the Draft
class spec for the get_author_list() method to be resolved.

* feat: add api_upload endpoint and beginnings of async processing

This adds an api_upload() that behaves analogously to the api_submit()
endpoint. Celery tasks to handle asynchronous processing are added but
are not yet functional enough to be useful.

* perf: index Submission table on submission_date

This substantially speeds up submission rate threshold checks.

* feat: remove existing files when accepting a new submission

After checking that a submission is not in progress, remove any files
in staging that have the same name/rev with any extension. This should
guard against stale files confusing the submission process if the
usual cleanup fails or is skipped for some reason.

* refactor: make clear that deduce_group() uses only the draft name

* refactor: extract only draft name/revision in clean() method

Minimizing the amount of validation done when accepting a file. The
data extraction will be moved to asynchronous processing.

* refactor: minimize checks and data extraction in api_upload() view

* ci: fix dockerfiles to match sandbox testing

* ci: tweak celery container docker-compose settings

* refactor: clean up Draft parsing API and usage

  * remove get_draftname() from Draft api; set filename during init
  * further XMLDraft work
    - remember xml_version after parsing
    - extract filename/revision during init
    - comment out long broken get_abstract() method
  * adjust form clean() method to use changed API

* feat: flesh out async submission processing

First basically working pass!

* feat: add state name for submission being validated asynchronously

* feat: cancel submissions that async processing can't handle

* refactor: simplify/consolidate async tasks and improve error handling

* feat: add api_submission_status endpoint

* refactor: return JSON from submission api endpoints

* refactor: reuse cancel_submission method

* refactor: clean up error reporting a bit

* feat: guard against cancellation of a submission while validating

Not bulletproof but should prevent

* feat: indicate that a submission is still being validated

* fix: do not delete submission files after creating them

* chore: remove debug statement

* test: add tests of the api_upload and api_submission_status endpoints

* test: add tests and stubs for async side of submission handling

* fix: gracefully handle (ignore) invalid IDs in async submit task

* test: test process_uploaded_submission method

* fix: fix failures of new tests

* refactor: fix type checker complaints

* test: test submission_status view of submission in "validating" state

* fix: fix up migrations

* fix: use the streamlined SubmissionBaseUploadForm for api_upload

* feat: show submission history event timestamp as mouse-over text

* fix: remove 'manual' as next state for 'validating' submission state

* refactor: share SubmissionBaseUploadForm code with Deprecated version

* fix: validate text submission title, update a couple comments

* chore: disable requirements updating when celery dev container starts

* feat: log traceback on unexpected error during submission processing

* feat: allow secretariat to cancel "validating" submission

* feat: indicate time since submission on the status page

* perf: check submission rate thresholds earlier when possible

No sense parsing details of a draft that is going to be dropped regardless
of those details!

* fix: create Submission before saving to reduce race condition window

* fix: call deduce_group() with filename

* refactor: remove code lint

* refactor: change the api_upload URL to api/submission

* docs: update submission API documentation

* test: add tests of api_submission's text draft consistency checks

* refactor: rename api_upload to api_submission to agree with new URL

* test: test API documentation and submission thresholds

* fix: fix a couple api_submission view renames missed in templates

* chore: use base image + add arm64 support

* ci: try to fix workflow_dispatch for celery worker

* ci: another attempt to fix workflow_dispatch

* ci: build celery image for submit-async branch

* ci: fix typo

* ci: publish celery worker to ghcr.io/painless-security

* ci: install python requirements in celery image

* ci: fix up requirements install on celery image

* chore: remove XML_LIBRARY references that crept back in

* feat: accept 'replaces' field in api_submission

* docs: update api_submission documentation

* fix: remove unused import

* test: test "replaces" validation for submission API

* test: test that "replaces" is set by api_submission

* feat: trap TERM to gracefully stop celery container

* chore: tweak celery/mq settings

* docs: update installation instructions

* ci: adjust paths that trigger celery worker image  build

* ci: fix branches/repo names left over from dev

* ci: run manage.py check when initializing celery container

Driver here is applying the patches. Starting the celery workers
also invokes the check task, but this should cause a clearer failure
if something fails.

* docs: revise INSTALL instructions

* ci: pass filename to pip update in celery container

* docs: update INSTALL to include freezing pip versions

Will be used to coordinate package versions with the celery
container in production.

* docs: add explanation of frozen-requirements.txt

* ci: build image for sandbox deployment

* ci: add additional build trigger path

* docs: tweak INSTALL

* fix: change INSTALL process to stop datatracker before running migrations

* chore: use ietf.settings for manage.py check in celery container

* chore: set uid/gid for celery worker

* chore: create user/group in celery container if needed

* chore: tweak docker compose/init so celery container works in dev

* ci: build mq docker image

* fix: move rabbitmq.pid to writeable location

* fix: clear password when CELERY_PASSWORD is empty

Setting to an empty password is really not a good plan!

* chore: add shutdown debugging option to celery image

* chore: add django-celery-beat package

* chore: run "celery beat" in datatracker-celery image

* chore: fix docker image name

* feat: add task to cancel stale submissions

* test: test the cancel_stale_submissions task

* chore: make f-string with no interpolation a plain string

Co-authored-by: Nicolas Giard <github@ngpixel.com>
Co-authored-by: Robert Sparks <rjsparks@nostrum.com>
2022-08-22 13:29:31 -05:00
Jennifer Richards b08110b838 Allow external resources to be set/suggested during submission process. Fixes #3068. Commit ready for merge.
- Legacy-Id: 18960
2021-04-19 20:21:19 +00:00
Henrik Levkowetz 088033d843 Added matching indexes to a number of models with ordering by multiple keys.
- Legacy-Id: 18664
2020-11-09 19:41:12 +00:00
Henrik Levkowetz 15ea994266 Added an xml_version field to Submission objects, to capture the schema version of submitted XML files (if any). Related to issue #3067.
- Legacy-Id: 18440
2020-08-28 14:31:36 +00:00
Henrik Levkowetz dc7581fef4 Changed NullBoleanField() to BooleanField(null=True), according to the 2.1 upgrade recommendations.
- Legacy-Id: 18051
2020-06-24 20:33:57 +00:00
Henrik Levkowetz 726fcbf27d Removed all __future__ imports.
- Legacy-Id: 17391
2020-03-05 23:53:42 +00:00
Henrik Levkowetz 8e313e4ed5 Adjusted migrations for Python2/3 compatibility.
- Legacy-Id: 16633
2019-08-08 17:11:14 +00:00
Henrik Levkowetz 2d7c9629aa Added 'from __future__' imports all over the place, to bring code behaviour into closer alignment between python2 and python3
- Legacy-Id: 16446
2019-07-15 15:40:51 +00:00
Henrik Levkowetz d7f5c84182 Initial 2to3 patch with added copyright statement updates.
- Legacy-Id: 16309
2019-06-27 14:40:54 +00:00
Henrik Levkowetz 426870b766 Merged in the Document and DocAlias primary key change and m2m work in ^/personal/henrik/6.96.1-docalias.
- Legacy-Id: 16261
2019-06-15 12:00:48 +00:00
Henrik Levkowetz 815602351f This is a series of 50 migrations that changes the Document and DocAlias
primary keys from character strings to integers, and makes corresponding code
changes.

This was prompted by database limitations discovered when trying to make
DocAlias use a m2m document field; with 255 long strings as primary keys for
Document and DocAlias this violated the MySQL database limitations.

Changing the primary keys to integers should also improve efficiency.  

Due to the data migrations which create the new integer primary keys and adds
corresponding integer foreign keys matching the previous string foreign keys
in all tables having foreign keys to Document and DocAlias, some of these
migrations take a long time.  The total set of migrations are expected to have
a runtime on the order of 2 hours.
 - Legacy-Id: 16237
2019-06-10 11:32:46 +00:00
Henrik Levkowetz 06362ec046 Got rid of old migrations and created new initial migrations.
- Legacy-Id: 14662
2018-02-21 23:46:22 +00:00
Henrik Levkowetz 8ff59cd41c Fixed some issues with a migration. The migration has been re-run on production.
- Legacy-Id: 14484
2017-12-31 15:37:18 +00:00
Henrik Levkowetz 29a0c8a47f Added a data migration to create yang catalog links for yang documents published before the yang catalog link feature was introduced in the datatracker.
- Legacy-Id: 14447
2017-12-19 15:08:33 +00:00
Henrik Levkowetz b6f0fbd52d Added new checker runs for all active drafts with yang modules to the yang link data migration, in order to make sure to have module information available.
- Legacy-Id: 14277
2017-11-02 14:49:51 +00:00
Henrik Levkowetz 370a0e3d94 Added a progress bar to the submission checker json field upgrade migration.
- Legacy-Id: 14276
2017-11-02 14:48:28 +00:00
Henrik Levkowetz 48a81862b8 Added a data migration to upgrade the submission checker json details to a consistent format.
- Legacy-Id: 14269
2017-11-01 14:45:25 +00:00
Henrik Levkowetz f795fa56b9 Changed the SubmissionCheck.time field to use a default now value, instead of auto_now, to permit migrations without changing the timestamps.
- Legacy-Id: 14234
2017-10-30 11:24:47 +00:00
Henrik Levkowetz d98054c103 Added a new yang checker, 'yanglint', to the existing Yang checker class, in
addition to the existing 'pyang' checker.

Added modal overlay displays showing the yang check results every place the
yin/yang symbol is shown (red or green) to indicate the presencee and result
of yang checks.  Added a Yang Validation: line in the document
meta-information section on the document's page in the datatracker.

Added the result of the xym extaction to the yang check results, to make
extration failures visible.

Added the version of the used xym, pyang, and yanglint commands to the check
results.

Added an action to move successfully extracted and validated modules to the
module library directories immediately on submission.

Added the xym and pyang repositories as svn:external components, rather than
listing them in requirements.txt, as there has been delays of many months
between essential features in the repositories, and an actual release.  We may
get occasional buildbot failures if broken code is pulled in from the
repository, but better that than the functionality failure of severely
outdated componets.

Added a new management command to re-run yang validation for active drafts for
which yang modules were found at submission time, in order to pick up imported
models which may have arrived in the model libraries after the draft's
submission.  Run daily from bin/daily.

Added a table to hold version information for external commands.  The yang
checker output should include the version information of the used checkers,
but seems unnecessary to run each command with its --version switch every
time we check a module...

Added a new management command to collect version information for external
commands on demand.  To be run daily from bin/daily.

Added tests to verify that xym, pyang and yanglint information is available
on the submission confirmation page, and updated the yang module contained in
the test document to validate under both pyang and yanglint.

Updated admin.py and resource.py files as needed.
 - Legacy-Id: 13630
2017-06-15 16:09:28 +00:00
Henrik Levkowetz a92c2b4ad5 Updated migration numbering to avoid collisions.
- Legacy-Id: 13480
2017-05-31 21:36:08 +00:00
Ole Laursen 5b677dc6ba Merge author stats branch into new branch from trunk
- Legacy-Id: 13159
2017-03-28 14:36:40 +00:00
Henrik Levkowetz 4daf66d11c Added DocEvent rev= parameter througout the code.
- Legacy-Id: 12978
2017-03-06 15:08:21 +00:00
Ole Laursen 8fdb0047e1 Add migration for converting existing Submission.authors to JSON
- Legacy-Id: 12746
2017-01-27 16:12:10 +00:00
Ole Laursen 1850a26b23 Add words and formal languages to Submission, set them in the submit
view, clean up submit view a bit to avoid duplicated attribute setting
code
 - Legacy-Id: 12660
2017-01-16 17:37:23 +00:00
Henrik Levkowetz 19ec458668 Added migrations for the model changes done for the Django 1.8 upgrade.
- Legacy-Id: 12478
2016-12-07 19:41:48 +00:00
Henrik Levkowetz e06ac44060 Added a migration to remove most duplicate 'Upload' doc events.
- Legacy-Id: 12098
2016-10-06 18:40:04 +00:00
Henrik Levkowetz 88a9c30600 Added a data migration to fix up incorrect submission doc events.
- Legacy-Id: 12073
2016-10-02 16:04:26 +00:00
Henrik Levkowetz 586eec7f2b Made a reverse migration more robust.
- Legacy-Id: 11974
2016-09-11 11:59:05 +00:00
Henrik Levkowetz 9cb627f1cc Made some migrations work backwards, too.
- Legacy-Id: 11964
2016-09-10 20:06:15 +00:00
Henrik Levkowetz 47d6bbbea3 Renamed the SubmissionEmail event class to SubmissionEmailEvent, and added an admin class for it.
- Legacy-Id: 11942
2016-09-08 15:04:53 +00:00
Henrik Levkowetz a531b7cbc0 Removed BOM
- Legacy-Id: 11919
2016-09-02 09:27:44 +00:00
Henrik Levkowetz be6065e6a5 Manual post naming and string tweaks
- Legacy-Id: 11918
2016-09-01 12:04:43 +00:00
Henrik Levkowetz 7a8c067d83 Changed a state name, and renamed some view functions for easier code reading. Removed extra name= parameters from the submit/ urlpatterns.
- Legacy-Id: 11917
2016-09-01 09:14:34 +00:00
Mike Douglass fa3a34389e Merge forward to 6.31.1.dev0
- Legacy-Id: 11899
2016-08-31 03:00:10 +00:00
Henrik Levkowetz 97658ee40b Fixed incomplete edit.
- Legacy-Id: 11027
2016-03-29 20:45:25 +00:00
Henrik Levkowetz db3a3c3081 Added (belatedly) progress bars to some long-running migrations.
- Legacy-Id: 11025
2016-03-29 19:57:24 +00:00
Henrik Levkowetz 6b7faf3926 Added migrations for the submit check display work.
- Legacy-Id: 10998
2016-03-28 19:32:49 +00:00
Henrik Levkowetz 62574cd3f8 Fixed a pyflakes issue.
- Legacy-Id: 10925
2016-03-15 17:45:22 +00:00
Henrik Levkowetz 78d8e2e44c Removed unused idnits_message field on Submission model.
- Legacy-Id: 10911
2016-03-06 17:46:55 +00:00
Henrik Levkowetz 76bb233b70 Refactored draft submission checks so that new checkers can be slotted in through a configuration in settings.py. Refactored the calling of idnits to use the new API, and added a pyang validation check.
- Legacy-Id: 10894
2016-03-04 20:08:29 +00:00
Robert Sparks 02a9da52a1 Manually moved the concepts forward. Reworked some presentation. Working enough to bring testers in at Sprint93
- Legacy-Id: 9717
2015-07-13 21:09:39 +00:00
Henrik Levkowetz 4966e17158 Added 5 migrations for changes in model field help-text strings which changed in the facelift. Also fixed the expression of the help text for NomCom.reminder_interval so the text itself doesn't contain quite as much whitespace.
- Legacy-Id: 9589
2015-04-30 16:18:25 +00:00
Henrik Levkowetz 7ecfac6308 Merged in personal/henrik/django-1.7@9020 which upgrades Django from 1.6.0 to 1.7.4 and applies the needed changes to the datatracker code to work with release 1.7.x.
- Legacy-Id: 9028
2015-02-08 21:16:44 +00:00
Henrik Levkowetz 028b7e315a Reverted to [9025] because commit [9026] failed (it was incomplete with a broken working dir).
- Legacy-Id: 9027
Note: SVN reference [9026] has been migrated to Git commit 4a3749a66b
2015-02-08 20:03:16 +00:00
Henrik Levkowetz 25eb00c925 New django-1.7 initial migrations. Circular references exist, requiring explicit --fake migration for doc, dbtemplate and community apps.
- Legacy-Id: 8823
2014-12-22 17:07:38 +00:00
Henrik Levkowetz dd15785936 Removing south migrations as part of the django 1.7 changeover to builtin migrations.
- Legacy-Id: 8820
2014-12-22 16:44:35 +00:00
Henrik Levkowetz 870be71f79 Made ietf/submit pyflakes-clean.
- Legacy-Id: 7499
2014-03-16 08:03:15 +00:00