diff --git a/.github/dependabot.yml b/.github/dependabot.yml index b5fd18422..d5ac72c5c 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,20 +1,33 @@ version: 2 + updates: -- package-ecosystem: "pip" - directory: "/" - schedule: - interval: "daily" - cooldown: - default-days: 7 - open-pull-requests-limit: 5 + - package-ecosystem: "pip" + directory: "/" + schedule: + interval: "weekly" + day: "monday" + time: "08:00" + timezone: "Europe/London" + cooldown: + default-days: 7 + groups: + production-dependencies: + dependency-type: "production" + development-dependencies: + dependency-type: "development" + allow: + - dependency-type: "all" -- package-ecosystem: "github-actions" - directory: "/" - schedule: - interval: "monthly" - cooldown: - default-days: 7 - # 2.6.1 seemed to cause the exclude-path to not take effect, waiting for the next release. - ignore: - - dependency-name: "lycheeverse/lychee-action" - versions: ["2.5.0", "2.6.0", "2.6.1"] + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" + day: "monday" + time: "08:00" + timezone: "Europe/London" + cooldown: + default-days: 7 + # 2.6.1 seemed to cause the exclude-path to not take effect, waiting for the next release. + ignore: + - dependency-name: "lycheeverse/lychee-action" + versions: ["2.5.0", "2.6.0", "2.6.1"] diff --git a/docs/actions-pipelines.md b/docs/actions-pipelines.md index 6a982c98a..da87f9c30 100644 --- a/docs/actions-pipelines.md +++ b/docs/actions-pipelines.md @@ -28,7 +28,7 @@ It is written using a configuration format called [YAML](https://yaml.org/), whi A simple example of a `project.yaml` is as follows: ```yaml -version: "4.0" +version: "5.0" actions: generate_dataset: diff --git a/docs/case-control-studies.md b/docs/case-control-studies.md index 6c29f08c7..d6bb6c7fc 100644 --- a/docs/case-control-studies.md +++ b/docs/case-control-studies.md @@ -35,7 +35,7 @@ There are five steps to undertaking a [case-control study](https://en.wikipedia. To begin with, our [`project.yaml`](actions-pipelines.md) looks like this: ```yaml -version: '4.0' +version: '5.0' actions: # Extract data for the cases diff --git a/docs/contributorship-and-content-guidance.md b/docs/contributorship-and-content-guidance.md index bcc9281c8..9ddfd8567 100644 --- a/docs/contributorship-and-content-guidance.md +++ b/docs/contributorship-and-content-guidance.md @@ -1,3 +1,160 @@ # Contributorship and content guidance -Information coming soon. Please contact if you have any specific questions in the meantime. +Our team is strongly committed to Team Science, and to recognising the deep technical and methodological contribution of research software engineers and other non-academic professions to research outputs. + +Contributorship in academia is a complex issue. It affects funding, and therefore the sustainability of projects and teams. Historically software developers who make substantial practical and creative contributions to the delivery of data science projects have often been excluded in many teams (wrongly, in our view) which affects recruitment, the quality of software engineering on projects, and what can be delivered and sustained. We therefore want to ensure that contributions to research outputs, whether indirectly or directly, are appropriately recognised through authorship, acknowledgements, or citations, as set out in our contributorship guidance. + +We also want to ensure that the OpenSAFELY Service is accurately described, to mitigate misunderstandings and maintain public trust. Our content guidance provides suggested text to include for published papers, reports and presentations, to be used if required or considered useful context for readers. + +We want to emphasise that this guidance on contributorship and content is recommended, not mandatory. We aim to resolve grey areas through discussion. +Please get in touch if you have any questions. + +## Authorship + +In the earlier phases of OpenSAFELY, projects typically reflected a deep collaboration between users and the platform team: the datasets and the tools were being developed and used for the first time; for a smaller group of users; and there was substantial crossover between platform work, and analysis. Now, the platform is expanding to a wider user-community, and specifically to teams that are more “users” than “collaborators”. In this new phase, we are aiming to reduce the involvement of co-pilots, data experts and developers in delivering academic work or specific new features for projects in general, unless these projects have been clearly identified as collaborations. We are also reflecting this in our authorship guidance. Nonetheless – because the OpenSAFELY service and tools deliver more than a simple data download service – there are situations where co-pilots or developers might contribute more than neutral non-academic “customer service” to the development and delivery of a research project. Below, we have tried to set out guidance on authorship in this grey area: we are aware that other platforms and teams have adopted more or less inclusive models; we are happy to receive feedback; and we expect this section to be refined through experience over time. + +Our authorship guidance is as follows: + +- Authorship should be discussed at the introductory project meeting with your co-pilot. More generally, we recommend discussing authorship at an early stage with all project collaborators. +- The OpenSAFELY co-pilot(s) for the project, if any, should be offered authorship. +- If your project requires or uses substantial new contributions from other OpenSAFELY team members – for example new technical features, data acquisition, curation of data sources, development of tools to manage or analyse data in a standardised way, or development of codelists with or for your team – we strongly encourage offering authorship to these members. This is particularly likely during the pilot phase of new platform features or data ingests when projects are delivered in close collaboration. +- We strongly encourage inclusion of a [CRediT statement](https://credit.niso.org/) describing how each person contributed to the paper, including a contribution from “The OpenSAFELY collaborative”. [A template is provided](https://docs.google.com/spreadsheets/d/1LtJEen7RLA2zzwFHn1qmBWKxQEFgGGTx82jGZjrmEx8/edit), along with [guidance on how OpenSAFELY platform related activities can be considered to have contributed to your project](https://docs.google.com/document/d/15EqPEXli_xDNCRq9seIeYp8-8t8ynht1yAd_KDVylmE/edit) within CRediT. +- As with standard authorship guidance, named authors should usually participate in reading, revising, and approving the final manuscript before submission or publication. +- Any contributors who are offered authorship should be able to decline the offer if preferred, and either be included in the acknowledgements instead or not included at all. + +The above guidance relates to platform or service related activities by the OpenSAFELY team that have directly or indirectly contributed to the output. If any activities are undertaken by members of the OpenSAFELY team _in addition to_ platform or service related activities, such as study conceptualisation, statistical study design, or writing or revising analysis code, then they should be recognised in the usual way via a CRediT statement, including authorship where appropriate. + +## Acknowledgements + +NHS England and GP IT System Suppliers should be acknowledged. Suggested content: + +> We acknowledge all the support received from the [Optum Technical Operations team] [TPP Technical Operations team] [Optum and TPP Technical Operations teams] throughout this work, and for generous assistance from the information governance and database teams at NHS England and the NHS England Transformation Directorate. +> +> We acknowledge members of the OpenSAFELY Collaborative, who have contributed to the development and maintenance of the OpenSAFELY platform. + +Please note additional suggested acknowledgement text if your project uses certain linked data sources. + +## Citations + +We request that you cite the following materials in your work when describing OpenSAFELY: + +- The OpenSAFELY website: +- The OpenSAFELY-Core GitHub organisation: +- Nab L, Schaffer AL, Hulme W, et al. OpenSAFELY: A platform for analysing electronic health records designed for reproducible research. _Pharmacoepidemiology & Drug Safety_ 2024; 33 + +Please note additional suggested citations if your project uses certain linked data sources. + +## Funders + +OpenSAFELY funders should be acknowledged. Suggested content: + +> The OpenSAFELY platform is principally funded by grants from: +> +> - NHS England [2023-2026]; +> - The Wellcome Trust (222097/Z/20/Z [2020-2024] and 311535/Z/24/Z [2025-2031]); +> - The Medical Research Council (MRC) (MR/V015737/1 [2020-2021]). +> +> Additional contributions to OpenSAFELY have been funded by grants from: +> +> - Medical Research Council (MRC) via the National Core Study programme Longitudinal Health and Wellbeing strand (MC_PC_20030, MC_PC_20059 [2020-2022]) and the Data and Connectivity strand (MC_PC_20058 [2021-2022]); +> - The National Institute for Health Research (NIHR) and the Medical Research Council (MRC) via the CONVALESCENCE programme (COV-LT-0009, MC_PC_20051 [2021-2024]); +> - NHS England via the Primary Care Medicines Analytics Unit [2021-2024]. +> +> The views expressed are those of the authors and not necessarily those of the NIHR, Wellcome Trust, NHS England, Wellcome Trust, the Department of Health and Social Care, or other funders. Funders had no role in the study design, collection, analysis, and interpretation of data; in the writing of the report; and in the decision to submit the article for publication. + +## Approvals + +When describing the OpenSAFELY projects approvals process, suggested content: + +> This work was conducted with the approval of NHS England [project XXX and link], and approved for publication following review by the Bennett Institute and the Department for Health and Social Care. + +The ethics committee or board responsible for ethical oversight of the study should be referenced. Suggested content: + +> This study was approved by the XXX Research Ethics Committee [reference XXX] + +Or: + +> This study did not require ethical approval as confirmed by XXX Research Ethics Committee. + +## Linked data sources + +If the [High Cost Drug dataset](https://docs.opensafely.org/study-def-variables/#high-cost-drugs) was used, required acknowledgement content: + +> North East Commissioning Support Unit provided support on behalf of all Commissioning Support Units to aggregate the high cost drugs data for use in OpenSAFELY studies. + +If the ICNARC data was used, required acknowledgement content: + +> This report is independent research which used data provided by the MRC funded ISARIC 4C Consortium and which the Consortium collected under a research contract funded by the National Institute for Health Research. The views expressed in this publication are those of the author(s) and not necessarily those of the ISARIC 4C consortium. + +If the ONS-CIS dataset was, required acknowledgement content: + +> The Coronavirus (Covid-19) infection survey is delivered by the Office for National Statistics in partnership with the University of Oxford, University of Manchester, UK Health Security Agency and Wellcome Trust. The study is funded by the Department of Health and Social Care with in-kind support from the Welsh Government, the Department of Health on behalf of the Northern Ireland Government and the Scottish Government. The collection and testing of samples is carried out by the Lighthouse laboratory. Genome sequencing is funded by the COVID-19 Genomics UK (COG-UK) consortium. COG-UK is supported by funding from the Medical Research Council (MRC) part of UK Research and Innovation (UKRI), the National Institute of Health Research (NIHR), and Genome Research Limited operating as the Wellcome Sanger Institute. + +If the UKRR dataset was used, required acknowledgement content: + +> This project includes data from the UKRR derived from patient-level information collected by the NHS as part of the care and support of kidney patients. We thank all kidney patients and kidney centres involved. The data are collated, maintained, and quality assured by the UKRR, which is part of the UK Kidney Association. The interpretation and reporting of these data are the responsibility of the authors and in no way should be seen as an official policy or interpretation of the UK Kidney Association. Access to the data was facilitated by the UKRR’s Data Release Group. UKRR data are used within OpenSAFELY to address a number of critical research, audit and service delivery questions related to the impact of COVID-19 on patients with kidney disease. + +## Methods - Data Sharing, Data Sources, software, and reproducibility + +When describing the OpenSAFELY platform, Service, and data, suggested content: + +> All data were linked, stored and analysed securely using the OpenSAFELY platform, , as part of the NHS England OpenSAFELY Analytics Service. Primary care records managed by the GP software provider, [TPP/Optum] were linked to [ONS death data, etc.] through OpenSAFELY [For more information on data linkage, see Data Provenance, Access, and Verification section]. [**If your project is ID 156 or above:** No data from patients who registered a Type-1 Opt Out with their GP surgery were included in this study]. More information on the patients available for selection in the Service is available in the [OpenSAFELY data](./opensafely-data/index.md) page of the documentation page documentation. +> +> The analysis dataset(s) was defined and created using ehrQL / Python [X.X]. Analysis was executed using [Stata 16.1 / Python X.X / R X.X]. All analysis code is shared openly for review and re-use under MIT open license [LINK TO GITHUB REPO]. +> +> All iterations of the pre-specified study protocol are archived with version control . + +When describing federated analyses across TPP and Optum databases (for example ), suggested content: + +> This was an analysis delivered using federated analysis through the OpenSAFELY platform. A federated analysis involves conducting patient-level analyses across multiple secure datasets, then later combining them: codelists and code for data management and data analysis were specified once using the OpenSAFELY tools; then transmitted securely from the OpenSAFELY jobs server to the OpenSAFELY-TPP platform within TPP’s secure environment, and separately to the OpenSAFELY-Optum platform within Optum’s secure environment, where they were each executed separately against local patient data; summary results were then reviewed for disclosiveness, released, and combined for the final outputs. + +## Patient and Public Involvement and Engagement (PPIE) + +Consider describing PPIE activities for the OpenSAFELY Service, in addition to any other project-specific PPIE. Suggested content: + +> OpenSAFELY has involved patients and the public in various ways: we developed a public website that provides a detailed description of the platform in language suitable for a lay audience (); we have participated in two citizen juries exploring public trust in OpenSAFELY; we have co-developed an explainer video (); we have patient representation who are experts by experience on our OpenSAFELY Oversight Board; we have partnered with Understanding Patient Data to produce lay explainers on the importance of large datasets for research; we have presented at various online public engagement events to key communities (e.g., Healthcare Excellence Through Technology; Faculty of Clinical Informatics annual conference; NHS Assembly; HDRUK symposium); and more. To ensure the patient voice is represented, we are working closely to decide on language choices with appropriate medical research charities (e.g., Association of Medical Research Charities). We will share information and interpretation of our findings through press releases, social media channels, and plain language summaries. + +## Information governance + +If required, suggested content on information governance for the OpenSAFELY Service: + +> NHS England is the data controller of the NHS England OpenSAFELY Analytics Service; [TPP is the data processor] [Optum is the data processor] [Optum and TPP are the data processors]; all study authors using OpenSAFELY have the approval of NHS England.1, 2 This implementation of OpenSAFELY is hosted within the [Optum environment which is] [TPP environment which is] [Optum and TPP environments which are] accredited to the ISO 27001 information security standard and [is][are] NHS IG Data Security and Information Governance Toolkit compliant.3 +> +> Patient data has been pseudonymised for analysis and linkage using industry standard cryptographic hashing techniques; all pseudonymised datasets transmitted for linkage onto OpenSAFELY are encrypted; access to the NHS England OpenSAFELY Analytics Service is via a virtual private network (VPN) connection; the researchers hold contracts with NHS England and only access the platform to initiate database queries and statistical models; all database activity is logged; only aggregate statistical outputs leave the platform environment following best practice for anonymisation of results such as statistical disclosure control for low cell counts.4 +> +> The service adheres to the obligations of the UK General Data Protection Regulation (UK GDPR) and the Data Protection Act 2018. The Secretary of State has requested that NHS England operates the Service under the COVID-19 Directions 20205 and the NHS OpenSAFELY Data Analytics Service Pilot Directions 2025 which came into force on 17 June 2025.6 +> +> The Pilot Directions enable the Service to be operated for purposes wider than COVID-19. Taken together, these provide the legal bases to link patient datasets using the service. +> +> 1. The NHS England OpenSAFELY COVID-19 service - privacy notice. NHS Digital (Now NHS England). +> (accessed 23 February 2026). +> 1. The NHS England OpenSAFELY Data Analytics Service pilot - privacy notice. NHS Digital (Now NHS England). +> (accessed 23 February 2026). +> 1. Data Security and Protection Toolkit. NHS Digital (Now NHS England). +> (accessed 23 February 2026). +> Archived at: . +> 1. ISB1523: Anonymisation Standard for Publishing Health and Social Care Data. NHS Digital (Now NHS England). +> (accessed 23 February 2026). +> 1. Secretary of State for Health and Social Care. UK Government. COVID-19 Public Health Directions 2020: notification to NHS Digital. +> (accessed 23 February 2026). +> Archived at: . +> 1. NHS OpenSAFELY Data Analytics Service Pilot Directions 2025. NHS England. +> (accessed 23 February 2026). + +## Data provenance, access and verification + +If required, suggested content on provenance, access and verification of data in the OpenSAFELY Service: + +> The data in the NHS England OpenSAFELY Analytics Service is drawn from General Practice data across England where Optum and TPP are the data processors. This study uses data from [Optum only / TPP only / both Optum and TPP]. Linked data from hospitals and death registrations are also available. +> +> Access to the underlying identifiable and potentially re-identifiable pseudonymised electronic health record data is tightly governed by various legislative and regulatory frameworks, and restricted by best practice. [Optum][TPP][Optum and TPP] developers initiate an automated process to create pseudonymised records in the core OpenSAFELY database, which are copies of key structured data tables in the identifiable records. These pseudonymised records are linked onto key external data resources that have also been pseudonymised via SHA-512 one-way hashing of NHS numbers using a shared salt. University of Oxford, Bennett Institute for Applied Data Science developers and PIs, who hold contracts with NHS England, have access to the OpenSAFELY pseudonymised data tables to develop the OpenSAFELY tools. +> +> These tools in turn enable researchers with OpenSAFELY data access agreements to write and execute code for data management and data analysis without direct access to the underlying raw pseudonymised patient data, and to review the outputs of this code. All OpenSAFELY platform software is shared for inspection on GitHub: . +> +> All code for the full data management pipeline, from raw data to completed results, for this analysis are available for review and reuse for all OpenSAFELY analyses [LINK TO GITHUB REPO]. The data management and analysis code for this paper was led by (XX) and contributed to by (XX, XX). + +## Open access + +We strongly encourage all papers using OpenSAFELY be pre-printed prior to peer-review. The vast majority of OpenSAFELY papers have been preprinted on [medRxiv](https://www.medrxiv.org/), though other preprint servers may be suitable. If you are unsure whether a particular preprint server is suitable for an OpenSAFELY paper, your co-pilot can advise. + +Outputs published in academic journals should comply with Wellcome’s [Plan S requirements for journal publication](https://docs.opensafely.org/plan-s/). diff --git a/docs/datapast/index.md b/docs/datapast/index.md index 57167928c..7397f5fd4 100644 --- a/docs/datapast/index.md +++ b/docs/datapast/index.md @@ -7,11 +7,11 @@ The Clinical DATAPAST (**Data** **P**ublication, **A**dvice and **S**upport **T**eam) function will act as a distinct but integral part of the publication approval service which was piloted during the pandemic. -**Publication approval = Clinical DATAPAST advice + NHS England approval decision** +**Publication approval = Clinical DATAPAST advice + Department of Health & Social Care (DHSC) approval decision** ## What does the Clinical DATAPAST do? -The Clinical DATAPAST function will provide advisory feedback to users (and the study leads) from clinical advisors[^1] on any work submitted for publication approval prior to NHS England receiving the work for an approval decision. +The Clinical DATAPAST function provides advisory feedback to Users (and the Project Leads) from two members of the Bennett Institute on any work submitted for publication approval prior to the DHSC receiving the work for an approval decision. Each submitted piece of work will ordinarily receive feedback from two advisors. @@ -20,31 +20,31 @@ Each submitted piece of work will ordinarily receive feedback from two advisors. The Clinical DATAPAST forms one of several mitigations established by the OpenSAFELY service to address the GP profession’s requirements: - to maintain alignment with the project’s approved purpose; -- to maintain the quality of the publication content by advising project leads regarding how clinical interactions are coded within GP EHR systems; +- to maintain the quality of the publication content by advising Project Leads regarding how clinical interactions are coded within GP EHR systems; - to help ensure conclusions on clinical policies and services are supported by the data. ## Who is part of the Clinical DATAPAST? -Prior to full implementation of the Clinical DATAPAST, we will roll out an interim process where the regular clinical advisor will be Dr Amir Mehrkar, an NHS GP, Clinical Informatician, and Director of IG and External Relations at OpenSAFELY. He will be supported by other clinicians (such as clinical pharmacists and clinical informaticians), as well as data scientists and epidemiologists with strong experience in GP data. +Prior to full implementation of the Clinical DATAPAST, we have an interim process involving two members of the Bennett Institute, drawn from clinicians (such as clinical pharmacists and clinical informaticians), data scientists and epidemiologists with substantial experience of GP data. It is expected that when the Clinical DATAPAST is fully implemented, all advisors will be clinicians or clinical informaticians (or another member of the general practice team appropriate for the study in question); all will have some knowledge of Electronic Health Record data and quantitative research methods, and be independent from the OpenSAFELY service and the Bennett Institute for Applied Data Science (University of Oxford). The Joint GP IT Committee of the British Medical Association and Royal College of GPs are in support of the interim process, pending full implementation. -## What does the NHS England approval decision assess? +## What does the Department of Health & Social Care approval decision assess? -The primary assessment of NHS England is to determine that the study leads did in fact do what they said they would do as was written in their initial application. Put simply, was the material submitted in-line with the approved project purpose? If not, NHS England will provide advice to the study leads. +The primary assessment of the DHSC is to determine that the Project Leads did in fact do what they said they would do as was written in their initial application. Put simply, was the material submitted in-line with the approved project purpose? If not, the DHSC will provide advice to the Project Leads. -To make their judgement, NHS England will use the actual material submitted, including the lay summary, and the information from the DATAPAST templates. As data controller, NHS England may exercise their judgement on how to constructively act on (both internally and externally) any information that could be deemed contentious, for example, information that could materially affect patient safety. NHS England will promptly communicate with study leads if there are any matters of concern. +To make their judgement, the DHSC will use the actual material submitted, including the lay summary, and the information from the DATAPAST templates. The DHSC may exercise their judgement on how to constructively act on (both internally and externally) any information that could be deemed contentious, for example, information that could materially affect patient safety. The DHSC will promptly communicate with Project Leads if there are any matters of concern. ## How will the interim process work? ### A summary -- There will be a structured DATAPAST template that advisors use to provide advice on your submitted work; academic users may recognise some parallels with the peer review process for journal submission. -- The template includes sections for users to provide responses. -- The completed templates, submitted work (with any amendments following users' consideration of the advice), and the lay summary will then be submitted to NHS England for an approval decision. -- The completed templates, independent of the final NHS England approval decision, will be placed in the public domain (most likely attached to the project on our jobserver, but the exact location is yet to be determined). +- There will be a structured DATAPAST template that advisors use to provide advice on your submitted work; academic Users may recognise some parallels with the peer review process for journal submission. +- The template includes sections for Users to provide responses. +- The completed templates, submitted work (with any amendments following Users' consideration of the advice), and the lay summary will then be submitted to the DHSC for an approval decision. +- The completed templates, independent of the final DHSC approval decision, will be placed in the public domain (most likely attached to the project on our jobserver, but the exact location is yet to be determined). ### The detail @@ -57,18 +57,16 @@ The [DATAPAST template](https://docs.google.com/document/d/10derqFbS3c0SbZxGnBb1 ## The workflow for submission for publication approval -All OpenSAFELY project outputs (e.g results, papers, presentations, etc.) need to be approved before they can be made public (e.g. submitting to a journal or a pre-print server, or uploading to any public facing website). The Clinical Datapast Review forms part of this publication approval process. For full guidance, including step-by-step instructions, can be found on the Policies for Researchers webpage > Acknowledgement and Data Sharing/Publication Policy > Publication of Results > in the Datasets used section. +All OpenSAFELY project outputs (e.g results, papers, presentations, etc.) need to be approved before they can be made public (e.g. submitting to a journal or a pre-print server, or uploading to any public facing website). The Clinical DATAPAST Review forms part of this publication approval process. -## The timelines +The Publication of Results Policy can be found at https://www.opensafely.org/policies-for-researchers/publication-of-results-policy/ -1. Users can expect to receive the DATAPAST templates from advisors within 2-4 weeks of submitting their work for publication approval (subject to annual leave and other service pressures). For specific review cutoff dates please see our publication of results policy. -1. After the DATAPAST templates have been reviewed and completed by users (alongside any amendments to work, where appropriate), the work will be submitted to NHS England for an approval decision. -1. NHS England typically responds within 2 weeks (subject to annual leave and service pressures). +## The timelines -Please refer to the [policies for researchers page](https://www.opensafely.org/policies-for-researchers/#all-datasets-publication) for full details of the publication review process, which now incorporates the Clinical DATAPAST function. +1. Users can expect to receive the DATAPAST templates from advisors within 2-4 weeks of submitting their work for publication approval (subject to annual leave and other service pressures). +1. After the DATAPAST templates have been reviewed and completed by Users (alongside any amendments to work, where appropriate), the work will be submitted to the DHSC for an approval decision. +1. The DHSC typically responds within 2-4 weeks (subject to annual leave and service pressures). -Please reach out to your co-pilot in the meantime if you have any questions, or post them in the user slack channel. +Please reach out to your Co-pilot in the meantime if you have any questions, or post them in the opensafely-users Slack channel, or alternatively, email publications@opensafely.org with your enquiry. The OpenSAFELY Leadership Team. - -[^1]: GPs, including clinicians from other relevant professions with the necessary experience and skills to provide project-specific advice diff --git a/docs/getting-started/tutorial/add-a-scripted-action-to-the-pipeline/index.md b/docs/getting-started/tutorial/add-a-scripted-action-to-the-pipeline/index.md index 29e7918f8..7a5a974b1 100644 --- a/docs/getting-started/tutorial/add-a-scripted-action-to-the-pipeline/index.md +++ b/docs/getting-started/tutorial/add-a-scripted-action-to-the-pipeline/index.md @@ -67,7 +67,7 @@ This code reads the CSV of patient data, and saves a histogram of ages to a new === "Python" ```yaml linenums="1" hl_lines="10 11 12 13 14 15" - version: "4.0" + version: "5.0" actions: generate_dataset: @@ -87,7 +87,7 @@ This code reads the CSV of patient data, and saves a histogram of ages to a new === "R" ```yaml linenums="1" hl_lines="10 11 12 13 14 15" - version: "4.0" + version: "5.0" actions: generate_dataset: diff --git a/docs/getting-started/tutorial/run-the-project-pipeline/index.md b/docs/getting-started/tutorial/run-the-project-pipeline/index.md index 80a017827..35222405a 100644 --- a/docs/getting-started/tutorial/run-the-project-pipeline/index.md +++ b/docs/getting-started/tutorial/run-the-project-pipeline/index.md @@ -24,7 +24,7 @@ open the `project.yaml` file by clicking on it. This file will be near the end o You should see a tab with the following content: ```yaml linenums="1" hl_lines="5" -version: "4.0" +version: "5.0" actions: generate_dataset: diff --git a/docs/images/project-edit-button.png b/docs/images/project-edit-button.png index 3445581cd..b6a43e682 100644 Binary files a/docs/images/project-edit-button.png and b/docs/images/project-edit-button.png differ diff --git a/docs/jobs-site.md b/docs/jobs-site.md index 63764c0c1..5ce40c41d 100644 --- a/docs/jobs-site.md +++ b/docs/jobs-site.md @@ -152,9 +152,11 @@ As part of publishing your outputs, you should also make the repository where yo ## Updating project status +Project statuses are not displayed publicly, but are used internally within the Bennett Institute to help manage the OpenSAFELY service. + When you start a new project on OpenSAFELY it will have the _Ongoing_ status, but as your work progresses you'll want to update this status. -If you are a member of a project you will see an `Edit` button near the top of your project page: +If you are a member of a project you will see an `Edit` button near the top of that project's page: ![Project edit button](./images/project-edit-button.png) diff --git a/docs/outputs/requesting-file-release.md b/docs/outputs/requesting-file-release.md index 26106d7b6..5e2042a7f 100644 --- a/docs/outputs/requesting-file-release.md +++ b/docs/outputs/requesting-file-release.md @@ -79,12 +79,6 @@ Only certain file types will be reviewed and released from the secure server. Se * **Other** * `txt` files can be released, but you should consider whether the output can be produced as a table, which is easier to review. * `json` files can be released, but as with tables, make sure that the attributes are easily understandable for reviewers. If the output can be represented as a table, you should consider converting it. - * `html` files can be released if you are producing a report that is intended to be hosted on [reports.opensafely.org](https://reports.opensafely.org/) but please note the points below: - * `html` files are harder to review than other output types, so should be reserved for reports which require both contextual text and embedded outputs. If you can produce your report locally, using individually released files, you should. - * Make sure that any code blocks are not rendered in the rendered report if they are not needed. You can find [examples showing how to do this for Jupyter notebooks and R markdown files](../reports/intro.md#producing-reports). - * Each individual output within the report should be requested for release separately, with the contextual information outlined above. - * `html` files should be stripped of any embedded javascript and styling. This is obfuscated when viewing a report via a web browser, but makes review of the raw file very difficult. Refer to our instructions [explaining how to strip the `html` files](../reports/intro.md#producing-reports). - * When making a review request that includes `html` files, please include a link to the code you have used to produce the reports. If you would like to release other file types, please email , stating why it is important that the file is released in a different format. diff --git a/docs/outputs/viewing-released-files.md b/docs/outputs/viewing-released-files.md index 1e493607d..eb8357063 100644 --- a/docs/outputs/viewing-released-files.md +++ b/docs/outputs/viewing-released-files.md @@ -13,7 +13,3 @@ If you have had [aggregated results released](requesting-file-release.md#release 1. You should include the code for these steps in your GitHub repo. 2. You **should not** commit any of the released outputs (including final processed charts/tables) to your GitHub repo. Make sure to include them in the `.gitignore` file. 3. Consider adding the code as an action in your project pipeline. - -### Reporting a data breach - -If you discover files released to the Jobs site that have been insufficiently redacted and still contain sensitive information, you should immediately contact and email the following (providing as much information as possible): Amir Mehrkar (); Ben Goldacre (); [disclosurecontrol@opensafely.org](mailto:disclosurecontrol@opensafely.org); and your co-pilot. Ensure you do not share these files and if they have already been shared please identify as best as possible with whom they have been shared. diff --git a/docs/reporting-a-data-breach.md b/docs/reporting-a-data-breach.md new file mode 100644 index 000000000..6c4177085 --- /dev/null +++ b/docs/reporting-a-data-breach.md @@ -0,0 +1,3 @@ +If you discover or suspect a data breach involving the OpenSAFELY Service, including the discovery of files released to the Jobs site that have been insufficiently redacted and still contain sensitive information, you must immediately email the OpenSAFELY Incident Team () providing as much information as possible. Ensure you do not share these files and if they have already been shared please identify as best as possible with whom they have been shared. + +Please refer to the [Incident Management Policy](https://www.opensafely.org/incident-management-policy/) for further information. diff --git a/docs/reports/create-a-draft.md b/docs/reports/create-a-draft.md deleted file mode 100644 index a74ff3236..000000000 --- a/docs/reports/create-a-draft.md +++ /dev/null @@ -1,60 +0,0 @@ - -## Create a draft report -After logging into the [administration area](https://reports.opensafely.org/admin/) click "Add" next to Reports: - -![Add report button](./images/reports-admin-add-report.jpg) - -### Organisation -Select your organisation from the list. -If it's missing from the list, please [contact us](../how-to-get-help.md). - - -### Navigation -Pick the `Category` you want to host your report under in the side nav of the site. - -Then set a `Menu name`. - - -### Report file details (GitHub) -!!! note - It was previously possible to release outputs to GitHub and the reports site was originally built to use those outputs. - OpenSAFELY has moved away from this method and all outputs are now released to the jobs site. - Please make sure to use the jobs site field in this form for your output location instead of the GitHub ones. - - -### Report file details (Jobs site) -Find your workspace on [the jobs site](https://jobs.opensafely.org). -Click `Released Outputs` to view the most recent version of each of your released outputs: - -![Most recent version of released outputs](./images/job-server-workspace-latest-outputs.jpg) - -Select the file you want to make your report with from the list on the left, and copy the direct URL which shows at the top of the file viewer. This is the URL you will need in the reports admin. - -![Where to get the direct URL for a file](./images/job-server-direct-output-file-link-release.jpg) - - -### Front matter -These fields are displayed above your report on the site. - - -### DOI -Fill this in after you have published your report. - - -### Visibility -`Is draft` will be ticked by default. -Reports should start as drafts so they are private before being reviewed. - - -### External -If you are creating a report from an external organisation, then you should fill in this section to explain why the report is being hosted on the OpenSAFELY platform. - - -### Related links -You should also add a link to the source code on GitHub which generated the outputs your report is built around. - -If the report has an associated paper, preprint or blog, ensure their links are added. - - -## Next step -[Have your report reviewed](./review-process.md). diff --git a/docs/reports/images/job-server-direct-output-file-link-published.jpg b/docs/reports/images/job-server-direct-output-file-link-published.jpg deleted file mode 100644 index ba1b26852..000000000 Binary files a/docs/reports/images/job-server-direct-output-file-link-published.jpg and /dev/null differ diff --git a/docs/reports/images/job-server-direct-output-file-link-release.jpg b/docs/reports/images/job-server-direct-output-file-link-release.jpg deleted file mode 100644 index a01400819..000000000 Binary files a/docs/reports/images/job-server-direct-output-file-link-release.jpg and /dev/null differ diff --git a/docs/reports/images/job-server-published-outputs.jpg b/docs/reports/images/job-server-published-outputs.jpg deleted file mode 100644 index 2cb3a49de..000000000 Binary files a/docs/reports/images/job-server-published-outputs.jpg and /dev/null differ diff --git a/docs/reports/images/job-server-workspace-latest-outputs.jpg b/docs/reports/images/job-server-workspace-latest-outputs.jpg deleted file mode 100644 index 6019a6ec4..000000000 Binary files a/docs/reports/images/job-server-workspace-latest-outputs.jpg and /dev/null differ diff --git a/docs/reports/images/reports-admin-add-report.jpg b/docs/reports/images/reports-admin-add-report.jpg deleted file mode 100644 index c2fe77a81..000000000 Binary files a/docs/reports/images/reports-admin-add-report.jpg and /dev/null differ diff --git a/docs/reports/intro.md b/docs/reports/intro.md deleted file mode 100644 index 444d3436d..000000000 --- a/docs/reports/intro.md +++ /dev/null @@ -1,149 +0,0 @@ -Reports are regularly updated outputs related to the COVID-19 pandemic, created with the OpenSAFELY platform. - -This service is currently in a pilot phase for external users. - -They are hosted on the [reports site](https://reports.opensafely.org). - -## Best practices -To ensure that the file is self-contained, all images must be in-line rather than published as separate files. -OpenSAFELY Reports only supports using one file for a report, in-lining images will allow you to use them within a report. -Images should be bitmaps rather than in vector graphics formats, PNG is suggested as a good option. - -Reports are static; there is no facility for dynamic content. -Any JavaScript that the report contains will be stripped out by OpenSAFELY Reports. - -All styling is applied by OpenSAFELY Reports; any styles included in the file will be stripped out. - -## Producing reports - -Reports that are hosted on the reports site have to be in the `html` file format. We recommend producing these files using either [Jupyter notebooks](https://jupyter.org/) or [R Markdown](https://rmarkdown.rstudio.com/index.html); below is some guidance on how to use them. -## Jupyter notebooks - -Jupyter notebooks provide an interactive environment for developing code which allows you to incorporate contextual text with code blocks. OpenSAFELY Reports is designed to work with Jupyter notebooks. It has automatic styling for the standard markup that Jupyter produces. - -You can refer to [our instructions on running a Jupyter environment in OpenSAFELY](../opensafely-cli.md#opensafely-launch-jupyter-running-jupyterlab). - -These guidelines for writing notebooks makes them consistent with the best practices in the section above. - -* Render matplotlib charts inline with this directive: `%matplotlib inline`. -* Configure matplotlib to output PNG charts with this directive: `%config InlineBackend.figure_format='png'`. -* Do not add interactivity features to your charts. -* If your notebook writes text using Python's `print()` function, it will be rendered in the final report as "preformatted" text, that is with a monospaced font. This may not be what you want and is inappropriate for body text. Instead you should use the `display()` and `Markdown()` functions from the `IPython.display` package, like this: `display(Markdown("Some text which can be Markdown formatted."))`. - -This can be achieved by including the code block below in a code cell. This also shows you how to incorporate tables and figures into your notebook. - -```python -%matplotlib inline -%config InlineBackend - -import pandas as pd -from IPython.display import HTML, display, Markdown, Image - -table = pd.read_csv('output/table.csv') - -table = display( - HTML( - table.to_html(index=False) - ) - ) - -img = display( - Image(filename='output/figure.png') - ) - -value = 10 - -text = display( - Markdown("Some text which can be Markdown formatted.") - ) -``` - -For more details on formatting markdown cells, -refer to [this summary of Markdown formatting](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet). - -### Converting Jupyter notebooks to html - -You can convert your notebook to HTML using [nbconvert](https://nbconvert.readthedocs.io/en/latest/), with the `basic` template, like this: - -``` -nbconvert my-notebook.ipynb --execute --to html --template basic --no-input -``` - -This removes any code blocks in the notebook from the rendered html; to keep them you can remove the `no-input` flag. - -To run this within an OpenSAFELY action, you can use the following run command: - -``` -run: python:v2 jupyter nbconvert /workspace/analysis/notebook.ipynb --execute --to html --output-dir=/workspace/output --no-input --ExecutePreprocessor.timeout=86400 -``` - -Refer to an [example of this, implemented as an OpenSAFELY action](https://github.com/opensafely/mechanical-valve-anticoag/blob/1f158504ba5a74470b11c8d73311fb2859d67cb7/project.yaml#L53-L63). - -## R Markdown - -Similarly to Jupyter notebooks, R markdown allows you to combine narrative text and formatted code blocks. See the [installation instructions for R Markdown](https://rmarkdown.rstudio.com/lesson-1.html#installation). - -[This markdown cheatsheet](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) is a useful reference for formatting markdown files, including how to add tables and figures. - -To make R markdown files consistent with the best practices in the section above: - -* Use the default theme by setting the theme to `null` in the markdown metadata (see below) -* Hide code blocks unless you want to display them by adding `include=False` when specifying a code block. -* Do not add interactivity features to your charts. - -An example R markdown document is shown below: - -````r ---- -title: "A very interesting report" -output: - html_document: - theme: null - highlight: null - mathjax: null - toc: false - fig_caption: false - df_print: default ---- - -```{r echo=FALSE} -library(readr) -library(knitr) -knitr::opts_chunk$set( echo=FALSE, message=FALSE ) -``` - -## A table - -Find below a table of interest. - -```{r} -read_csv("output/table.csv") -``` - -## A figure - -Find below a figure of interest. - -![Figure legend](output/figure.png) - -## Another section - -```{r} -value = 10 -``` - -Some text which can be *Markdown* formatted. -The value is `r value`. - -```` - -### Converting R markdown files to html - -In OpenSAFELY, you can convert an R markdown file to html file by including the following run command in an action. - -``` -run: r:v2 -e 'rmarkdown::render("path_to_report", output_dir = "/workspace/output/",knit_root_dir = "/workspace",)' -``` - -## Next step -[Start by creating a report](./create-a-draft.md). diff --git a/docs/reports/publish-a-report.md b/docs/reports/publish-a-report.md deleted file mode 100644 index 8cb39d488..000000000 --- a/docs/reports/publish-a-report.md +++ /dev/null @@ -1,47 +0,0 @@ -The report you've created so far is only a draft. -Edit your report and complete the steps below to make it available for public viewing. - -## Switch to a published outputs -Published reports require the output they're based on to also be published. - -Follow [the instructions on publishing your output](../jobs-site.md#publishing-outputs). - -Select a set of published outputs from the list: -![List of published outputs](./images/job-server-published-outputs.jpg) - -!!! note - Published outputs can be in a draft status while they are being reviewed. - A badge saying "published" will be displayed next to those which have moved out of that state. - -Select the file you want to use for your report from the list on the left, and copy the direct URL which shows at the top of the file viewer. - -![Where to get the direct URL for a file](./images/job-server-direct-output-file-link-published.jpg) - -Replace the `Job server url` you currently have with this URL.you will need in the reports admin. - - -## Create a DOI -All published reports should have a DOI. -You will need your own [CrossRef user credentials](https://www.crossref.org/documentation/member-setup/account-credentials/) in order to register DOIs. - -How to create and add a DOI: - -1. Make sure your report is published and not still draft. (CrossRef requires that all DOIs link to a landing page which is publicly accessible.) -2. Find the suggested DOI on the admin page for your report. -3. Go to the [CrossRef Web Deposit page](https://apps.crossref.org/webDeposit/) and fill in the basic information: - - select `Report` as the Data Type. - - Enter the suggested DOI from your report, prefixed with our organisation code: `10.53764/xxxxxxxxxxxx`. - - Add the URL for the report. - - `OpenSAFELY` as Publisher. - - Authors have to be added one-by-one so you may wish to use `The OpenSAFELY Collaborative` in place of some or all authors, if appropriate. - - Use the report's first publication date as the `online` publication date (`Print` publication date can be left blank). -4. Submit DOI, you'll then be prompted for your login credentials and then your/an email address. -5. Enter the DOI URL in the `DOI` field (`https://doi.org/10.53764/xxxxxxxxxxxx`) - -See the [Crossref documentation](https://www.crossref.org/documentation/member-setup/web-deposit-form/) for more information. - - -## Publish your report -Untick the `Is draft` check box and click Save. - -Your report has now been published and will be visible to the public on the reports site. diff --git a/docs/reports/review-process.md b/docs/reports/review-process.md deleted file mode 100644 index 641096d5c..000000000 --- a/docs/reports/review-process.md +++ /dev/null @@ -1,9 +0,0 @@ -When you are ready to publish your report, several steps should be followed: - -* It must be checked by NHSE (may simply reference the corresponding paper where applicable). Contact [publications@opensafely.org](mailto:publications@opensafely.org). -* Send your report to your co-pilot so they can review it. -* Make sure the linked code repository is also public and has gone through the [checking process](../project-completion.md). - - -## Next step -[Publish your report](./publish-a-report.md) diff --git a/docs/system-integration.md b/docs/system-integration.md index 153f91abb..44737ea02 100644 --- a/docs/system-integration.md +++ b/docs/system-integration.md @@ -33,31 +33,38 @@ and how they interact. The specific steps required to create a minimal setup are: -1. Deploy a [*job runner*](https://github.com/opensafely-core/job-runner) within your secure environment. +1. Deploy a [*RAP Agent*](https://github.com/opensafely-core/job-runner/blob/main/DEVELOPERS.md#the-rap-agent) within your secure environment. A minimal configuration simply runs Docker containers and stores any resulting container output on a local disk. -2. Deploy a [*job server*](https://github.com/opensafely-core/job-server) - that the *job runner* polls for jobs that end users request to be run. + +1. Deploy a [*RAP Controller*](https://github.com/opensafely-core/job-runner/blob/main/DEVELOPERS.md#the-rap-controller). This provides a service + that creates tasks for the RAP Agent to run, and a Django web application that provides a *RAP API* + that the *RAP Agent* polls for tasks, and the *job server* (see below) uses to submit jobs. + + It is possible to use our existing *RAP Controller* instance; [contact us](how-to-get-help.md#data-providers) + if you would like us to configure this for you. + +1. Deploy a [*job server*](https://github.com/opensafely-core/job-server) + that uses the *RAP API* to submit jobs that end users request to be run, and to obtain updates on the + output of jobs. It is possible to use our existing instance of this server at our [*jobs site*](https://jobs.opensafely.org); [contact us](how-to-get-help.md#data-providers) if you would like us to configure this for you. -3. Create a secure network with our [*GitHub proxy*](https://github.com/opensafely-core/proxy). +1. Create a secure network with our [*GitHub proxy*](https://github.com/opensafely-core/proxy). This provides access to repositories with research study code to run and Docker images used to run the code. -4. To provide *access to your database* from within your setup, +1. To provide *access to your database* from within your setup, integrate into our [*ehrQL*](https://github.com/opensafely-core/ehrql) ETL tool: * via an implementation of a backend interface; [this is an example for TPP](https://github.com/opensafely-core/ehrql/blob/main/ehrql/backends/tpp.py) * and, if you are using an as-yet unsupported database, a query engine; [this is an example for Trino](https://github.com/opensafely-core/ehrql/blob/main/ehrql/query_engines/trino.py) -5. *Releasing job outputs* requires: +1. To enable *viewing and releasing job outputs*, deploy [*Airlock*](https://github.com/opensafely-core/ airlock) within your secure environment. - * the [*release-hatch*](https://github.com/opensafely-core/release-hatch) tool for reviewing outputs - * the [*output-publisher*](https://github.com/opensafely-core/output-publisher) tool for publishing outputs ### Deployment diff --git a/justfile b/justfile index b274f92c5..d3921fddb 100644 --- a/justfile +++ b/justfile @@ -125,11 +125,11 @@ fix: devenv # Run the dev project run: devenv - $BIN/mkdocs serve -a localhost:8910 + NO_MKDOCS_2_WARNING=1 $BIN/mkdocs serve -a localhost:8910 # Build the documentation build: devenv - $BIN/mkdocs build --strict + NO_MKDOCS_2_WARNING=1 $BIN/mkdocs build --strict # Count words in generated documentation content (within
tags) wordcount: build diff --git a/mkdocs.yml b/mkdocs.yml index c2deda0c7..1aa6517ad 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -76,11 +76,7 @@ nav: - Review process for release requests: outputs/output-checking.md - Viewing released outputs: outputs/viewing-released-files.md - Viewing and Releasing with Airlock: '!import https://github.com/opensafely-core/airlock?branch=main' - - Reports: - - Overview: reports/intro.md - - Create a draft: reports/create-a-draft.md - - Review process: reports/review-process.md - - Publishing a report: reports/publish-a-report.md + - Reporting a Data Breach: reporting-a-data-breach.md - Managing your OpenSAFELY project: - Telling us about changes to your project: project-changes.md - Project completion: project-completion.md @@ -124,6 +120,7 @@ nav: - Requesting new libraries: requesting-libraries.md - Plan S and OpenSAFELY: plan-s.md - Updating the documentation: updating-the-docs.md + - Contributorship and content guidance: contributorship-and-content-guidance.md - Bennett Institute Open Manifesto: open-data-manifesto.md - Platform News: https://www.opensafely.org/changelog/ theme: diff --git a/requirements.dev.txt b/requirements.dev.txt index e055fcd28..192951ec6 100644 --- a/requirements.dev.txt +++ b/requirements.dev.txt @@ -4,13 +4,13 @@ # # pip-compile --allow-unsafe --generate-hashes --output-file=requirements.dev.txt requirements.dev.in # -build==1.2.2.post1 \ - --hash=sha256:1d61c0887fa860c01971625baae8bdd338e517b836a2f70dd1f7aa3a6b2fc5b5 \ - --hash=sha256:b36993e92ca9375a219c99e606a122ff365a760a2d4bba0caa09bd5278b608b7 +build==1.4.0 \ + --hash=sha256:6a07c1b8eb6f2b311b96fcbdbce5dab5fe637ffda0fd83c9cac622e927501596 \ + --hash=sha256:f1b91b925aa322be454f8330c6fb48b465da993d1e7e7e6fa35027ec49f3c936 # via pip-tools -cfgv==3.4.0 \ - --hash=sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9 \ - --hash=sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560 +cfgv==3.5.0 \ + --hash=sha256:a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0 \ + --hash=sha256:d5b1034354820651caa73ede66a6294d6e95c1b00acc5e9b098e917404669132 # via pre-commit click==8.1.8 \ --hash=sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2 \ @@ -18,21 +18,23 @@ click==8.1.8 \ # via # -c requirements.prod.txt # pip-tools -distlib==0.3.9 \ - --hash=sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87 \ - --hash=sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403 +distlib==0.4.0 \ + --hash=sha256:9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16 \ + --hash=sha256:feec40075be03a04501a973d81f633735b4b69f98b05450592310c0f401a4e0d # via virtualenv -filelock==3.20.3 \ - --hash=sha256:18c57ee915c7ec61cff0ecf7f0f869936c7c30191bb0cf406f1341778d0834e1 \ - --hash=sha256:4b0dda527ee31078689fc205ec4f1c1bf7d56cf88b6dc9426c4f230e46c2dce1 - # via virtualenv -identify==2.6.8 \ - --hash=sha256:61491417ea2c0c5c670484fd8abbb34de34cdae1e5f39a73ee65e48e4bb663fc \ - --hash=sha256:83657f0f766a3c8d0eaea16d4ef42494b39b34629a4b3192a9d020d349b3e255 +filelock==3.25.2 \ + --hash=sha256:b64ece2b38f4ca29dd3e810287aa8c48182bbecd1ae6e9ae126c9b35f1382694 \ + --hash=sha256:ca8afb0da15f229774c9ad1b455ed96e85a81373065fb10446672f64444ddf70 + # via + # python-discovery + # virtualenv +identify==2.6.18 \ + --hash=sha256:873ac56a5e3fd63e7438a7ecbc4d91aca692eb3fefa4534db2b7913f3fc352fd \ + --hash=sha256:8db9d3c8ea9079db92cafb0ebf97abdc09d52e97f4dcf773a2e694048b7cd737 # via pre-commit -nodeenv==1.9.1 \ - --hash=sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f \ - --hash=sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9 +nodeenv==1.10.0 \ + --hash=sha256:5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827 \ + --hash=sha256:996c191ad80897d076bdfba80a41994c2b47c68e224c542b48feba42ba00f8bb # via pre-commit packaging==24.2 \ --hash=sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759 \ @@ -50,6 +52,7 @@ platformdirs==4.3.6 \ --hash=sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb # via # -c requirements.prod.txt + # python-discovery # virtualenv pre-commit==4.5.1 \ --hash=sha256:3b3afd891e97337708c1674210f8eba659b52a38ea5f822ff142d10786221f77 \ @@ -61,6 +64,12 @@ pyproject-hooks==1.2.0 \ # via # build # pip-tools +python-discovery==1.1.3 \ + --hash=sha256:7acca36e818cd88e9b2ba03e045ad7e93e1713e29c6bbfba5d90202310b7baa5 \ + --hash=sha256:7acca36e818cd88e9b2ba03e045ad7e93e1713e29c6bbfba5d90202310b7baa5 \ + --hash=sha256:90e795f0121bc84572e737c9aa9966311b9fde44ffb88a5953b3ec9b31c6945e \ + --hash=sha256:90e795f0121bc84572e737c9aa9966311b9fde44ffb88a5953b3ec9b31c6945e + # via virtualenv pyyaml==6.0.2 \ --hash=sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff \ --hash=sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48 \ @@ -118,59 +127,59 @@ pyyaml==6.0.2 \ # via # -c requirements.prod.txt # pre-commit -ruff==0.15.4 \ - --hash=sha256:04196ad44f0df220c2ece5b0e959c2f37c777375ec744397d21d15b50a75264f \ - --hash=sha256:04196ad44f0df220c2ece5b0e959c2f37c777375ec744397d21d15b50a75264f \ - --hash=sha256:291258c917539e18f6ba40482fe31d6f5ac023994ee11d7bdafd716f2aab8a68 \ - --hash=sha256:291258c917539e18f6ba40482fe31d6f5ac023994ee11d7bdafd716f2aab8a68 \ - --hash=sha256:3412195319e42d634470cc97aa9803d07e9d5c9223b99bcb1518f0c725f26ae1 \ - --hash=sha256:3412195319e42d634470cc97aa9803d07e9d5c9223b99bcb1518f0c725f26ae1 \ - --hash=sha256:3f1c4893841ff2d54cbda1b2860fa3260173df5ddd7b95d370186f8a5e66a4ac \ - --hash=sha256:3f1c4893841ff2d54cbda1b2860fa3260173df5ddd7b95d370186f8a5e66a4ac \ - --hash=sha256:3f83c45911da6f2cd5936c436cf86b9f09f09165f033a99dcf7477e34041cbc3 \ - --hash=sha256:3f83c45911da6f2cd5936c436cf86b9f09f09165f033a99dcf7477e34041cbc3 \ - --hash=sha256:451a2e224151729b3b6c9ffb36aed9091b2996fe4bdbd11f47e27d8f2e8888ec \ - --hash=sha256:451a2e224151729b3b6c9ffb36aed9091b2996fe4bdbd11f47e27d8f2e8888ec \ - --hash=sha256:5a1632c66672b8b4d3e1d1782859e98d6e0b4e70829530666644286600a33992 \ - --hash=sha256:5a1632c66672b8b4d3e1d1782859e98d6e0b4e70829530666644286600a33992 \ - --hash=sha256:60d5177e8cfc70e51b9c5fad936c634872a74209f934c1e79107d11787ad5453 \ - --hash=sha256:60d5177e8cfc70e51b9c5fad936c634872a74209f934c1e79107d11787ad5453 \ - --hash=sha256:65594a2d557d4ee9f02834fcdf0a28daa8b3b9f6cb2cb93846025a36db47ef22 \ - --hash=sha256:65594a2d557d4ee9f02834fcdf0a28daa8b3b9f6cb2cb93846025a36db47ef22 \ - --hash=sha256:820b8766bd65503b6c30aaa6331e8ef3a6e564f7999c844e9a547c40179e440a \ - --hash=sha256:820b8766bd65503b6c30aaa6331e8ef3a6e564f7999c844e9a547c40179e440a \ - --hash=sha256:917cc68503357021f541e69b35361c99387cdbbf99bd0ea4aa6f28ca99ff5338 \ - --hash=sha256:917cc68503357021f541e69b35361c99387cdbbf99bd0ea4aa6f28ca99ff5338 \ - --hash=sha256:a1810931c41606c686bae8b5b9a8072adac2f611bb433c0ba476acba17a332e0 \ - --hash=sha256:a1810931c41606c686bae8b5b9a8072adac2f611bb433c0ba476acba17a332e0 \ - --hash=sha256:a4386ba2cd6c0f4ff75252845906acc7c7c8e1ac567b7bc3d373686ac8c222ba \ - --hash=sha256:a4386ba2cd6c0f4ff75252845906acc7c7c8e1ac567b7bc3d373686ac8c222ba \ - --hash=sha256:a8f157f2e583c513c4f5f896163a93198297371f34c04220daf40d133fdd4f7f \ - --hash=sha256:a8f157f2e583c513c4f5f896163a93198297371f34c04220daf40d133fdd4f7f \ - --hash=sha256:b2496488bdfd3732747558b6f95ae427ff066d1fcd054daf75f5a50674411e75 \ - --hash=sha256:b2496488bdfd3732747558b6f95ae427ff066d1fcd054daf75f5a50674411e75 \ - --hash=sha256:c9fb74bab47139c1751f900f857fa503987253c3ef89129b24ed375e72873e85 \ - --hash=sha256:c9fb74bab47139c1751f900f857fa503987253c3ef89129b24ed375e72873e85 \ - --hash=sha256:e9737c8161da79fd7cfec19f1e35620375bd8b2a50c3e77fa3d2c16f574105cc \ - --hash=sha256:e9737c8161da79fd7cfec19f1e35620375bd8b2a50c3e77fa3d2c16f574105cc \ - --hash=sha256:f80c98765949c518142b3a50a5db89343aa90f2c2bf7799de9986498ae6176db \ - --hash=sha256:f80c98765949c518142b3a50a5db89343aa90f2c2bf7799de9986498ae6176db +ruff==0.15.6 \ + --hash=sha256:13f4594b04e42cd24a41da653886b04d2ff87adbf57497ed4f728b0e8a4866f8 \ + --hash=sha256:13f4594b04e42cd24a41da653886b04d2ff87adbf57497ed4f728b0e8a4866f8 \ + --hash=sha256:1c22e6f02c16cfac3888aa636e9eba857254d15bbacc9906c9689fdecb1953ab \ + --hash=sha256:1c22e6f02c16cfac3888aa636e9eba857254d15bbacc9906c9689fdecb1953ab \ + --hash=sha256:3bd9967851a25f038fc8b9ae88a7fbd1b609f30349231dffaa37b6804923c4bb \ + --hash=sha256:3bd9967851a25f038fc8b9ae88a7fbd1b609f30349231dffaa37b6804923c4bb \ + --hash=sha256:542aaf1de3154cea088ced5a819ce872611256ffe2498e750bbae5247a8114e9 \ + --hash=sha256:542aaf1de3154cea088ced5a819ce872611256ffe2498e750bbae5247a8114e9 \ + --hash=sha256:55a1ad63c5a6e54b1f21b7514dfadc0c7fb40093fa22e95143cf3f64ebdcd512 \ + --hash=sha256:55a1ad63c5a6e54b1f21b7514dfadc0c7fb40093fa22e95143cf3f64ebdcd512 \ + --hash=sha256:70789d3e7830b848b548aae96766431c0dc01a6c78c13381f423bf7076c66d15 \ + --hash=sha256:70789d3e7830b848b548aae96766431c0dc01a6c78c13381f423bf7076c66d15 \ + --hash=sha256:70d263770d234912374493e8cc1e7385c5d49376e41dfa51c5c3453169dc581c \ + --hash=sha256:70d263770d234912374493e8cc1e7385c5d49376e41dfa51c5c3453169dc581c \ + --hash=sha256:7c98c3b16407b2cf3d0f2b80c80187384bc92c6774d85fefa913ecd941256fff \ + --hash=sha256:7c98c3b16407b2cf3d0f2b80c80187384bc92c6774d85fefa913ecd941256fff \ + --hash=sha256:8394c7bb153a4e3811a4ecdacd4a8e6a4fa8097028119160dffecdcdf9b56ae4 \ + --hash=sha256:8394c7bb153a4e3811a4ecdacd4a8e6a4fa8097028119160dffecdcdf9b56ae4 \ + --hash=sha256:85b042377c2a5561131767974617006f99f7e13c63c111b998f29fc1e58a4cfb \ + --hash=sha256:85b042377c2a5561131767974617006f99f7e13c63c111b998f29fc1e58a4cfb \ + --hash=sha256:8dc473ba093c5ec238bb1e7429ee676dca24643c471e11fbaa8a857925b061c0 \ + --hash=sha256:8dc473ba093c5ec238bb1e7429ee676dca24643c471e11fbaa8a857925b061c0 \ + --hash=sha256:98893c4c0aadc8e448cfa315bd0cc343a5323d740fe5f28ef8a3f9e21b381f7e \ + --hash=sha256:98893c4c0aadc8e448cfa315bd0cc343a5323d740fe5f28ef8a3f9e21b381f7e \ + --hash=sha256:aee25bc84c2f1007ecb5037dff75cef00414fdf17c23f07dc13e577883dca406 \ + --hash=sha256:aee25bc84c2f1007ecb5037dff75cef00414fdf17c23f07dc13e577883dca406 \ + --hash=sha256:bbf67d39832404812a2d23020dda68fee7f18ce15654e96fb1d3ad21a5fe436c \ + --hash=sha256:bbf67d39832404812a2d23020dda68fee7f18ce15654e96fb1d3ad21a5fe436c \ + --hash=sha256:c34de3dd0b0ba203be50ae70f5910b17188556630e2178fd7d79fc030eb0d837 \ + --hash=sha256:c34de3dd0b0ba203be50ae70f5910b17188556630e2178fd7d79fc030eb0d837 \ + --hash=sha256:cef49e30bc5a86a6a92098a7fbf6e467a234d90b63305d6f3ec01225a9d092e0 \ + --hash=sha256:cef49e30bc5a86a6a92098a7fbf6e467a234d90b63305d6f3ec01225a9d092e0 \ + --hash=sha256:e2ed8aea2f3fe57886d3f00ea5b8aae5bf68d5e195f487f037a955ff9fbaac9e \ + --hash=sha256:e2ed8aea2f3fe57886d3f00ea5b8aae5bf68d5e195f487f037a955ff9fbaac9e \ + --hash=sha256:ee7dcfaad8b282a284df4aa6ddc2741b3f4a18b0555d626805555a820ea181c3 \ + --hash=sha256:ee7dcfaad8b282a284df4aa6ddc2741b3f4a18b0555d626805555a820ea181c3 # via -r requirements.dev.in -virtualenv==20.36.1 \ - --hash=sha256:575a8d6b124ef88f6f51d56d656132389f961062a9177016a50e4f507bbcc19f \ - --hash=sha256:8befb5c81842c641f8ee658481e42641c68b5eab3521d8e092d18320902466ba +virtualenv==21.2.0 \ + --hash=sha256:1720dc3a62ef5b443092e3f499228599045d7fea4c79199770499df8becf9098 \ + --hash=sha256:1bd755b504931164a5a496d217c014d098426cddc79363ad66ac78125f9d908f # via pre-commit -wheel==0.46.2 \ - --hash=sha256:33ae60725d69eaa249bc1982e739943c23b34b58d51f1cb6253453773aca6e65 \ - --hash=sha256:3d79e48fde9847618a5a181f3cc35764c349c752e2fe911e65fa17faab9809b0 +wheel==0.46.3 \ + --hash=sha256:4b399d56c9d9338230118d705d9737a2a468ccca63d5e813e2a4fc7815d8bc4d \ + --hash=sha256:e3e79874b07d776c40bd6033f8ddf76a7dad46a7b8aa1b2787a83083519a1803 # via pip-tools # The following packages are considered to be unsafe in a requirements file: -pip==26.0 \ - --hash=sha256:3ce220a0a17915972fbf1ab451baae1521c4539e778b28127efa79b974aff0fa \ - --hash=sha256:98436feffb9e31bc9339cf369fd55d3331b1580b6a6f1173bacacddcf9c34754 +pip==26.0.1 \ + --hash=sha256:bdb1b08f4274833d62c1aa29e20907365a2ceb950410df15fc9521bad440122b \ + --hash=sha256:c4037d8a277c89b320abe636d59f91e6d0922d08a05b60e85e53b296613346d8 # via pip-tools -setuptools==78.1.1 \ - --hash=sha256:c3a9c4211ff4c309edb8b8c4f1cbfa7ae324c4ba9f91ff254e3d305b9fd54561 \ - --hash=sha256:fcc17fd9cd898242f6b4adfaca46137a9edef687f43e6f78469692a5e70d851d +setuptools==82.0.1 \ + --hash=sha256:7d872682c5d01cfde07da7bccc7b65469d3dca203318515ada1de5eda35efbf9 \ + --hash=sha256:a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb # via pip-tools diff --git a/requirements.prod.in b/requirements.prod.in index 9e8a1c1be..108473281 100644 --- a/requirements.prod.in +++ b/requirements.prod.in @@ -3,6 +3,7 @@ # To generate requirements file, run: # pip-compile --generate-hashes --output-file=requirements.prod.txt requirements.prod.in +click==8.2.1 # See https://github.com/mkdocs/mkdocs/issues/4032 mkdocs mkdocs-macros-plugin mkdocs-material diff --git a/requirements.prod.txt b/requirements.prod.txt index 1bd0932c3..57fe7efc1 100644 --- a/requirements.prod.txt +++ b/requirements.prod.txt @@ -4,120 +4,160 @@ # # pip-compile --allow-unsafe --generate-hashes --output-file=requirements.prod.txt requirements.prod.in # -babel==2.17.0 \ - --hash=sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d \ - --hash=sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2 +babel==2.18.0 \ + --hash=sha256:b80b99a14bd085fcacfa15c9165f651fbb3406e66cc603abf11c5750937c992d \ + --hash=sha256:e2b422b277c2b9a9630c1d7903c2a00d0830c409c59ac8cae9081c92f1aeba35 # via mkdocs-material -backrefs==5.8 \ - --hash=sha256:2cab642a205ce966af3dd4b38ee36009b31fa9502a35fd61d59ccc116e40a6bd \ - --hash=sha256:2e1c15e4af0e12e45c8701bd5da0902d326b2e200cafcd25e49d9f06d44bb61b \ - --hash=sha256:a66851e4533fb5b371aa0628e1fee1af05135616b86140c9d787a2ffdf4b8fdc \ - --hash=sha256:bbef7169a33811080d67cdf1538c8289f76f0942ff971222a16034da88a73486 \ - --hash=sha256:c67f6638a34a5b8730812f5101376f9d41dc38c43f1fdc35cb54700f6ed4465d \ - --hash=sha256:e3a63b073867dbefd0536425f43db618578528e3896fb77be7141328642a1585 +backrefs==6.2 \ + --hash=sha256:08aa7fae530c6b2361d7bdcbda1a7c454e330cc9dbcd03f5c23205e430e5c3be \ + --hash=sha256:0fdc7b012420b6b144410342caeb8adc54c6866cf12064abc9bb211302e496f8 \ + --hash=sha256:12df81596ab511f783b7d87c043ce26bc5b0288cf3bb03610fe76b8189282b2b \ + --hash=sha256:664e33cd88c6840b7625b826ecf2555f32d491800900f5a541f772c485f7cda7 \ + --hash=sha256:c3f4b9cb2af8cda0d87ab4f57800b57b95428488477be164dd2b47be54db0c90 \ + --hash=sha256:e5f805ae09819caa1aa0623b4a83790e7028604aa2b8c73ba602c4454e665de7 \ + --hash=sha256:f44ff4d48808b243b6c0cdc6231e22195c32f77046018141556c66f8bab72a49 # via mkdocs-material -certifi==2025.1.31 \ - --hash=sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651 \ - --hash=sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe +certifi==2026.2.25 \ + --hash=sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa \ + --hash=sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7 # via requests -charset-normalizer==3.4.1 \ - --hash=sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537 \ - --hash=sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa \ - --hash=sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a \ - --hash=sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294 \ - --hash=sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b \ - --hash=sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd \ - --hash=sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601 \ - --hash=sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd \ - --hash=sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4 \ - --hash=sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d \ - --hash=sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2 \ - --hash=sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313 \ - --hash=sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd \ - --hash=sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa \ - --hash=sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8 \ - --hash=sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1 \ - --hash=sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2 \ - --hash=sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496 \ - --hash=sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d \ - --hash=sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b \ - --hash=sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e \ - --hash=sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a \ - --hash=sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4 \ - --hash=sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca \ - --hash=sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78 \ - --hash=sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408 \ - --hash=sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5 \ - --hash=sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3 \ - --hash=sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f \ - --hash=sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a \ - --hash=sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765 \ - --hash=sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6 \ - --hash=sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146 \ - --hash=sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6 \ - --hash=sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9 \ - --hash=sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd \ - --hash=sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c \ - --hash=sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f \ - --hash=sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545 \ - --hash=sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176 \ - --hash=sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770 \ - --hash=sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824 \ - --hash=sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f \ - --hash=sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf \ - --hash=sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487 \ - --hash=sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d \ - --hash=sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd \ - --hash=sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b \ - --hash=sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534 \ - --hash=sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f \ - --hash=sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b \ - --hash=sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9 \ - --hash=sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd \ - --hash=sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125 \ - --hash=sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9 \ - --hash=sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de \ - --hash=sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11 \ - --hash=sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d \ - --hash=sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35 \ - --hash=sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f \ - --hash=sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda \ - --hash=sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7 \ - --hash=sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a \ - --hash=sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971 \ - --hash=sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8 \ - --hash=sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41 \ - --hash=sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d \ - --hash=sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f \ - --hash=sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757 \ - --hash=sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a \ - --hash=sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886 \ - --hash=sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77 \ - --hash=sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76 \ - --hash=sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247 \ - --hash=sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85 \ - --hash=sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb \ - --hash=sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7 \ - --hash=sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e \ - --hash=sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6 \ - --hash=sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037 \ - --hash=sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1 \ - --hash=sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e \ - --hash=sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807 \ - --hash=sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407 \ - --hash=sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c \ - --hash=sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12 \ - --hash=sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3 \ - --hash=sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089 \ - --hash=sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd \ - --hash=sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e \ - --hash=sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00 \ - --hash=sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616 +charset-normalizer==3.4.6 \ + --hash=sha256:06a7e86163334edfc5d20fe104db92fcd666e5a5df0977cb5680a506fe26cc8e \ + --hash=sha256:0c173ce3a681f309f31b87125fecec7a5d1347261ea11ebbb856fa6006b23c8c \ + --hash=sha256:0e28d62a8fc7a1fa411c43bd65e346f3bce9716dc51b897fbe930c5987b402d5 \ + --hash=sha256:0e901eb1049fdb80f5bd11ed5ea1e498ec423102f7a9b9e4645d5b8204ff2815 \ + --hash=sha256:11afb56037cbc4b1555a34dd69151e8e069bee82e613a73bef6e714ce733585f \ + --hash=sha256:150b8ce8e830eb7ccb029ec9ca36022f756986aaaa7956aad6d9ec90089338c0 \ + --hash=sha256:172985e4ff804a7ad08eebec0a1640ece87ba5041d565fff23c8f99c1f389484 \ + --hash=sha256:197c1a244a274bb016dd8b79204850144ef77fe81c5b797dc389327adb552407 \ + --hash=sha256:1ae6b62897110aa7c79ea2f5dd38d1abca6db663687c0b1ad9aed6f6bae3d9d6 \ + --hash=sha256:1cf0a70018692f85172348fe06d3a4b63f94ecb055e13a00c644d368eb82e5b8 \ + --hash=sha256:1ed80ff870ca6de33f4d953fda4d55654b9a2b340ff39ab32fa3adbcd718f264 \ + --hash=sha256:22c6f0c2fbc31e76c3b8a86fba1a56eda6166e238c29cdd3d14befdb4a4e4815 \ + --hash=sha256:231d4da14bcd9301310faf492051bee27df11f2bc7549bc0bb41fef11b82daa2 \ + --hash=sha256:259695e2ccc253feb2a016303543d691825e920917e31f894ca1a687982b1de4 \ + --hash=sha256:2a24157fa36980478dd1770b585c0f30d19e18f4fb0c47c13aa568f871718579 \ + --hash=sha256:2b1a63e8224e401cafe7739f77efd3f9e7f5f2026bda4aead8e59afab537784f \ + --hash=sha256:2bd9d128ef93637a5d7a6af25363cf5dec3fa21cf80e68055aad627f280e8afa \ + --hash=sha256:2e1d8ca8611099001949d1cdfaefc510cf0f212484fe7c565f735b68c78c3c95 \ + --hash=sha256:2ef7fedc7a6ecbe99969cd09632516738a97eeb8bd7258bf8a0f23114c057dab \ + --hash=sha256:2f7fdd9b6e6c529d6a2501a2d36b240109e78a8ceaef5687cfcfa2bbe671d297 \ + --hash=sha256:30f445ae60aad5e1f8bdbb3108e39f6fbc09f4ea16c815c66578878325f8f15a \ + --hash=sha256:31215157227939b4fb3d740cd23fe27be0439afef67b785a1eb78a3ae69cba9e \ + --hash=sha256:34315ff4fc374b285ad7f4a0bf7dcbfe769e1b104230d40f49f700d4ab6bbd84 \ + --hash=sha256:3516bbb8d42169de9e61b8520cbeeeb716f12f4ecfe3fd30a9919aa16c806ca8 \ + --hash=sha256:3778fd7d7cd04ae8f54651f4a7a0bd6e39a0cf20f801720a4c21d80e9b7ad6b0 \ + --hash=sha256:39f5068d35621da2881271e5c3205125cc456f54e9030d3f723288c873a71bf9 \ + --hash=sha256:404a1e552cf5b675a87f0651f8b79f5f1e6fd100ee88dc612f89aa16abd4486f \ + --hash=sha256:419a9d91bd238052642a51938af8ac05da5b3343becde08d5cdeab9046df9ee1 \ + --hash=sha256:423fb7e748a08f854a08a222b983f4df1912b1daedce51a72bd24fe8f26a1843 \ + --hash=sha256:4482481cb0572180b6fd976a4d5c72a30263e98564da68b86ec91f0fe35e8565 \ + --hash=sha256:461598cd852bfa5a61b09cae2b1c02e2efcd166ee5516e243d540ac24bfa68a7 \ + --hash=sha256:47955475ac79cc504ef2704b192364e51d0d473ad452caedd0002605f780101c \ + --hash=sha256:48696db7f18afb80a068821504296eb0787d9ce239b91ca15059d1d3eaacf13b \ + --hash=sha256:4be9f4830ba8741527693848403e2c457c16e499100963ec711b1c6f2049b7c7 \ + --hash=sha256:4d1d02209e06550bdaef34af58e041ad71b88e624f5d825519da3a3308e22687 \ + --hash=sha256:4f41da960b196ea355357285ad1316a00099f22d0929fe168343b99b254729c9 \ + --hash=sha256:517ad0e93394ac532745129ceabdf2696b609ec9f87863d337140317ebce1c14 \ + --hash=sha256:51fb3c322c81d20567019778cb5a4a6f2dc1c200b886bc0d636238e364848c89 \ + --hash=sha256:5273b9f0b5835ff0350c0828faea623c68bfa65b792720c453e22b25cc72930f \ + --hash=sha256:530d548084c4a9f7a16ed4a294d459b4f229db50df689bfe92027452452943a0 \ + --hash=sha256:530e8cebeea0d76bdcf93357aa5e41336f48c3dc709ac52da2bb167c5b8271d9 \ + --hash=sha256:54fae94be3d75f3e573c9a1b5402dc593de19377013c9a0e4285e3d402dd3a2a \ + --hash=sha256:572d7c822caf521f0525ba1bce1a622a0b85cf47ffbdae6c9c19e3b5ac3c4389 \ + --hash=sha256:58c948d0d086229efc484fe2f30c2d382c86720f55cd9bc33591774348ad44e0 \ + --hash=sha256:5d11595abf8dd942a77883a39d81433739b287b6aa71620f15164f8096221b30 \ + --hash=sha256:5f8ddd609f9e1af8c7bd6e2aca279c931aefecd148a14402d4e368f3171769fd \ + --hash=sha256:5feb91325bbceade6afab43eb3b508c63ee53579fe896c77137ded51c6b6958e \ + --hash=sha256:60c74963d8350241a79cb8feea80e54d518f72c26db618862a8f53e5023deaf9 \ + --hash=sha256:613f19aa6e082cf96e17e3ffd89383343d0d589abda756b7764cf78361fd41dc \ + --hash=sha256:659a1e1b500fac8f2779dd9e1570464e012f43e580371470b45277a27baa7532 \ + --hash=sha256:695f5c2823691a25f17bc5d5ffe79fa90972cc34b002ac6c843bb8a1720e950d \ + --hash=sha256:69dd852c2f0ad631b8b60cfbe25a28c0058a894de5abb566619c205ce0550eae \ + --hash=sha256:6cceb5473417d28edd20c6c984ab6fee6c6267d38d906823ebfe20b03d607dc2 \ + --hash=sha256:71be7e0e01753a89cf024abf7ecb6bca2c81738ead80d43004d9b5e3f1244e64 \ + --hash=sha256:74119174722c4349af9708993118581686f343adc1c8c9c007d59be90d077f3f \ + --hash=sha256:74a2e659c7ecbc73562e2a15e05039f1e22c75b7c7618b4b574a3ea9118d1557 \ + --hash=sha256:7504e9b7dc05f99a9bbb4525c67a2c155073b44d720470a148b34166a69c054e \ + --hash=sha256:79090741d842f564b1b2827c0b82d846405b744d31e84f18d7a7b41c20e473ff \ + --hash=sha256:7a6967aaf043bceabab5412ed6bd6bd26603dae84d5cb75bf8d9a74a4959d398 \ + --hash=sha256:7bda6eebafd42133efdca535b04ccb338ab29467b3f7bf79569883676fc628db \ + --hash=sha256:7edbed096e4a4798710ed6bc75dcaa2a21b68b6c356553ac4823c3658d53743a \ + --hash=sha256:7f9019c9cb613f084481bd6a100b12e1547cf2efe362d873c2e31e4035a6fa43 \ + --hash=sha256:802168e03fba8bbc5ce0d866d589e4b1ca751d06edee69f7f3a19c5a9fe6b597 \ + --hash=sha256:80d0a5615143c0b3225e5e3ef22c8d5d51f3f72ce0ea6fb84c943546c7b25b6c \ + --hash=sha256:82060f995ab5003a2d6e0f4ad29065b7672b6593c8c63559beefe5b443242c3e \ + --hash=sha256:836ab36280f21fc1a03c99cd05c6b7af70d2697e374c7af0b61ed271401a72a2 \ + --hash=sha256:8761ac29b6c81574724322a554605608a9960769ea83d2c73e396f3df896ad54 \ + --hash=sha256:87725cfb1a4f1f8c2fc9890ae2f42094120f4b44db9360be5d99a4c6b0e03a9e \ + --hash=sha256:899d28f422116b08be5118ef350c292b36fc15ec2daeb9ea987c89281c7bb5c4 \ + --hash=sha256:8bc5f0687d796c05b1e28ab0d38a50e6309906ee09375dd3aff6a9c09dd6e8f4 \ + --hash=sha256:8bea55c4eef25b0b19a0337dc4e3f9a15b00d569c77211fa8cde38684f234fb7 \ + --hash=sha256:8e5a94886bedca0f9b78fecd6afb6629142fd2605aa70a125d49f4edc6037ee6 \ + --hash=sha256:90ca27cd8da8118b18a52d5f547859cc1f8354a00cd1e8e5120df3e30d6279e5 \ + --hash=sha256:92734d4d8d187a354a556626c221cd1a892a4e0802ccb2af432a1d85ec012194 \ + --hash=sha256:947cf925bc916d90adba35a64c82aace04fa39b46b52d4630ece166655905a69 \ + --hash=sha256:95b52c68d64c1878818687a473a10547b3292e82b6f6fe483808fb1468e2f52f \ + --hash=sha256:97d0235baafca5f2b09cf332cc275f021e694e8362c6bb9c96fc9a0eb74fc316 \ + --hash=sha256:9ca4c0b502ab399ef89248a2c84c54954f77a070f28e546a85e91da627d1301e \ + --hash=sha256:9cc4fc6c196d6a8b76629a70ddfcd4635a6898756e2d9cac5565cf0654605d73 \ + --hash=sha256:9cc6e6d9e571d2f863fa77700701dae73ed5f78881efc8b3f9a4398772ff53e8 \ + --hash=sha256:a056d1ad2633548ca18ffa2f85c202cfb48b68615129143915b8dc72a806a923 \ + --hash=sha256:a26611d9987b230566f24a0a125f17fe0de6a6aff9f25c9f564aaa2721a5fb88 \ + --hash=sha256:a4474d924a47185a06411e0064b803c68be044be2d60e50e8bddcc2649957c1f \ + --hash=sha256:a4ea868bc28109052790eb2b52a9ab33f3aa7adc02f96673526ff47419490e21 \ + --hash=sha256:a9e68c9d88823b274cf1e72f28cb5dc89c990edf430b0bfd3e2fb0785bfeabf4 \ + --hash=sha256:aa9cccf4a44b9b62d8ba8b4dd06c649ba683e4bf04eea606d2e94cfc2d6ff4d6 \ + --hash=sha256:ab30e5e3e706e3063bc6de96b118688cb10396b70bb9864a430f67df98c61ecc \ + --hash=sha256:ac2393c73378fea4e52aa56285a3d64be50f1a12395afef9cce47772f60334c2 \ + --hash=sha256:ad8faf8df23f0378c6d527d8b0b15ea4a2e23c89376877c598c4870d1b2c7866 \ + --hash=sha256:b35b200d6a71b9839a46b9b7fff66b6638bb52fc9658aa58796b0326595d3021 \ + --hash=sha256:b3694e3f87f8ac7ce279d4355645b3c878d24d1424581b46282f24b92f5a4ae2 \ + --hash=sha256:b4ff1d35e8c5bd078be89349b6f3a845128e685e751b6ea1169cf2160b344c4d \ + --hash=sha256:bbc8c8650c6e51041ad1be191742b8b421d05bbd3410f43fa2a00c8db87678e8 \ + --hash=sha256:bc72863f4d9aba2e8fd9085e63548a324ba706d2ea2c83b260da08a59b9482de \ + --hash=sha256:bf625105bb9eef28a56a943fec8c8a98aeb80e7d7db99bd3c388137e6eb2d237 \ + --hash=sha256:c2274ca724536f173122f36c98ce188fd24ce3dad886ec2b7af859518ce008a4 \ + --hash=sha256:c45a03a4c69820a399f1dda9e1d8fbf3562eda46e7720458180302021b08f778 \ + --hash=sha256:c8ae56368f8cc97c7e40a7ee18e1cedaf8e780cd8bc5ed5ac8b81f238614facb \ + --hash=sha256:c907cdc8109f6c619e6254212e794d6548373cc40e1ec75e6e3823d9135d29cc \ + --hash=sha256:ca0276464d148c72defa8bb4390cce01b4a0e425f3b50d1435aa6d7a18107602 \ + --hash=sha256:cd5e2801c89992ed8c0a3f0293ae83c159a60d9a5d685005383ef4caca77f2c4 \ + --hash=sha256:d08ec48f0a1c48d75d0356cea971921848fb620fdeba805b28f937e90691209f \ + --hash=sha256:d1a2ee9c1499fc8f86f4521f27a973c914b211ffa87322f4ee33bb35392da2c5 \ + --hash=sha256:d5f5d1e9def3405f60e3ca8232d56f35c98fb7bf581efcc60051ebf53cb8b611 \ + --hash=sha256:d60377dce4511655582e300dc1e5a5f24ba0cb229005a1d5c8d0cb72bb758ab8 \ + --hash=sha256:d73beaac5e90173ac3deb9928a74763a6d230f494e4bfb422c217a0ad8e629bf \ + --hash=sha256:d7de2637729c67d67cf87614b566626057e95c303bc0a55ffe391f5205e7003d \ + --hash=sha256:dad6e0f2e481fffdcf776d10ebee25e0ef89f16d691f1e5dee4b586375fdc64b \ + --hash=sha256:dda86aba335c902b6149a02a55b38e96287157e609200811837678214ba2b1db \ + --hash=sha256:df01808ee470038c3f8dc4f48620df7225c49c2d6639e38f96e6d6ac6e6f7b0e \ + --hash=sha256:e1f6e2f00a6b8edb562826e4632e26d063ac10307e80f7461f7de3ad8ef3f077 \ + --hash=sha256:e25369dc110d58ddf29b949377a93e0716d72a24f62bad72b2b39f155949c1fd \ + --hash=sha256:e3c701e954abf6fc03a49f7c579cc80c2c6cc52525340ca3186c41d3f33482ef \ + --hash=sha256:e5bcc1a1ae744e0bb59641171ae53743760130600da8db48cbb6e4918e186e4e \ + --hash=sha256:e68c14b04827dd76dcbd1aeea9e604e3e4b78322d8faf2f8132c7138efa340a8 \ + --hash=sha256:e8aeb10fcbe92767f0fa69ad5a72deca50d0dca07fbde97848997d778a50c9fe \ + --hash=sha256:e985a16ff513596f217cee86c21371b8cd011c0f6f056d0920aa2d926c544058 \ + --hash=sha256:ecbbd45615a6885fe3240eb9db73b9e62518b611850fdf8ab08bd56de7ad2b17 \ + --hash=sha256:ee4ec14bc1680d6b0afab9aea2ef27e26d2024f18b24a2d7155a52b60da7e833 \ + --hash=sha256:ef5960d965e67165d75b7c7ffc60a83ec5abfc5c11b764ec13ea54fbef8b4421 \ + --hash=sha256:f0cdaecd4c953bfae0b6bb64910aaaca5a424ad9c72d85cb88417bb9814f7550 \ + --hash=sha256:f1ce721c8a7dfec21fcbdfe04e8f68174183cf4e8188e0645e92aa23985c57ff \ + --hash=sha256:f50498891691e0864dc3da965f340fada0771f6142a378083dc4608f4ea513e2 \ + --hash=sha256:f5ea69428fa1b49573eef0cc44a1d43bebd45ad0c611eb7d7eac760c7ae771bc \ + --hash=sha256:f61aa92e4aad0be58eb6eb4e0c21acf32cf8065f4b2cae5665da756c4ceef982 \ + --hash=sha256:f6e4333fb15c83f7d1482a76d45a0818897b3d33f00efd215528ff7c51b8e35d \ + --hash=sha256:f820f24b09e3e779fe84c3c456cb4108a7aa639b0d1f02c28046e11bfcd088ed \ + --hash=sha256:f98059e4fcd3e3e4e2d632b7cf81c2faae96c43c60b569e9c621468082f1d104 \ + --hash=sha256:fcce033e4021347d80ed9c66dcf1e7b1546319834b74445f561d2e2221de5659 # via requests -click==8.1.8 \ - --hash=sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2 \ - --hash=sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a - # via mkdocs +click==8.2.1 \ + --hash=sha256:27c491cc05d968d271d5a1db13e3b5a184636d9d930f148c50b038f0d0646202 \ + --hash=sha256:61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b + # via + # -r requirements.prod.in + # mkdocs colorama==0.4.6 \ --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 @@ -136,9 +176,9 @@ hjson==3.1.0 \ # via # mkdocs-macros-plugin # super-collections -idna==3.10 \ - --hash=sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9 \ - --hash=sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3 +idna==3.11 \ + --hash=sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea \ + --hash=sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902 # via requests jinja2==3.1.6 \ --hash=sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d \ @@ -147,75 +187,103 @@ jinja2==3.1.6 \ # mkdocs # mkdocs-macros-plugin # mkdocs-material -markdown==3.8.1 \ - --hash=sha256:46cc0c0f1e5211ab2e9d453582f0b28a1bfaf058a9f7d5c50386b99b588d8811 \ - --hash=sha256:a2e2f01cead4828ee74ecca9623045f62216aef2212a7685d6eb9163f590b8c1 +markdown==3.10.2 \ + --hash=sha256:994d51325d25ad8aa7ce4ebaec003febcce822c3f8c911e3b17c52f7f589f950 \ + --hash=sha256:e91464b71ae3ee7afd3017d9f358ef0baf158fd9a298db92f1d4761133824c36 # via # mkdocs # mkdocs-material # pymdown-extensions -markupsafe==3.0.2 \ - --hash=sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4 \ - --hash=sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30 \ - --hash=sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0 \ - --hash=sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9 \ - --hash=sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396 \ - --hash=sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13 \ - --hash=sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028 \ - --hash=sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca \ - --hash=sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557 \ - --hash=sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832 \ - --hash=sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0 \ - --hash=sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b \ - --hash=sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579 \ - --hash=sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a \ - --hash=sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c \ - --hash=sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff \ - --hash=sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c \ - --hash=sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22 \ - --hash=sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094 \ - --hash=sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb \ - --hash=sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e \ - --hash=sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5 \ - --hash=sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a \ - --hash=sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d \ - --hash=sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a \ - --hash=sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b \ - --hash=sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8 \ - --hash=sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225 \ - --hash=sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c \ - --hash=sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144 \ - --hash=sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f \ - --hash=sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87 \ - --hash=sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d \ - --hash=sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93 \ - --hash=sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf \ - --hash=sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158 \ - --hash=sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84 \ - --hash=sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb \ - --hash=sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48 \ - --hash=sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171 \ - --hash=sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c \ - --hash=sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6 \ - --hash=sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd \ - --hash=sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d \ - --hash=sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1 \ - --hash=sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d \ - --hash=sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca \ - --hash=sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a \ - --hash=sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29 \ - --hash=sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe \ - --hash=sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798 \ - --hash=sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c \ - --hash=sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8 \ - --hash=sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f \ - --hash=sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f \ - --hash=sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a \ - --hash=sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178 \ - --hash=sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0 \ - --hash=sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79 \ - --hash=sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430 \ - --hash=sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50 +markupsafe==3.0.3 \ + --hash=sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f \ + --hash=sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a \ + --hash=sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf \ + --hash=sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19 \ + --hash=sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf \ + --hash=sha256:0f4b68347f8c5eab4a13419215bdfd7f8c9b19f2b25520968adfad23eb0ce60c \ + --hash=sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175 \ + --hash=sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219 \ + --hash=sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb \ + --hash=sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6 \ + --hash=sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab \ + --hash=sha256:15d939a21d546304880945ca1ecb8a039db6b4dc49b2c5a400387cdae6a62e26 \ + --hash=sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1 \ + --hash=sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce \ + --hash=sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218 \ + --hash=sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634 \ + --hash=sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695 \ + --hash=sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad \ + --hash=sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73 \ + --hash=sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c \ + --hash=sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe \ + --hash=sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa \ + --hash=sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559 \ + --hash=sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa \ + --hash=sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37 \ + --hash=sha256:3537e01efc9d4dccdf77221fb1cb3b8e1a38d5428920e0657ce299b20324d758 \ + --hash=sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f \ + --hash=sha256:38664109c14ffc9e7437e86b4dceb442b0096dfe3541d7864d9cbe1da4cf36c8 \ + --hash=sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d \ + --hash=sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c \ + --hash=sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97 \ + --hash=sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a \ + --hash=sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19 \ + --hash=sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9 \ + --hash=sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9 \ + --hash=sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc \ + --hash=sha256:591ae9f2a647529ca990bc681daebdd52c8791ff06c2bfa05b65163e28102ef2 \ + --hash=sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4 \ + --hash=sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354 \ + --hash=sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50 \ + --hash=sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698 \ + --hash=sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9 \ + --hash=sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b \ + --hash=sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc \ + --hash=sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115 \ + --hash=sha256:7c3fb7d25180895632e5d3148dbdc29ea38ccb7fd210aa27acbd1201a1902c6e \ + --hash=sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485 \ + --hash=sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f \ + --hash=sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12 \ + --hash=sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025 \ + --hash=sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009 \ + --hash=sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d \ + --hash=sha256:949b8d66bc381ee8b007cd945914c721d9aba8e27f71959d750a46f7c282b20b \ + --hash=sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a \ + --hash=sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5 \ + --hash=sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f \ + --hash=sha256:a320721ab5a1aba0a233739394eb907f8c8da5c98c9181d1161e77a0c8e36f2d \ + --hash=sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1 \ + --hash=sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287 \ + --hash=sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6 \ + --hash=sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f \ + --hash=sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581 \ + --hash=sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed \ + --hash=sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b \ + --hash=sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c \ + --hash=sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026 \ + --hash=sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8 \ + --hash=sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676 \ + --hash=sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6 \ + --hash=sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e \ + --hash=sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d \ + --hash=sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d \ + --hash=sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01 \ + --hash=sha256:df2449253ef108a379b8b5d6b43f4b1a8e81a061d6537becd5582fba5f9196d7 \ + --hash=sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419 \ + --hash=sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795 \ + --hash=sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1 \ + --hash=sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5 \ + --hash=sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d \ + --hash=sha256:e8fc20152abba6b83724d7ff268c249fa196d8259ff481f3b1476383f8f24e42 \ + --hash=sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe \ + --hash=sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda \ + --hash=sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e \ + --hash=sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737 \ + --hash=sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523 \ + --hash=sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591 \ + --hash=sha256:f71a396b3bf33ecaa1626c255855702aca4d3d9fea5e051b41ac59a9c1c41edc \ + --hash=sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a \ + --hash=sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50 # via # jinja2 # mkdocs @@ -233,17 +301,17 @@ mkdocs==1.6.1 \ # mkdocs-macros-plugin # mkdocs-material # mkdocs-multirepo-plugin -mkdocs-get-deps==0.2.0 \ - --hash=sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c \ - --hash=sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134 +mkdocs-get-deps==0.2.2 \ + --hash=sha256:8ee8d5f316cdbbb2834bc1df6e69c08fe769a83e040060de26d3c19fad3599a1 \ + --hash=sha256:e7878cbeac04860b8b5e0ca31d3abad3df9411a75a32cde82f8e44b6c16ff650 # via mkdocs mkdocs-macros-plugin==1.5.0 \ --hash=sha256:12aa45ce7ecb7a445c66b9f649f3dd05e9b92e8af6bc65e4acd91d26f878c01f \ --hash=sha256:c10fabd812bf50f9170609d0ed518e54f1f0e12c334ac29141723a83c881dd6f # via -r requirements.prod.in -mkdocs-material==9.7.3 \ - --hash=sha256:37ebf7b4788c992203faf2e71900be3c197c70a4be9b0d72aed537b08a91dd9d \ - --hash=sha256:e5f0a18319699da7e78c35e4a8df7e93537a888660f61a86bd773a7134798f22 +mkdocs-material==9.7.5 \ + --hash=sha256:7cf9df2ff121fd098ff6e05c732b0be3699afca9642e2dfe4926c40eb5873eec \ + --hash=sha256:f76bdab532bad1d9c57ca7187b37eccf64dd12e1586909307f8856db3be384ea # via -r requirements.prod.in mkdocs-material-extensions==1.3.1 \ --hash=sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443 \ @@ -253,9 +321,9 @@ mkdocs-multirepo-plugin==0.8.3 \ --hash=sha256:76190e457d22d768d53b79d4b11be513711c5c8587a4c28a8d605947e5733cde \ --hash=sha256:c474fe29dc9f8fc73c27c133fe378c240fd98f79ca1b9b46575f83af9a1f2559 # via -r requirements.prod.in -mypy-extensions==1.0.0 \ - --hash=sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d \ - --hash=sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782 +mypy-extensions==1.1.0 \ + --hash=sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505 \ + --hash=sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558 # via typing-inspect packaging==24.2 \ --hash=sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759 \ @@ -267,9 +335,9 @@ paginate==0.5.7 \ --hash=sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945 \ --hash=sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591 # via mkdocs-material -pathspec==0.12.1 \ - --hash=sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08 \ - --hash=sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712 +pathspec==1.0.4 \ + --hash=sha256:0210e2ae8a21a9137c0d470578cb0e595af87edaa6ebf12ff176f14a02e0e645 \ + --hash=sha256:fb6ae2fd4e7c921a165808a552060e722767cfa526f99ca5156ed2ce45a5c723 # via # mkdocs # mkdocs-macros-plugin @@ -277,13 +345,13 @@ platformdirs==4.3.6 \ --hash=sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907 \ --hash=sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb # via mkdocs-get-deps -pygments==2.19.1 \ - --hash=sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f \ - --hash=sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c +pygments==2.19.2 \ + --hash=sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887 \ + --hash=sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b # via mkdocs-material -pymdown-extensions==10.16.1 \ - --hash=sha256:aace82bcccba3efc03e25d584e6a22d27a8e17caa3f4dd9f207e49b787aa9a91 \ - --hash=sha256:d6ba157a6c03146a7fb122b2b9a121300056384eafeec9c9f9e584adfdb2a32d +pymdown-extensions==10.21 \ + --hash=sha256:39f4a020f40773f6b2ff31d2cd2546c2c04d0a6498c31d9c688d2be07e1767d5 \ + --hash=sha256:91b879f9f864d49794c2d9534372b10150e6141096c3908a455e45ca72ad9d3f # via mkdocs-material python-dateutil==2.9.0.post0 \ --hash=sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3 \ @@ -355,13 +423,13 @@ pyyaml==6.0.2 \ # mkdocs-macros-plugin # pymdown-extensions # pyyaml-env-tag -pyyaml-env-tag==0.1 \ - --hash=sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb \ - --hash=sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069 +pyyaml-env-tag==1.1 \ + --hash=sha256:17109e1a528561e32f026364712fee1264bc2ea6715120891174ed1b980d2e04 \ + --hash=sha256:2eb38b75a2d21ee0475d6d97ec19c63287a7e140231e4214969d0eac923cd7ff # via mkdocs -requests==2.32.4 \ - --hash=sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c \ - --hash=sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422 +requests==2.32.5 \ + --hash=sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6 \ + --hash=sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf # via # mkdocs-macros-plugin # mkdocs-material @@ -373,17 +441,17 @@ super-collections==0.6.2 \ --hash=sha256:0c8d8abacd9fad2c7c1c715f036c29f5db213f8cac65f24d45ecba12b4da187a \ --hash=sha256:291b74d26299e9051d69ad9d89e61b07b6646f86a57a2f5ab3063d206eee9c56 # via mkdocs-macros-plugin -termcolor==2.5.0 \ - --hash=sha256:37b17b5fc1e604945c2642c872a3764b5d547a48009871aea3edd3afa180afb8 \ - --hash=sha256:998d8d27da6d48442e8e1f016119076b690d962507531df4890fcd2db2ef8a6f +termcolor==3.3.0 \ + --hash=sha256:348871ca648ec6a9a983a13ab626c0acce02f515b9e1983332b17af7979521c5 \ + --hash=sha256:cf642efadaf0a8ebbbf4bc7a31cec2f9b5f21a9f726f4ccbb08192c9c26f43a5 # via mkdocs-macros-plugin text-unidecode==1.3 \ --hash=sha256:1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8 \ --hash=sha256:bad6603bb14d279193107714b288be206cac565dfa49aa5b105294dd5c4aab93 # via python-slugify -typing-extensions==4.12.2 \ - --hash=sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d \ - --hash=sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8 +typing-extensions==4.15.0 \ + --hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \ + --hash=sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548 # via typing-inspect typing-inspect==0.8.0 \ --hash=sha256:5fbf9c1e65d4fa01e701fe12a5bca6c6e08a4ffd5bc60bfac028253a447c5188 \