* 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: add Group Leadership list
* fix: only offer export to staff
* fix: fix export button conditional
* fix: improve tests. black format
---------
Co-authored-by: Robert Sparks <rjsparks@nostrum.com>
* fix: fix wg anchor tags in areas page
* fix: fix wg anchor tags in IESG agenda page
* test: ensure wg anchor tags to be all uppercase
* test: improve tests
* feat: remove "AD is watching" state
* chore: update names.json
* refactor: use idexists state, not dead
* fix: remove guidance to use watching state
* chore: remove references to 'watching' state
* feat: remove create_in_state from edit_info view
* test: update test
* style: Black + move class closer to use
* refactor: remove lint
* fix: restore missing admonition
---------
Co-authored-by: Robert Sparks <rjsparks@nostrum.com>
* fix: optimize can_manage_some_groups
* fix: improve cache key
* refactor: extra_role_qs to kwargs and bugfix to cache key
* fix: restrict groupman_role matches to active states
* chore: styling, decommenting, black
* fix: use BOF states in concluded_groups()
* fix: handle events for older BOFs
These could be cleaned up in the database, but I think this
change does the right thing for the existing data.
* style: Black
* refactor: generate group aliases on the fly
* chore: remove group alias file check
* chore: drop group alias settings, fix lint
* refactor: rename var to hint it's ignored
* test: update tests
* refactor: move utility to utils
* test: add test
---------
Co-authored-by: Robert Sparks <rjsparks@nostrum.com>
* feat: generate_wg_summary_files_task()
* refactor: wg summaries from filesys for view
* refactor: use new helper for charter views
* refactor: use FileResponse
* refactor: don't use FileResponse
FileResponse generates a StreamingHttpResponse
which brings with it differences I don't fully
understand, so let's stay with HttpResponse
* test: update view tests
* test: test_generate_wg_summary_files_task()
* chore: create PeriodicTask
N.B. that this makes it hourly instead of daily
* feat: copy 1wg-charters* into other places
* test: update test
* test: test no-copy operation
* style: Black
* fix: Skip copy if dest is a non-dir
* chore: de-lint
* feat: API to list role-holder addresses
* test: Test new API endpoint
* fix: role_holder_addresses gets own API token
* refactor: Move role_holder_addresses to ietf.api.views
* test: test for group.utils.role_holder_emails
* test: Clean up test_role_holder_addresses
* fix: Missed a change in urls.py
* refactor: Remove old view
* chore: Remove unused import
* chore: Remove unused import
* chore: Remove generate_draft_aliases.py
Also remove test and update some now-stale help strings.
These are not very helpful, but will not exist for long
in their updated incarnation.
* chore: Remove generate_group_aliases.py
... and its test.
* chore: Remove unused import
* chore: Remove unused import
* feat: Group admin form accepts acronyms starting with numbers for SDO groups (#6825)
* fix: Acronym can't start with hyphen
* fix: Restore some tests
* chore: remove unused setting
* feat: initial import of iesg minutes
* fix: let the meetings view show older iesg meetings
* feat: iesg narrative minutes
* feat: import bof coordination call minutes
* wip: import commands for iesg appeals and statements
* feat: import iesg statements.
* feat: import iesg artifacts
* feat: many fewer n+1 queries for the group meetings view
* fix: restore chain of elifs in views_doc
* fix: use self.stdout.write vs print in mgmt commands
* fix: use replace instead of astimezone when appropriate
* chore: refactor new migrations into one
* fix: transcode some old files into utf8
* fix: repair overzealous replace
* chore: black
* fix: address minro review comments
* fix: actually capture transcoding work
* fix: handle multiple iesg statements on the same day
* fix: better titles
* feat: pill badge replaced statements
* fix: consolodate source repos to one
* feat: liberal markdown for secretariat controlled content
* fix: handle (and clean) html narrative minutes
* feat: scrub harder
* fix: simplify and improve a scrubber
* chore: reorder migrations
* feat: DraftAliasGenerator class
Encapsulates logic from generate_draft_aliases.py
* refactor: Avoid circular imports
* feat: Add draft_aliases API endpoint
* feat: Add @requires_api_token decorator
Stolen from feat/rpc-api
* feat: Add token auth to draft_aliases endpoint
* feat: draft-aliases-from-json.py script
Parses output from the draft_aliases API call
* chore: Remove unused cruft
* refactor: Avoid shadowing "draft" name
* fix: Suppress empty lists from DraftAliasGenerator
* refactor: Use a GET instead of POST
* feat: GroupAliasGenerator class
* feat: group aliases API view
* fix: Handle domains array correctly
* fix: Suppress empty group aliases
* refactor: Generalize aliases-from-json.py script
* refactor: Same output fmt for draft and group alias apis
* feat: Sort addresses for stability
* fix: Add "anything" virtual alias
* test: Test requires_api_token decorator
* feat: Harden is_valid_token against misconfig
* test: Test is_valid_token
* test: Test draft_aliases view
* test: Test group_aliases view
* test: Test DraftAliasGenerator
* fix: ise group is type "ise" in test data
* test: Fix logic in testManagementCommand
The test was incorrect - and fails when fixed. :-(
* test: Test GroupAliasGenerator
Test currently fails
* fix: Suppress empty -ads alias
* test: Fix group acronym copy/paste error
I *think* this must be what had been intended. The
code does not look like it ever dealt with GroupHistory,
so I'm pretty sure it wasn't meant to have the same
acronym used by two different Groups at different
times.
* test: Check draft .notify alias generation
* test: Cover get_draft_notify_emails()
* fix: Avoid accessing slug when state is None
* fix: ignore pre-rfc drafts as rfc-to-rfc references
* fix: also ignore pre-rfc to pre-rfc refs
* chore: remove breakpoint
* fix: ignore subseries non-downrefs
* fix: label nodes as RFCS when possible
* fix: get "rfc" flag right
* chore: Remove comment, answer seems to be "no"
* refactor: Specify state type; drop redundant source doc type check
We're only admitting source__type="draft", so
no need to check it again in filter queries
* refactor: Specify state type in old code
* fix: Don't allow group chair to change group parent (#6037)
* test: Fix test_edit_parent_field, add test_edit_parent (whole form)
* test: Verify that the chair can't circumvent the system to change the group parent
* fix: 403 if user tries to edit an unknown or hidden field
* fix: Give edwg GroupFeatures a parent type
This tracks a change that was made directly in the production database
to fix the immediate cause of #6037.
* Empty commit to trigger github unit test
* feat: Allow reviewer to accept a review they're previously rejected
* feat: Add a reviewer who has previously rejected a review to the list of suggested reviewers.
This largely un-does d105f8b, at the request of at least one team secretary.
* fix: Went a little overboard on the previous commit
one_assignment still has to exclude reviewers who rejected the assignment,
or they could end up being the suggested reviewer.
* fix: Actually do the assignment
* fix: If there's an existing assignment, don't create a new one
* style: Restructure conditional for clarity
* test: Add test cases for accepting or assigning a review assignment after rejecting it
* feat: basic models for appeals
* fix: modify appeal model to point to group
* fix: explicit date on Appeal objects
* feat: appeals importing management command
* feat: display appeals
* feat: admin for appeals
* fix: limit admin contentype choices
* feat: tastypie resources
* feat: factories and tests
* chore: update group migration
* fix: remove charset from pdf content type
* test: unittest download_name
* fix: admin for new name
* 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>
* 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