* feat: basic blobstore infrastructure for dev
* refactor: (broken) attempt to put minio console behind nginx
* feat: initialize blobstore with boto3
* fix: abandon attempt to proxy minio. Use docker compose instead.
* feat: beginning of blob writes
* feat: storage utilities
* feat: test buckets
* chore: black
* chore: remove unused import
* chore: avoid f string when not needed
* fix: inform all settings files about blobstores
* fix: declare types for some settings
* ci: point to new target base
* ci: adjust test workflow
* fix: give the tests debug environment a blobstore
* fix: "better" name declarations
* ci: use devblobstore container
* chore: identify places to write to blobstorage
* chore: remove unreachable code
* feat: store materials
* feat: store statements
* feat: store status changes
* feat: store liaison attachments
* feat: store agendas provided with Interim session requests
* chore: capture TODOs
* feat: store polls and chatlogs
* chore: remove unneeded TODO
* feat: store drafts on submit and post
* fix: handle storage during doc expiration and resurrection
* fix: mirror an unlink
* chore: add/refine TODOs
* feat: store slide submissions
* fix: structure slide test correctly
* fix: correct sense of existence check
* feat: store some indexes
* feat: BlobShadowFileSystemStorage
* feat: shadow floorplans / host logos to the blob
* chore: remove unused import
* feat: strip path from blob shadow names
* feat: shadow photos / thumbs
* refactor: combine photo and photothumb blob kinds
The photos / thumbs were already dropped in the same
directory, so let's not add a distinction at this point.
* style: whitespace
* refactor: use kwargs consistently
* chore: migrations
* refactor: better deconstruct(); rebuild migrations
* fix: use new class in mack patch
* chore: add TODO
* feat: store group index documents
* chore: identify more TODO
* feat: store reviews
* fix: repair merge
* chore: remove unnecessary TODO
* feat: StoredObject metadata
* fix: deburr some debugging code
* fix: only set the deleted timestamp once
* chore: correct typo
* fix: get_or_create vs get and test
* fix: avoid the questionable is_seekable helper
* chore: capture future design consideration
* chore: blob store cfg for k8s
* chore: black
* chore: copyright
* ci: bucket name prefix option + run Black
Adds/uses DATATRACKER_BLOB_STORE_BUCKET_PREFIX option. Other changes
are just Black styling.
* ci: fix typo in bucket name expression
* chore: parameters in app-configure-blobstore
Allows use with other blob stores.
* ci: remove verify=False option
* fix: don't return value from __init__
* feat: option to log timing of S3Storage calls
* chore: units
* fix: deleted->null when storing a file
* style: Black
* feat: log as JSON; refactor to share code; handle exceptions
* ci: add ietf_log_blob_timing option for k8s
* test: --no-manage-blobstore option for running tests
* test: use blob store settings from env, if set
* test: actually set a couple more storage opts
* feat: offswitch (#8541)
* feat: offswitch
* fix: apply ENABLE_BLOBSTORAGE to BlobShadowFileSystemStorage behavior
* chore: log timing of blob reads
* chore: import Config from botocore.config
* chore(deps): import boto3-stubs / botocore
botocore is implicitly imported, but make it explicit
since we refer to it directly
* chore: drop type annotation that mypy loudly ignores
* refactor: add storage methods via mixin
Shares code between Document and DocHistory without
putting it in the base DocumentInfo class, which
lacks the name field. Also makes mypy happy.
* feat: add timeout / retry limit to boto client
* ci: let k8s config the timeouts via env
* chore: repair merge resolution typo
* chore: tweak settings imports
* chore: simplify k8s/settings_local.py imports
---------
Co-authored-by: Jennifer Richards <jennifer@staff.ietf.org>
* 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 references from User to Person (#5821)
* refactor: Change CommunityList reference from User to Person
* refactor: Convert more user references to person
* refactor: Change augment_docs_and_user_with_user_info to person
* refactor: Change Nomination and Feedback references from User to Person
* refactor: Change a few test case function signatures to be more pythonic
* refactor: Harmonize how profile and photo views look up email_or_name
* refactor: Rework community views to operate on Person instead of User (#5859)
* test: Update tests to try all of the person's emails and aliases
* fix: Recode a test case to avoid an exception if there's Unicode in the URL
This only happens using the form-filling and submission feature of
WebTest, which is only used in this one test case, so just it rip out.
* test: Add duplicate-person tests
* fix: If there are multiple matching users, prefer the logged-in one.
* chore: We no longer use WebTest, so don't include it.
* fix: Address review comments
* fix: case-insensitive person name or email matching (#6096)
* chore: Renumber migrations
* fix: Update merged code so tests pass (#6887)
* fix: Use refactored method
* fix: Don't assume user has person
* fix: Use new view param name
* chore: Drop community lists w/o person; cleanup (#6896)
* fix: Don't assume user has person
* fix: user->person in update_community_list_index.py
* feat: Remove CommunityLists without Person
* refactor: Speed up nomcom migrations
---------
Co-authored-by: Paul Selkirk <paul@painless-security.com>
Co-authored-by: Jennifer Richards <jennifer@staff.ietf.org>
* chore: Unpin django-stubs / update mypy
* test: Use "app.model" for ManyToManyField
django-stubs requires "app.model" instead of just "model" for
ManyToManyField lazy model references.
See https://github.com/typeddjango/django-stubs/issues/1802
* fix: don't create a volunteer object when a person has already volunteered
* fix: safer create
* refactor: use shorthand from django
* fix: also protect volunteer from datatracker from race
* feat: Capture volunteers from the registration system. Fixes#5938
* fix: allow withdrawn field to be null
* docs: add explanatory code comments
* fix: identify current nomcom by is_accepting_volunteers
* fix: use auto_now_add instead of auto_now
* fix: update migration
---------
Co-authored-by: Robert Sparks <rjsparks@nostrum.com>
* ci: Update build-base-app.yml workflow
* fix: Relabel NomCom to show start year, not range
Show just the year that a NomCom started, because showing
the start/end years is confusing.
Fixes: #3419
* fix: Shwo Nomcoms year convened only
Fix the main nomcom index page and the announcement archive page
---------
Co-authored-by: Nicolas Giard <github@ngpixel.com>
Co-authored-by: Robert Sparks <rjsparks@nostrum.com>
* fix: Allow filtering for nominees who have not declined
Fixes#6380
* Update views.py
Co-authored-by: Robert Sparks <rjsparks@nostrum.com>
---------
Co-authored-by: Robert Sparks <rjsparks@nostrum.com>
* chore: Remove unused "rendertest" stuff (#6015)
* fix: restore ability to create status change documents (#5963)
* fix: restore ability to create status change documents
Fixes#5962
* chore: address review comment
* fix: Provide human-friendly status in submission status API response (#6011)
Co-authored-by: nectostr <bastinda96@gmail.com>
* fix: Make name/email lookups case-insensitive (#5972) (#6007)
* fix: Make name/email lookups case-insensitive (#5972)
Use icontains so that looking up name or email is case insensitive
Added a test
Fixes: 5972
* fix: Use __iexact not __icontains
* fix: Clarify no-action-needed (#5918) (#6020)
When a draft is submitted for manual processing, clarify that
no action is needed; the Secretariat has the next steps.
Fixes: #5918
* fix: Fix menu hover issue (#6019)
* fix: Fix menu hover issue
Fixes#5702
* Fix leftmenu hover issue
* fix: Server error from api_get_session_materials() (#6025)
Fixes#5877
* fix: Clarify Questionnaire label (#4688) (#6017)
When filtering nominees, `Questionnaire` implies `Accepted == yes`
so fix the dropdown test tosay that.
Fixes: #4688
* chore: Merge from @martinthomson's rfc-txt-html (#6023)
* fix:no history entry when changing RFC Editor note for doc (#6021)
* fix:no history entry when changing RFC Editor note for doc
* fix:no history entry when changing RFC Editor note for doc
---------
Co-authored-by: Priyanka Narkar <priyankanarkar@dhcp-91f8.meeting.ietf.org>
* fix: avoid deprecation warning on view_list() for objs without CommunityList
Fixes#5942
* fix: return 404 for non-existing revisions (#6014)
* fix: return 404 for non-existing revisions
Links to non-existing revisions to docs should return 404
* fix: change rfc/rev and search behaviour
* refactor: fix tab level
* fix: return 404 for rfc revision for bibtex
* fix: provide date for revisions in bibtex output (#6029)
* fix: provide date for revisions in bibtex output
* refactor: change walrus to if's
* fix: specify particular revision for events
* fix: review refactoring issue
fixes#5447
* fix: Remove automatically suggested document for document that is already has review request (fixes#3211) (#5425)
* Added check that if there is already review request for the document
in question, ignore the automatic suggestion for that document.
Fixes#3211.
* fix: dont block on open requests for a previous version. Add tests
---------
Co-authored-by: Nicolas Giard <github@ngpixel.com>
Co-authored-by: Robert Sparks <rjsparks@nostrum.com>
* feat: IAB statements (#5940)
* feat: support iab and iesg statements. Import iab statements. (#5895)
* feat: infrastructure for statements doctype
* chore: basic test framework
* feat: basic statement document view
* feat: show replaced statements
* chore: black
* fix: state help for statements
* fix: cleanout non-relevant email expansions
* feat: import iab statements, provide group statements tab
* fix: guard against running import twice
* feat: build redirect csv for iab statements
* fix: set document state on import
* feat: show published date on main doc view
* feat: handle pdf statements
* feat: create new and update statements
* chore: copyright block updates
* chore: remove flakes
* chore: black
* feat: add edit/new buttons for the secretariat
* fix: address PR #5895 review comments
* fix: pin pydantic until inflect catches up (#5901) (#5902)
* chore: re-un-pin pydantic
* feat: include submitter in email about submitted slides (#6033)
* feat: include submitter in email about submitted slides
fixes#6031
* chore: remove unintended whitespace change
* chore(dev): update .vscode/settings.json with new taskExplorer settings
* fix: Add editorial stream to proceedings (#6027)
* fix: Add editorial stream to proceedings
Fixes#5717
* fix: Move editorial stream after the irtf in proceedings
* fix: Add editorial stream to meeting materials (#6047)
Fixes#6042
* fix: Shows requested reviews for doc fixes (#6022)
* Fix: Shows requested reviews for doc
* Changed template includes to only give required variables to them.
* feat: allow openId to choose an unactive email if there are none active (#6041)
* feat: allow openId to choose an unactive email if there are no active ones
* chore: correct typo
* chore: rename unactive to inactive
* fix: Make review table more responsive (#6053)
* fix: Improve layout of review table
* Progress
* Progress
* Final changes
* Fix tests
* Remove fluff
* Undo commits
* ci: add --validate-html-harder to tests
* ci: add --validate-html-harder to build.yml workflow
* fix: Set colspan to actual number of columns (#6069)
* fix: Clean up view_feedback_pending (#6070)
- Remove "Unclassified" column header, which caused misalignment in the table body.
- Show the message author - previously displayed as `(None)`.
* docs: Update LICENSE year
* fix: Remove IESG state edit button when state is 'dead' (#6051) (#6065)
* fix: Correctly order "last call requested" column in the IESG dashboard (#6079)
* ci: update dev sandbox init script to start memcached
* feat: Reclassify nomcom feedback (#6002)
* fix: Clean up view_feedback_pending
- Remove "Unclassified" column header, which caused misalignment in the table body.
- Show the message author - previously displayed as `(None)`.
* feat: Reclassify nomcom feedback (#4669)
- There's a new `Chair/Advisor Tasks` menu item `Reclassify feedback`.
- I overloaded `view_feedback*` URLs with a `?reclassify` parameter.
- This adds a checkbox to each feedback message, and a `Reclassify` button
at the bottom of each feedback page.
- "Reclassifying" basically de-classifies the feedback, and punts it back
to the "Pending emails" view for reclassification.
- If a feedback has been applied to multiple nominees, declassifying it
from one nominee removes it from all.
* fix: Remove unused local variables
* fix: Fix some missing and mis-nested html
* test: Add tests for reclassifying feedback
* refactor: Substantial redesign of feedback reclassification
- Break out reclassify_feedback* as their own URLs and views,
and revert changes to view_feedback*.html.
- Replace checkboxes with a Reclassify button on each message.
* fix: Remember to clear the feedback associations when reclassifying
* feat: Add an 'Overcome by events' feedback type
* refactor: When invoking reclassification from a view-feedback page, load the corresponding reclassify-feedback page
* fix: De-conflict migration with 0004_statements
Also change the coding style to match, and add a reverse migration.
* fix: Fix a test case to account for new feedback type
* fix: 842e730 broke the Back button
* refactor: Reclassify feedback directly instead of putting it back in the work queue
* fix: Adjust tests to new workflow
* refactor: Further refine reclassification to avoid redirects
* refactor: Impose a FeedbackTypeName ordering
Also add FeedbackTypeName.legend field, rather than synthesizing it every
time we classify or reclassify feedback.
In the reclassification forms, only show the relevant feedback types.
* refactor: Merge reclassify_feedback_* back into view_feedback_*
This means the "Reclassify" button is always present, but eliminates some
complexity.
* refactor: Add filter(used=True) on FeedbackTypeName querysets
* refactor: Add the new FeedbackTypeName to the reclassification success message
* fix: Secure reclassification against rogue nomcom members
* fix: Print decoded key and fully clean up test nomcom (#6094)
* fix: Delete Person records when deleting a test nomcom
* fix: Decode test nomcom private key before printing
* test: Use correct time zone for test_statement_doc_view (#6064)
* chore(deps): update all npm dependencies for playwright (#6061)
Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com>
* chore(deps): update all npm dependencies for dev/diff (#6062)
Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com>
* chore(deps): update all npm dependencies for dev/coverage-action (#6063)
Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com>
* fix: Hash cache key for default memcached cache (#6089)
* feat: Show docs that an AD hasn't balloted on that need ballots to progress (#6075)
* fix(doc): Unify help texts for document states (#6060)
* Fix IESG State help text link (only)
* Intermediate checkpoint
* Correct URL filtering of state descriptions
* Unify help texts for document states
* Remove redundant load static from template
---------
Co-authored-by: Robert Sparks <rjsparks@nostrum.com>
* ci: fix sandbox start.sh memcached user
* fix: refactor how settings handles cache definitions (#6099)
* fix: refactor how settings handles cache definitions
* chore: more english-speaker readable expression
* fix: Cast cache key to str before calling encode (#6100)
---------
Co-authored-by: Robert Sparks <rjsparks@nostrum.com>
Co-authored-by: Liubov Kurafeeva <liubov.kurafeeva@gmail.com>
Co-authored-by: nectostr <bastinda96@gmail.com>
Co-authored-by: Rich Salz <rsalz@akamai.com>
Co-authored-by: PriyankaN <priyanka@amsl.com>
Co-authored-by: Priyanka Narkar <priyankanarkar@dhcp-91f8.meeting.ietf.org>
Co-authored-by: Ali <alireza83@gmail.com>
Co-authored-by: Roman Beltiukov <maybe.hello.world@gmail.com>
Co-authored-by: Tero Kivinen <kivinen@iki.fi>
Co-authored-by: Nicolas Giard <github@ngpixel.com>
Co-authored-by: Kesara Rathnayake <kesara@fq.nz>
Co-authored-by: Jennifer Richards <jennifer@staff.ietf.org>
Co-authored-by: Paul Selkirk <paul@painless-security.com>
Co-authored-by: depfu[bot] <23717796+depfu[bot]@users.noreply.github.com>
Co-authored-by: Jim Fenton <fenton@bluepopcorn.net>
* fix: More small dark mode fixes
* "badge rounded-pill bg-" -> "badge rounded-pill text-bg-"
This sets the text color correctly for more readable badges.
* Same for cards
* Fix tests
This adds a table to show the state of all nomcom positions, and lets the
chair set or un-set multiple state flags at the same time.
As a consequence, it moves the email templates to the "Edit position" form.
* fix: improve when Message objects are created
* test: further improve feedback test
* fix: improve and test another form
* test: Restructure test infrastructure
* test: Test paste-email-feedback-form with missing headers and/or body
* fix: Don't crash if paste-email-feedback-form doesn't contain a Subject line
* test: Test that paste-email-feedback-form requires headers
* fix: If email headers are missing, prompt the user to try again
* chore: retrigger PR checks
* fix: tweak Nomination.share_nominator label text
"Share nominator name with candidate" was confusing, because it's
imperative, where it's really intended to be permissive - it's okay to
share with the candidate.
* chore: add migration for label text
* feat: Easy extraction of qualified volunteer list for nomcom chair
* fix: tune test setup to years where eligibility calculations can return nonempty
* chore: revert unintended change
* feat: default string when no affiliation is provided
Mention that the schedule is posted to ietf-announce and give a link
to subscribe to that. Use vague wording to handle all cases.
Also add reminder when to not uncheck the "send automatically" box.
* refactor: Remove all existing migrations
* refactor: Create clean set of migrations
* chore: Skip check_statetype_slugs when DB is not yet populated
* fix: Do not cache active_groups_menu on module import
* fix: Do not patch timezone awareness out of oidc-provider
* refactor: Migrate to create postgres schema, only use pgloader for data
* ci: Use migration scripts from feat/pg-migrations branch
* Revert "ci: Use migration scripts from feat/pg-migrations branch"
This reverts commit c82f64c614241ccede4865a50d494725c8a47c15.
* ci: Run check before migrate
* fix: Remove redundant migration caused by merge error
* chore: Add casts/ALTER TABLEs to eliminate pgloader errors/warnings
* chore: Change schema name to match docker image assumptions
* chore: Clear out schema so we get a clean start in case of a retry
When generating the NomCom volunteer paths, use a plus sign rather
than a comma, so that the output is more CSV-friendly.
Co-authored-by: Robert Sparks <rjsparks@nostrum.com>
* 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
* fix: test on postgres. post and check intended pks.
* fix: pass and check intended pks
* fix: pass intended pk
* fix: get an actually usable group type for test
* fix: use a review assignment pk instead of the review request pk
* fix: Use pks of sessions, not schedtimesessassignments
* fix: test for actual pk and do not rely on case-insensitive LIKE
* fix: test for actual pk
* chore: spelling correction: nomine -> nominee