diff --git a/.github/workflows/deploy-public-website.yaml b/.github/workflows/deploy-public-website.yaml
index 940cf23526..32705ca50d 100644
--- a/.github/workflows/deploy-public-website.yaml
+++ b/.github/workflows/deploy-public-website.yaml
@@ -23,12 +23,6 @@ jobs:
- name: Make destination directory for compiled CSS
run: mkdir -vp docs/stylesheets/
- - name: Compile CSS from SCSS files
- uses: gha-utilities/sass-build@v0.5.1
- with:
- source: src/sekoiaio.scss
- destination: docs/stylesheets/sekoiaio.css
-
- name: Install Poetry
run: |
pip install poetry
diff --git a/.github/workflows/preview.yaml b/.github/workflows/preview.yaml
index b7b2c6b7f0..9e4504f0fb 100644
--- a/.github/workflows/preview.yaml
+++ b/.github/workflows/preview.yaml
@@ -20,12 +20,6 @@ jobs:
- name: Make destination directory for compiled CSS
run: mkdir -vp docs/stylesheets/
- - name: Compile CSS from SCSS files
- uses: gha-utilities/sass-build@v0.5.1
- with:
- source: src/sekoiaio.scss
- destination: docs/stylesheets/sekoiaio.css
-
- name: Install Poetry
run: |
pip install poetry
diff --git a/.gitignore b/.gitignore
index 821d57f810..3be90d079a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,7 @@
.idea
site
docs/stylesheets/sekoiaio.css
+docs/stylesheets/openapi.css
venv
*~
redoc.egg-info
diff --git a/docs/developer/api.md b/docs/developer/api.md
new file mode 100644
index 0000000000..f5ed669507
--- /dev/null
+++ b/docs/developer/api.md
@@ -0,0 +1,24 @@
+---
+template: overrides/openapi.html
+---
+
+# Sekoia.io API documentation
+
+
+
+
+ https://app.sekoia.io/api/v1/dashboard/swagger.json?context=public
+ https://app.sekoia.io/api/v1/telemetry/openapi.json?context=public
+ https://app.sekoia.io/api/v1/notebooks/openapi.json?context=public
+ https://app.sekoia.io/api/v1/sic/conf/swagger.json?context=public
+ https://app.sekoia.io/api/v1/swagger.json?context=public
+ https://app.sekoia.io/api/v1/ingest/swagger.json?context=public
+ https://app.sekoia.io/api/v1/sic/swagger.json?context=public
+ https://app.sekoia.io/api/v1/symphony/swagger.json?context=public
+ https://app.sekoia.io/api/v1/enricher/swagger.json?context=tip
+ https://app.sekoia.io/api/v1/swagger.json?context=public
+ https://app.sekoia.io/api/v2/asset-management/openapi.json?context=public
+ https://app.sekoia.io/api/v1/edl-gateway/openapi.json
+ https://app.sekoia.io/api/v2/inthreat/swagger.json?context=public
+
+
diff --git a/docs/javascript/openapi.js b/docs/javascript/openapi.js
new file mode 100644
index 0000000000..d739d3f003
--- /dev/null
+++ b/docs/javascript/openapi.js
@@ -0,0 +1,712 @@
+// Declare officially documented regions
+const REGIONS = ["FRA1", "FRA2", "MCO1", "UAE1"];
+
+function $element(tag, content = "", cls = "") {
+ const el = document.createElement(tag);
+ if (content) el.innerHTML = content;
+ if (cls) el.className = cls;
+ return el;
+}
+
+function merge_openapi_schemas(schemas) {
+ const paths = {};
+ const definitions = {};
+
+ for (const s of schemas) {
+ if (!s?.info?.title) continue;
+ console.log("Merge", s.info.title);
+
+ const ref_mapping = {};
+ const prefix = s.info.title.replace(/\s+/, "_") + "_";
+
+ // Prefix colliding component names
+ for (let key in s.components?.schemas || {}) {
+ const def = s.components?.schemas[key];
+ if (definitions[key]) {
+ ref_mapping[key] = prefix + key;
+ key = prefix + key;
+ }
+ if (definitions[key]) {
+ console.error(`Definition collision for ${key}`);
+ continue;
+ }
+ definitions[key] = def;
+ }
+
+ // Rewrite components refs accordingly
+ object_walk(
+ s,
+ (k, v) => {
+ if (
+ k === "$ref" &&
+ typeof v === "string" &&
+ v.startsWith("#/components/schemas/")
+ ) {
+ const ref = v.substring("#/components/schemas/".length);
+ return "#/components/schemas/" + (ref_mapping[ref] || ref);
+ }
+ return v;
+ },
+ true
+ );
+
+ // Merge endpoints paths
+ for (const p in s.paths || {}) {
+ for (const method in s.paths[p]) {
+ if (method !== "parameters" && !s.paths[p][method].tags?.length) {
+ console.warn(`Endpoint ${method} ${p} has no tag, skipping`);
+ continue;
+ }
+ if (paths[p]?.[method]) {
+ console.error(`Endpoint collision for ${method} ${p}`);
+ continue;
+ }
+ paths[p] ||= {};
+ paths[p][method] = s.paths[p][method];
+ }
+ }
+ }
+
+ const schema = {
+ ...schemas[0],
+ openapi: "3.1.0",
+ info: {
+ title: "Sekoia.io API Documentation",
+ description: "Documentation of all Sekoia.io REST API endpoints",
+ version: "1.0",
+ },
+ servers: [
+ {
+ url: "https://api.sekoia.io",
+ description: "Sekoia.io API",
+ },
+ ],
+ paths,
+ components: {
+ schemas: definitions,
+ },
+
+ "x-tagGroups": [
+ {
+ name: "User Management",
+ tags: [
+ "Intakes",
+ "Observables",
+ "Rules",
+ "CTI Objects",
+ "Assets",
+ "Atoms",
+ "Intakes by status",
+ "Intakes errors and warnings",
+ "Intakes lag and processing lag",
+ "Playbook actions telemetry",
+ "Roy tokens use telemetry",
+ "datasources",
+ "formats",
+ "modules",
+ "Alert",
+ "generation-modes",
+ "customers",
+ ],
+ },
+ {
+ name: "Playbooks",
+ tags: [
+ "Countermeasures",
+ "Alert Entities",
+ "Alert Rules",
+ "Alert Sources and Targets",
+ "Stats",
+ "Alert Status",
+ "Alert Type",
+ "Case",
+ "Comments",
+ "Cyber Kill Chain",
+ "Statistics",
+ "Action Runs",
+ "Actions",
+ "Changes",
+ "Connector Configurations",
+ "Connectors",
+ ],
+ },
+ {
+ name: "Alerts",
+ tags: [
+ "Module Configurations",
+ "Modules",
+ "Node Runs",
+ "Playbooks Runs",
+ "Playbooks",
+ "Trigger Configurations",
+ "Triggers",
+ "Callbacks",
+ "Enrichers",
+ "Services",
+ "Tasks",
+ "User Authentication",
+ "avatars",
+ "communities",
+ ],
+ },
+ {
+ name: "Intelligence",
+ tags: [
+ "api-keys",
+ "licenses",
+ "permissions",
+ "roles",
+ "sub-communities",
+ "invitations",
+ "me",
+ "mfa",
+ "plans",
+ ],
+ },
+ {
+ name: "Telemetry",
+ tags: [
+ "support",
+ "users",
+ "Bundles",
+ "Collections",
+ "Exports",
+ "Outgoing Feeds",
+ "Graphs",
+ "Images",
+ "Indicators",
+ ],
+ },
+ {
+ name: "Detect",
+ tags: [
+ "IOC Collections",
+ "Kill Chains",
+ "Labels",
+ "MISP",
+ "Objects",
+ "Observable relationships",
+ "rules-catalog",
+ ],
+ },
+ ],
+ };
+
+ return schema;
+}
+
+async function init_openapi_documentation() {
+ let _APIKEY = "";
+ const region = (
+ new URLSearchParams(location.search).get("region") || "fra1"
+ ).toLowerCase();
+
+ const openapi_el = document.querySelector("#openapi");
+ if (!openapi_el) return;
+
+ // Collect services OpenAPI schema URLs from rendered markdown
+ let schema_urls = Array.from(
+ new Set(
+ openapi_el
+ .querySelector("& > section")
+ .innerText.split("\n")
+ .map((x) => x.trim())
+ .filter((x) => x.length > 0)
+ )
+ );
+
+ // Replace with the selected region's URLs
+ if (region !== "fra1") {
+ schema_urls = schema_urls.map((url) =>
+ url.replace("https://app.sekoia.io/", `https://app.${region}.sekoia.io/`)
+ );
+ }
+
+ // Convert legacy Swagger 2.0 schemas to OpenAPI 3.1
+ const schemas = (
+ await Promise.all(
+ schema_urls.map(async (url) => {
+ try {
+ let schema = await fetch(url).then((x) => x.json());
+ if (schema.swagger) schema = convert_swagger_to_openapi(schema);
+
+ // Lint the resulting OpenAPI 3.1 schema to polish parameters
+ Object.values(schema.paths).forEach((p) => {
+ Object.values(p).forEach((endpoint) => {
+ // Gather scattered body params into one object body param
+ let params = [...(endpoint.parameters || [])];
+ let bodyParams = params.filter((p) => p.in === "body");
+ if (bodyParams?.length > 0) {
+ endpoint.requestBody = {
+ content: {
+ "application/json": {
+ schema: {
+ type: "object",
+ properties: Object.fromEntries(
+ bodyParams.map((p) => [p.name, { type: p.type }])
+ ),
+ },
+ },
+ },
+ };
+ params = params.filter((p) => p.in !== "body");
+ }
+
+ // Get rid of authentication-related fields
+ endpoint.parameters = params.filter(
+ (p) => !["header", "cookie"].includes(p.in)
+ );
+ });
+ });
+
+ return schema;
+ } catch (e) {
+ console.error(e);
+ console.warn(`Couldn't gather OpenAPI schema at ${url}`);
+ }
+ })
+ )
+ ).filter((x) => !!x);
+
+ // Generate Redoc DOM
+ const schema = merge_openapi_schemas(schemas);
+
+ if (region !== "fra1")
+ schema.servers[0].url = `https://app.${region}.sekoia.io/api`;
+
+ await new Promise((done) =>
+ Redoc.init(schema, { hideLoading: true }, openapi_el, done)
+ );
+
+ // Gather params for a given {method}+{endpoint}
+ function gather_params(method, endpoint) {
+ const doc = schema.paths[endpoint][method];
+ const params = [];
+ // Always prepend API Key field
+ params.push({ name: "API Key", in: "header" });
+ // ... query params
+ params.push(...(doc.parameters || []));
+
+ // ... path params
+ for (const pathParam of endpoint.matchAll(/\{([^:\}]+)(:([^:\}]+))?\}/g)) {
+ if (!params.find((p) => p.name === pathParam[1] && p.in === "path")) {
+ params.push({
+ name: pathParam[1],
+ in: "path",
+ schema: { type: pathParam[3] || "any" },
+ });
+ }
+ }
+
+ // ... body params
+ let bodySchema = doc.requestBody?.content?.["application/json"]?.schema;
+ if (bodySchema?.["$ref"]) {
+ bodySchema = bodySchema?.["$ref"]?.replace(
+ /^#\/components\/schemas\//,
+ ""
+ );
+ const body = schema.components?.schemas?.[bodySchema]?.properties || {};
+ for (const k in body) {
+ params.push({ name: k, in: "body" });
+ }
+ } else {
+ const body = bodySchema?.properties || {};
+ for (const k in body) {
+ params.push({ name: k, in: "body" });
+ }
+ }
+
+ // Filter-out authentication fields
+ return params.filter(
+ (p) => !["authorization", "access_token_cookie"].includes(p.name)
+ );
+ }
+
+ // Generate a try-it query from entered {params} for the given {method}+{endpoint}
+ function generate_query(
+ method,
+ endpoint,
+ params,
+ { inline_query_params = true } = {}
+ ) {
+ method = method.toUpperCase();
+ let url = (schema.servers[0]?.url || "") + endpoint;
+ const hasBodyParams = !!params?.find((p) => p.in === "body");
+ const bodyParams = params?.filter(
+ (p) => p.in === "body" && ![undefined, ""].includes(p.value)
+ );
+ let headers = { Authorization: "Bearer " };
+ let body, query_params;
+
+ // Interpolate path params
+ url = url.replaceAll(
+ /\{([^:\}]+)(:[^\}:]+)?\}/g,
+ (m, placeholder) =>
+ params.find((p) => p.in === "path" && p.name === placeholder)?.value ||
+ ""
+ );
+
+ // Interpolate query params
+ if (method === "GET") {
+ query_params = params
+ .filter(
+ (p) => p.in === "query" && p.value !== "" && p.value !== undefined
+ )
+ .map((p) => [p.name, p.value]);
+ if (inline_query_params) {
+ url += "?" + new URLSearchParams(Object.fromEntries(query_params));
+ }
+ }
+
+ // Generate JSON body
+ else if (hasBodyParams) {
+ body = Object.fromEntries(bodyParams.map((p) => [p.name, p.value]));
+
+ // Try to JSON parse each body param, in case it expects arrays or other composite values
+ for (const k in body) {
+ try {
+ body[k] = JSON.parse(body[k]);
+ } catch {}
+ }
+ headers["Content-Type"] = "application/json";
+ body = JSON.stringify(body);
+ }
+
+ return { method, url, headers, body, query_params };
+ }
+
+ // Generate a CURL command line for an OpenAPI endpoint
+ function generate_curl(method, endpoint, params, el) {
+ let { url, headers, body } = generate_query(method, endpoint, params);
+ let out = `curl -X ${method.toUpperCase()} ${url}`;
+ Object.entries(headers).forEach(([h, v]) => (out += ` -H '${h}:${v}'`));
+ if (body) out += ` --data-raw '${body}'`;
+ return out;
+ }
+
+ // Generate a Python example code for an OpenAPI endpoint
+ function generate_python(method, endpoint, params, el) {
+ let { url, headers, body, query_params } = generate_query(
+ method,
+ endpoint,
+ params,
+ {
+ inline_query_params: false,
+ }
+ );
+ let out = `import requests
+import json
+
+result = requests.request(
+ "${method.toUpperCase()}",
+ "${url}",
+`;
+ if (query_params) {
+ out += ` params=${JSON.stringify(
+ Object.fromEntries(query_params),
+ null,
+ 4
+ ).replaceAll("\n", "\n ")},\n`;
+ }
+ if (body) {
+ out += ` json=${JSON.stringify(JSON.parse(body), null, 4).replaceAll(
+ "\n",
+ "\n "
+ )},\n`;
+ }
+ if (headers) {
+ out += ` headers=${JSON.stringify(headers, null, 4).replaceAll(
+ "\n",
+ "\n "
+ )},\n`;
+ }
+ out += `).json()
+print(json.dumps(result, indent=4))
+`;
+ return out;
+ }
+
+ // Generate a Javascript example code for an OpenAPI endpoint
+ function generate_js(method, endpoint, params, el) {
+ let { url, headers, body } = generate_query(method, endpoint, params);
+ let out = `await fetch("${url}", {
+ method: "${method.toUpperCase()}",
+`;
+ if (body) {
+ out += ` body: \`${JSON.stringify(
+ JSON.parse(body),
+ null,
+ 4
+ ).replaceAll("\n", "\n ")}\`,\n`;
+ }
+ if (headers) {
+ out += ` headers: ${JSON.stringify(headers, null, 4).replaceAll(
+ "\n",
+ "\n "
+ )},\n`;
+ }
+
+ out += `}).then(res=>res.json())
+`;
+ return out;
+ }
+
+ async function execute_endpoint(method, endpoint, params, el) {
+ document
+ .querySelectorAll(".try-it-wrapper button")
+ .forEach((b) => b.setAttribute("disabled", ""));
+
+ // Spinner
+ el.querySelector(".results")?.remove();
+ const results = document.createElement("div");
+ results.className = "results";
+ results.innerHTML = ``;
+ el.appendChild(results);
+
+ let { url, headers, body } = generate_query(method, endpoint, params);
+ headers = {
+ ...headers,
+ accept: "application/json",
+ Authorization: `Bearer ${_APIKEY}`,
+ };
+
+ let status = "success";
+ error = null;
+ const res = await fetch(url, { method, body, headers })
+ .then(async (x) => {
+ if (x.status >= 400) {
+ status = "error";
+ return `Error ${x.status}\n${await x.text()}}`;
+ }
+ return JSON.stringify(await x.json(), null, 4);
+ })
+ .catch((e) => {
+ status = "error";
+ return e;
+ });
+
+ results.innerHTML = `Response
`;
+ results.querySelector("pre").innerText = res;
+
+ document
+ .querySelectorAll(".try-it-wrapper button")
+ .forEach((b) => b.removeAttribute("disabled"));
+ }
+
+ // Generate a TryIt form
+ function generate_try_it(e) {
+ const method = e.querySelector(".sc-EgOXT").innerText.trim().toLowerCase();
+ const endpoint = e.querySelector(".sc-ejfMa-d").innerText.trim();
+ const el = document.createElement("form");
+ el.classList.add("try-it-wrapper");
+
+ const params = gather_params(method, endpoint);
+
+ function get_params_data() {
+ const data = [...params];
+ el.querySelectorAll("input").forEach((input) => {
+ const p = data.find((x) => x.name === input.name);
+ if (p) {
+ p.value = input.value;
+ }
+ });
+ return data;
+ }
+
+ el.appendChild(
+ $element(
+ "div",
+ `
+ Path parameters
+ Query parameters
+ Body parameters
+ `,
+ "parameters"
+ )
+ );
+ const [elPathParams, elQueryParams, elBodyParams] = Array.from(
+ el.querySelectorAll(".parameters > .params")
+ );
+
+ // Generate params inputs
+ params?.forEach((p) => {
+ const div = document.createElement("div");
+ div.className = "param";
+ const input = document.createElement("input");
+
+ input.name = p.name;
+ input.title = p.name;
+ if (p.name === "API Key") {
+ input.type = "password";
+ input.value = _APIKEY;
+ }
+
+ const type = p.schema?.anyOf?.[0]?.type || p.schema?.type;
+ if (type && type !== "any") {
+ div.innerHTML = ``;
+ } else {
+ div.innerHTML = ``;
+ }
+
+ if (p.in === "query") elQueryParams.appendChild(div);
+ else if (p.in === "path") elPathParams.appendChild(div);
+ else if (p.in === "body") elBodyParams.appendChild(div);
+ div.appendChild(input);
+
+ // Update cURL when input changes
+ input.oninput = () => {
+ curl.innerText = generate_curl(method, endpoint, get_params_data(), el);
+ python.innerText = generate_python(
+ method,
+ endpoint,
+ get_params_data(),
+ el
+ );
+ js.innerText = generate_js(method, endpoint, get_params_data(), el);
+
+ // Propagate API KEY to all endpoints form
+ if (p.name === "API Key") {
+ document
+ .querySelectorAll(
+ ".try-it-wrapper input[type=password][name='API Key']"
+ )
+ .forEach((elt) => (_APIKEY = elt.value = input.value));
+ }
+ };
+ });
+
+ [elBodyParams, elQueryParams, elPathParams].forEach((e) => {
+ if (Array.from(e.querySelectorAll("&>div"))?.length === 0) e.remove();
+ });
+
+ // Code examples
+ el.appendChild($element("h3", "Code examples"));
+ el.appendChild(
+ $element(
+ "div",
+ `
+
+ - cURL
+ - Python
+ - Javascript
+
+
+ `,
+ "code-examples"
+ )
+ );
+
+ const [curl, python, js] = Array.from(
+ el.querySelectorAll(".code-examples > div > pre")
+ );
+
+ curl.innerText = generate_curl(method, endpoint, get_params_data(), el);
+ python.innerText = generate_python(method, endpoint, get_params_data(), el);
+ js.innerText = generate_js(method, endpoint, get_params_data(), el);
+
+ Array.from(el.querySelectorAll(".code-examples > ul > li")).forEach(
+ (e, i) => {
+ e.onclick = () => {
+ el.querySelectorAll(".code-examples > ul > li").forEach((e) =>
+ e.classList.remove("selected")
+ );
+ el.querySelectorAll(".code-examples > div > pre").forEach((e) =>
+ e.classList.remove("selected")
+ );
+ e.classList.add("selected");
+ Array.from(el.querySelectorAll(".code-examples > div > pre"))[
+ i
+ ].classList.add("selected");
+ };
+ }
+ );
+
+ // Send button
+ const btn = document.createElement("button");
+ btn.type = "submit";
+ btn.innerText = "Send";
+ el.onsubmit = (e) => {
+ execute_endpoint(method, endpoint, get_params_data(), el);
+ e.stopPropagation();
+ e.preventDefault();
+ };
+ el.append(btn);
+ return el;
+ }
+
+ // Instrument Redoc DOM with Try it extension
+ document.querySelectorAll("main .bOFhJE").forEach((e) => {
+ function switchTab(tab) {
+ tabs.querySelectorAll("li").forEach((e) => e.classList.remove("active"));
+ tab.classList.add("active");
+ }
+
+ e.classList.add("examples");
+ const tabs = document.createElement("ul");
+ tabs.className = "tabs";
+ let tab;
+ tabs.appendChild((tab = document.createElement("li")));
+ tab.innerText = "Samples";
+ tab.classList.add("active");
+ tab.onclick = (ev) => {
+ switchTab(ev.target);
+ e.classList.remove("mode-try-it");
+ };
+ tabs.appendChild((tab = document.createElement("li")));
+ tab.innerText = "Try it";
+ tab.classList.add("try-it");
+ tab.onclick = (ev) => {
+ switchTab(ev.target);
+ e.classList.add("mode-try-it");
+ if (!e.querySelector(".try-it-wrapper")) {
+ e.appendChild(generate_try_it(e));
+ }
+ };
+ e.prepend(tabs);
+ e.querySelectorAll(".sc-iGgWBj > div").forEach((e) => {
+ if (e.querySelector("h3")?.innerText.includes("Response samples"))
+ e.classList.add("response-samples");
+ if (e.querySelector("h3")?.innerText.includes("Request samples"))
+ e.classList.add("request-samples");
+ });
+ });
+
+ // Custom left menu additions
+ const menu = document.querySelector(".redoc-wrap .menu-content");
+ const region_picker = $element(
+ "div",
+ `
+
+
+ `,
+ "region-picker"
+ );
+
+ menu
+ .querySelector(".scrollbar-container")
+ .parentNode.insertBefore(
+ region_picker,
+ menu.querySelector(".scrollbar-container")
+ );
+ region_picker.onchange = () => {
+ document.location.search = `region=${
+ region_picker.querySelector("select").selectedOptions[0].innerText
+ }`;
+ };
+ region_picker.querySelectorAll("option").forEach((e) => {
+ if (
+ ((
+ new URLSearchParams(location.search).get("region") || "fra1"
+ ).toLowerCase() || "fra1") === (e.innerText.toLowerCase() || "fra1")
+ )
+ e.setAttribute("selected", true);
+ });
+}
+
+window.addEventListener("load", init_openapi_documentation);
diff --git a/docs/javascript/swagger-converter.js b/docs/javascript/swagger-converter.js
new file mode 100644
index 0000000000..57978d7ce7
--- /dev/null
+++ b/docs/javascript/swagger-converter.js
@@ -0,0 +1,86 @@
+// Swagger 2.0 to OpenAPI 3.1 in-browser conversion
+
+function object_walk(obj, fn, replace = false) {
+ if (Array.isArray(obj)) {
+ if (replace) return obj.map((x, i) => fn(i, x));
+ else obj.forEach((x, i) => fn(i, x));
+ }
+ if (typeof obj === "object") {
+ for (const k in obj) {
+ const r = fn(k, obj[k]);
+ if (replace) obj[k] = r;
+ object_walk(obj[k], fn, replace);
+ }
+ }
+}
+
+function convert_swagger_to_openapi(swagger) {
+ if (swagger.swagger !== "2.0") throw new Error("Not a swagger spec");
+
+ object_walk(
+ swagger,
+ (k, v) => {
+ if (k === "$ref" && typeof v === "string") {
+ return v.replace(/^#\/definitions\//, "#/components/schemas/");
+ }
+ return v;
+ },
+ true
+ );
+
+ const openapi = {
+ openapi: "3.1.0",
+ info: {
+ ...swagger.info,
+ },
+ servers: [
+ {
+ url: "https://api.sekoia.io",
+ description: "Sekoia.io API",
+ },
+ ],
+ paths: Object.fromEntries(
+ Object.entries(swagger.paths).map(([path, spec]) => {
+ const commonParams = spec.parameters;
+ Object.entries(spec).forEach(([method, endpoint]) => {
+ if (
+ !["get", "post", "put", "delete", "patch"].includes(
+ method.toLowerCase()
+ )
+ )
+ return;
+
+ if (endpoint.parameters) {
+ // Enforce non-querystring params for every methods other than GET
+ if (method !== "get") {
+ for (const p of endpoint.parameters) {
+ if (p.in === "query") p.in = "body";
+ }
+ }
+ }
+
+ // Incorporate common params defined at path level
+ if (commonParams) {
+ endpoint.parameters = [
+ ...(endpoint.parameters || []),
+ ...commonParams,
+ ];
+ }
+
+ Object.entries(endpoint.responses).forEach(([code, res]) => {
+ if (!res.schema) return;
+ res.content = {
+ "application/json": { schema: res.schema },
+ };
+ delete res.schema;
+ });
+ });
+ return [swagger.basePath + path, spec];
+ })
+ ),
+ components: {
+ schemas: swagger.definitions,
+ },
+ };
+ return openapi;
+}
diff --git a/mkdocs.yml b/mkdocs.yml
index 171e130b53..a38983c5cb 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -9,11 +9,14 @@ extra_css:
- stylesheets/lightgallery.min.css
- stylesheets/poppins.min.css
- stylesheets/inter.min.css
+- stylesheets/openapi.css
extra_javascript:
- javascript/sekoiaio.js
- javascript/lightgallery.min.js
- javascript/hotjar.js
- javascript/posthog.js
+- javascript/swagger-converter.js
+- javascript/openapi.js
markdown_extensions:
- admonition
- attr_list
@@ -604,6 +607,7 @@ nav:
- Overview: integration/faq/overview.md
- General Questions:
- Bug VS Improvement Requests: integration/faq/general_questions/bug_and_improvement_requests.md
+- API Documentation: developer/api.md
plugins:
- search: null
- redirects:
@@ -844,7 +848,8 @@ plugins:
xdr/features/investigate/dork_language.md: xdr/features/investigate/events_query_language.md
operation_center/data_collection/ingestion_methods/sekoiaio.md: integration/categories/endpoint/sekoiaio.md
- redoc
-- intakes_by_uuid
+#- intakes_by_uuid
+- sass
repo_url: https://github.com/SEKOIA-IO/documentation
site_name: Sekoia.io Documentation
site_url: https://docs.sekoia.io
@@ -858,6 +863,7 @@ theme:
- content.code.annotate
- content.action.edit
- content.code.copy
+ - navigation.sections
font: false
include_search_page: true
lang: en
diff --git a/plugins/intakes_by_uuid.py b/plugins/intakes_by_uuid.py
index 8342a0ef7a..4108042e10 100644
--- a/plugins/intakes_by_uuid.py
+++ b/plugins/intakes_by_uuid.py
@@ -45,7 +45,7 @@ def on_files(self, files: Files, config: Config):
with filename.open() as f:
_, metadata = get_data(f.read())
- if "uuid" not in metadata or metadata.get("type").lower() != "intake":
+ if "uuid" not in metadata or metadata.get("type").lower() != "intake":
continue
dialect_uuid = metadata["uuid"]
@@ -67,13 +67,16 @@ def on_files(self, files: Files, config: Config):
)
new_files.append(newfile)
- new_files.append(File(
- path="integration/categories/index.md",
- src_dir="operation_center/integration_catalog/",
- dest_dir=config["site_dir"],
- use_directory_urls=True,
- ))
- files._files += new_files
+ new_files.append(
+ File(
+ path="integration/categories/index.md",
+ src_dir="operation_center/integration_catalog/",
+ dest_dir=config["site_dir"],
+ use_directory_urls=True,
+ )
+ )
+ for f in new_files:
+ files.append(f)
def on_page_read_source(self, page, config):
if page.file.src_path.startswith("operation_center/integration_catalog/uuid/"):
diff --git a/plugins/sass.py b/plugins/sass.py
new file mode 100644
index 0000000000..b0ffb535c5
--- /dev/null
+++ b/plugins/sass.py
@@ -0,0 +1,31 @@
+from genericpath import isfile
+import glob
+import logging
+import os
+from pathlib import Path
+from mkdocs import plugins
+import sass
+
+STYLE_DIR = (Path(__file__).parent.parent / "style").absolute()
+OUT_DIR = (Path(__file__).parent.parent / "docs" / "stylesheets").absolute()
+
+
+class CompileSCSSPlugin(plugins.BasePlugin):
+ def on_pre_build(self, config):
+ for f in glob.glob(f"{STYLE_DIR}/*.scss"):
+ outf = f.replace(".scss", ".css").replace(
+ str(STYLE_DIR),
+ str(OUT_DIR),
+ )
+ logging.info(f"Compile SCSS {f} to {outf}")
+ with open(f) as fd:
+ css = sass.compile(string=fd.read(), output_style="compressed")
+
+ # Skip writing if no change is detected
+ if os.path.isfile(outf):
+ with open(outf) as fd:
+ if css.strip() == fd.read().strip():
+ continue
+
+ with open(outf, "w") as fd:
+ fd.write(css)
diff --git a/poetry.lock b/poetry.lock
index 7a3429454e..73087bd84d 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -1,14 +1,14 @@
-# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand.
+# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand.
[[package]]
name = "babel"
-version = "2.14.0"
+version = "2.16.0"
description = "Internationalization utilities"
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "Babel-2.14.0-py3-none-any.whl", hash = "sha256:efb1a25b7118e67ce3a259bed20545c29cb68be8ad2c784c83689981b7a57287"},
- {file = "Babel-2.14.0.tar.gz", hash = "sha256:6919867db036398ba21eb5c7a0f6b28ab8cbc3ae7a73a44ebe34ae74a4e7d363"},
+ {file = "babel-2.16.0-py3-none-any.whl", hash = "sha256:368b5b98b37c06b7daf6696391c3240c938b37767d4584413e8438c5c435fa8b"},
+ {file = "babel-2.16.0.tar.gz", hash = "sha256:d1f3554ca26605fe173f3de0c65f750f5a42f924499bf134de6423582298e316"},
]
[package.extras]
@@ -16,13 +16,13 @@ dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"]
[[package]]
name = "certifi"
-version = "2024.2.2"
+version = "2024.8.30"
description = "Python package for providing Mozilla's CA Bundle."
optional = false
python-versions = ">=3.6"
files = [
- {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"},
- {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"},
+ {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"},
+ {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"},
]
[[package]]
@@ -168,24 +168,27 @@ dev = ["flake8", "markdown", "twine", "wheel"]
[[package]]
name = "idna"
-version = "3.6"
+version = "3.10"
description = "Internationalized Domain Names in Applications (IDNA)"
optional = false
-python-versions = ">=3.5"
+python-versions = ">=3.6"
files = [
- {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"},
- {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"},
+ {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"},
+ {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"},
]
+[package.extras]
+all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"]
+
[[package]]
name = "jinja2"
-version = "3.1.3"
+version = "3.1.4"
description = "A very fast and expressive template engine."
optional = false
python-versions = ">=3.7"
files = [
- {file = "Jinja2-3.1.3-py3-none-any.whl", hash = "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa"},
- {file = "Jinja2-3.1.3.tar.gz", hash = "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"},
+ {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"},
+ {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"},
]
[package.dependencies]
@@ -194,6 +197,21 @@ MarkupSafe = ">=2.0"
[package.extras]
i18n = ["Babel (>=2.7)"]
+[[package]]
+name = "libsass"
+version = "0.23.0"
+description = "Sass for Python: A straightforward binding of libsass for Python."
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "libsass-0.23.0-cp38-abi3-macosx_11_0_x86_64.whl", hash = "sha256:34cae047cbbfc4ffa832a61cbb110f3c95f5471c6170c842d3fed161e40814dc"},
+ {file = "libsass-0.23.0-cp38-abi3-macosx_14_0_arm64.whl", hash = "sha256:ea97d1b45cdc2fc3590cb9d7b60f1d8915d3ce17a98c1f2d4dd47ee0d9c68ce6"},
+ {file = "libsass-0.23.0-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:4a218406d605f325d234e4678bd57126a66a88841cb95bee2caeafdc6f138306"},
+ {file = "libsass-0.23.0-cp38-abi3-win32.whl", hash = "sha256:31e86d92a5c7a551df844b72d83fc2b5e50abc6fbbb31e296f7bebd6489ed1b4"},
+ {file = "libsass-0.23.0-cp38-abi3-win_amd64.whl", hash = "sha256:a2ec85d819f353cbe807432d7275d653710d12b08ec7ef61c124a580a8352f3c"},
+ {file = "libsass-0.23.0.tar.gz", hash = "sha256:6f209955ede26684e76912caf329f4ccb57e4a043fd77fe0e7348dd9574f1880"},
+]
+
[[package]]
name = "lightgallery"
version = "0.5"
@@ -321,13 +339,13 @@ files = [
[[package]]
name = "mkdocs"
-version = "1.5.3"
+version = "1.6.1"
description = "Project documentation with Markdown."
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "mkdocs-1.5.3-py3-none-any.whl", hash = "sha256:3b3a78e736b31158d64dbb2f8ba29bd46a379d0c6e324c2246c3bc3d2189cfc1"},
- {file = "mkdocs-1.5.3.tar.gz", hash = "sha256:eb7c99214dcb945313ba30426c2451b735992c73c2e10838f76d09e39ff4d0e2"},
+ {file = "mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e"},
+ {file = "mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2"},
]
[package.dependencies]
@@ -335,29 +353,45 @@ click = ">=7.0"
colorama = {version = ">=0.4", markers = "platform_system == \"Windows\""}
ghp-import = ">=1.0"
jinja2 = ">=2.11.1"
-markdown = ">=3.2.1"
+markdown = ">=3.3.6"
markupsafe = ">=2.0.1"
mergedeep = ">=1.3.4"
+mkdocs-get-deps = ">=0.2.0"
packaging = ">=20.5"
pathspec = ">=0.11.1"
-platformdirs = ">=2.2.0"
pyyaml = ">=5.1"
pyyaml-env-tag = ">=0.1"
watchdog = ">=2.0"
[package.extras]
i18n = ["babel (>=2.9.0)"]
-min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.3)", "jinja2 (==2.11.1)", "markdown (==3.2.1)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "packaging (==20.5)", "pathspec (==0.11.1)", "platformdirs (==2.2.0)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "typing-extensions (==3.10)", "watchdog (==2.0)"]
+min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.4)", "jinja2 (==2.11.1)", "markdown (==3.3.6)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "mkdocs-get-deps (==0.2.0)", "packaging (==20.5)", "pathspec (==0.11.1)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "watchdog (==2.0)"]
+
+[[package]]
+name = "mkdocs-get-deps"
+version = "0.2.0"
+description = "MkDocs extension that lists all dependencies according to a mkdocs.yml file"
+optional = false
+python-versions = ">=3.8"
+files = [
+ {file = "mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134"},
+ {file = "mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c"},
+]
+
+[package.dependencies]
+mergedeep = ">=1.3.4"
+platformdirs = ">=2.2.0"
+pyyaml = ">=5.1"
[[package]]
name = "mkdocs-material"
-version = "9.5.14"
+version = "9.5.34"
description = "Documentation that simply works"
optional = false
python-versions = ">=3.8"
files = [
- {file = "mkdocs_material-9.5.14-py3-none-any.whl", hash = "sha256:a45244ac221fda46ecf8337f00ec0e5cb5348ab9ffb203ca2a0c313b0d4dbc27"},
- {file = "mkdocs_material-9.5.14.tar.gz", hash = "sha256:2a1f8e67cda2587ab93ecea9ba42d0ca61d1d7b5fad8cf690eeaeb39dcd4b9af"},
+ {file = "mkdocs_material-9.5.34-py3-none-any.whl", hash = "sha256:54caa8be708de2b75167fd4d3b9f3d949579294f49cb242515d4653dbee9227e"},
+ {file = "mkdocs_material-9.5.34.tar.gz", hash = "sha256:1e60ddf716cfb5679dfd65900b8a25d277064ed82d9a53cd5190e3f894df7840"},
]
[package.dependencies]
@@ -365,7 +399,7 @@ babel = ">=2.10,<3.0"
colorama = ">=0.4,<1.0"
jinja2 = ">=3.0,<4.0"
markdown = ">=3.2,<4.0"
-mkdocs = ">=1.5.3,<1.6.0"
+mkdocs = ">=1.6,<2.0"
mkdocs-material-extensions = ">=1.3,<2.0"
paginate = ">=0.5,<1.0"
pygments = ">=2.16,<3.0"
@@ -410,25 +444,30 @@ test = ["autoflake", "black", "isort", "pytest"]
[[package]]
name = "packaging"
-version = "24.0"
+version = "24.1"
description = "Core utilities for Python packages"
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"},
- {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"},
+ {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"},
+ {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"},
]
[[package]]
name = "paginate"
-version = "0.5.6"
+version = "0.5.7"
description = "Divides large result sets into pages for easier browsing"
optional = false
python-versions = "*"
files = [
- {file = "paginate-0.5.6.tar.gz", hash = "sha256:5e6007b6a9398177a7e1648d04fdd9f8c9766a1a945bceac82f1929e8c78af2d"},
+ {file = "paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591"},
+ {file = "paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945"},
]
+[package.extras]
+dev = ["pytest", "tox"]
+lint = ["black"]
+
[[package]]
name = "pathspec"
version = "0.12.1"
@@ -442,32 +481,32 @@ files = [
[[package]]
name = "platformdirs"
-version = "4.2.0"
-description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
+version = "4.3.6"
+description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`."
optional = false
python-versions = ">=3.8"
files = [
- {file = "platformdirs-4.2.0-py3-none-any.whl", hash = "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068"},
- {file = "platformdirs-4.2.0.tar.gz", hash = "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768"},
+ {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"},
+ {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"},
]
[package.extras]
-docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"]
-test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"]
+docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4)"]
+test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"]
+type = ["mypy (>=1.11.2)"]
[[package]]
name = "pygments"
-version = "2.17.2"
+version = "2.18.0"
description = "Pygments is a syntax highlighting package written in Python."
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"},
- {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"},
+ {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"},
+ {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"},
]
[package.extras]
-plugins = ["importlib-metadata"]
windows-terminal = ["colorama (>=0.4.6)"]
[[package]]
@@ -504,62 +543,64 @@ six = ">=1.5"
[[package]]
name = "pyyaml"
-version = "6.0.1"
+version = "6.0.2"
description = "YAML parser and emitter for Python"
optional = false
-python-versions = ">=3.6"
+python-versions = ">=3.8"
files = [
- {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"},
- {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"},
- {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"},
- {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"},
- {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"},
- {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"},
- {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"},
- {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"},
- {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"},
- {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"},
- {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"},
- {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"},
- {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"},
- {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"},
- {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"},
- {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"},
- {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"},
- {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"},
- {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"},
- {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"},
- {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"},
- {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"},
- {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"},
- {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"},
- {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"},
- {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"},
- {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"},
- {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"},
- {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"},
- {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"},
- {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"},
- {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"},
- {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"},
- {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"},
- {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"},
- {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"},
- {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"},
- {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"},
- {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"},
- {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"},
- {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"},
- {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"},
- {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"},
- {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"},
- {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"},
- {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"},
- {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"},
- {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"},
- {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"},
- {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"},
- {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"},
+ {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"},
+ {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"},
+ {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"},
+ {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"},
+ {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"},
+ {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"},
+ {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"},
+ {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"},
+ {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"},
+ {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"},
+ {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"},
+ {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"},
+ {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"},
+ {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"},
+ {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"},
+ {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"},
+ {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"},
+ {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"},
+ {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"},
+ {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"},
+ {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"},
+ {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"},
+ {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"},
+ {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"},
+ {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"},
+ {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"},
+ {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"},
+ {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"},
+ {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"},
+ {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"},
+ {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"},
+ {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"},
+ {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"},
+ {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"},
+ {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"},
+ {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"},
+ {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"},
+ {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"},
+ {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"},
+ {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"},
+ {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"},
+ {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"},
+ {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"},
+ {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"},
+ {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"},
+ {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"},
+ {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"},
+ {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"},
+ {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"},
+ {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"},
+ {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"},
+ {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"},
+ {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"},
]
[[package]]
@@ -578,115 +619,116 @@ pyyaml = "*"
[[package]]
name = "regex"
-version = "2023.12.25"
+version = "2024.9.11"
description = "Alternative regular expression module, to replace re."
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "regex-2023.12.25-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0694219a1d54336fd0445ea382d49d36882415c0134ee1e8332afd1529f0baa5"},
- {file = "regex-2023.12.25-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b014333bd0217ad3d54c143de9d4b9a3ca1c5a29a6d0d554952ea071cff0f1f8"},
- {file = "regex-2023.12.25-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d865984b3f71f6d0af64d0d88f5733521698f6c16f445bb09ce746c92c97c586"},
- {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e0eabac536b4cc7f57a5f3d095bfa557860ab912f25965e08fe1545e2ed8b4c"},
- {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c25a8ad70e716f96e13a637802813f65d8a6760ef48672aa3502f4c24ea8b400"},
- {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9b6d73353f777630626f403b0652055ebfe8ff142a44ec2cf18ae470395766e"},
- {file = "regex-2023.12.25-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9cc99d6946d750eb75827cb53c4371b8b0fe89c733a94b1573c9dd16ea6c9e4"},
- {file = "regex-2023.12.25-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88d1f7bef20c721359d8675f7d9f8e414ec5003d8f642fdfd8087777ff7f94b5"},
- {file = "regex-2023.12.25-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cb3fe77aec8f1995611f966d0c656fdce398317f850d0e6e7aebdfe61f40e1cd"},
- {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7aa47c2e9ea33a4a2a05f40fcd3ea36d73853a2aae7b4feab6fc85f8bf2c9704"},
- {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:df26481f0c7a3f8739fecb3e81bc9da3fcfae34d6c094563b9d4670b047312e1"},
- {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:c40281f7d70baf6e0db0c2f7472b31609f5bc2748fe7275ea65a0b4601d9b392"},
- {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:d94a1db462d5690ebf6ae86d11c5e420042b9898af5dcf278bd97d6bda065423"},
- {file = "regex-2023.12.25-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ba1b30765a55acf15dce3f364e4928b80858fa8f979ad41f862358939bdd1f2f"},
- {file = "regex-2023.12.25-cp310-cp310-win32.whl", hash = "sha256:150c39f5b964e4d7dba46a7962a088fbc91f06e606f023ce57bb347a3b2d4630"},
- {file = "regex-2023.12.25-cp310-cp310-win_amd64.whl", hash = "sha256:09da66917262d9481c719599116c7dc0c321ffcec4b1f510c4f8a066f8768105"},
- {file = "regex-2023.12.25-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:1b9d811f72210fa9306aeb88385b8f8bcef0dfbf3873410413c00aa94c56c2b6"},
- {file = "regex-2023.12.25-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d902a43085a308cef32c0d3aea962524b725403fd9373dea18110904003bac97"},
- {file = "regex-2023.12.25-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d166eafc19f4718df38887b2bbe1467a4f74a9830e8605089ea7a30dd4da8887"},
- {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7ad32824b7f02bb3c9f80306d405a1d9b7bb89362d68b3c5a9be53836caebdb"},
- {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:636ba0a77de609d6510235b7f0e77ec494d2657108f777e8765efc060094c98c"},
- {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fda75704357805eb953a3ee15a2b240694a9a514548cd49b3c5124b4e2ad01b"},
- {file = "regex-2023.12.25-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f72cbae7f6b01591f90814250e636065850c5926751af02bb48da94dfced7baa"},
- {file = "regex-2023.12.25-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:db2a0b1857f18b11e3b0e54ddfefc96af46b0896fb678c85f63fb8c37518b3e7"},
- {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:7502534e55c7c36c0978c91ba6f61703faf7ce733715ca48f499d3dbbd7657e0"},
- {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e8c7e08bb566de4faaf11984af13f6bcf6a08f327b13631d41d62592681d24fe"},
- {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:283fc8eed679758de38fe493b7d7d84a198b558942b03f017b1f94dda8efae80"},
- {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:f44dd4d68697559d007462b0a3a1d9acd61d97072b71f6d1968daef26bc744bd"},
- {file = "regex-2023.12.25-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:67d3ccfc590e5e7197750fcb3a2915b416a53e2de847a728cfa60141054123d4"},
- {file = "regex-2023.12.25-cp311-cp311-win32.whl", hash = "sha256:68191f80a9bad283432385961d9efe09d783bcd36ed35a60fb1ff3f1ec2efe87"},
- {file = "regex-2023.12.25-cp311-cp311-win_amd64.whl", hash = "sha256:7d2af3f6b8419661a0c421584cfe8aaec1c0e435ce7e47ee2a97e344b98f794f"},
- {file = "regex-2023.12.25-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8a0ccf52bb37d1a700375a6b395bff5dd15c50acb745f7db30415bae3c2b0715"},
- {file = "regex-2023.12.25-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c3c4a78615b7762740531c27cf46e2f388d8d727d0c0c739e72048beb26c8a9d"},
- {file = "regex-2023.12.25-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ad83e7545b4ab69216cef4cc47e344d19622e28aabec61574b20257c65466d6a"},
- {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7a635871143661feccce3979e1727c4e094f2bdfd3ec4b90dfd4f16f571a87a"},
- {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d498eea3f581fbe1b34b59c697512a8baef88212f92e4c7830fcc1499f5b45a5"},
- {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:43f7cd5754d02a56ae4ebb91b33461dc67be8e3e0153f593c509e21d219c5060"},
- {file = "regex-2023.12.25-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51f4b32f793812714fd5307222a7f77e739b9bc566dc94a18126aba3b92b98a3"},
- {file = "regex-2023.12.25-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba99d8077424501b9616b43a2d208095746fb1284fc5ba490139651f971d39d9"},
- {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4bfc2b16e3ba8850e0e262467275dd4d62f0d045e0e9eda2bc65078c0110a11f"},
- {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8c2c19dae8a3eb0ea45a8448356ed561be843b13cbc34b840922ddf565498c1c"},
- {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:60080bb3d8617d96f0fb7e19796384cc2467447ef1c491694850ebd3670bc457"},
- {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b77e27b79448e34c2c51c09836033056a0547aa360c45eeeb67803da7b0eedaf"},
- {file = "regex-2023.12.25-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:518440c991f514331f4850a63560321f833979d145d7d81186dbe2f19e27ae3d"},
- {file = "regex-2023.12.25-cp312-cp312-win32.whl", hash = "sha256:e2610e9406d3b0073636a3a2e80db05a02f0c3169b5632022b4e81c0364bcda5"},
- {file = "regex-2023.12.25-cp312-cp312-win_amd64.whl", hash = "sha256:cc37b9aeebab425f11f27e5e9e6cf580be7206c6582a64467a14dda211abc232"},
- {file = "regex-2023.12.25-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:da695d75ac97cb1cd725adac136d25ca687da4536154cdc2815f576e4da11c69"},
- {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d126361607b33c4eb7b36debc173bf25d7805847346dd4d99b5499e1fef52bc7"},
- {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4719bb05094d7d8563a450cf8738d2e1061420f79cfcc1fa7f0a44744c4d8f73"},
- {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5dd58946bce44b53b06d94aa95560d0b243eb2fe64227cba50017a8d8b3cd3e2"},
- {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22a86d9fff2009302c440b9d799ef2fe322416d2d58fc124b926aa89365ec482"},
- {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2aae8101919e8aa05ecfe6322b278f41ce2994c4a430303c4cd163fef746e04f"},
- {file = "regex-2023.12.25-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e692296c4cc2873967771345a876bcfc1c547e8dd695c6b89342488b0ea55cd8"},
- {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:263ef5cc10979837f243950637fffb06e8daed7f1ac1e39d5910fd29929e489a"},
- {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:d6f7e255e5fa94642a0724e35406e6cb7001c09d476ab5fce002f652b36d0c39"},
- {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:88ad44e220e22b63b0f8f81f007e8abbb92874d8ced66f32571ef8beb0643b2b"},
- {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:3a17d3ede18f9cedcbe23d2daa8a2cd6f59fe2bf082c567e43083bba3fb00347"},
- {file = "regex-2023.12.25-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d15b274f9e15b1a0b7a45d2ac86d1f634d983ca40d6b886721626c47a400bf39"},
- {file = "regex-2023.12.25-cp37-cp37m-win32.whl", hash = "sha256:ed19b3a05ae0c97dd8f75a5d8f21f7723a8c33bbc555da6bbe1f96c470139d3c"},
- {file = "regex-2023.12.25-cp37-cp37m-win_amd64.whl", hash = "sha256:a6d1047952c0b8104a1d371f88f4ab62e6275567d4458c1e26e9627ad489b445"},
- {file = "regex-2023.12.25-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b43523d7bc2abd757119dbfb38af91b5735eea45537ec6ec3a5ec3f9562a1c53"},
- {file = "regex-2023.12.25-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:efb2d82f33b2212898f1659fb1c2e9ac30493ac41e4d53123da374c3b5541e64"},
- {file = "regex-2023.12.25-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b7fca9205b59c1a3d5031f7e64ed627a1074730a51c2a80e97653e3e9fa0d415"},
- {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:086dd15e9435b393ae06f96ab69ab2d333f5d65cbe65ca5a3ef0ec9564dfe770"},
- {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e81469f7d01efed9b53740aedd26085f20d49da65f9c1f41e822a33992cb1590"},
- {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:34e4af5b27232f68042aa40a91c3b9bb4da0eeb31b7632e0091afc4310afe6cb"},
- {file = "regex-2023.12.25-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9852b76ab558e45b20bf1893b59af64a28bd3820b0c2efc80e0a70a4a3ea51c1"},
- {file = "regex-2023.12.25-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff100b203092af77d1a5a7abe085b3506b7eaaf9abf65b73b7d6905b6cb76988"},
- {file = "regex-2023.12.25-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cc038b2d8b1470364b1888a98fd22d616fba2b6309c5b5f181ad4483e0017861"},
- {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:094ba386bb5c01e54e14434d4caabf6583334090865b23ef58e0424a6286d3dc"},
- {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5cd05d0f57846d8ba4b71d9c00f6f37d6b97d5e5ef8b3c3840426a475c8f70f4"},
- {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:9aa1a67bbf0f957bbe096375887b2505f5d8ae16bf04488e8b0f334c36e31360"},
- {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:98a2636994f943b871786c9e82bfe7883ecdaba2ef5df54e1450fa9869d1f756"},
- {file = "regex-2023.12.25-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:37f8e93a81fc5e5bd8db7e10e62dc64261bcd88f8d7e6640aaebe9bc180d9ce2"},
- {file = "regex-2023.12.25-cp38-cp38-win32.whl", hash = "sha256:d78bd484930c1da2b9679290a41cdb25cc127d783768a0369d6b449e72f88beb"},
- {file = "regex-2023.12.25-cp38-cp38-win_amd64.whl", hash = "sha256:b521dcecebc5b978b447f0f69b5b7f3840eac454862270406a39837ffae4e697"},
- {file = "regex-2023.12.25-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f7bc09bc9c29ebead055bcba136a67378f03d66bf359e87d0f7c759d6d4ffa31"},
- {file = "regex-2023.12.25-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e14b73607d6231f3cc4622809c196b540a6a44e903bcfad940779c80dffa7be7"},
- {file = "regex-2023.12.25-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9eda5f7a50141291beda3edd00abc2d4a5b16c29c92daf8d5bd76934150f3edc"},
- {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc6bb9aa69aacf0f6032c307da718f61a40cf970849e471254e0e91c56ffca95"},
- {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:298dc6354d414bc921581be85695d18912bea163a8b23cac9a2562bbcd5088b1"},
- {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2f4e475a80ecbd15896a976aa0b386c5525d0ed34d5c600b6d3ebac0a67c7ddf"},
- {file = "regex-2023.12.25-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:531ac6cf22b53e0696f8e1d56ce2396311254eb806111ddd3922c9d937151dae"},
- {file = "regex-2023.12.25-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22f3470f7524b6da61e2020672df2f3063676aff444db1daa283c2ea4ed259d6"},
- {file = "regex-2023.12.25-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:89723d2112697feaa320c9d351e5f5e7b841e83f8b143dba8e2d2b5f04e10923"},
- {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0ecf44ddf9171cd7566ef1768047f6e66975788258b1c6c6ca78098b95cf9a3d"},
- {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:905466ad1702ed4acfd67a902af50b8db1feeb9781436372261808df7a2a7bca"},
- {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:4558410b7a5607a645e9804a3e9dd509af12fb72b9825b13791a37cd417d73a5"},
- {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:7e316026cc1095f2a3e8cc012822c99f413b702eaa2ca5408a513609488cb62f"},
- {file = "regex-2023.12.25-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3b1de218d5375cd6ac4b5493e0b9f3df2be331e86520f23382f216c137913d20"},
- {file = "regex-2023.12.25-cp39-cp39-win32.whl", hash = "sha256:11a963f8e25ab5c61348d090bf1b07f1953929c13bd2309a0662e9ff680763c9"},
- {file = "regex-2023.12.25-cp39-cp39-win_amd64.whl", hash = "sha256:e693e233ac92ba83a87024e1d32b5f9ab15ca55ddd916d878146f4e3406b5c91"},
- {file = "regex-2023.12.25.tar.gz", hash = "sha256:29171aa128da69afdf4bde412d5bedc335f2ca8fcfe4489038577d05f16181e5"},
+ {file = "regex-2024.9.11-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1494fa8725c285a81d01dc8c06b55287a1ee5e0e382d8413adc0a9197aac6408"},
+ {file = "regex-2024.9.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0e12c481ad92d129c78f13a2a3662317e46ee7ef96c94fd332e1c29131875b7d"},
+ {file = "regex-2024.9.11-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:16e13a7929791ac1216afde26f712802e3df7bf0360b32e4914dca3ab8baeea5"},
+ {file = "regex-2024.9.11-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:46989629904bad940bbec2106528140a218b4a36bb3042d8406980be1941429c"},
+ {file = "regex-2024.9.11-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a906ed5e47a0ce5f04b2c981af1c9acf9e8696066900bf03b9d7879a6f679fc8"},
+ {file = "regex-2024.9.11-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e9a091b0550b3b0207784a7d6d0f1a00d1d1c8a11699c1a4d93db3fbefc3ad35"},
+ {file = "regex-2024.9.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ddcd9a179c0a6fa8add279a4444015acddcd7f232a49071ae57fa6e278f1f71"},
+ {file = "regex-2024.9.11-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6b41e1adc61fa347662b09398e31ad446afadff932a24807d3ceb955ed865cc8"},
+ {file = "regex-2024.9.11-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ced479f601cd2f8ca1fd7b23925a7e0ad512a56d6e9476f79b8f381d9d37090a"},
+ {file = "regex-2024.9.11-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:635a1d96665f84b292e401c3d62775851aedc31d4f8784117b3c68c4fcd4118d"},
+ {file = "regex-2024.9.11-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:c0256beda696edcf7d97ef16b2a33a8e5a875affd6fa6567b54f7c577b30a137"},
+ {file = "regex-2024.9.11-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:3ce4f1185db3fbde8ed8aa223fc9620f276c58de8b0d4f8cc86fd1360829edb6"},
+ {file = "regex-2024.9.11-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:09d77559e80dcc9d24570da3745ab859a9cf91953062e4ab126ba9d5993688ca"},
+ {file = "regex-2024.9.11-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7a22ccefd4db3f12b526eccb129390942fe874a3a9fdbdd24cf55773a1faab1a"},
+ {file = "regex-2024.9.11-cp310-cp310-win32.whl", hash = "sha256:f745ec09bc1b0bd15cfc73df6fa4f726dcc26bb16c23a03f9e3367d357eeedd0"},
+ {file = "regex-2024.9.11-cp310-cp310-win_amd64.whl", hash = "sha256:01c2acb51f8a7d6494c8c5eafe3d8e06d76563d8a8a4643b37e9b2dd8a2ff623"},
+ {file = "regex-2024.9.11-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2cce2449e5927a0bf084d346da6cd5eb016b2beca10d0013ab50e3c226ffc0df"},
+ {file = "regex-2024.9.11-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3b37fa423beefa44919e009745ccbf353d8c981516e807995b2bd11c2c77d268"},
+ {file = "regex-2024.9.11-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:64ce2799bd75039b480cc0360907c4fb2f50022f030bf9e7a8705b636e408fad"},
+ {file = "regex-2024.9.11-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a4cc92bb6db56ab0c1cbd17294e14f5e9224f0cc6521167ef388332604e92679"},
+ {file = "regex-2024.9.11-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d05ac6fa06959c4172eccd99a222e1fbf17b5670c4d596cb1e5cde99600674c4"},
+ {file = "regex-2024.9.11-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:040562757795eeea356394a7fb13076ad4f99d3c62ab0f8bdfb21f99a1f85664"},
+ {file = "regex-2024.9.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6113c008a7780792efc80f9dfe10ba0cd043cbf8dc9a76ef757850f51b4edc50"},
+ {file = "regex-2024.9.11-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8e5fb5f77c8745a60105403a774fe2c1759b71d3e7b4ca237a5e67ad066c7199"},
+ {file = "regex-2024.9.11-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:54d9ff35d4515debf14bc27f1e3b38bfc453eff3220f5bce159642fa762fe5d4"},
+ {file = "regex-2024.9.11-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:df5cbb1fbc74a8305b6065d4ade43b993be03dbe0f8b30032cced0d7740994bd"},
+ {file = "regex-2024.9.11-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:7fb89ee5d106e4a7a51bce305ac4efb981536301895f7bdcf93ec92ae0d91c7f"},
+ {file = "regex-2024.9.11-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:a738b937d512b30bf75995c0159c0ddf9eec0775c9d72ac0202076c72f24aa96"},
+ {file = "regex-2024.9.11-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e28f9faeb14b6f23ac55bfbbfd3643f5c7c18ede093977f1df249f73fd22c7b1"},
+ {file = "regex-2024.9.11-cp311-cp311-win32.whl", hash = "sha256:18e707ce6c92d7282dfce370cd205098384b8ee21544e7cb29b8aab955b66fa9"},
+ {file = "regex-2024.9.11-cp311-cp311-win_amd64.whl", hash = "sha256:313ea15e5ff2a8cbbad96ccef6be638393041b0a7863183c2d31e0c6116688cf"},
+ {file = "regex-2024.9.11-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b0d0a6c64fcc4ef9c69bd5b3b3626cc3776520a1637d8abaa62b9edc147a58f7"},
+ {file = "regex-2024.9.11-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:49b0e06786ea663f933f3710a51e9385ce0cba0ea56b67107fd841a55d56a231"},
+ {file = "regex-2024.9.11-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5b513b6997a0b2f10e4fd3a1313568e373926e8c252bd76c960f96fd039cd28d"},
+ {file = "regex-2024.9.11-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee439691d8c23e76f9802c42a95cfeebf9d47cf4ffd06f18489122dbb0a7ad64"},
+ {file = "regex-2024.9.11-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a8f877c89719d759e52783f7fe6e1c67121076b87b40542966c02de5503ace42"},
+ {file = "regex-2024.9.11-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:23b30c62d0f16827f2ae9f2bb87619bc4fba2044911e2e6c2eb1af0161cdb766"},
+ {file = "regex-2024.9.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85ab7824093d8f10d44330fe1e6493f756f252d145323dd17ab6b48733ff6c0a"},
+ {file = "regex-2024.9.11-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8dee5b4810a89447151999428fe096977346cf2f29f4d5e29609d2e19e0199c9"},
+ {file = "regex-2024.9.11-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:98eeee2f2e63edae2181c886d7911ce502e1292794f4c5ee71e60e23e8d26b5d"},
+ {file = "regex-2024.9.11-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:57fdd2e0b2694ce6fc2e5ccf189789c3e2962916fb38779d3e3521ff8fe7a822"},
+ {file = "regex-2024.9.11-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:d552c78411f60b1fdaafd117a1fca2f02e562e309223b9d44b7de8be451ec5e0"},
+ {file = "regex-2024.9.11-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:a0b2b80321c2ed3fcf0385ec9e51a12253c50f146fddb2abbb10f033fe3d049a"},
+ {file = "regex-2024.9.11-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:18406efb2f5a0e57e3a5881cd9354c1512d3bb4f5c45d96d110a66114d84d23a"},
+ {file = "regex-2024.9.11-cp312-cp312-win32.whl", hash = "sha256:e464b467f1588e2c42d26814231edecbcfe77f5ac414d92cbf4e7b55b2c2a776"},
+ {file = "regex-2024.9.11-cp312-cp312-win_amd64.whl", hash = "sha256:9e8719792ca63c6b8340380352c24dcb8cd7ec49dae36e963742a275dfae6009"},
+ {file = "regex-2024.9.11-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:c157bb447303070f256e084668b702073db99bbb61d44f85d811025fcf38f784"},
+ {file = "regex-2024.9.11-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4db21ece84dfeefc5d8a3863f101995de646c6cb0536952c321a2650aa202c36"},
+ {file = "regex-2024.9.11-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:220e92a30b426daf23bb67a7962900ed4613589bab80382be09b48896d211e92"},
+ {file = "regex-2024.9.11-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb1ae19e64c14c7ec1995f40bd932448713d3c73509e82d8cd7744dc00e29e86"},
+ {file = "regex-2024.9.11-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f47cd43a5bfa48f86925fe26fbdd0a488ff15b62468abb5d2a1e092a4fb10e85"},
+ {file = "regex-2024.9.11-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9d4a76b96f398697fe01117093613166e6aa8195d63f1b4ec3f21ab637632963"},
+ {file = "regex-2024.9.11-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ea51dcc0835eea2ea31d66456210a4e01a076d820e9039b04ae8d17ac11dee6"},
+ {file = "regex-2024.9.11-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7aaa315101c6567a9a45d2839322c51c8d6e81f67683d529512f5bcfb99c802"},
+ {file = "regex-2024.9.11-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c57d08ad67aba97af57a7263c2d9006d5c404d721c5f7542f077f109ec2a4a29"},
+ {file = "regex-2024.9.11-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f8404bf61298bb6f8224bb9176c1424548ee1181130818fcd2cbffddc768bed8"},
+ {file = "regex-2024.9.11-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:dd4490a33eb909ef5078ab20f5f000087afa2a4daa27b4c072ccb3cb3050ad84"},
+ {file = "regex-2024.9.11-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:eee9130eaad130649fd73e5cd92f60e55708952260ede70da64de420cdcad554"},
+ {file = "regex-2024.9.11-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6a2644a93da36c784e546de579ec1806bfd2763ef47babc1b03d765fe560c9f8"},
+ {file = "regex-2024.9.11-cp313-cp313-win32.whl", hash = "sha256:e997fd30430c57138adc06bba4c7c2968fb13d101e57dd5bb9355bf8ce3fa7e8"},
+ {file = "regex-2024.9.11-cp313-cp313-win_amd64.whl", hash = "sha256:042c55879cfeb21a8adacc84ea347721d3d83a159da6acdf1116859e2427c43f"},
+ {file = "regex-2024.9.11-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:35f4a6f96aa6cb3f2f7247027b07b15a374f0d5b912c0001418d1d55024d5cb4"},
+ {file = "regex-2024.9.11-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:55b96e7ce3a69a8449a66984c268062fbaa0d8ae437b285428e12797baefce7e"},
+ {file = "regex-2024.9.11-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cb130fccd1a37ed894824b8c046321540263013da72745d755f2d35114b81a60"},
+ {file = "regex-2024.9.11-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:323c1f04be6b2968944d730e5c2091c8c89767903ecaa135203eec4565ed2b2b"},
+ {file = "regex-2024.9.11-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:be1c8ed48c4c4065ecb19d882a0ce1afe0745dfad8ce48c49586b90a55f02366"},
+ {file = "regex-2024.9.11-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b5b029322e6e7b94fff16cd120ab35a253236a5f99a79fb04fda7ae71ca20ae8"},
+ {file = "regex-2024.9.11-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6fff13ef6b5f29221d6904aa816c34701462956aa72a77f1f151a8ec4f56aeb"},
+ {file = "regex-2024.9.11-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:587d4af3979376652010e400accc30404e6c16b7df574048ab1f581af82065e4"},
+ {file = "regex-2024.9.11-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:079400a8269544b955ffa9e31f186f01d96829110a3bf79dc338e9910f794fca"},
+ {file = "regex-2024.9.11-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:f9268774428ec173654985ce55fc6caf4c6d11ade0f6f914d48ef4719eb05ebb"},
+ {file = "regex-2024.9.11-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:23f9985c8784e544d53fc2930fc1ac1a7319f5d5332d228437acc9f418f2f168"},
+ {file = "regex-2024.9.11-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:ae2941333154baff9838e88aa71c1d84f4438189ecc6021a12c7573728b5838e"},
+ {file = "regex-2024.9.11-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:e93f1c331ca8e86fe877a48ad64e77882c0c4da0097f2212873a69bbfea95d0c"},
+ {file = "regex-2024.9.11-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:846bc79ee753acf93aef4184c040d709940c9d001029ceb7b7a52747b80ed2dd"},
+ {file = "regex-2024.9.11-cp38-cp38-win32.whl", hash = "sha256:c94bb0a9f1db10a1d16c00880bdebd5f9faf267273b8f5bd1878126e0fbde771"},
+ {file = "regex-2024.9.11-cp38-cp38-win_amd64.whl", hash = "sha256:2b08fce89fbd45664d3df6ad93e554b6c16933ffa9d55cb7e01182baaf971508"},
+ {file = "regex-2024.9.11-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:07f45f287469039ffc2c53caf6803cd506eb5f5f637f1d4acb37a738f71dd066"},
+ {file = "regex-2024.9.11-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4838e24ee015101d9f901988001038f7f0d90dc0c3b115541a1365fb439add62"},
+ {file = "regex-2024.9.11-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6edd623bae6a737f10ce853ea076f56f507fd7726bee96a41ee3d68d347e4d16"},
+ {file = "regex-2024.9.11-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c69ada171c2d0e97a4b5aa78fbb835e0ffbb6b13fc5da968c09811346564f0d3"},
+ {file = "regex-2024.9.11-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:02087ea0a03b4af1ed6ebab2c54d7118127fee8d71b26398e8e4b05b78963199"},
+ {file = "regex-2024.9.11-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:69dee6a020693d12a3cf892aba4808fe168d2a4cef368eb9bf74f5398bfd4ee8"},
+ {file = "regex-2024.9.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:297f54910247508e6e5cae669f2bc308985c60540a4edd1c77203ef19bfa63ca"},
+ {file = "regex-2024.9.11-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ecea58b43a67b1b79805f1a0255730edaf5191ecef84dbc4cc85eb30bc8b63b9"},
+ {file = "regex-2024.9.11-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:eab4bb380f15e189d1313195b062a6aa908f5bd687a0ceccd47c8211e9cf0d4a"},
+ {file = "regex-2024.9.11-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0cbff728659ce4bbf4c30b2a1be040faafaa9eca6ecde40aaff86f7889f4ab39"},
+ {file = "regex-2024.9.11-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:54c4a097b8bc5bb0dfc83ae498061d53ad7b5762e00f4adaa23bee22b012e6ba"},
+ {file = "regex-2024.9.11-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:73d6d2f64f4d894c96626a75578b0bf7d9e56dcda8c3d037a2118fdfe9b1c664"},
+ {file = "regex-2024.9.11-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:e53b5fbab5d675aec9f0c501274c467c0f9a5d23696cfc94247e1fb56501ed89"},
+ {file = "regex-2024.9.11-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0ffbcf9221e04502fc35e54d1ce9567541979c3fdfb93d2c554f0ca583a19b35"},
+ {file = "regex-2024.9.11-cp39-cp39-win32.whl", hash = "sha256:e4c22e1ac1f1ec1e09f72e6c44d8f2244173db7eb9629cc3a346a8d7ccc31142"},
+ {file = "regex-2024.9.11-cp39-cp39-win_amd64.whl", hash = "sha256:faa3c142464efec496967359ca99696c896c591c56c53506bac1ad465f66e919"},
+ {file = "regex-2024.9.11.tar.gz", hash = "sha256:6c188c307e8433bcb63dc1915022deb553b4203a70722fc542c363bf120a01fd"},
]
[[package]]
name = "requests"
-version = "2.32.0"
+version = "2.32.3"
description = "Python HTTP for Humans."
optional = false
python-versions = ">=3.8"
files = [
- {file = "requests-2.32.0-py3-none-any.whl", hash = "sha256:f2c3881dddb70d056c5bd7600a4fae312b2a300e39be6a118d30b90bd27262b5"},
- {file = "requests-2.32.0.tar.gz", hash = "sha256:fa5490319474c82ef1d2c9bc459d3652e3ae4ef4c4ebdd18a21145a47ca4b6b8"},
+ {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"},
+ {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"},
]
[package.dependencies]
@@ -712,13 +754,13 @@ files = [
[[package]]
name = "urllib3"
-version = "2.2.2"
+version = "2.2.3"
description = "HTTP library with thread-safe connection pooling, file post, and more."
optional = false
python-versions = ">=3.8"
files = [
- {file = "urllib3-2.2.2-py3-none-any.whl", hash = "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472"},
- {file = "urllib3-2.2.2.tar.gz", hash = "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168"},
+ {file = "urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac"},
+ {file = "urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9"},
]
[package.extras]
@@ -729,40 +771,41 @@ zstd = ["zstandard (>=0.18.0)"]
[[package]]
name = "watchdog"
-version = "4.0.0"
+version = "5.0.2"
description = "Filesystem events monitoring"
optional = false
-python-versions = ">=3.8"
+python-versions = ">=3.9"
files = [
- {file = "watchdog-4.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:39cb34b1f1afbf23e9562501673e7146777efe95da24fab5707b88f7fb11649b"},
- {file = "watchdog-4.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c522392acc5e962bcac3b22b9592493ffd06d1fc5d755954e6be9f4990de932b"},
- {file = "watchdog-4.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6c47bdd680009b11c9ac382163e05ca43baf4127954c5f6d0250e7d772d2b80c"},
- {file = "watchdog-4.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8350d4055505412a426b6ad8c521bc7d367d1637a762c70fdd93a3a0d595990b"},
- {file = "watchdog-4.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c17d98799f32e3f55f181f19dd2021d762eb38fdd381b4a748b9f5a36738e935"},
- {file = "watchdog-4.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4986db5e8880b0e6b7cd52ba36255d4793bf5cdc95bd6264806c233173b1ec0b"},
- {file = "watchdog-4.0.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:11e12fafb13372e18ca1bbf12d50f593e7280646687463dd47730fd4f4d5d257"},
- {file = "watchdog-4.0.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5369136a6474678e02426bd984466343924d1df8e2fd94a9b443cb7e3aa20d19"},
- {file = "watchdog-4.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:76ad8484379695f3fe46228962017a7e1337e9acadafed67eb20aabb175df98b"},
- {file = "watchdog-4.0.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:45cc09cc4c3b43fb10b59ef4d07318d9a3ecdbff03abd2e36e77b6dd9f9a5c85"},
- {file = "watchdog-4.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eed82cdf79cd7f0232e2fdc1ad05b06a5e102a43e331f7d041e5f0e0a34a51c4"},
- {file = "watchdog-4.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ba30a896166f0fee83183cec913298151b73164160d965af2e93a20bbd2ab605"},
- {file = "watchdog-4.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d18d7f18a47de6863cd480734613502904611730f8def45fc52a5d97503e5101"},
- {file = "watchdog-4.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2895bf0518361a9728773083908801a376743bcc37dfa252b801af8fd281b1ca"},
- {file = "watchdog-4.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:87e9df830022488e235dd601478c15ad73a0389628588ba0b028cb74eb72fed8"},
- {file = "watchdog-4.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6e949a8a94186bced05b6508faa61b7adacc911115664ccb1923b9ad1f1ccf7b"},
- {file = "watchdog-4.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6a4db54edea37d1058b08947c789a2354ee02972ed5d1e0dca9b0b820f4c7f92"},
- {file = "watchdog-4.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d31481ccf4694a8416b681544c23bd271f5a123162ab603c7d7d2dd7dd901a07"},
- {file = "watchdog-4.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:8fec441f5adcf81dd240a5fe78e3d83767999771630b5ddfc5867827a34fa3d3"},
- {file = "watchdog-4.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:6a9c71a0b02985b4b0b6d14b875a6c86ddea2fdbebd0c9a720a806a8bbffc69f"},
- {file = "watchdog-4.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:557ba04c816d23ce98a06e70af6abaa0485f6d94994ec78a42b05d1c03dcbd50"},
- {file = "watchdog-4.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:d0f9bd1fd919134d459d8abf954f63886745f4660ef66480b9d753a7c9d40927"},
- {file = "watchdog-4.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:f9b2fdca47dc855516b2d66eef3c39f2672cbf7e7a42e7e67ad2cbfcd6ba107d"},
- {file = "watchdog-4.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:73c7a935e62033bd5e8f0da33a4dcb763da2361921a69a5a95aaf6c93aa03a87"},
- {file = "watchdog-4.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:6a80d5cae8c265842c7419c560b9961561556c4361b297b4c431903f8c33b269"},
- {file = "watchdog-4.0.0-py3-none-win32.whl", hash = "sha256:8f9a542c979df62098ae9c58b19e03ad3df1c9d8c6895d96c0d51da17b243b1c"},
- {file = "watchdog-4.0.0-py3-none-win_amd64.whl", hash = "sha256:f970663fa4f7e80401a7b0cbeec00fa801bf0287d93d48368fc3e6fa32716245"},
- {file = "watchdog-4.0.0-py3-none-win_ia64.whl", hash = "sha256:9a03e16e55465177d416699331b0f3564138f1807ecc5f2de9d55d8f188d08c7"},
- {file = "watchdog-4.0.0.tar.gz", hash = "sha256:e3e7065cbdabe6183ab82199d7a4f6b3ba0a438c5a512a68559846ccb76a78ec"},
+ {file = "watchdog-5.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d961f4123bb3c447d9fcdcb67e1530c366f10ab3a0c7d1c0c9943050936d4877"},
+ {file = "watchdog-5.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72990192cb63872c47d5e5fefe230a401b87fd59d257ee577d61c9e5564c62e5"},
+ {file = "watchdog-5.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6bec703ad90b35a848e05e1b40bf0050da7ca28ead7ac4be724ae5ac2653a1a0"},
+ {file = "watchdog-5.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:dae7a1879918f6544201d33666909b040a46421054a50e0f773e0d870ed7438d"},
+ {file = "watchdog-5.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c4a440f725f3b99133de610bfec93d570b13826f89616377715b9cd60424db6e"},
+ {file = "watchdog-5.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f8b2918c19e0d48f5f20df458c84692e2a054f02d9df25e6c3c930063eca64c1"},
+ {file = "watchdog-5.0.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:aa9cd6e24126d4afb3752a3e70fce39f92d0e1a58a236ddf6ee823ff7dba28ee"},
+ {file = "watchdog-5.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f627c5bf5759fdd90195b0c0431f99cff4867d212a67b384442c51136a098ed7"},
+ {file = "watchdog-5.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d7594a6d32cda2b49df3fd9abf9b37c8d2f3eab5df45c24056b4a671ac661619"},
+ {file = "watchdog-5.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba32efcccfe2c58f4d01115440d1672b4eb26cdd6fc5b5818f1fb41f7c3e1889"},
+ {file = "watchdog-5.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:963f7c4c91e3f51c998eeff1b3fb24a52a8a34da4f956e470f4b068bb47b78ee"},
+ {file = "watchdog-5.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8c47150aa12f775e22efff1eee9f0f6beee542a7aa1a985c271b1997d340184f"},
+ {file = "watchdog-5.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:14dd4ed023d79d1f670aa659f449bcd2733c33a35c8ffd88689d9d243885198b"},
+ {file = "watchdog-5.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b84bff0391ad4abe25c2740c7aec0e3de316fdf7764007f41e248422a7760a7f"},
+ {file = "watchdog-5.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3e8d5ff39f0a9968952cce548e8e08f849141a4fcc1290b1c17c032ba697b9d7"},
+ {file = "watchdog-5.0.2-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:fb223456db6e5f7bd9bbd5cd969f05aae82ae21acc00643b60d81c770abd402b"},
+ {file = "watchdog-5.0.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9814adb768c23727a27792c77812cf4e2fd9853cd280eafa2bcfa62a99e8bd6e"},
+ {file = "watchdog-5.0.2-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:901ee48c23f70193d1a7bc2d9ee297df66081dd5f46f0ca011be4f70dec80dab"},
+ {file = "watchdog-5.0.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:638bcca3d5b1885c6ec47be67bf712b00a9ab3d4b22ec0881f4889ad870bc7e8"},
+ {file = "watchdog-5.0.2-py3-none-manylinux2014_aarch64.whl", hash = "sha256:5597c051587f8757798216f2485e85eac583c3b343e9aa09127a3a6f82c65ee8"},
+ {file = "watchdog-5.0.2-py3-none-manylinux2014_armv7l.whl", hash = "sha256:53ed1bf71fcb8475dd0ef4912ab139c294c87b903724b6f4a8bd98e026862e6d"},
+ {file = "watchdog-5.0.2-py3-none-manylinux2014_i686.whl", hash = "sha256:29e4a2607bd407d9552c502d38b45a05ec26a8e40cc7e94db9bb48f861fa5abc"},
+ {file = "watchdog-5.0.2-py3-none-manylinux2014_ppc64.whl", hash = "sha256:b6dc8f1d770a8280997e4beae7b9a75a33b268c59e033e72c8a10990097e5fde"},
+ {file = "watchdog-5.0.2-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:d2ab34adc9bf1489452965cdb16a924e97d4452fcf88a50b21859068b50b5c3b"},
+ {file = "watchdog-5.0.2-py3-none-manylinux2014_s390x.whl", hash = "sha256:7d1aa7e4bb0f0c65a1a91ba37c10e19dabf7eaaa282c5787e51371f090748f4b"},
+ {file = "watchdog-5.0.2-py3-none-manylinux2014_x86_64.whl", hash = "sha256:726eef8f8c634ac6584f86c9c53353a010d9f311f6c15a034f3800a7a891d941"},
+ {file = "watchdog-5.0.2-py3-none-win32.whl", hash = "sha256:bda40c57115684d0216556671875e008279dea2dc00fcd3dde126ac8e0d7a2fb"},
+ {file = "watchdog-5.0.2-py3-none-win_amd64.whl", hash = "sha256:d010be060c996db725fbce7e3ef14687cdcc76f4ca0e4339a68cc4532c382a73"},
+ {file = "watchdog-5.0.2-py3-none-win_ia64.whl", hash = "sha256:3960136b2b619510569b90f0cd96408591d6c251a75c97690f4553ca88889769"},
+ {file = "watchdog-5.0.2.tar.gz", hash = "sha256:dcebf7e475001d2cdeb020be630dc5b687e9acdd60d16fea6bb4508e7b94cf76"},
]
[package.extras]
@@ -771,4 +814,4 @@ watchmedo = ["PyYAML (>=3.10)"]
[metadata]
lock-version = "2.0"
python-versions = "^3.11"
-content-hash = "67e7374da66e939057b27d8b65999b003b090535efa382f85dfb021407cbfcad"
+content-hash = "7524ab80e313723b07520c6b4b4566cc63ab4e77088f6fa9da60c5a0301bf379"
diff --git a/pyproject.toml b/pyproject.toml
index b042f5ff03..40ace817b0 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -10,6 +10,7 @@ packages = [
[tool.poetry.plugins."mkdocs.plugins"]
redoc = "plugins.redoc:RedocPlugin"
intakes_by_uuid = "plugins.intakes_by_uuid:IntakesByUUIDPlugin"
+sass = "plugins.sass:CompileSCSSPlugin"
[tool.poetry.dependencies]
python = "^3.11"
@@ -19,6 +20,7 @@ mkdocs-redirects = "^1.2.1"
markdown-include = "^0.8.1"
lightgallery = "^0.5"
markdown = "3.3.7" # Newer versions are not compatible with lightgallery
+libsass = "^0.23.0"
[build-system]
requires = [ "poetry-core>=1.0.0",]
diff --git a/style/openapi.scss b/style/openapi.scss
new file mode 100644
index 0000000000..581eb60f36
--- /dev/null
+++ b/style/openapi.scss
@@ -0,0 +1,525 @@
+#openapi {
+ position: relative;
+ background: white;
+
+ h1 {
+ display: none;
+ }
+
+ .md-typeset h1,
+ .md-content__button,
+ .md-footer {
+ display: none;
+ }
+ .md-main__inner {
+ max-width: 100%;
+ margin: 0;
+ }
+
+ .redoc-wrap {
+ background: white;
+ > div:last-of-type {
+ background:none !important;
+ }
+
+ .sc-iGgWBj.sc-gsFSXq.lbpUdJ.bOFhJE {
+ padding: 20px;
+ border-radius: 20px;
+
+ }
+
+ .sc-ikkxIA.daqcVd {
+ margin: 0 12px;
+ padding: 0px;
+ padding-left: 24px;
+ }
+
+ tr:first-of-type > .sc-dLMFU, tr.last > .sc-dLMFU, .bvNJXm {
+ background:none;
+ border:none;
+ }
+
+ .sc-gFqAkR {
+ visibility: hidden;
+ display: none;
+ }
+ .property-name {
+ font-weight: bold;
+ font-size: 15px;
+ }
+
+ .examples {
+ code {
+ font-family: monospace;
+ font-size: 13px !important;
+ background: none !important;
+ color:white !important;
+ .token.punctuation {
+ opacity: 1 !important;
+ }
+ }
+
+ .tabs {
+ background: white;
+ margin: -20px;
+ margin-bottom: 22px;
+ overflow: hidden;
+ display: flex;
+ padding: 0;
+ border: none;
+ list-style-type: none;
+ user-select: none;
+ li {
+ color: #2d2e83;
+ background: white;
+ border-top: 4px solid transparent;
+ opacity: 0.6;
+ cursor: pointer;
+ &:hover {
+ opacity: 1;
+ }
+ &.active {
+ opacity: 1;
+ border-top: 4px solid #12005e;
+ background: #e2e2e9;
+ color: #12005e;
+ border-top-left-radius: 8px;
+ border-top-right-radius: 8px;
+ }
+ font-weight: bold;
+ margin: 0;
+ padding: 6px 16px;
+ }
+ }
+
+ .jhTHfM, h3 {
+ color: #12005e;
+ font-weight: bold;
+ font-size: 14px;
+ }
+
+
+ &.mode-try-it {
+ .response-samples, .request-samples {
+ display: none;
+ }
+ }
+
+ &:not(.mode-try-it) .try-it-wrapper {
+ display: none;
+ }
+
+ .try-it-wrapper {
+ button {
+ background:#5d4ff2;
+ color:white;
+ height:36px;
+ font-weight: 600;
+ font-family: 'Inter', sans-serif;
+ border-radius: 8px;
+ padding: 0px 16px;
+ float: right;
+ cursor: pointer;
+ transition: background 6e2ms;
+ margin: 8px 0px;
+ &:hover {
+ background: #3b00bd;
+ }
+ &:active {
+ background: #140050;
+ }
+ &:disabled {
+ opacity: 0.4;
+ }
+ }
+
+ input {
+ padding: 4px;
+ font-size: 15px;
+ border: 1px solid #12005e;
+ border-radius: 4px;
+ margin: 2px 12px;
+ }
+
+ label {
+ display: inline-block;
+ font-size: 15px;
+ font-weight: bold;
+ min-width: 85px;
+ color:#11171a;
+ }
+
+ .ui-spinner {
+ position: relative !important;
+ left: 50%;
+ top: 24px;
+ }
+
+ .results pre, .results .output, > code.curl {
+ background: #11171a !important;
+ padding: 14px;
+ position: static;
+ min-width: 100%;
+ width: 100%;
+ display: block;
+ border-radius: 8px;
+ color: white;
+ font-family: monospace;
+ font-size: 11px;
+ max-height: 40vh;
+ overflow: auto;
+
+ &.error {
+ background: red !important;
+ }
+ }
+
+ .code-examples {
+ margin-top: 12px;
+ > ul {
+ display: flex;
+ padding: 0;
+ list-style-type: none;
+ margin: 0;
+ > li {
+ cursor: pointer;
+ padding: 2px 12px;
+ border-top: 4px solid transparent;
+ margin: 0px;
+ background: transparent;
+ border-top-left-radius: 8px;
+ border-top-right-radius: 8px;
+ font-weight: bold;
+ color: #8182b5;
+ transition: all 90ms ease-in-out;
+ &:hover {
+ color:#12005e;
+ }
+ &.selected {
+ border-top-color: #5d4ff2;
+ background: #11171a;
+ color: white;
+ }
+ }
+ }
+
+ > div {
+ > pre {
+ &:not(.selected) {
+ display: none;
+ }
+ background: #11171a !important;
+ padding: 14px;
+ position: static;
+ min-width: 100%;
+ width: 100%;
+ display: block;
+ border-radius: 8px;
+ color: white;
+ font-family: monospace;
+ font-size: 11px;
+ max-height: 40vh;
+ overflow: auto;
+ border-top-left-radius: 0px;
+ margin: 0;
+ white-space: break-spaces;
+ }
+ }
+ }
+ }
+ }
+
+ .region-picker {
+ padding: 16px 29px;
+ }
+
+ }
+
+ h2::after {
+ border-bottom: 2px solid #2d2e83 !important;
+ }
+
+}
+
+.ui-spinner {
+ width: 38px;
+ height: 38px;
+ border: 5px solid #d8d8e922;
+ border-bottom-color: #5d4ff2;
+ border-radius: 50%;
+ display: inline-block;
+ box-sizing: border-box;
+ animation: spinner-rotate 1s linear infinite;
+ margin: 12px;
+ margin-left: -19px;
+ margin-right: auto;
+ position: absolute;
+ left: 50%;
+ top: 40vh;
+}
+
+
+@keyframes spinner-rotate {
+ 0% {
+ transform: rotate(0deg);
+ }
+ 100% {
+ transform: rotate(1turn);
+ }
+}
+
+main {
+ > .md-grid {
+ max-width: 90vw;
+ }
+ .md-sidebar {
+ display: none !important;
+ }
+
+ .gdNLsg {
+ position: initial;
+ }
+
+ .kJndnU {
+ position: absolute;
+ }
+
+ .kNjBFu:last-child {
+ min-height: initial;
+ }
+
+ .menu-content {
+ top: 70px !important;
+ border-radius: 20px;
+ width: 353px;
+ background: none;
+
+ label {
+ &:not(.active) {
+ background: none;
+ }
+ }
+
+ > .scrollbar-container {
+ > ul {
+ margin:0px;
+ }
+ }
+
+ }
+
+ div[data-role='search:results'] {
+ background:#F5F5FA;
+ border-radius: 8px;
+ }
+
+ div[role=search] {
+ padding: 5px 31px;
+ input {
+ font-weight: normal;
+ color: black;
+ padding: 10px 27px;
+ font-size: 110%;
+ margin: 6px -19px;
+ &::placeholder {
+ font-weight: normal;
+ color: black;
+ }
+ }
+ svg {
+ position: relative;
+ top: 5px;
+ width: 18px;
+ left: 0;
+ }
+ }
+
+ ul.sc-iHmpnF {
+ font-size: 16px;
+ }
+
+ span.sc-ehixzo.CHBVM {
+ padding: 3px 6px;
+ font-size: 10px;
+ margin-right: 8px;
+ height: 18px;
+ width: 8ex;
+ }
+
+ ul.sc-iHmpnF.bQdsWB {
+ padding: 0;
+ margin:0;
+ font-size: 10px;
+ user-select: none;
+ > li > ul {
+ > li {
+ > ul {
+ margin-bottom: 16px;
+ > li {
+ padding: 0px;
+ margin:0px;
+ > label {
+ padding: 9px;
+ margin: 0px;
+ .sc-eyvILC {
+ font-size: 13px;
+ color:#21225F;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ label.-depth0 {
+ padding: 0px 9px;
+ margin: 8px;
+ span.sc-eyvILC.cyMuFj {
+ font-size: 14px;
+ font-weight: bold;
+ color: #6D6E9C;
+ }
+ }
+
+ label.-depth1 {
+ display: flex;
+ padding: 6px;
+ margin: 0;
+ padding-right: 16px;
+ align-items: center;
+ padding-left: 18px;
+ span.sc-eyvILC.cyMuFj {
+ font-size: 14px;
+ font-weight: normal;
+ color: #21225F;
+ }
+ &.active {
+ span.sc-eyvILC.cyMuFj {
+ font-weight: bold;
+ }
+ }
+ }
+
+ .sc-kYxDKI.eoKbCJ {
+ margin-left: 0px;
+ }
+
+ ul.sc-iHmpnF.bKAJhU {
+ display: none;
+ }
+
+ h2.copjkU {
+ color:#2d2e83;
+ font-size: 20px;
+ margin-top: 30px;
+ font-weight: bold;
+ }
+
+ .sc-dcJsrY.eVrqat .sc-kAyceB.XMnSL h2 {
+ font-size: 28px;
+ text-transform: uppercase;
+ &:after {
+ border:none;
+ }
+ }
+
+ .sc-bpUBKd.-depth2 {
+ > .sc-eyvILC {
+ font-size: 14px;
+ }
+ &.active {
+ border-top-left-radius: 8px;
+ border-bottom-left-radius: 8px;
+ border-right: 4px solid #2d2e83;
+ background: #F5F5FA;
+ }
+ }
+
+ .sc-bpUBKd.-depth1 {
+ &.active {
+ border-top-left-radius: 8px;
+ border-bottom-left-radius: 8px;
+ border-right: 4px solid #2d2e83;
+ background: #F5F5FA;
+ }
+ &:hover {
+ border-top-left-radius: 8px;
+ border-bottom-left-radius: 8px;
+ background: #F5F5FAaa;
+ }
+ }
+
+ .bOFhJE {
+ background-color: #e2e2e9;
+
+ button.sc-iEXKAA {
+ border-radius: 8px;
+ }
+ }
+
+ .cJteCP {
+ >.react-tabs__tab-panel.react-tabs__tab-panel--selected {
+ border-radius: 8px;
+ border-top-left-radius: 0px;
+ }
+
+ > ul {
+ margin: 0px !important;
+
+ > li {
+ padding: 5px 10px;
+ display: inline-block;
+ background-color: rgb(17, 23, 26);
+ cursor: pointer;
+ text-align: center;
+ outline: none;
+ color: rgb(204, 204, 204);
+ min-width: 60px;
+ font-size: 0.9em;
+ font-weight: bold;
+ border:none;
+ border-top: 4px solid;
+ margin: 0px !important;
+ border-radius: 0;
+
+ &:not([aria-selected=true]) {
+ border-top-color: transparent;
+ background: none;
+ }
+ }
+ }
+ }
+
+ button.sc-gdyeKB {
+ width: 120px;
+ // float: left;
+ float: left;
+ p {margin:0px;}
+ }
+
+ .sc-kzqdkY {
+ clear:both;
+ }
+
+
+}
+
+
+select {
+ padding: 6.5px 12px;
+ margin: 0px 12px;
+ display: inline-flex;
+ align-items: center;
+ width: 111px;
+ cursor: pointer;
+ background: url("data:image/svg+xml,") no-repeat #f8f9fc;
+ background-position: calc(100% - 10px) center !important;
+ -moz-appearance: none !important;
+ -webkit-appearance: none !important;
+ appearance: none !important;
+ border: 1px solid #cbcfe1;
+ line-height: 1.5;
+ color: #21225f;
+ border-radius: 8px;
+}
\ No newline at end of file
diff --git a/src/sekoiaio.scss b/style/sekoiaio.scss
similarity index 100%
rename from src/sekoiaio.scss
rename to style/sekoiaio.scss
diff --git a/theme/overrides/openapi.html b/theme/overrides/openapi.html
new file mode 100644
index 0000000000..b981db0265
--- /dev/null
+++ b/theme/overrides/openapi.html
@@ -0,0 +1,6 @@
+{% extends "base.html" %}
+
+{% block styles %}
+{{ super() }}
+
+{% endblock %}