commit a9e3c19fb97f8dcd2e9c49b062ee2bb00750491d Author: cupcakearmy Date: Mon Nov 21 15:40:16 2022 +0100 inisital commit diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..bdee8ef --- /dev/null +++ b/.dockerignore @@ -0,0 +1,5 @@ +* +!src +!poetry.lock +!poetry.toml +!pyproject.toml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f04695f --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ +.venv +.mypy_cache +__pycache__ +.devcontainer +.vscode + +data +generated +example + +config.yaml diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..2207f9e --- /dev/null +++ b/Dockerfile @@ -0,0 +1,20 @@ +FROM python:3.10-alpine + +# Install Poetry +RUN apk add --no-cache curl +ENV POETRY_HOME=/poetry +RUN curl -sSL https://install.python-poetry.org | python - +ENV PATH ${POETRY_HOME}/bin:$PATH + +# Install Deps +WORKDIR /app +COPY poetry.lock poetry.toml pyproject.toml ./ +RUN poetry install + +# Copy code +COPY . . +ENTRYPOINT [ "/poetry/bin/poetry" ] +CMD [ "run", "python", "src/main.py" ] + +ENV GLYPHANCE_CONFIG=/data/glyphance.yaml +ENV GLYPHANCE_OUTPUT_DIRECTORY=/data/generated diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..6b1c8ed --- /dev/null +++ b/Makefile @@ -0,0 +1,7 @@ +jsonschema: + rm -rf docs/config + mkdir -p tmp docs/config + cat src/assets/config.schema.yaml | python3 -c 'import yaml; import json; import sys; print(json.dumps(yaml.safe_load(sys.stdin)));' > tmp/glyphance.schema.json + pnpm dlx @adobe/jsonschema2md --input tmp --out docs/config + rm -r out + rm -r tmp diff --git a/README.md b/README.md new file mode 100644 index 0000000..6dd4338 --- /dev/null +++ b/README.md @@ -0,0 +1,101 @@ +# Glyphance + +This is a CLI utility that help reduce load times and bytes by splitting typography files into smaller chunks for different alphabets automatically _without the tears_. + +## 🌈 Features + +- Configurable. +- Config driven. +- Docker image, no install required. + +## 🚀 Quickstart + +Lets assume we want to use 2 variable fonts, one of which has an italic version still as a separate file. Also on our webserver we serve our static fonts from `/fonts/`. + +1. Get the font files +2. Write a little config file `glyphance.yaml` and define the font-families (`Mulish` and `FireCode` e.g.) and their files or variations. +3. Run it. +4. Use the generate font files and CSS. + +``` +example/ +├── FiraCode-VariableFont_wght.ttf +├── Mulish-Italic-VariableFont_wght.ttf +├── Mulish-VariableFont_wght.ttf +└── glyphance.yaml +``` + +```yaml +# glyphance.yaml +fonts: + 'Mulish': + - file: Mulish-VariableFont_wght.ttf + variable: true + css: + font-weight: 200 1000 + - file: Mulish-Italic-VariableFont_wght.ttf + variable: true + css: + font-weight: 200 1000 + font-style: italic + 'FireCode': + - file: FiraCode-VariableFont_wght.ttf + variable: true + css: + font-weight: 300 700 + +output: + prefix: /fonts/ +``` + +### Run + +```bash +docker run -v $(pwd)/example:/data glyphance +``` + +### Enjoy + +Now you can use the generated font files and the `generated/fonts.css`. + +``` +example/ +├── FiraCode-VariableFont_wght.ttf +├── Mulish-Italic-VariableFont_wght.ttf +├── Mulish-VariableFont_wght.ttf +├── generated +│ ├── 08284d4f696ab68dc7aa21c9c061c534939a3a0c.woff2 +│ ├── ... +│ ├── ... +│ ├── f8d95e7f048e130c09015a20689693461cc0dedb.woff2 +│ └── fonts.css +└── glyphance.yaml +``` + +## 💡 Inspiration + +The idea came mostly at how google fonts subsets their typefaces on [Google Fonts](https://fonts.google.com). +They split the fonts into multiple blocks of unicode chars, and leverage the [`unicode-range`](https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/unicode-range) property of `@font-face` to only deliver the parts of a font that are needed for a website, drastically reducing bytes sent over the wire. +Under the hood it uses the amazing [fonttools](https://github.com/fonttools/fonttools) to do the heavy lifting. + +## 📖 API & Documentation + +> Config file reference can be found under [docs/config](./docs/config/). + +### Example + +```yaml +fonts: + 'My Font Familiy': + - file: ./path/relative/to/config/file.ttf|otf|... + variable: true # Whether ist's a variable font or not, defaults to false + css: + font-style: italic # Custom css properties to be added to the css + +output: + dir: foo # Directory of the output + prefix: /static/fonts # Prefix to be added to the src URL in the CSS + clean: true # Whether to clean to output directory first + css: + font-weight: 400 # CSS to added to each @font-face. By defaults includes swap, normal weight and style +``` diff --git a/docs/config/README.md b/docs/config/README.md new file mode 100644 index 0000000..485a596 --- /dev/null +++ b/docs/config/README.md @@ -0,0 +1,31 @@ +# README + +## Top-level Schemas + +* [Config](./glyphance.md) – `https://github.com/cupcakearmy/glyphance` + +## Other Schemas + +### Objects + +* [Untitled object in Config](./glyphance-defs-output-properties-ranges.md) – `https://github.com/cupcakearmy/glyphance#/$defs/output/properties/ranges` + +* [Untitled object in Config](./glyphance-defs-fonts.md) – `https://github.com/cupcakearmy/glyphance#/$defs/fonts` + +* [Untitled object in Config](./glyphance-defs-css.md) – `https://github.com/cupcakearmy/glyphance#/$defs/css` + +* [Untitled object in Config](./glyphance-defs-font-variation.md) – `https://github.com/cupcakearmy/glyphance#/$defs/font-variation` + +* [Untitled object in Config](./glyphance-defs-output.md) – `https://github.com/cupcakearmy/glyphance#/$defs/output` + +### Arrays + +* [Untitled array in Config](./glyphance-defs-output-properties-formats.md) – `https://github.com/cupcakearmy/glyphance#/$defs/output/properties/formats` + +* [Untitled array in Config](./glyphance-defs-output-properties-ranges-patternproperties-a-za-z--_.md) – `https://github.com/cupcakearmy/glyphance#/$defs/output/properties/ranges/patternProperties/^[a-zA-z \-_]+$` + +* [Untitled array in Config](./glyphance-defs-font.md) – `https://github.com/cupcakearmy/glyphance#/$defs/font` + +## Version Note + +The schemas linked above follow the JSON Schema Spec version: `https://json-schema.org/draft/2020-12/schema` diff --git a/docs/config/glyphance-defs-css-patternproperties-ascent-overridedescent-overridefont-displayfont-familyfont-stretchfont-stylefont-weightfont-feature-settingsfont-variation-settingsline-gap-overridesize-adjustsrcunicode-range.md b/docs/config/glyphance-defs-css-patternproperties-ascent-overridedescent-overridefont-displayfont-familyfont-stretchfont-stylefont-weightfont-feature-settingsfont-variation-settingsline-gap-overridesize-adjustsrcunicode-range.md new file mode 100644 index 0000000..bc26413 --- /dev/null +++ b/docs/config/glyphance-defs-css-patternproperties-ascent-overridedescent-overridefont-displayfont-familyfont-stretchfont-stylefont-weightfont-feature-settingsfont-variation-settingsline-gap-overridesize-adjustsrcunicode-range.md @@ -0,0 +1,15 @@ +# Untitled string in Config Schema + +```txt +https://github.com/cupcakearmy/glyphance#/$defs/css/patternProperties/^ascent-override|descent-override|font-display|font-family|font-stretch|font-style|font-weight|font-feature-settings|font-variation-settings|line-gap-override|size-adjust|src|unicode-range$ +``` + + + +| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In | +| :------------------ | :--------- | :------------- | :---------------------- | :---------------- | :-------------------- | :------------------ | :-------------------------------------------------------------------------------- | +| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [glyphance.schema.json\*](../../out/glyphance.schema.json "open original schema") | + +## ^ascent-override|descent-override|font-display|font-family|font-stretch|font-style|font-weight|font-feature-settings|font-variation-settings|line-gap-override|size-adjust|src|unicode-range$ Type + +`string` diff --git a/docs/config/glyphance-defs-css-patternproperties.md b/docs/config/glyphance-defs-css-patternproperties.md new file mode 100644 index 0000000..10c54a8 --- /dev/null +++ b/docs/config/glyphance-defs-css-patternproperties.md @@ -0,0 +1,15 @@ +# Untitled undefined type in Config Schema + +```txt +https://github.com/cupcakearmy/glyphance#/$defs/css/patternProperties +``` + + + +| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In | +| :------------------ | :--------- | :------------- | :---------------------- | :---------------- | :-------------------- | :------------------ | :-------------------------------------------------------------------------------- | +| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [glyphance.schema.json\*](../../out/glyphance.schema.json "open original schema") | + +## patternProperties Type + +unknown diff --git a/docs/config/glyphance-defs-css.md b/docs/config/glyphance-defs-css.md new file mode 100644 index 0000000..c45cb0e --- /dev/null +++ b/docs/config/glyphance-defs-css.md @@ -0,0 +1,39 @@ +# Untitled object in Config Schema + +```txt +https://github.com/cupcakearmy/glyphance#/$defs/css +``` + + + +| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In | +| :------------------ | :--------- | :------------- | :---------------------- | :---------------- | :-------------------- | :------------------ | :-------------------------------------------------------------------------------- | +| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Forbidden | none | [glyphance.schema.json\*](../../out/glyphance.schema.json "open original schema") | + +## css Type + +`object` ([Details](glyphance-defs-css.md)) + +# css Properties + +| Property | Type | Required | Nullable | Defined by | +| :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------- | :------- | :------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `^ascent-override\|descent-override\|font-display\|font-family\|font-stretch\|font-style\|font-weight\|font-feature-settings\|font-variation-settings\|line-gap-override\|size-adjust\|src\|unicode-range$` | `string` | Optional | cannot be null | [Config](glyphance-defs-css-patternproperties-ascent-overridedescent-overridefont-displayfont-familyfont-stretchfont-stylefont-weightfont-feature-settingsfont-variation-settingsline-gap-overridesize-adjustsrcunicode-range.md "https://github.com/cupcakearmy/glyphance#/$defs/css/patternProperties/^ascent-override\|descent-override\|font-display\|font-family\|font-stretch\|font-style\|font-weight\|font-feature-settings\|font-variation-settings\|line-gap-override\|size-adjust\|src\|unicode-range$") | + +## Pattern: `^ascent-override|descent-override|font-display|font-family|font-stretch|font-style|font-weight|font-feature-settings|font-variation-settings|line-gap-override|size-adjust|src|unicode-range$` + + + +`^ascent-override|descent-override|font-display|font-family|font-stretch|font-style|font-weight|font-feature-settings|font-variation-settings|line-gap-override|size-adjust|src|unicode-range$` + +* is optional + +* Type: `string` + +* cannot be null + +* defined in: [Config](glyphance-defs-css-patternproperties-ascent-overridedescent-overridefont-displayfont-familyfont-stretchfont-stylefont-weightfont-feature-settingsfont-variation-settingsline-gap-overridesize-adjustsrcunicode-range.md "https://github.com/cupcakearmy/glyphance#/$defs/css/patternProperties/^ascent-override|descent-override|font-display|font-family|font-stretch|font-style|font-weight|font-feature-settings|font-variation-settings|line-gap-override|size-adjust|src|unicode-range$") + +### ^ascent-override|descent-override|font-display|font-family|font-stretch|font-style|font-weight|font-feature-settings|font-variation-settings|line-gap-override|size-adjust|src|unicode-range$ Type + +`string` diff --git a/docs/config/glyphance-defs-font-variation-properties-file.md b/docs/config/glyphance-defs-font-variation-properties-file.md new file mode 100644 index 0000000..2c9f7c3 --- /dev/null +++ b/docs/config/glyphance-defs-font-variation-properties-file.md @@ -0,0 +1,15 @@ +# Untitled string in Config Schema + +```txt +https://github.com/cupcakearmy/glyphance#/$defs/font-variation/properties/file +``` + + + +| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In | +| :------------------ | :--------- | :------------- | :---------------------- | :---------------- | :-------------------- | :------------------ | :-------------------------------------------------------------------------------- | +| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [glyphance.schema.json\*](../../out/glyphance.schema.json "open original schema") | + +## file Type + +`string` diff --git a/docs/config/glyphance-defs-font-variation-properties-variable.md b/docs/config/glyphance-defs-font-variation-properties-variable.md new file mode 100644 index 0000000..edf4cba --- /dev/null +++ b/docs/config/glyphance-defs-font-variation-properties-variable.md @@ -0,0 +1,15 @@ +# Untitled boolean in Config Schema + +```txt +https://github.com/cupcakearmy/glyphance#/$defs/font-variation/properties/variable +``` + + + +| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In | +| :------------------ | :--------- | :------------- | :---------------------- | :---------------- | :-------------------- | :------------------ | :-------------------------------------------------------------------------------- | +| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [glyphance.schema.json\*](../../out/glyphance.schema.json "open original schema") | + +## variable Type + +`boolean` diff --git a/docs/config/glyphance-defs-font-variation.md b/docs/config/glyphance-defs-font-variation.md new file mode 100644 index 0000000..fbcfb33 --- /dev/null +++ b/docs/config/glyphance-defs-font-variation.md @@ -0,0 +1,77 @@ +# Untitled object in Config Schema + +```txt +https://github.com/cupcakearmy/glyphance#/$defs/font-variation +``` + + + +| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In | +| :------------------ | :--------- | :------------- | :----------- | :---------------- | :-------------------- | :------------------ | :-------------------------------------------------------------------------------- | +| Can be instantiated | No | Unknown status | No | Forbidden | Forbidden | none | [glyphance.schema.json\*](../../out/glyphance.schema.json "open original schema") | + +## font-variation Type + +`object` ([Details](glyphance-defs-font-variation.md)) + +# font-variation Properties + +| Property | Type | Required | Nullable | Defined by | +| :-------------------- | :-------- | :------- | :------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------- | +| [file](#file) | `string` | Optional | cannot be null | [Config](glyphance-defs-font-variation-properties-file.md "https://github.com/cupcakearmy/glyphance#/$defs/font-variation/properties/file") | +| [variable](#variable) | `boolean` | Optional | cannot be null | [Config](glyphance-defs-font-variation-properties-variable.md "https://github.com/cupcakearmy/glyphance#/$defs/font-variation/properties/variable") | +| [css](#css) | `object` | Optional | cannot be null | [Config](glyphance-defs-css.md "https://github.com/cupcakearmy/glyphance#/$defs/font-variation/properties/css") | + +## file + + + +`file` + +* is optional + +* Type: `string` + +* cannot be null + +* defined in: [Config](glyphance-defs-font-variation-properties-file.md "https://github.com/cupcakearmy/glyphance#/$defs/font-variation/properties/file") + +### file Type + +`string` + +## variable + + + +`variable` + +* is optional + +* Type: `boolean` + +* cannot be null + +* defined in: [Config](glyphance-defs-font-variation-properties-variable.md "https://github.com/cupcakearmy/glyphance#/$defs/font-variation/properties/variable") + +### variable Type + +`boolean` + +## css + + + +`css` + +* is optional + +* Type: `object` ([Details](glyphance-defs-css.md)) + +* cannot be null + +* defined in: [Config](glyphance-defs-css.md "https://github.com/cupcakearmy/glyphance#/$defs/font-variation/properties/css") + +### css Type + +`object` ([Details](glyphance-defs-css.md)) diff --git a/docs/config/glyphance-defs-font.md b/docs/config/glyphance-defs-font.md new file mode 100644 index 0000000..6099cb5 --- /dev/null +++ b/docs/config/glyphance-defs-font.md @@ -0,0 +1,15 @@ +# Untitled array in Config Schema + +```txt +https://github.com/cupcakearmy/glyphance#/$defs/font +``` + + + +| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In | +| :------------------ | :--------- | :------------- | :---------------------- | :---------------- | :-------------------- | :------------------ | :-------------------------------------------------------------------------------- | +| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [glyphance.schema.json\*](../../out/glyphance.schema.json "open original schema") | + +## font Type + +`object[]` ([Details](glyphance-defs-font-variation.md)) diff --git a/docs/config/glyphance-defs-fonts-patternproperties.md b/docs/config/glyphance-defs-fonts-patternproperties.md new file mode 100644 index 0000000..b4b37ee --- /dev/null +++ b/docs/config/glyphance-defs-fonts-patternproperties.md @@ -0,0 +1,15 @@ +# Untitled undefined type in Config Schema + +```txt +https://github.com/cupcakearmy/glyphance#/$defs/fonts/patternProperties +``` + + + +| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In | +| :------------------ | :--------- | :------------- | :---------------------- | :---------------- | :-------------------- | :------------------ | :-------------------------------------------------------------------------------- | +| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [glyphance.schema.json\*](../../out/glyphance.schema.json "open original schema") | + +## patternProperties Type + +unknown diff --git a/docs/config/glyphance-defs-fonts.md b/docs/config/glyphance-defs-fonts.md new file mode 100644 index 0000000..be86c08 --- /dev/null +++ b/docs/config/glyphance-defs-fonts.md @@ -0,0 +1,39 @@ +# Untitled object in Config Schema + +```txt +https://github.com/cupcakearmy/glyphance#/$defs/fonts +``` + + + +| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In | +| :------------------ | :--------- | :------------- | :---------------------- | :---------------- | :-------------------- | :------------------ | :-------------------------------------------------------------------------------- | +| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Forbidden | none | [glyphance.schema.json\*](../../out/glyphance.schema.json "open original schema") | + +## fonts Type + +`object` ([Details](glyphance-defs-fonts.md)) + +# fonts Properties + +| Property | Type | Required | Nullable | Defined by | +| :---------------- | :------ | :------- | :------------- | :--------------------------------------------------------------------------------------------------------------------------- | +| `^[a-zA-z \-_]+$` | `array` | Optional | cannot be null | [Config](glyphance-defs-font.md "https://github.com/cupcakearmy/glyphance#/$defs/fonts/patternProperties/^\[a-zA-z \\-_]+$") | + +## Pattern: `^[a-zA-z \-_]+$` + + + +`^[a-zA-z \-_]+$` + +* is optional + +* Type: `object[]` ([Details](glyphance-defs-font-variation.md)) + +* cannot be null + +* defined in: [Config](glyphance-defs-font.md "https://github.com/cupcakearmy/glyphance#/$defs/fonts/patternProperties/^\[a-zA-z \\-_]+$") + +### ^\[a-zA-z \\-\_]+$ Type + +`object[]` ([Details](glyphance-defs-font-variation.md)) diff --git a/docs/config/glyphance-defs-output-properties-clean.md b/docs/config/glyphance-defs-output-properties-clean.md new file mode 100644 index 0000000..7b300e9 --- /dev/null +++ b/docs/config/glyphance-defs-output-properties-clean.md @@ -0,0 +1,15 @@ +# Untitled boolean in Config Schema + +```txt +https://github.com/cupcakearmy/glyphance#/$defs/output/properties/clean +``` + + + +| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In | +| :------------------ | :--------- | :------------- | :---------------------- | :---------------- | :-------------------- | :------------------ | :-------------------------------------------------------------------------------- | +| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [glyphance.schema.json\*](../../out/glyphance.schema.json "open original schema") | + +## clean Type + +`boolean` diff --git a/docs/config/glyphance-defs-output-properties-dir.md b/docs/config/glyphance-defs-output-properties-dir.md new file mode 100644 index 0000000..332d4a0 --- /dev/null +++ b/docs/config/glyphance-defs-output-properties-dir.md @@ -0,0 +1,15 @@ +# Untitled string in Config Schema + +```txt +https://github.com/cupcakearmy/glyphance#/$defs/output/properties/dir +``` + + + +| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In | +| :------------------ | :--------- | :------------- | :---------------------- | :---------------- | :-------------------- | :------------------ | :-------------------------------------------------------------------------------- | +| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [glyphance.schema.json\*](../../out/glyphance.schema.json "open original schema") | + +## dir Type + +`string` diff --git a/docs/config/glyphance-defs-output-properties-formats-items.md b/docs/config/glyphance-defs-output-properties-formats-items.md new file mode 100644 index 0000000..ee267e8 --- /dev/null +++ b/docs/config/glyphance-defs-output-properties-formats-items.md @@ -0,0 +1,24 @@ +# Untitled string in Config Schema + +```txt +https://github.com/cupcakearmy/glyphance#/$defs/output/properties/formats/items +``` + + + +| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In | +| :------------------ | :--------- | :------------- | :---------------------- | :---------------- | :-------------------- | :------------------ | :-------------------------------------------------------------------------------- | +| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [glyphance.schema.json\*](../../out/glyphance.schema.json "open original schema") | + +## items Type + +`string` + +## items Constraints + +**enum**: the value of this property must be equal to one of the following values: + +| Value | Explanation | +| :-------- | :---------- | +| `"woff2"` | | +| `"woff"` | | diff --git a/docs/config/glyphance-defs-output-properties-formats.md b/docs/config/glyphance-defs-output-properties-formats.md new file mode 100644 index 0000000..39aa69e --- /dev/null +++ b/docs/config/glyphance-defs-output-properties-formats.md @@ -0,0 +1,15 @@ +# Untitled array in Config Schema + +```txt +https://github.com/cupcakearmy/glyphance#/$defs/output/properties/formats +``` + + + +| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In | +| :------------------ | :--------- | :------------- | :---------------------- | :---------------- | :-------------------- | :------------------ | :-------------------------------------------------------------------------------- | +| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [glyphance.schema.json\*](../../out/glyphance.schema.json "open original schema") | + +## formats Type + +`string[]` diff --git a/docs/config/glyphance-defs-output-properties-prefix.md b/docs/config/glyphance-defs-output-properties-prefix.md new file mode 100644 index 0000000..e934da2 --- /dev/null +++ b/docs/config/glyphance-defs-output-properties-prefix.md @@ -0,0 +1,15 @@ +# Untitled string in Config Schema + +```txt +https://github.com/cupcakearmy/glyphance#/$defs/output/properties/prefix +``` + + + +| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In | +| :------------------ | :--------- | :------------- | :---------------------- | :---------------- | :-------------------- | :------------------ | :-------------------------------------------------------------------------------- | +| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [glyphance.schema.json\*](../../out/glyphance.schema.json "open original schema") | + +## prefix Type + +`string` diff --git a/docs/config/glyphance-defs-output-properties-ranges-patternproperties-a-za-z--_-items.md b/docs/config/glyphance-defs-output-properties-ranges-patternproperties-a-za-z--_-items.md new file mode 100644 index 0000000..c57021c --- /dev/null +++ b/docs/config/glyphance-defs-output-properties-ranges-patternproperties-a-za-z--_-items.md @@ -0,0 +1,15 @@ +# Untitled string in Config Schema + +```txt +https://github.com/cupcakearmy/glyphance#/$defs/output/properties/ranges/patternProperties/^[a-zA-z \-_]+$/items +``` + + + +| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In | +| :------------------ | :--------- | :------------- | :---------------------- | :---------------- | :-------------------- | :------------------ | :-------------------------------------------------------------------------------- | +| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [glyphance.schema.json\*](../../out/glyphance.schema.json "open original schema") | + +## items Type + +`string` diff --git a/docs/config/glyphance-defs-output-properties-ranges-patternproperties-a-za-z--_.md b/docs/config/glyphance-defs-output-properties-ranges-patternproperties-a-za-z--_.md new file mode 100644 index 0000000..4ca6733 --- /dev/null +++ b/docs/config/glyphance-defs-output-properties-ranges-patternproperties-a-za-z--_.md @@ -0,0 +1,15 @@ +# Untitled array in Config Schema + +```txt +https://github.com/cupcakearmy/glyphance#/$defs/output/properties/ranges/patternProperties/^[a-zA-z \-_]+$ +``` + + + +| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In | +| :------------------ | :--------- | :------------- | :---------------------- | :---------------- | :-------------------- | :------------------ | :-------------------------------------------------------------------------------- | +| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [glyphance.schema.json\*](../../out/glyphance.schema.json "open original schema") | + +## ^\[a-zA-z \\-\_]+$ Type + +`string[]` diff --git a/docs/config/glyphance-defs-output-properties-ranges-patternproperties.md b/docs/config/glyphance-defs-output-properties-ranges-patternproperties.md new file mode 100644 index 0000000..8e06c06 --- /dev/null +++ b/docs/config/glyphance-defs-output-properties-ranges-patternproperties.md @@ -0,0 +1,15 @@ +# Untitled undefined type in Config Schema + +```txt +https://github.com/cupcakearmy/glyphance#/$defs/output/properties/ranges/patternProperties +``` + + + +| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In | +| :------------------ | :--------- | :------------- | :---------------------- | :---------------- | :-------------------- | :------------------ | :-------------------------------------------------------------------------------- | +| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [glyphance.schema.json\*](../../out/glyphance.schema.json "open original schema") | + +## patternProperties Type + +unknown diff --git a/docs/config/glyphance-defs-output-properties-ranges.md b/docs/config/glyphance-defs-output-properties-ranges.md new file mode 100644 index 0000000..a86e77c --- /dev/null +++ b/docs/config/glyphance-defs-output-properties-ranges.md @@ -0,0 +1,39 @@ +# Untitled object in Config Schema + +```txt +https://github.com/cupcakearmy/glyphance#/$defs/output/properties/ranges +``` + + + +| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In | +| :------------------ | :--------- | :------------- | :---------------------- | :---------------- | :-------------------- | :------------------ | :-------------------------------------------------------------------------------- | +| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Forbidden | none | [glyphance.schema.json\*](../../out/glyphance.schema.json "open original schema") | + +## ranges Type + +`object` ([Details](glyphance-defs-output-properties-ranges.md)) + +# ranges Properties + +| Property | Type | Required | Nullable | Defined by | +| :---------------- | :------ | :------- | :------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `^[a-zA-z \-_]+$` | `array` | Optional | cannot be null | [Config](glyphance-defs-output-properties-ranges-patternproperties-a-za-z--_.md "https://github.com/cupcakearmy/glyphance#/$defs/output/properties/ranges/patternProperties/^\[a-zA-z \\-_]+$") | + +## Pattern: `^[a-zA-z \-_]+$` + + + +`^[a-zA-z \-_]+$` + +* is optional + +* Type: `string[]` + +* cannot be null + +* defined in: [Config](glyphance-defs-output-properties-ranges-patternproperties-a-za-z--_.md "https://github.com/cupcakearmy/glyphance#/$defs/output/properties/ranges/patternProperties/^\[a-zA-z \\-_]+$") + +### ^\[a-zA-z \\-\_]+$ Type + +`string[]` diff --git a/docs/config/glyphance-defs-output.md b/docs/config/glyphance-defs-output.md new file mode 100644 index 0000000..2bfb900 --- /dev/null +++ b/docs/config/glyphance-defs-output.md @@ -0,0 +1,134 @@ +# Untitled object in Config Schema + +```txt +https://github.com/cupcakearmy/glyphance#/$defs/output +``` + + + +| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In | +| :------------------ | :--------- | :------------- | :----------- | :---------------- | :-------------------- | :------------------ | :-------------------------------------------------------------------------------- | +| Can be instantiated | No | Unknown status | No | Forbidden | Forbidden | none | [glyphance.schema.json\*](../../out/glyphance.schema.json "open original schema") | + +## output Type + +`object` ([Details](glyphance-defs-output.md)) + +# output Properties + +| Property | Type | Required | Nullable | Defined by | +| :------------------ | :-------- | :------- | :------------- | :-------------------------------------------------------------------------------------------------------------------------------- | +| [dir](#dir) | `string` | Optional | cannot be null | [Config](glyphance-defs-output-properties-dir.md "https://github.com/cupcakearmy/glyphance#/$defs/output/properties/dir") | +| [prefix](#prefix) | `string` | Optional | cannot be null | [Config](glyphance-defs-output-properties-prefix.md "https://github.com/cupcakearmy/glyphance#/$defs/output/properties/prefix") | +| [css](#css) | `object` | Optional | cannot be null | [Config](glyphance-defs-css.md "https://github.com/cupcakearmy/glyphance#/$defs/output/properties/css") | +| [clean](#clean) | `boolean` | Optional | cannot be null | [Config](glyphance-defs-output-properties-clean.md "https://github.com/cupcakearmy/glyphance#/$defs/output/properties/clean") | +| [formats](#formats) | `array` | Optional | cannot be null | [Config](glyphance-defs-output-properties-formats.md "https://github.com/cupcakearmy/glyphance#/$defs/output/properties/formats") | +| [ranges](#ranges) | `object` | Optional | cannot be null | [Config](glyphance-defs-output-properties-ranges.md "https://github.com/cupcakearmy/glyphance#/$defs/output/properties/ranges") | + +## dir + + + +`dir` + +* is optional + +* Type: `string` + +* cannot be null + +* defined in: [Config](glyphance-defs-output-properties-dir.md "https://github.com/cupcakearmy/glyphance#/$defs/output/properties/dir") + +### dir Type + +`string` + +## prefix + + + +`prefix` + +* is optional + +* Type: `string` + +* cannot be null + +* defined in: [Config](glyphance-defs-output-properties-prefix.md "https://github.com/cupcakearmy/glyphance#/$defs/output/properties/prefix") + +### prefix Type + +`string` + +## css + + + +`css` + +* is optional + +* Type: `object` ([Details](glyphance-defs-css.md)) + +* cannot be null + +* defined in: [Config](glyphance-defs-css.md "https://github.com/cupcakearmy/glyphance#/$defs/output/properties/css") + +### css Type + +`object` ([Details](glyphance-defs-css.md)) + +## clean + + + +`clean` + +* is optional + +* Type: `boolean` + +* cannot be null + +* defined in: [Config](glyphance-defs-output-properties-clean.md "https://github.com/cupcakearmy/glyphance#/$defs/output/properties/clean") + +### clean Type + +`boolean` + +## formats + + + +`formats` + +* is optional + +* Type: `string[]` + +* cannot be null + +* defined in: [Config](glyphance-defs-output-properties-formats.md "https://github.com/cupcakearmy/glyphance#/$defs/output/properties/formats") + +### formats Type + +`string[]` + +## ranges + + + +`ranges` + +* is optional + +* Type: `object` ([Details](glyphance-defs-output-properties-ranges.md)) + +* cannot be null + +* defined in: [Config](glyphance-defs-output-properties-ranges.md "https://github.com/cupcakearmy/glyphance#/$defs/output/properties/ranges") + +### ranges Type + +`object` ([Details](glyphance-defs-output-properties-ranges.md)) diff --git a/docs/config/glyphance-defs-range.md b/docs/config/glyphance-defs-range.md new file mode 100644 index 0000000..c03a9a0 --- /dev/null +++ b/docs/config/glyphance-defs-range.md @@ -0,0 +1,15 @@ +# Untitled string in Config Schema + +```txt +https://github.com/cupcakearmy/glyphance#/$defs/range +``` + + + +| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In | +| :------------------ | :--------- | :------------- | :---------------------- | :---------------- | :-------------------- | :------------------ | :-------------------------------------------------------------------------------- | +| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [glyphance.schema.json\*](../../out/glyphance.schema.json "open original schema") | + +## range Type + +`string` diff --git a/docs/config/glyphance-defs.md b/docs/config/glyphance-defs.md new file mode 100644 index 0000000..5dfb197 --- /dev/null +++ b/docs/config/glyphance-defs.md @@ -0,0 +1,15 @@ +# Untitled undefined type in Config Schema + +```txt +https://github.com/cupcakearmy/glyphance#/$defs +``` + + + +| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In | +| :------------------ | :--------- | :------------- | :---------------------- | :---------------- | :-------------------- | :------------------ | :-------------------------------------------------------------------------------- | +| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [glyphance.schema.json\*](../../out/glyphance.schema.json "open original schema") | + +## $defs Type + +unknown diff --git a/docs/config/glyphance-properties-context.md b/docs/config/glyphance-properties-context.md new file mode 100644 index 0000000..b6bfa95 --- /dev/null +++ b/docs/config/glyphance-properties-context.md @@ -0,0 +1,15 @@ +# Untitled string in Config Schema + +```txt +https://github.com/cupcakearmy/glyphance#/properties/context +``` + + + +| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In | +| :------------------ | :--------- | :------------- | :---------------------- | :---------------- | :-------------------- | :------------------ | :-------------------------------------------------------------------------------- | +| Can be instantiated | No | Unknown status | Unknown identifiability | Forbidden | Allowed | none | [glyphance.schema.json\*](../../out/glyphance.schema.json "open original schema") | + +## context Type + +`string` diff --git a/docs/config/glyphance.md b/docs/config/glyphance.md new file mode 100644 index 0000000..a34276a --- /dev/null +++ b/docs/config/glyphance.md @@ -0,0 +1,354 @@ +# Config Schema + +```txt +https://github.com/cupcakearmy/glyphance +``` + + + +| Abstract | Extensible | Status | Identifiable | Custom Properties | Additional Properties | Access Restrictions | Defined In | +| :------------------ | :--------- | :------------- | :----------- | :---------------- | :-------------------- | :------------------ | :------------------------------------------------------------------------------ | +| Can be instantiated | No | Unknown status | No | Forbidden | Forbidden | none | [glyphance.schema.json](../../out/glyphance.schema.json "open original schema") | + +## Config Type + +`object` ([Config](glyphance.md)) + +# Config Properties + +| Property | Type | Required | Nullable | Defined by | +| :------------------ | :------- | :------- | :------------- | :------------------------------------------------------------------------------------------------------- | +| [fonts](#fonts) | `object` | Optional | cannot be null | [Config](glyphance-defs-fonts.md "https://github.com/cupcakearmy/glyphance#/properties/fonts") | +| [output](#output) | `object` | Optional | cannot be null | [Config](glyphance-defs-output.md "https://github.com/cupcakearmy/glyphance#/properties/output") | +| [context](#context) | `string` | Optional | cannot be null | [Config](glyphance-properties-context.md "https://github.com/cupcakearmy/glyphance#/properties/context") | + +## fonts + + + +`fonts` + +* is optional + +* Type: `object` ([Details](glyphance-defs-fonts.md)) + +* cannot be null + +* defined in: [Config](glyphance-defs-fonts.md "https://github.com/cupcakearmy/glyphance#/properties/fonts") + +### fonts Type + +`object` ([Details](glyphance-defs-fonts.md)) + +## output + + + +`output` + +* is optional + +* Type: `object` ([Details](glyphance-defs-output.md)) + +* cannot be null + +* defined in: [Config](glyphance-defs-output.md "https://github.com/cupcakearmy/glyphance#/properties/output") + +### output Type + +`object` ([Details](glyphance-defs-output.md)) + +## context + + + +`context` + +* is optional + +* Type: `string` + +* cannot be null + +* defined in: [Config](glyphance-properties-context.md "https://github.com/cupcakearmy/glyphance#/properties/context") + +### context Type + +`string` + +# Config Definitions + +## Definitions group fonts + +Reference this group by using + +```json +{"$ref":"https://github.com/cupcakearmy/glyphance#/$defs/fonts"} +``` + +| Property | Type | Required | Nullable | Defined by | +| :---------------- | :------ | :------- | :------------- | :--------------------------------------------------------------------------------------------------------------------------- | +| `^[a-zA-z \-_]+$` | `array` | Optional | cannot be null | [Config](glyphance-defs-font.md "https://github.com/cupcakearmy/glyphance#/$defs/fonts/patternProperties/^\[a-zA-z \\-_]+$") | + +### Pattern: `^[a-zA-z \-_]+$` + + + +`^[a-zA-z \-_]+$` + +* is optional + +* Type: `object[]` ([Details](glyphance-defs-font-variation.md)) + +* cannot be null + +* defined in: [Config](glyphance-defs-font.md "https://github.com/cupcakearmy/glyphance#/$defs/fonts/patternProperties/^\[a-zA-z \\-_]+$") + +#### ^\[a-zA-z \\-\_]+$ Type + +`object[]` ([Details](glyphance-defs-font-variation.md)) + +## Definitions group font + +Reference this group by using + +```json +{"$ref":"https://github.com/cupcakearmy/glyphance#/$defs/font"} +``` + +| Property | Type | Required | Nullable | Defined by | +| :------- | :--- | :------- | :------- | :--------- | + +## Definitions group css + +Reference this group by using + +```json +{"$ref":"https://github.com/cupcakearmy/glyphance#/$defs/css"} +``` + +| Property | Type | Required | Nullable | Defined by | +| :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------- | :------- | :------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `^ascent-override\|descent-override\|font-display\|font-family\|font-stretch\|font-style\|font-weight\|font-feature-settings\|font-variation-settings\|line-gap-override\|size-adjust\|src\|unicode-range$` | `string` | Optional | cannot be null | [Config](glyphance-defs-css-patternproperties-ascent-overridedescent-overridefont-displayfont-familyfont-stretchfont-stylefont-weightfont-feature-settingsfont-variation-settingsline-gap-overridesize-adjustsrcunicode-range.md "https://github.com/cupcakearmy/glyphance#/$defs/css/patternProperties/^ascent-override\|descent-override\|font-display\|font-family\|font-stretch\|font-style\|font-weight\|font-feature-settings\|font-variation-settings\|line-gap-override\|size-adjust\|src\|unicode-range$") | + +### Pattern: `^ascent-override|descent-override|font-display|font-family|font-stretch|font-style|font-weight|font-feature-settings|font-variation-settings|line-gap-override|size-adjust|src|unicode-range$` + + + +`^ascent-override|descent-override|font-display|font-family|font-stretch|font-style|font-weight|font-feature-settings|font-variation-settings|line-gap-override|size-adjust|src|unicode-range$` + +* is optional + +* Type: `string` + +* cannot be null + +* defined in: [Config](glyphance-defs-css-patternproperties-ascent-overridedescent-overridefont-displayfont-familyfont-stretchfont-stylefont-weightfont-feature-settingsfont-variation-settingsline-gap-overridesize-adjustsrcunicode-range.md "https://github.com/cupcakearmy/glyphance#/$defs/css/patternProperties/^ascent-override|descent-override|font-display|font-family|font-stretch|font-style|font-weight|font-feature-settings|font-variation-settings|line-gap-override|size-adjust|src|unicode-range$") + +#### ^ascent-override|descent-override|font-display|font-family|font-stretch|font-style|font-weight|font-feature-settings|font-variation-settings|line-gap-override|size-adjust|src|unicode-range$ Type + +`string` + +## Definitions group font-variation + +Reference this group by using + +```json +{"$ref":"https://github.com/cupcakearmy/glyphance#/$defs/font-variation"} +``` + +| Property | Type | Required | Nullable | Defined by | +| :-------------------- | :-------- | :------- | :------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------- | +| [file](#file) | `string` | Optional | cannot be null | [Config](glyphance-defs-font-variation-properties-file.md "https://github.com/cupcakearmy/glyphance#/$defs/font-variation/properties/file") | +| [variable](#variable) | `boolean` | Optional | cannot be null | [Config](glyphance-defs-font-variation-properties-variable.md "https://github.com/cupcakearmy/glyphance#/$defs/font-variation/properties/variable") | +| [css](#css) | `object` | Optional | cannot be null | [Config](glyphance-defs-css.md "https://github.com/cupcakearmy/glyphance#/$defs/font-variation/properties/css") | + +### file + + + +`file` + +* is optional + +* Type: `string` + +* cannot be null + +* defined in: [Config](glyphance-defs-font-variation-properties-file.md "https://github.com/cupcakearmy/glyphance#/$defs/font-variation/properties/file") + +#### file Type + +`string` + +### variable + + + +`variable` + +* is optional + +* Type: `boolean` + +* cannot be null + +* defined in: [Config](glyphance-defs-font-variation-properties-variable.md "https://github.com/cupcakearmy/glyphance#/$defs/font-variation/properties/variable") + +#### variable Type + +`boolean` + +### css + + + +`css` + +* is optional + +* Type: `object` ([Details](glyphance-defs-css.md)) + +* cannot be null + +* defined in: [Config](glyphance-defs-css.md "https://github.com/cupcakearmy/glyphance#/$defs/font-variation/properties/css") + +#### css Type + +`object` ([Details](glyphance-defs-css.md)) + +## Definitions group range + +Reference this group by using + +```json +{"$ref":"https://github.com/cupcakearmy/glyphance#/$defs/range"} +``` + +| Property | Type | Required | Nullable | Defined by | +| :------- | :--- | :------- | :------- | :--------- | + +## Definitions group output + +Reference this group by using + +```json +{"$ref":"https://github.com/cupcakearmy/glyphance#/$defs/output"} +``` + +| Property | Type | Required | Nullable | Defined by | +| :------------------ | :-------- | :------- | :------------- | :-------------------------------------------------------------------------------------------------------------------------------- | +| [dir](#dir) | `string` | Optional | cannot be null | [Config](glyphance-defs-output-properties-dir.md "https://github.com/cupcakearmy/glyphance#/$defs/output/properties/dir") | +| [prefix](#prefix) | `string` | Optional | cannot be null | [Config](glyphance-defs-output-properties-prefix.md "https://github.com/cupcakearmy/glyphance#/$defs/output/properties/prefix") | +| [css](#css-1) | `object` | Optional | cannot be null | [Config](glyphance-defs-css.md "https://github.com/cupcakearmy/glyphance#/$defs/output/properties/css") | +| [clean](#clean) | `boolean` | Optional | cannot be null | [Config](glyphance-defs-output-properties-clean.md "https://github.com/cupcakearmy/glyphance#/$defs/output/properties/clean") | +| [formats](#formats) | `array` | Optional | cannot be null | [Config](glyphance-defs-output-properties-formats.md "https://github.com/cupcakearmy/glyphance#/$defs/output/properties/formats") | +| [ranges](#ranges) | `object` | Optional | cannot be null | [Config](glyphance-defs-output-properties-ranges.md "https://github.com/cupcakearmy/glyphance#/$defs/output/properties/ranges") | + +### dir + + + +`dir` + +* is optional + +* Type: `string` + +* cannot be null + +* defined in: [Config](glyphance-defs-output-properties-dir.md "https://github.com/cupcakearmy/glyphance#/$defs/output/properties/dir") + +#### dir Type + +`string` + +### prefix + + + +`prefix` + +* is optional + +* Type: `string` + +* cannot be null + +* defined in: [Config](glyphance-defs-output-properties-prefix.md "https://github.com/cupcakearmy/glyphance#/$defs/output/properties/prefix") + +#### prefix Type + +`string` + +### css + + + +`css` + +* is optional + +* Type: `object` ([Details](glyphance-defs-css.md)) + +* cannot be null + +* defined in: [Config](glyphance-defs-css.md "https://github.com/cupcakearmy/glyphance#/$defs/output/properties/css") + +#### css Type + +`object` ([Details](glyphance-defs-css.md)) + +### clean + + + +`clean` + +* is optional + +* Type: `boolean` + +* cannot be null + +* defined in: [Config](glyphance-defs-output-properties-clean.md "https://github.com/cupcakearmy/glyphance#/$defs/output/properties/clean") + +#### clean Type + +`boolean` + +### formats + + + +`formats` + +* is optional + +* Type: `string[]` + +* cannot be null + +* defined in: [Config](glyphance-defs-output-properties-formats.md "https://github.com/cupcakearmy/glyphance#/$defs/output/properties/formats") + +#### formats Type + +`string[]` + +### ranges + + + +`ranges` + +* is optional + +* Type: `object` ([Details](glyphance-defs-output-properties-ranges.md)) + +* cannot be null + +* defined in: [Config](glyphance-defs-output-properties-ranges.md "https://github.com/cupcakearmy/glyphance#/$defs/output/properties/ranges") + +#### ranges Type + +`object` ([Details](glyphance-defs-output-properties-ranges.md)) diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 0000000..38cdc29 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,891 @@ +[[package]] +name = "appdirs" +version = "1.4.4" +description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "attrs" +version = "22.1.0" +description = "Classes Without Boilerplate" +category = "main" +optional = false +python-versions = ">=3.5" + +[package.extras] +dev = ["cloudpickle", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "mypy (>=0.900,!=0.940)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "sphinx", "sphinx-notfound-page", "zope.interface"] +docs = ["furo", "sphinx", "sphinx-notfound-page", "zope.interface"] +tests = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "zope.interface"] +tests-no-zope = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins"] + +[[package]] +name = "autopep8" +version = "2.0.0" +description = "A tool that automatically formats Python code to conform to the PEP 8 style guide" +category = "dev" +optional = false +python-versions = "*" + +[package.dependencies] +pycodestyle = ">=2.9.1" +tomli = "*" + +[[package]] +name = "brotli" +version = "1.0.9" +description = "Python bindings for the Brotli compression library" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "brotlicffi" +version = "1.0.9.2" +description = "Python CFFI bindings to the Brotli library" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +cffi = ">=1.0.0" + +[[package]] +name = "certifi" +version = "2022.9.24" +description = "Python package for providing Mozilla's CA Bundle." +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "cffi" +version = "1.15.1" +description = "Foreign Function Interface for Python calling C code." +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +pycparser = "*" + +[[package]] +name = "charset-normalizer" +version = "2.1.1" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +category = "main" +optional = false +python-versions = ">=3.6.0" + +[package.extras] +unicode-backport = ["unicodedata2"] + +[[package]] +name = "click" +version = "8.1.3" +description = "Composable command line interface toolkit" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" + +[[package]] +name = "fonttools" +version = "4.38.0" +description = "Tools to manipulate font files" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +brotli = {version = ">=1.0.1", optional = true, markers = "platform_python_implementation == \"CPython\" and extra == \"woff\""} +brotlicffi = {version = ">=0.8.0", optional = true, markers = "platform_python_implementation != \"CPython\" and extra == \"woff\""} +fs = {version = ">=2.2.0,<3", optional = true, markers = "extra == \"ufo\""} +lxml = {version = ">=4.0,<5", optional = true, markers = "extra == \"lxml\""} +unicodedata2 = {version = ">=14.0.0", optional = true, markers = "python_version < \"3.11\" and extra == \"unicode\""} +zopfli = {version = ">=0.1.4", optional = true, markers = "extra == \"woff\""} + +[package.extras] +all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=14.0.0)", "xattr", "zopfli (>=0.1.4)"] +graphite = ["lz4 (>=1.7.4.2)"] +interpolatable = ["munkres", "scipy"] +lxml = ["lxml (>=4.0,<5)"] +pathops = ["skia-pathops (>=0.5.0)"] +plot = ["matplotlib"] +repacker = ["uharfbuzz (>=0.23.0)"] +symfont = ["sympy"] +type1 = ["xattr"] +ufo = ["fs (>=2.2.0,<3)"] +unicode = ["unicodedata2 (>=14.0.0)"] +woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] + +[[package]] +name = "fs" +version = "2.4.16" +description = "Python's filesystem abstraction layer" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +appdirs = ">=1.4.3,<1.5.0" +setuptools = "*" +six = ">=1.10,<2.0" + +[package.extras] +scandir = ["scandir (>=1.5,<2.0)"] + +[[package]] +name = "idna" +version = "3.4" +description = "Internationalized Domain Names in Applications (IDNA)" +category = "main" +optional = false +python-versions = ">=3.5" + +[[package]] +name = "jsonschema" +version = "4.17.0" +description = "An implementation of JSON Schema validation for Python" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +attrs = ">=17.4.0" +pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2" + +[package.extras] +format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] +format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] + +[[package]] +name = "lxml" +version = "4.9.1" +description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" + +[package.extras] +cssselect = ["cssselect (>=0.7)"] +html5 = ["html5lib"] +htmlsoup = ["BeautifulSoup4"] +source = ["Cython (>=0.29.7)"] + +[[package]] +name = "mypy" +version = "0.991" +description = "Optional static typing for Python" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +mypy-extensions = ">=0.4.3" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typing-extensions = ">=3.10" + +[package.extras] +dmypy = ["psutil (>=4.0)"] +install-types = ["pip"] +python2 = ["typed-ast (>=1.4.0,<2)"] +reports = ["lxml"] + +[[package]] +name = "mypy-extensions" +version = "0.4.3" +description = "Experimental type system extensions for programs checked with the mypy typechecker." +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "pycodestyle" +version = "2.9.1" +description = "Python style guide checker" +category = "dev" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "pycparser" +version = "2.21" +description = "C parser in Python" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "pyrsistent" +version = "0.19.2" +description = "Persistent/Functional/Immutable data structures" +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "pyyaml" +version = "6.0" +description = "YAML parser and emitter for Python" +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "requests" +version = "2.28.1" +description = "Python HTTP for Humans." +category = "main" +optional = false +python-versions = ">=3.7, <4" + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<3" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<1.27" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "setuptools" +version = "65.6.0" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8 (<5)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +category = "dev" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "typing-extensions" +version = "4.4.0" +description = "Backported and Experimental Type Hints for Python 3.7+" +category = "dev" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "unicodedata2" +version = "15.0.0" +description = "Unicodedata backport updated to the latest Unicode version." +category = "main" +optional = false +python-versions = "*" + +[package.extras] +testing = ["coverage", "pytest", "pytest-randomly", "pytest-xdist"] + +[[package]] +name = "urllib3" +version = "1.26.12" +description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, <4" + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] +secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] + +[[package]] +name = "zopfli" +version = "0.2.2" +description = "Zopfli module for python" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.extras] +test = ["pytest"] + +[metadata] +lock-version = "1.1" +python-versions = "^3.10" +content-hash = "88f74c8cf023f0696cc0d2736fead3498445ddc553eb788c1406ff3f12b3be16" + +[metadata.files] +appdirs = [ + {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"}, + {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, +] +attrs = [ + {file = "attrs-22.1.0-py2.py3-none-any.whl", hash = "sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c"}, + {file = "attrs-22.1.0.tar.gz", hash = "sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6"}, +] +autopep8 = [ + {file = "autopep8-2.0.0-py2.py3-none-any.whl", hash = "sha256:ad924b42c2e27a1ac58e432166cc4588f5b80747de02d0d35b1ecbd3e7d57207"}, + {file = "autopep8-2.0.0.tar.gz", hash = "sha256:8b1659c7f003e693199f52caffdc06585bb0716900bbc6a7442fd931d658c077"}, +] +brotli = [ + {file = "Brotli-1.0.9-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:268fe94547ba25b58ebc724680609c8ee3e5a843202e9a381f6f9c5e8bdb5c70"}, + {file = "Brotli-1.0.9-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:c2415d9d082152460f2bd4e382a1e85aed233abc92db5a3880da2257dc7daf7b"}, + {file = "Brotli-1.0.9-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5913a1177fc36e30fcf6dc868ce23b0453952c78c04c266d3149b3d39e1410d6"}, + {file = "Brotli-1.0.9-cp27-cp27m-win32.whl", hash = "sha256:afde17ae04d90fbe53afb628f7f2d4ca022797aa093e809de5c3cf276f61bbfa"}, + {file = "Brotli-1.0.9-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:7cb81373984cc0e4682f31bc3d6be9026006d96eecd07ea49aafb06897746452"}, + {file = "Brotli-1.0.9-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:db844eb158a87ccab83e868a762ea8024ae27337fc7ddcbfcddd157f841fdfe7"}, + {file = "Brotli-1.0.9-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:9744a863b489c79a73aba014df554b0e7a0fc44ef3f8a0ef2a52919c7d155031"}, + {file = "Brotli-1.0.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a72661af47119a80d82fa583b554095308d6a4c356b2a554fdc2799bc19f2a43"}, + {file = "Brotli-1.0.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ee83d3e3a024a9618e5be64648d6d11c37047ac48adff25f12fa4226cf23d1c"}, + {file = "Brotli-1.0.9-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:19598ecddd8a212aedb1ffa15763dd52a388518c4550e615aed88dc3753c0f0c"}, + {file = "Brotli-1.0.9-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:44bb8ff420c1d19d91d79d8c3574b8954288bdff0273bf788954064d260d7ab0"}, + {file = "Brotli-1.0.9-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e23281b9a08ec338469268f98f194658abfb13658ee98e2b7f85ee9dd06caa91"}, + {file = "Brotli-1.0.9-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:3496fc835370da351d37cada4cf744039616a6db7d13c430035e901443a34daa"}, + {file = "Brotli-1.0.9-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b83bb06a0192cccf1eb8d0a28672a1b79c74c3a8a5f2619625aeb6f28b3a82bb"}, + {file = "Brotli-1.0.9-cp310-cp310-win32.whl", hash = "sha256:26d168aac4aaec9a4394221240e8a5436b5634adc3cd1cdf637f6645cecbf181"}, + {file = "Brotli-1.0.9-cp310-cp310-win_amd64.whl", hash = "sha256:622a231b08899c864eb87e85f81c75e7b9ce05b001e59bbfbf43d4a71f5f32b2"}, + {file = "Brotli-1.0.9-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:cc0283a406774f465fb45ec7efb66857c09ffefbe49ec20b7882eff6d3c86d3a"}, + {file = "Brotli-1.0.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:11d3283d89af7033236fa4e73ec2cbe743d4f6a81d41bd234f24bf63dde979df"}, + {file = "Brotli-1.0.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c1306004d49b84bd0c4f90457c6f57ad109f5cc6067a9664e12b7b79a9948ad"}, + {file = "Brotli-1.0.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1375b5d17d6145c798661b67e4ae9d5496920d9265e2f00f1c2c0b5ae91fbde"}, + {file = "Brotli-1.0.9-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cab1b5964b39607a66adbba01f1c12df2e55ac36c81ec6ed44f2fca44178bf1a"}, + {file = "Brotli-1.0.9-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8ed6a5b3d23ecc00ea02e1ed8e0ff9a08f4fc87a1f58a2530e71c0f48adf882f"}, + {file = "Brotli-1.0.9-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:cb02ed34557afde2d2da68194d12f5719ee96cfb2eacc886352cb73e3808fc5d"}, + {file = "Brotli-1.0.9-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b3523f51818e8f16599613edddb1ff924eeb4b53ab7e7197f85cbc321cdca32f"}, + {file = "Brotli-1.0.9-cp311-cp311-win32.whl", hash = "sha256:ba72d37e2a924717990f4d7482e8ac88e2ef43fb95491eb6e0d124d77d2a150d"}, + {file = "Brotli-1.0.9-cp311-cp311-win_amd64.whl", hash = "sha256:3ffaadcaeafe9d30a7e4e1e97ad727e4f5610b9fa2f7551998471e3736738679"}, + {file = "Brotli-1.0.9-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:c83aa123d56f2e060644427a882a36b3c12db93727ad7a7b9efd7d7f3e9cc2c4"}, + {file = "Brotli-1.0.9-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:6b2ae9f5f67f89aade1fab0f7fd8f2832501311c363a21579d02defa844d9296"}, + {file = "Brotli-1.0.9-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:68715970f16b6e92c574c30747c95cf8cf62804569647386ff032195dc89a430"}, + {file = "Brotli-1.0.9-cp35-cp35m-win32.whl", hash = "sha256:defed7ea5f218a9f2336301e6fd379f55c655bea65ba2476346340a0ce6f74a1"}, + {file = "Brotli-1.0.9-cp35-cp35m-win_amd64.whl", hash = "sha256:88c63a1b55f352b02c6ffd24b15ead9fc0e8bf781dbe070213039324922a2eea"}, + {file = "Brotli-1.0.9-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:503fa6af7da9f4b5780bb7e4cbe0c639b010f12be85d02c99452825dd0feef3f"}, + {file = "Brotli-1.0.9-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:40d15c79f42e0a2c72892bf407979febd9cf91f36f495ffb333d1d04cebb34e4"}, + {file = "Brotli-1.0.9-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:93130612b837103e15ac3f9cbacb4613f9e348b58b3aad53721d92e57f96d46a"}, + {file = "Brotli-1.0.9-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87fdccbb6bb589095f413b1e05734ba492c962b4a45a13ff3408fa44ffe6479b"}, + {file = "Brotli-1.0.9-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:6d847b14f7ea89f6ad3c9e3901d1bc4835f6b390a9c71df999b0162d9bb1e20f"}, + {file = "Brotli-1.0.9-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:495ba7e49c2db22b046a53b469bbecea802efce200dffb69b93dd47397edc9b6"}, + {file = "Brotli-1.0.9-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:4688c1e42968ba52e57d8670ad2306fe92e0169c6f3af0089be75bbac0c64a3b"}, + {file = "Brotli-1.0.9-cp36-cp36m-win32.whl", hash = "sha256:61a7ee1f13ab913897dac7da44a73c6d44d48a4adff42a5701e3239791c96e14"}, + {file = "Brotli-1.0.9-cp36-cp36m-win_amd64.whl", hash = "sha256:1c48472a6ba3b113452355b9af0a60da5c2ae60477f8feda8346f8fd48e3e87c"}, + {file = "Brotli-1.0.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3b78a24b5fd13c03ee2b7b86290ed20efdc95da75a3557cc06811764d5ad1126"}, + {file = "Brotli-1.0.9-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:9d12cf2851759b8de8ca5fde36a59c08210a97ffca0eb94c532ce7b17c6a3d1d"}, + {file = "Brotli-1.0.9-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:6c772d6c0a79ac0f414a9f8947cc407e119b8598de7621f39cacadae3cf57d12"}, + {file = "Brotli-1.0.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29d1d350178e5225397e28ea1b7aca3648fcbab546d20e7475805437bfb0a130"}, + {file = "Brotli-1.0.9-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7bbff90b63328013e1e8cb50650ae0b9bac54ffb4be6104378490193cd60f85a"}, + {file = "Brotli-1.0.9-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:ec1947eabbaf8e0531e8e899fc1d9876c179fc518989461f5d24e2223395a9e3"}, + {file = "Brotli-1.0.9-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:12effe280b8ebfd389022aa65114e30407540ccb89b177d3fbc9a4f177c4bd5d"}, + {file = "Brotli-1.0.9-cp37-cp37m-win32.whl", hash = "sha256:f909bbbc433048b499cb9db9e713b5d8d949e8c109a2a548502fb9aa8630f0b1"}, + {file = "Brotli-1.0.9-cp37-cp37m-win_amd64.whl", hash = "sha256:97f715cf371b16ac88b8c19da00029804e20e25f30d80203417255d239f228b5"}, + {file = "Brotli-1.0.9-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e16eb9541f3dd1a3e92b89005e37b1257b157b7256df0e36bd7b33b50be73bcb"}, + {file = "Brotli-1.0.9-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:160c78292e98d21e73a4cc7f76a234390e516afcd982fa17e1422f7c6a9ce9c8"}, + {file = "Brotli-1.0.9-cp38-cp38-manylinux1_i686.whl", hash = "sha256:b663f1e02de5d0573610756398e44c130add0eb9a3fc912a09665332942a2efb"}, + {file = "Brotli-1.0.9-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:5b6ef7d9f9c38292df3690fe3e302b5b530999fa90014853dcd0d6902fb59f26"}, + {file = "Brotli-1.0.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a674ac10e0a87b683f4fa2b6fa41090edfd686a6524bd8dedbd6138b309175c"}, + {file = "Brotli-1.0.9-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e2d9e1cbc1b25e22000328702b014227737756f4b5bf5c485ac1d8091ada078b"}, + {file = "Brotli-1.0.9-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b336c5e9cf03c7be40c47b5fd694c43c9f1358a80ba384a21969e0b4e66a9b17"}, + {file = "Brotli-1.0.9-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:85f7912459c67eaab2fb854ed2bc1cc25772b300545fe7ed2dc03954da638649"}, + {file = "Brotli-1.0.9-cp38-cp38-win32.whl", hash = "sha256:35a3edbe18e876e596553c4007a087f8bcfd538f19bc116917b3c7522fca0429"}, + {file = "Brotli-1.0.9-cp38-cp38-win_amd64.whl", hash = "sha256:269a5743a393c65db46a7bb982644c67ecba4b8d91b392403ad8a861ba6f495f"}, + {file = "Brotli-1.0.9-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2aad0e0baa04517741c9bb5b07586c642302e5fb3e75319cb62087bd0995ab19"}, + {file = "Brotli-1.0.9-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5cb1e18167792d7d21e21365d7650b72d5081ed476123ff7b8cac7f45189c0c7"}, + {file = "Brotli-1.0.9-cp39-cp39-manylinux1_i686.whl", hash = "sha256:16d528a45c2e1909c2798f27f7bf0a3feec1dc9e50948e738b961618e38b6a7b"}, + {file = "Brotli-1.0.9-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:56d027eace784738457437df7331965473f2c0da2c70e1a1f6fdbae5402e0389"}, + {file = "Brotli-1.0.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9bf919756d25e4114ace16a8ce91eb340eb57a08e2c6950c3cebcbe3dff2a5e7"}, + {file = "Brotli-1.0.9-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e4c4e92c14a57c9bd4cb4be678c25369bf7a092d55fd0866f759e425b9660806"}, + {file = "Brotli-1.0.9-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e48f4234f2469ed012a98f4b7874e7f7e173c167bed4934912a29e03167cf6b1"}, + {file = "Brotli-1.0.9-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9ed4c92a0665002ff8ea852353aeb60d9141eb04109e88928026d3c8a9e5433c"}, + {file = "Brotli-1.0.9-cp39-cp39-win32.whl", hash = "sha256:cfc391f4429ee0a9370aa93d812a52e1fee0f37a81861f4fdd1f4fb28e8547c3"}, + {file = "Brotli-1.0.9-cp39-cp39-win_amd64.whl", hash = "sha256:854c33dad5ba0fbd6ab69185fec8dab89e13cda6b7d191ba111987df74f38761"}, + {file = "Brotli-1.0.9-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9749a124280a0ada4187a6cfd1ffd35c350fb3af79c706589d98e088c5044267"}, + {file = "Brotli-1.0.9-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:73fd30d4ce0ea48010564ccee1a26bfe39323fde05cb34b5863455629db61dc7"}, + {file = "Brotli-1.0.9-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:02177603aaca36e1fd21b091cb742bb3b305a569e2402f1ca38af471777fb019"}, + {file = "Brotli-1.0.9-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:76ffebb907bec09ff511bb3acc077695e2c32bc2142819491579a695f77ffd4d"}, + {file = "Brotli-1.0.9-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b43775532a5904bc938f9c15b77c613cb6ad6fb30990f3b0afaea82797a402d8"}, + {file = "Brotli-1.0.9-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5bf37a08493232fbb0f8229f1824b366c2fc1d02d64e7e918af40acd15f3e337"}, + {file = "Brotli-1.0.9-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:330e3f10cd01da535c70d09c4283ba2df5fb78e915bea0a28becad6e2ac010be"}, + {file = "Brotli-1.0.9-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e1abbeef02962596548382e393f56e4c94acd286bd0c5afba756cffc33670e8a"}, + {file = "Brotli-1.0.9-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3148362937217b7072cf80a2dcc007f09bb5ecb96dae4617316638194113d5be"}, + {file = "Brotli-1.0.9-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:336b40348269f9b91268378de5ff44dc6fbaa2268194f85177b53463d313842a"}, + {file = "Brotli-1.0.9-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b8b09a16a1950b9ef495a0f8b9d0a87599a9d1f179e2d4ac014b2ec831f87e7"}, + {file = "Brotli-1.0.9-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c8e521a0ce7cf690ca84b8cc2272ddaf9d8a50294fd086da67e517439614c755"}, + {file = "Brotli-1.0.9.zip", hash = "sha256:4d1b810aa0ed773f81dceda2cc7b403d01057458730e309856356d4ef4188438"}, +] +brotlicffi = [ + {file = "brotlicffi-1.0.9.2-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:408ec4359f9763280d5c4e0ad29c51d1240b25fdd18719067e972163b4125b98"}, + {file = "brotlicffi-1.0.9.2-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:2e4629f7690ded66c8818715c6d4dd6a7ff6a4f10fad6186fe99850f781ce210"}, + {file = "brotlicffi-1.0.9.2-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:137c4635edcdf593de5ce9d0daa596bf499591b16b8fca5fd72a490deb54b2ee"}, + {file = "brotlicffi-1.0.9.2-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:af8a1b7bcfccf9c41a3c8654994d6a81821fdfe4caddcfe5045bfda936546ca3"}, + {file = "brotlicffi-1.0.9.2-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:9078432af4785f35ab3840587eed7fb131e3fc77eb2a739282b649b343c584dd"}, + {file = "brotlicffi-1.0.9.2-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:7bb913d5bf3b4ce2ec59872711dc9faaff5f320c3c3827cada2d8a7b793a7753"}, + {file = "brotlicffi-1.0.9.2-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:16a0c9392a1059e2e62839fbd037d2e7e03c8ae5da65e9746f582464f7fab1bb"}, + {file = "brotlicffi-1.0.9.2-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:94d2810efc5723f1447b332223b197466190518a3eeca93b9f357efb5b22c6dc"}, + {file = "brotlicffi-1.0.9.2-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:9e70f3e20f317d70912b10dbec48b29114d3dbd0e9d88475cb328e6c086f0546"}, + {file = "brotlicffi-1.0.9.2-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:586f0ea3c2eed455d5f2330b9ab4a591514c8de0ee53d445645efcfbf053c69f"}, + {file = "brotlicffi-1.0.9.2-cp35-abi3-manylinux1_i686.whl", hash = "sha256:4454c3baedc277fd6e65f983e3eb8e77f4bc15060f69370a0201746e2edeca81"}, + {file = "brotlicffi-1.0.9.2-cp35-abi3-manylinux1_x86_64.whl", hash = "sha256:52c1c12dad6eb1d44213a0a76acf5f18f64653bd801300bef5e2f983405bdde5"}, + {file = "brotlicffi-1.0.9.2-cp35-abi3-manylinux2010_i686.whl", hash = "sha256:21cd400d24b344c218d8e32b394849e31b7c15784667575dbda9f65c46a64b0a"}, + {file = "brotlicffi-1.0.9.2-cp35-abi3-manylinux2010_x86_64.whl", hash = "sha256:71061f8bc86335b652e442260c4367b782a92c6e295cf5a10eff84c7d19d8cf5"}, + {file = "brotlicffi-1.0.9.2-cp35-abi3-manylinux2014_aarch64.whl", hash = "sha256:15e0db52c56056be6310fc116b3d7c6f34185594e261f23790b2fb6489998363"}, + {file = "brotlicffi-1.0.9.2-cp35-abi3-win32.whl", hash = "sha256:551305703d12a2dd1ae43d3dde35dee20b1cb49b5796279d4d34e2c6aec6be4d"}, + {file = "brotlicffi-1.0.9.2-cp35-abi3-win_amd64.whl", hash = "sha256:2be4fb8a7cb482f226af686cd06d2a2cab164ccdf99e460f8e3a5ec9a5337da2"}, + {file = "brotlicffi-1.0.9.2-pp27-pypy_73-macosx_10_9_x86_64.whl", hash = "sha256:8e7221d8a084d32d15c7b58e0ce0573972375c5038423dbe83f217cfe512e680"}, + {file = "brotlicffi-1.0.9.2-pp27-pypy_73-manylinux1_x86_64.whl", hash = "sha256:75a46bc5ed2753e1648cc211dcb2c1ac66116038766822dc104023f67ff4dfd8"}, + {file = "brotlicffi-1.0.9.2-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:1e27c43ef72a278f9739b12b2df80ee72048cd4cbe498f8bbe08aaaa67a5d5c8"}, + {file = "brotlicffi-1.0.9.2-pp27-pypy_73-win32.whl", hash = "sha256:feb942814285bdc5e97efc77a04e48283c17dfab9ea082d79c0a7b9e53ef1eab"}, + {file = "brotlicffi-1.0.9.2-pp36-pypy36_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a6208d82c3172eeeb3be83ed4efd5831552c7cd47576468e50fcf0fb23fcf97f"}, + {file = "brotlicffi-1.0.9.2-pp36-pypy36_pp73-manylinux1_x86_64.whl", hash = "sha256:408c810c599786fb806556ff17e844a903884e6370ca400bcec7fa286149f39c"}, + {file = "brotlicffi-1.0.9.2-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:a73099858ee343e8801710a08be8d194f47715ff21e98d92a19ac461058f52d1"}, + {file = "brotlicffi-1.0.9.2-pp36-pypy36_pp73-win32.whl", hash = "sha256:916b790f967a18a595e61f218c252f83718ac91f24157d622cf0fa710cd26ab7"}, + {file = "brotlicffi-1.0.9.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ba4a00263af40e875ec3d6c7f623cbf8c795b55705da18c64ec36b6bf0848bc5"}, + {file = "brotlicffi-1.0.9.2-pp37-pypy37_pp73-manylinux1_x86_64.whl", hash = "sha256:df78aa47741122b0d5463f1208b7bb18bc9706dee5152d9f56e0ead4865015cd"}, + {file = "brotlicffi-1.0.9.2-pp37-pypy37_pp73-manylinux2010_x86_64.whl", hash = "sha256:9030cd5099252d16bfa4e22659c84a89c102e94f8e81d30764788b72e2d7cfb7"}, + {file = "brotlicffi-1.0.9.2-pp37-pypy37_pp73-win32.whl", hash = "sha256:7e72978f4090a161885b114f87b784f538dcb77dafc6602592c1cf39ae8d243d"}, + {file = "brotlicffi-1.0.9.2.tar.gz", hash = "sha256:0c248a68129d8fc6a217767406c731e498c3e19a7be05ea0a90c3c86637b7d96"}, +] +certifi = [ + {file = "certifi-2022.9.24-py3-none-any.whl", hash = "sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382"}, + {file = "certifi-2022.9.24.tar.gz", hash = "sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14"}, +] +cffi = [ + {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, + {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, + {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, + {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, + {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, + {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, + {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, + {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, + {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, + {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, + {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, + {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, + {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, + {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, + {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, + {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, + {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, + {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, + {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, + {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, + {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, + {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, + {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, + {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, + {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, + {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, + {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, + {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, + {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, + {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, + {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, + {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, + {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, + {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, + {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, +] +charset-normalizer = [ + {file = "charset-normalizer-2.1.1.tar.gz", hash = "sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845"}, + {file = "charset_normalizer-2.1.1-py3-none-any.whl", hash = "sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f"}, +] +click = [ + {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, + {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, +] +colorama = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] +fonttools = [ + {file = "fonttools-4.38.0-py3-none-any.whl", hash = "sha256:820466f43c8be8c3009aef8b87e785014133508f0de64ec469e4efb643ae54fb"}, + {file = "fonttools-4.38.0.zip", hash = "sha256:2bb244009f9bf3fa100fc3ead6aeb99febe5985fa20afbfbaa2f8946c2fbdaf1"}, +] +fs = [ + {file = "fs-2.4.16-py2.py3-none-any.whl", hash = "sha256:660064febbccda264ae0b6bace80a8d1be9e089e0a5eb2427b7d517f9a91545c"}, + {file = "fs-2.4.16.tar.gz", hash = "sha256:ae97c7d51213f4b70b6a958292530289090de3a7e15841e108fbe144f069d313"}, +] +idna = [ + {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, + {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, +] +jsonschema = [ + {file = "jsonschema-4.17.0-py3-none-any.whl", hash = "sha256:f660066c3966db7d6daeaea8a75e0b68237a48e51cf49882087757bb59916248"}, + {file = "jsonschema-4.17.0.tar.gz", hash = "sha256:5bfcf2bca16a087ade17e02b282d34af7ccd749ef76241e7f9bd7c0cb8a9424d"}, +] +lxml = [ + {file = "lxml-4.9.1-cp27-cp27m-macosx_10_15_x86_64.whl", hash = "sha256:98cafc618614d72b02185ac583c6f7796202062c41d2eeecdf07820bad3295ed"}, + {file = "lxml-4.9.1-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c62e8dd9754b7debda0c5ba59d34509c4688f853588d75b53c3791983faa96fc"}, + {file = "lxml-4.9.1-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:21fb3d24ab430fc538a96e9fbb9b150029914805d551deeac7d7822f64631dfc"}, + {file = "lxml-4.9.1-cp27-cp27m-win32.whl", hash = "sha256:86e92728ef3fc842c50a5cb1d5ba2bc66db7da08a7af53fb3da79e202d1b2cd3"}, + {file = "lxml-4.9.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4cfbe42c686f33944e12f45a27d25a492cc0e43e1dc1da5d6a87cbcaf2e95627"}, + {file = "lxml-4.9.1-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dad7b164905d3e534883281c050180afcf1e230c3d4a54e8038aa5cfcf312b84"}, + {file = "lxml-4.9.1-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a614e4afed58c14254e67862456d212c4dcceebab2eaa44d627c2ca04bf86837"}, + {file = "lxml-4.9.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:f9ced82717c7ec65a67667bb05865ffe38af0e835cdd78728f1209c8fffe0cad"}, + {file = "lxml-4.9.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:d9fc0bf3ff86c17348dfc5d322f627d78273eba545db865c3cd14b3f19e57fa5"}, + {file = "lxml-4.9.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:e5f66bdf0976ec667fc4594d2812a00b07ed14d1b44259d19a41ae3fff99f2b8"}, + {file = "lxml-4.9.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:fe17d10b97fdf58155f858606bddb4e037b805a60ae023c009f760d8361a4eb8"}, + {file = "lxml-4.9.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8caf4d16b31961e964c62194ea3e26a0e9561cdf72eecb1781458b67ec83423d"}, + {file = "lxml-4.9.1-cp310-cp310-win32.whl", hash = "sha256:4780677767dd52b99f0af1f123bc2c22873d30b474aa0e2fc3fe5e02217687c7"}, + {file = "lxml-4.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:b122a188cd292c4d2fcd78d04f863b789ef43aa129b233d7c9004de08693728b"}, + {file = "lxml-4.9.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:be9eb06489bc975c38706902cbc6888f39e946b81383abc2838d186f0e8b6a9d"}, + {file = "lxml-4.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:f1be258c4d3dc609e654a1dc59d37b17d7fef05df912c01fc2e15eb43a9735f3"}, + {file = "lxml-4.9.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:927a9dd016d6033bc12e0bf5dee1dde140235fc8d0d51099353c76081c03dc29"}, + {file = "lxml-4.9.1-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9232b09f5efee6a495a99ae6824881940d6447debe272ea400c02e3b68aad85d"}, + {file = "lxml-4.9.1-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:04da965dfebb5dac2619cb90fcf93efdb35b3c6994fea58a157a834f2f94b318"}, + {file = "lxml-4.9.1-cp35-cp35m-win32.whl", hash = "sha256:4d5bae0a37af799207140652a700f21a85946f107a199bcb06720b13a4f1f0b7"}, + {file = "lxml-4.9.1-cp35-cp35m-win_amd64.whl", hash = "sha256:4878e667ebabe9b65e785ac8da4d48886fe81193a84bbe49f12acff8f7a383a4"}, + {file = "lxml-4.9.1-cp36-cp36m-macosx_10_15_x86_64.whl", hash = "sha256:1355755b62c28950f9ce123c7a41460ed9743c699905cbe664a5bcc5c9c7c7fb"}, + {file = "lxml-4.9.1-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:bcaa1c495ce623966d9fc8a187da80082334236a2a1c7e141763ffaf7a405067"}, + {file = "lxml-4.9.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6eafc048ea3f1b3c136c71a86db393be36b5b3d9c87b1c25204e7d397cee9536"}, + {file = "lxml-4.9.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:13c90064b224e10c14dcdf8086688d3f0e612db53766e7478d7754703295c7c8"}, + {file = "lxml-4.9.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:206a51077773c6c5d2ce1991327cda719063a47adc02bd703c56a662cdb6c58b"}, + {file = "lxml-4.9.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e8f0c9d65da595cfe91713bc1222af9ecabd37971762cb830dea2fc3b3bb2acf"}, + {file = "lxml-4.9.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8f0a4d179c9a941eb80c3a63cdb495e539e064f8054230844dcf2fcb812b71d3"}, + {file = "lxml-4.9.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:830c88747dce8a3e7525defa68afd742b4580df6aa2fdd6f0855481e3994d391"}, + {file = "lxml-4.9.1-cp36-cp36m-win32.whl", hash = "sha256:1e1cf47774373777936c5aabad489fef7b1c087dcd1f426b621fda9dcc12994e"}, + {file = "lxml-4.9.1-cp36-cp36m-win_amd64.whl", hash = "sha256:5974895115737a74a00b321e339b9c3f45c20275d226398ae79ac008d908bff7"}, + {file = "lxml-4.9.1-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:1423631e3d51008871299525b541413c9b6c6423593e89f9c4cfbe8460afc0a2"}, + {file = "lxml-4.9.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:2aaf6a0a6465d39b5ca69688fce82d20088c1838534982996ec46633dc7ad6cc"}, + {file = "lxml-4.9.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:9f36de4cd0c262dd9927886cc2305aa3f2210db437aa4fed3fb4940b8bf4592c"}, + {file = "lxml-4.9.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:ae06c1e4bc60ee076292e582a7512f304abdf6c70db59b56745cca1684f875a4"}, + {file = "lxml-4.9.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:57e4d637258703d14171b54203fd6822fda218c6c2658a7d30816b10995f29f3"}, + {file = "lxml-4.9.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6d279033bf614953c3fc4a0aa9ac33a21e8044ca72d4fa8b9273fe75359d5cca"}, + {file = "lxml-4.9.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:a60f90bba4c37962cbf210f0188ecca87daafdf60271f4c6948606e4dabf8785"}, + {file = "lxml-4.9.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:6ca2264f341dd81e41f3fffecec6e446aa2121e0b8d026fb5130e02de1402785"}, + {file = "lxml-4.9.1-cp37-cp37m-win32.whl", hash = "sha256:27e590352c76156f50f538dbcebd1925317a0f70540f7dc8c97d2931c595783a"}, + {file = "lxml-4.9.1-cp37-cp37m-win_amd64.whl", hash = "sha256:eea5d6443b093e1545ad0210e6cf27f920482bfcf5c77cdc8596aec73523bb7e"}, + {file = "lxml-4.9.1-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:f05251bbc2145349b8d0b77c0d4e5f3b228418807b1ee27cefb11f69ed3d233b"}, + {file = "lxml-4.9.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:487c8e61d7acc50b8be82bda8c8d21d20e133c3cbf41bd8ad7eb1aaeb3f07c97"}, + {file = "lxml-4.9.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:8d1a92d8e90b286d491e5626af53afef2ba04da33e82e30744795c71880eaa21"}, + {file = "lxml-4.9.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:b570da8cd0012f4af9fa76a5635cd31f707473e65a5a335b186069d5c7121ff2"}, + {file = "lxml-4.9.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5ef87fca280fb15342726bd5f980f6faf8b84a5287fcc2d4962ea8af88b35130"}, + {file = "lxml-4.9.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:93e414e3206779ef41e5ff2448067213febf260ba747fc65389a3ddaa3fb8715"}, + {file = "lxml-4.9.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6653071f4f9bac46fbc30f3c7838b0e9063ee335908c5d61fb7a4a86c8fd2036"}, + {file = "lxml-4.9.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:32a73c53783becdb7eaf75a2a1525ea8e49379fb7248c3eeefb9412123536387"}, + {file = "lxml-4.9.1-cp38-cp38-win32.whl", hash = "sha256:1a7c59c6ffd6ef5db362b798f350e24ab2cfa5700d53ac6681918f314a4d3b94"}, + {file = "lxml-4.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:1436cf0063bba7888e43f1ba8d58824f085410ea2025befe81150aceb123e345"}, + {file = "lxml-4.9.1-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:4beea0f31491bc086991b97517b9683e5cfb369205dac0148ef685ac12a20a67"}, + {file = "lxml-4.9.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:41fb58868b816c202e8881fd0f179a4644ce6e7cbbb248ef0283a34b73ec73bb"}, + {file = "lxml-4.9.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:bd34f6d1810d9354dc7e35158aa6cc33456be7706df4420819af6ed966e85448"}, + {file = "lxml-4.9.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:edffbe3c510d8f4bf8640e02ca019e48a9b72357318383ca60e3330c23aaffc7"}, + {file = "lxml-4.9.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6d949f53ad4fc7cf02c44d6678e7ff05ec5f5552b235b9e136bd52e9bf730b91"}, + {file = "lxml-4.9.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:079b68f197c796e42aa80b1f739f058dcee796dc725cc9a1be0cdb08fc45b000"}, + {file = "lxml-4.9.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9c3a88d20e4fe4a2a4a84bf439a5ac9c9aba400b85244c63a1ab7088f85d9d25"}, + {file = "lxml-4.9.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4e285b5f2bf321fc0857b491b5028c5f276ec0c873b985d58d7748ece1d770dd"}, + {file = "lxml-4.9.1-cp39-cp39-win32.whl", hash = "sha256:ef72013e20dd5ba86a8ae1aed7f56f31d3374189aa8b433e7b12ad182c0d2dfb"}, + {file = "lxml-4.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:10d2017f9150248563bb579cd0d07c61c58da85c922b780060dcc9a3aa9f432d"}, + {file = "lxml-4.9.1-pp37-pypy37_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0538747a9d7827ce3e16a8fdd201a99e661c7dee3c96c885d8ecba3c35d1032c"}, + {file = "lxml-4.9.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:0645e934e940107e2fdbe7c5b6fb8ec6232444260752598bc4d09511bd056c0b"}, + {file = "lxml-4.9.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:6daa662aba22ef3258934105be2dd9afa5bb45748f4f702a3b39a5bf53a1f4dc"}, + {file = "lxml-4.9.1-pp38-pypy38_pp73-macosx_10_15_x86_64.whl", hash = "sha256:603a464c2e67d8a546ddaa206d98e3246e5db05594b97db844c2f0a1af37cf5b"}, + {file = "lxml-4.9.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:c4b2e0559b68455c085fb0f6178e9752c4be3bba104d6e881eb5573b399d1eb2"}, + {file = "lxml-4.9.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:0f3f0059891d3254c7b5fb935330d6db38d6519ecd238ca4fce93c234b4a0f73"}, + {file = "lxml-4.9.1-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:c852b1530083a620cb0de5f3cd6826f19862bafeaf77586f1aef326e49d95f0c"}, + {file = "lxml-4.9.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:287605bede6bd36e930577c5925fcea17cb30453d96a7b4c63c14a257118dbb9"}, + {file = "lxml-4.9.1.tar.gz", hash = "sha256:fe749b052bb7233fe5d072fcb549221a8cb1a16725c47c37e42b0b9cb3ff2c3f"}, +] +mypy = [ + {file = "mypy-0.991-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7d17e0a9707d0772f4a7b878f04b4fd11f6f5bcb9b3813975a9b13c9332153ab"}, + {file = "mypy-0.991-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0714258640194d75677e86c786e80ccf294972cc76885d3ebbb560f11db0003d"}, + {file = "mypy-0.991-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0c8f3be99e8a8bd403caa8c03be619544bc2c77a7093685dcf308c6b109426c6"}, + {file = "mypy-0.991-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc9ec663ed6c8f15f4ae9d3c04c989b744436c16d26580eaa760ae9dd5d662eb"}, + {file = "mypy-0.991-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4307270436fd7694b41f913eb09210faff27ea4979ecbcd849e57d2da2f65305"}, + {file = "mypy-0.991-cp310-cp310-win_amd64.whl", hash = "sha256:901c2c269c616e6cb0998b33d4adbb4a6af0ac4ce5cd078afd7bc95830e62c1c"}, + {file = "mypy-0.991-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d13674f3fb73805ba0c45eb6c0c3053d218aa1f7abead6e446d474529aafc372"}, + {file = "mypy-0.991-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1c8cd4fb70e8584ca1ed5805cbc7c017a3d1a29fb450621089ffed3e99d1857f"}, + {file = "mypy-0.991-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:209ee89fbb0deed518605edddd234af80506aec932ad28d73c08f1400ef80a33"}, + {file = "mypy-0.991-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37bd02ebf9d10e05b00d71302d2c2e6ca333e6c2a8584a98c00e038db8121f05"}, + {file = "mypy-0.991-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:26efb2fcc6b67e4d5a55561f39176821d2adf88f2745ddc72751b7890f3194ad"}, + {file = "mypy-0.991-cp311-cp311-win_amd64.whl", hash = "sha256:3a700330b567114b673cf8ee7388e949f843b356a73b5ab22dd7cff4742a5297"}, + {file = "mypy-0.991-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:1f7d1a520373e2272b10796c3ff721ea1a0712288cafaa95931e66aa15798813"}, + {file = "mypy-0.991-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:641411733b127c3e0dab94c45af15fea99e4468f99ac88b39efb1ad677da5711"}, + {file = "mypy-0.991-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3d80e36b7d7a9259b740be6d8d906221789b0d836201af4234093cae89ced0cd"}, + {file = "mypy-0.991-cp37-cp37m-win_amd64.whl", hash = "sha256:e62ebaad93be3ad1a828a11e90f0e76f15449371ffeecca4a0a0b9adc99abcef"}, + {file = "mypy-0.991-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b86ce2c1866a748c0f6faca5232059f881cda6dda2a893b9a8373353cfe3715a"}, + {file = "mypy-0.991-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ac6e503823143464538efda0e8e356d871557ef60ccd38f8824a4257acc18d93"}, + {file = "mypy-0.991-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0cca5adf694af539aeaa6ac633a7afe9bbd760df9d31be55ab780b77ab5ae8bf"}, + {file = "mypy-0.991-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a12c56bf73cdab116df96e4ff39610b92a348cc99a1307e1da3c3768bbb5b135"}, + {file = "mypy-0.991-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:652b651d42f155033a1967739788c436491b577b6a44e4c39fb340d0ee7f0d70"}, + {file = "mypy-0.991-cp38-cp38-win_amd64.whl", hash = "sha256:4175593dc25d9da12f7de8de873a33f9b2b8bdb4e827a7cae952e5b1a342e243"}, + {file = "mypy-0.991-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:98e781cd35c0acf33eb0295e8b9c55cdbef64fcb35f6d3aa2186f289bed6e80d"}, + {file = "mypy-0.991-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6d7464bac72a85cb3491c7e92b5b62f3dcccb8af26826257760a552a5e244aa5"}, + {file = "mypy-0.991-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c9166b3f81a10cdf9b49f2d594b21b31adadb3d5e9db9b834866c3258b695be3"}, + {file = "mypy-0.991-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8472f736a5bfb159a5e36740847808f6f5b659960115ff29c7cecec1741c648"}, + {file = "mypy-0.991-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5e80e758243b97b618cdf22004beb09e8a2de1af481382e4d84bc52152d1c476"}, + {file = "mypy-0.991-cp39-cp39-win_amd64.whl", hash = "sha256:74e259b5c19f70d35fcc1ad3d56499065c601dfe94ff67ae48b85596b9ec1461"}, + {file = "mypy-0.991-py3-none-any.whl", hash = "sha256:de32edc9b0a7e67c2775e574cb061a537660e51210fbf6006b0b36ea695ae9bb"}, + {file = "mypy-0.991.tar.gz", hash = "sha256:3c0165ba8f354a6d9881809ef29f1a9318a236a6d81c690094c5df32107bde06"}, +] +mypy-extensions = [ + {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, + {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, +] +pycodestyle = [ + {file = "pycodestyle-2.9.1-py2.py3-none-any.whl", hash = "sha256:d1735fc58b418fd7c5f658d28d943854f8a849b01a5d0a1e6f3f3fdd0166804b"}, + {file = "pycodestyle-2.9.1.tar.gz", hash = "sha256:2c9607871d58c76354b697b42f5d57e1ada7d261c261efac224b664affdc5785"}, +] +pycparser = [ + {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, + {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, +] +pyrsistent = [ + {file = "pyrsistent-0.19.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d6982b5a0237e1b7d876b60265564648a69b14017f3b5f908c5be2de3f9abb7a"}, + {file = "pyrsistent-0.19.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:187d5730b0507d9285a96fca9716310d572e5464cadd19f22b63a6976254d77a"}, + {file = "pyrsistent-0.19.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:055ab45d5911d7cae397dc418808d8802fb95262751872c841c170b0dbf51eed"}, + {file = "pyrsistent-0.19.2-cp310-cp310-win32.whl", hash = "sha256:456cb30ca8bff00596519f2c53e42c245c09e1a4543945703acd4312949bfd41"}, + {file = "pyrsistent-0.19.2-cp310-cp310-win_amd64.whl", hash = "sha256:b39725209e06759217d1ac5fcdb510e98670af9e37223985f330b611f62e7425"}, + {file = "pyrsistent-0.19.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2aede922a488861de0ad00c7630a6e2d57e8023e4be72d9d7147a9fcd2d30712"}, + {file = "pyrsistent-0.19.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:879b4c2f4d41585c42df4d7654ddffff1239dc4065bc88b745f0341828b83e78"}, + {file = "pyrsistent-0.19.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c43bec251bbd10e3cb58ced80609c5c1eb238da9ca78b964aea410fb820d00d6"}, + {file = "pyrsistent-0.19.2-cp37-cp37m-win32.whl", hash = "sha256:d690b18ac4b3e3cab73b0b7aa7dbe65978a172ff94970ff98d82f2031f8971c2"}, + {file = "pyrsistent-0.19.2-cp37-cp37m-win_amd64.whl", hash = "sha256:3ba4134a3ff0fc7ad225b6b457d1309f4698108fb6b35532d015dca8f5abed73"}, + {file = "pyrsistent-0.19.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a178209e2df710e3f142cbd05313ba0c5ebed0a55d78d9945ac7a4e09d923308"}, + {file = "pyrsistent-0.19.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e371b844cec09d8dc424d940e54bba8f67a03ebea20ff7b7b0d56f526c71d584"}, + {file = "pyrsistent-0.19.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:111156137b2e71f3a9936baf27cb322e8024dac3dc54ec7fb9f0bcf3249e68bb"}, + {file = "pyrsistent-0.19.2-cp38-cp38-win32.whl", hash = "sha256:e5d8f84d81e3729c3b506657dddfe46e8ba9c330bf1858ee33108f8bb2adb38a"}, + {file = "pyrsistent-0.19.2-cp38-cp38-win_amd64.whl", hash = "sha256:9cd3e9978d12b5d99cbdc727a3022da0430ad007dacf33d0bf554b96427f33ab"}, + {file = "pyrsistent-0.19.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f1258f4e6c42ad0b20f9cfcc3ada5bd6b83374516cd01c0960e3cb75fdca6770"}, + {file = "pyrsistent-0.19.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21455e2b16000440e896ab99e8304617151981ed40c29e9507ef1c2e4314ee95"}, + {file = "pyrsistent-0.19.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bfd880614c6237243ff53a0539f1cb26987a6dc8ac6e66e0c5a40617296a045e"}, + {file = "pyrsistent-0.19.2-cp39-cp39-win32.whl", hash = "sha256:71d332b0320642b3261e9fee47ab9e65872c2bd90260e5d225dabeed93cbd42b"}, + {file = "pyrsistent-0.19.2-cp39-cp39-win_amd64.whl", hash = "sha256:dec3eac7549869365fe263831f576c8457f6c833937c68542d08fde73457d291"}, + {file = "pyrsistent-0.19.2-py3-none-any.whl", hash = "sha256:ea6b79a02a28550c98b6ca9c35b9f492beaa54d7c5c9e9949555893c8a9234d0"}, + {file = "pyrsistent-0.19.2.tar.gz", hash = "sha256:bfa0351be89c9fcbcb8c9879b826f4353be10f58f8a677efab0c017bf7137ec2"}, +] +pyyaml = [ + {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, + {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, + {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, + {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, + {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, + {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, + {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, + {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, + {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, + {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, + {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, + {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, + {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, + {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, + {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, + {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, + {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, + {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, + {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, + {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, +] +requests = [ + {file = "requests-2.28.1-py3-none-any.whl", hash = "sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349"}, + {file = "requests-2.28.1.tar.gz", hash = "sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983"}, +] +setuptools = [ + {file = "setuptools-65.6.0-py3-none-any.whl", hash = "sha256:6211d2f5eddad8757bd0484923ca7c0a6302ebc4ab32ea5e94357176e0ca0840"}, + {file = "setuptools-65.6.0.tar.gz", hash = "sha256:d1eebf881c6114e51df1664bc2c9133d022f78d12d5f4f665b9191f084e2862d"}, +] +six = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] +tomli = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] +typing-extensions = [ + {file = "typing_extensions-4.4.0-py3-none-any.whl", hash = "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"}, + {file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"}, +] +unicodedata2 = [ + {file = "unicodedata2-15.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:28baf5e2d3a2ad55340feff3c020f8d58f1d5fbccc9b17cc0e9c5f885641160d"}, + {file = "unicodedata2-15.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b4d4705d85da572cb537e977005349bd1c6513cff9601b13caedd6acc4a02c05"}, + {file = "unicodedata2-15.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a74c9018bf6c6ae6948baca17565a6d23d4e9d07fa788d23fbe29d0a15171aac"}, + {file = "unicodedata2-15.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41e1197dd1beb0882a0ca2ff58f65bf19425a6cb8e5dde4af699bab90e76ee3d"}, + {file = "unicodedata2-15.0.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62af82ddd656350081dc31141654f24538bfe6b15956b65035f6b9f528809435"}, + {file = "unicodedata2-15.0.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:372b33074b2fcaa85e6d3a16cf1554924ba3f1feec70b634b79076e2e8c9bb15"}, + {file = "unicodedata2-15.0.0-cp310-cp310-win32.whl", hash = "sha256:016ef18a6a7399767380d862f995fe241b4c21e42ab190b21292bf207f609b94"}, + {file = "unicodedata2-15.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:25c747c144f1cb85751e489a396af85570d8f576b74108b831cbf6724ac5c6eb"}, + {file = "unicodedata2-15.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:483a5232ab4ac25c8a25558a18a7e551ebc235a6e1d425b553bb9f41e20fb3fa"}, + {file = "unicodedata2-15.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c79eae81b9daff85f9f79a53188f2279e0ec1aea7333d4c4ea8234c1a4028f1"}, + {file = "unicodedata2-15.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b95c84f407c6bb91b0c3dd715aa6bded03a1b24b386cd2ce4a7e824c6fcbf869"}, + {file = "unicodedata2-15.0.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2cd4193a73f12cdea03c4e4bf76d498153f715e7f90439037595f87cb3abc755"}, + {file = "unicodedata2-15.0.0-cp311-cp311-win32.whl", hash = "sha256:6d0ad0e95d02795a4458e5e3f6c0ac4200584ce5ac56de5420a1c1a6c27a4303"}, + {file = "unicodedata2-15.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:c9dddfcc126bab216271c88bcbc9e21db3c51b6a0d8e65b10775b7c2db18f206"}, + {file = "unicodedata2-15.0.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:0e80e7a68af9b5b3428dc467a0e9b166800cd5f991d74ca2ea226535ced7aebf"}, + {file = "unicodedata2-15.0.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:829b5be4f6513bb1657dd2eec177ebee8ad325f52fef1f666840c526a6e31ae3"}, + {file = "unicodedata2-15.0.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:ca4098d947600a2ab2671dcf3df272d93c72f0cab20c4201249df1fc9b4bdaed"}, + {file = "unicodedata2-15.0.0-cp36-cp36m-win32.whl", hash = "sha256:19b4f980ef3eca8f3b97e18fc933a5c2b05d6db29884008f1af9ad65e611612c"}, + {file = "unicodedata2-15.0.0-cp36-cp36m-win_amd64.whl", hash = "sha256:a43270d149b438e3a2088605c12af6796be2511bdbfb2fff5b063e5107de3e2c"}, + {file = "unicodedata2-15.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:11138b7358820bed11e4a57ebd99bc9e254a54b7b0445bfee438154308c17960"}, + {file = "unicodedata2-15.0.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83d5cc119bd445c37c4e09ba0af3fb76daa9dae4ecf04dc3b5bddd7728d74ff4"}, + {file = "unicodedata2-15.0.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1de099c71eb23914aaac8ff22ea470f44304140b22cd98ee8911055241ed37fd"}, + {file = "unicodedata2-15.0.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:caa8f279c8c26602c56e2d124acb49b86927e48872d62533a0d2475c789ff4bf"}, + {file = "unicodedata2-15.0.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d951afb4c9712f1b104542dbd487ff61f4b0a0e5742025785d62e46dd17ce636"}, + {file = "unicodedata2-15.0.0-cp37-cp37m-win32.whl", hash = "sha256:c5505052a1c88d3ec24a49afcc70dfe2e81e3d177378e86ae4a6a4da2a52415b"}, + {file = "unicodedata2-15.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:112ebd825f85e2d1f6b69b8ac03846d01777864f6c7196d52f8fccad05c99256"}, + {file = "unicodedata2-15.0.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:98bacdb451aea35d4628e88dc5fbe349156a406d09475c22ad01ffede9ccc3fe"}, + {file = "unicodedata2-15.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d1654e45e0116c1f754f372476422cffe2387928870ce6f1e07233c4b4b7679f"}, + {file = "unicodedata2-15.0.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96f03bdec49c61a688d6cdd9ddca6b1223fb9b98b958cb9f56c414d3b1793eab"}, + {file = "unicodedata2-15.0.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:742a5033a2ba5bddb79255cd9a79200607964c183c22292e39f5428145d18be4"}, + {file = "unicodedata2-15.0.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:1a8af07ec423148580e14a71d92ab50fae9391f88b349e1548a56520a4c6060f"}, + {file = "unicodedata2-15.0.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ea13b3ee7fdcebae98632e82efab1bd6284c1d3ca51ef4c46e80d0413f02f857"}, + {file = "unicodedata2-15.0.0-cp38-cp38-win32.whl", hash = "sha256:569213913c5ab1921bd9a44c0a968a632e37d048946373921d4d75adcfcbc917"}, + {file = "unicodedata2-15.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:0dbad3dc88baf5b16ca68f9479c7e38d259543ca2d1ecdca09e31307e8e3201a"}, + {file = "unicodedata2-15.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e5ae1f3f1424342dfcc4c2d62a1d49c441339702ac29ac9b2085e02ea97514ae"}, + {file = "unicodedata2-15.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:32d73acffe8c5b86cf8cf215ae465276a75d4ea21b31d5e8797a981c3c520f6c"}, + {file = "unicodedata2-15.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89843005fdd7353ae925ca2009409eab29b4fc76a6faff5ed01ef60c38e344bc"}, + {file = "unicodedata2-15.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7b656c075e8104d965d93c0c1266a54affa5e4e0c1eba83e87d90443119aa57"}, + {file = "unicodedata2-15.0.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7f4829cf2dd47b3b271fd1953dc5fbc1066fa709c3f185660e1c34b75fed85dd"}, + {file = "unicodedata2-15.0.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ccbb9565cd0df0e95d2a05c132a6a3d5ab7a8907d5ce8fa49fc0cc444a1082c2"}, + {file = "unicodedata2-15.0.0-cp39-cp39-win32.whl", hash = "sha256:fe0759783039a2247d1ab935d96bdde6d236bdabc961db18d524716697731bd7"}, + {file = "unicodedata2-15.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:d59c903a620465ed973d4b1c8eeed2f3948b3af55d4d8fa14230d720b2706191"}, + {file = "unicodedata2-15.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:cdd5f7f80b2cffac8f5244ba3c604a065cc21205008d6f3ecaf73525bfaf1fbf"}, + {file = "unicodedata2-15.0.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:669d0a2bbe1bdc7a1360ac82160aa18925497dfa50eaae2d408504fc29af7903"}, + {file = "unicodedata2-15.0.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:f4183e0c484a8cf0b504465203929301db1fbba06d80c19a62fcbef3a7646bdb"}, + {file = "unicodedata2-15.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1095b7d337192931c381479a46652b9097fd4307004b705004e195d69a2fb0c4"}, + {file = "unicodedata2-15.0.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7928978a9137261c5450198eb2877c2a72221e727c7813d7496a16372b52ae6c"}, + {file = "unicodedata2-15.0.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d9c11be81727b5fe199c9b00dcfce514692d8a30e3c212397e1b3f960bd3a935"}, + {file = "unicodedata2-15.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f6d0550244184670af3cfc2c346fc5903de005f647cbad7f0005741a27d20da6"}, + {file = "unicodedata2-15.0.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58e76ce73a0d4a37a69ca7ecf5dbd7039f46e86bebcf3ec462fbb988893acb7e"}, + {file = "unicodedata2-15.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:085105d63798b1e5c2fb61c092e010fc9db9d67a9891906855cf23c030ad8f85"}, + {file = "unicodedata2-15.0.0.tar.gz", hash = "sha256:ed6c683f7b0a58cd11824b440d8ad24b22904ab3f63fc851bbcd7e518fa68f2d"}, +] +urllib3 = [ + {file = "urllib3-1.26.12-py2.py3-none-any.whl", hash = "sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997"}, + {file = "urllib3-1.26.12.tar.gz", hash = "sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e"}, +] +zopfli = [ + {file = "zopfli-0.2.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e340851bbdea91408e6713748b4082c2e464a80eef9f9a69ff5a20e5e008cace"}, + {file = "zopfli-0.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:093a58fdf1e592f01233fc16900ceb69f27f19b347deb49544df96d912664f6d"}, + {file = "zopfli-0.2.2-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:bd7b174fef2366723f57d16f3e8d157f9cbb53b1c555e2a1f99b6290de94ca28"}, + {file = "zopfli-0.2.2-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a712fdc3dab61037fab549ff72539b7968ffda567e5460aa2518e40a13b4dd38"}, + {file = "zopfli-0.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02a0c37826c0b28454865fdf664d54627fe8d90fac6f7325b5215719e8be09ca"}, + {file = "zopfli-0.2.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:20b02b5c9f1cfbcfc154e54981d1b9f9581ca1f54ece39c6aed52f7166a6f081"}, + {file = "zopfli-0.2.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:01e82e6e31cfcb2eb7e3d6d72d0a498d150e3c3112cae3b5ab88ca3efedbc162"}, + {file = "zopfli-0.2.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8c2e6d0618e1ffc27a1eaf66662f96e0bc8a4c1926fc139a0f544b93a1e1b451"}, + {file = "zopfli-0.2.2-cp310-cp310-win32.whl", hash = "sha256:e0014bd1b9703c9cdfa7f88bc793600aee5f858dd2f18105b49a70e66b9f1b1d"}, + {file = "zopfli-0.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:13487519e6ee8ed36c4a197d146d8ae60d418172d85342d3cdd28f38f905a705"}, + {file = "zopfli-0.2.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:fa589e4d2b54d95447cb79a6053050fc7218f61594085ca54672cb045ba0f7f8"}, + {file = "zopfli-0.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bd661f0894a4e4d78ce4c07e2625b0fd17ae172040ce57c5e1c32316a16727c9"}, + {file = "zopfli-0.2.2-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed2137d64470469c825713aac486aacc9e2c46e300b92cb39ae47f4024b86b2e"}, + {file = "zopfli-0.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69411d85ed25ea25f480410048b397abc4c98562ce3533ecc3ce65358acc52dd"}, + {file = "zopfli-0.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed09efbcdc8bce5b5ff052ffd1edabdabd7a43e340ee63f8d5e81644dc50110f"}, + {file = "zopfli-0.2.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9de02f057ed153c9f523e72a366b8f48e2634c9f867e7109232415efe11d36c2"}, + {file = "zopfli-0.2.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:2bafc105065fae35bd96100a5901a7d816f1904eb732d94b6d46cf480ead581b"}, + {file = "zopfli-0.2.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:898daa330577101aab03806231e9b29990ebaa34f275d9df2045d0551edd1e87"}, + {file = "zopfli-0.2.2-cp311-cp311-win32.whl", hash = "sha256:b5b2e2ac397a71772fbbdc5b31fa8257e46f2a1e718e5c17c08db3dac7c739e4"}, + {file = "zopfli-0.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:259f15d65e554b16a6086bfe96dd7bd175467eb3d024b9dbce41323b5861a285"}, + {file = "zopfli-0.2.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:f6f62330a3999522282d0cc6370682d86985ac66edc2799f5934e309d8d615f1"}, + {file = "zopfli-0.2.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e05a2506e8a8d44835a11d5f1c296035d65d0f7053f77730ce99066acaf09af"}, + {file = "zopfli-0.2.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:573ae7e1cb4f0c9a248c203440950b24b213c13b5169e169a884c777ad9054e4"}, + {file = "zopfli-0.2.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:47d9ec1ca32240fae8b9b41e90d6483f4d0f2946de4785f54f4f57afe83040be"}, + {file = "zopfli-0.2.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:da3d682956e447f61ad23f66f49f20f189d12b15857a2e524497793ae54027c4"}, + {file = "zopfli-0.2.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:58ddab571a77988bc585e1a6fa46f9848b45880fa74bc832b135cbc22d22a619"}, + {file = "zopfli-0.2.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:00a66579f2e663cd7eabad71f5b114abf442f4816fdaf251b4b495aa9d016a67"}, + {file = "zopfli-0.2.2-cp37-cp37m-win32.whl", hash = "sha256:c49e29739508a7142fa1437256a7bf631926e70e68ca50a6bd62ee4e80050acc"}, + {file = "zopfli-0.2.2-cp37-cp37m-win_amd64.whl", hash = "sha256:8d6d02e1a962995c380411cc4ec81d1f4fc60c293764f8acd859eb12bfdf7190"}, + {file = "zopfli-0.2.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a568f09aa932a04073a4147e2db5db2adfccd864326477d58d4ffc80550531c7"}, + {file = "zopfli-0.2.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c27af5f9a6538891af7257e104a37affbe26383fc0bd57b52c05fe2f45292dc9"}, + {file = "zopfli-0.2.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5aea70d124ff9c0a33078f1451dfa2dd29eba53ea0627acb88783a19f0692044"}, + {file = "zopfli-0.2.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3b58455a9d23f6d45f2686891d7bec916132aed335052459bbed36a2b9437c1d"}, + {file = "zopfli-0.2.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7146c58c5ff604e7798d4c015c0ca8da53128ca29d0f1bccb48c785953451cd4"}, + {file = "zopfli-0.2.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:81c2c1216814a4f2f9abcd49fd4b70f05266d3621ef3b21e4b1b7bf535876fc1"}, + {file = "zopfli-0.2.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:468c4317aca9411b576a27f6f26217bdd30e04fdfc420d3d7e8b6f1fef4e9886"}, + {file = "zopfli-0.2.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:691d4e0fd04e85ee5f59e019ed0da16d8f544904d3879a34986722d87a90c536"}, + {file = "zopfli-0.2.2-cp38-cp38-win32.whl", hash = "sha256:2b4b5ae717dc2c164d9fae6134eac285915aaef77723f8cf9765555ac926f6d0"}, + {file = "zopfli-0.2.2-cp38-cp38-win_amd64.whl", hash = "sha256:c9d444b26317f3c40909d555f9c611ef8bcac6edf016af7709a32ad5848b481d"}, + {file = "zopfli-0.2.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:db004eb8ee7aab9c86647b92e1e570edb6fec9bd384a7a4f24e1f6529db34ac3"}, + {file = "zopfli-0.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a989893b20381be266a2385f4a1b77316e0df4258ee048bb190c2e426e39cbc8"}, + {file = "zopfli-0.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1689ced6f6ebf674281d85c143529232aa039c4e8d814bf3b425f1793bfdeb4"}, + {file = "zopfli-0.2.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4fcc34fd420ec5750f9981db43ee9a4f2e2bfabdc52128b243fca1fd9b99e13d"}, + {file = "zopfli-0.2.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:33c876d311c5edc700ccf75a22d03dcda1efa85b43f733913a99b5f3d1eb4ea7"}, + {file = "zopfli-0.2.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3df7ae869dcb8e0bb3292e6ab041d16323af37d87c8dca1dde7b2fe5cb6b7cf7"}, + {file = "zopfli-0.2.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:4cbc6192bf24425c757281c7c864012e51d29095771f805ea3040702c10c3d7a"}, + {file = "zopfli-0.2.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8563e639534201a14c109c54965f8a71574d8cf525a0a521d310e044d81fece9"}, + {file = "zopfli-0.2.2-cp39-cp39-win32.whl", hash = "sha256:4b471e3f58bd7b77cfc7a29b28a10c094ea4cd9ee14c54fbc4f1150680aac68c"}, + {file = "zopfli-0.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:1e3aefca003cbb41a6dcdd61f920c807eea99d0196aff488f02275c3b3c400a9"}, + {file = "zopfli-0.2.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:17694cfda43fb2af18b571bfc60426fb67d7701d75cc1f0e634ad0a19ffaebdd"}, + {file = "zopfli-0.2.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:71eafbe6ce975f77a5247bf44fdfdb78e846a76a3391de4d75cc68ea74542048"}, + {file = "zopfli-0.2.2-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a85d500cfa06f127e441e90804556a3872ea329e065d2f0ee97922d03afc9885"}, + {file = "zopfli-0.2.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:4205bb3aea31f22cd52bd1a9c298944591bfd9b6f92ede0af99127750b27eb3b"}, + {file = "zopfli-0.2.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ec845584fcdc10763d869b40b742fe0e2684adf3ca275ec997b9447ef5fe3ad9"}, + {file = "zopfli-0.2.2-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1360df0d423c897164a3344ed6635f7fd098cb4ce59c6d45b4275b93727d57f6"}, + {file = "zopfli-0.2.2-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:537da300842f06470c036d6d7e7fc9e63713735ee0b96ee97a750d1ec0399639"}, + {file = "zopfli-0.2.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:2e5b7874dfe228715569940561cdc0485ed8cbfd2c76eebc4e54719e0c9cc494"}, + {file = "zopfli-0.2.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8c1b316a5eed59a9a49a886aeeaf3b7233627a1013b10f230817870278e15789"}, + {file = "zopfli-0.2.2-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ce7cbe8f6fff013aa695d5d92ac2b1fd46fd012858109fdde9824759b566685"}, + {file = "zopfli-0.2.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d5e81fed8ac2d71832177ab06385f032cc3a37eec76537d105b1018b7fef0ff"}, + {file = "zopfli-0.2.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2ea855a740ee766c872cbf84abdcc1b6a51b5dbdeb6ace995f36c934b3846467"}, + {file = "zopfli-0.2.2.zip", hash = "sha256:2d49db7540d9991976af464ebc1b9ed12988c04d90691bcb51dc4a373a9e2afc"}, +] diff --git a/poetry.toml b/poetry.toml new file mode 100644 index 0000000..ab1033b --- /dev/null +++ b/poetry.toml @@ -0,0 +1,2 @@ +[virtualenvs] +in-project = true diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..de52c9c --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,29 @@ +[tool.poetry] +name = "glyphance" +version = "0.1.0" +description = "" +authors = ["Niccolo Borgioli "] +license = "MIT" +readme = "README.md" +homepage = "https://github.com/cupcakearmy/glyphance" +repository= "https://github.com/cupcakearmy/glyphance" +keywords = ["glyph", "subset", "optimiser", "typography", "utility"] + +[tool.poetry.scripts] + +[tool.poetry.dependencies] +python = "^3.10" +requests = "^2.28.1" +fonttools = {extras = ["lxml", "ufo", "unicode", "woff"], version = "^4.38.0"} +jsonschema = "^4.17.0" +click = "^8.1.3" +pyyaml = "^6.0" + + +[tool.poetry.group.dev.dependencies] +mypy = "^0.991" +autopep8 = "^2.0.0" + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" diff --git a/src/assets/config.schema.yaml b/src/assets/config.schema.yaml new file mode 100644 index 0000000..db6401b --- /dev/null +++ b/src/assets/config.schema.yaml @@ -0,0 +1,77 @@ +$schema: https://json-schema.org/draft/2020-12/schema +$id: https://github.com/cupcakearmy/glyphance +title: Config +type: object +additionalProperties: false +properties: + fonts: + $ref: "#/$defs/fonts" + output: + $ref: "#/$defs/output" + context: + type: string + +$defs: + fonts: + type: object + additionalProperties: false + patternProperties: + "^[a-zA-z \\-_]+$": + $ref: "#/$defs/font" + + font: + type: array + items: + $ref: "#/$defs/font-variation" + + css: + # https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face#descriptors + type: object + additionalProperties: false + patternProperties: + ? "^ascent-override|descent-override|font-display|font-family|font-stretch|font-style|font-weight|font-feature-settings|font-variation-settings|line-gap-override|size-adjust|src|unicode-range$" + : type: string + + font-variation: + type: object + additionalProperties: false + requiredProperties: + - file + properties: + file: + type: string + variable: + type: boolean + css: + $ref: "#/$defs/css" + range: + type: string + patter: ^U\+[\da-zA-z]{4}(-[\da-zA-z]{4})?$ + + output: + type: object + additionalProperties: false + properties: + dir: + type: string + prefix: + type: string + css: + $ref: "#/$defs/css" + clean: + type: boolean + formats: + type: array + items: + type: string + enum: + - woff2 + - woff + ranges: + type: object + additionalProperties: false + patternProperties: + "^[a-zA-z \\-_]+$": + type: array + items: + $ref: "#/$defs/range" diff --git a/src/assets/css.template b/src/assets/css.template new file mode 100644 index 0000000..802e263 --- /dev/null +++ b/src/assets/css.template @@ -0,0 +1,7 @@ +/* $range */ +@font-face { + font-family: '$font'; + src: $src; + unicode-range: $unicodes; + $additional +} diff --git a/src/assets/ranges.json b/src/assets/ranges.json new file mode 100644 index 0000000..4712243 --- /dev/null +++ b/src/assets/ranges.json @@ -0,0 +1 @@ +{" cyrillic-ext": ["U+0460-052F", "U+1C80-1C88", "U+20B4", "U+2DE0-2DFF", "U+A640-A69F", "U+FE2E-FE2F"], " cyrillic": ["U+0301", "U+0400-045F", "U+0490-0491", "U+04B0-04B1", "U+2116"], " greek-ext": ["U+1F00-1FFF"], " greek": ["U+0370-03FF"], " vietnamese": ["U+0102-0103", "U+0110-0111", "U+0128-0129", "U+0168-0169", "U+01A0-01A1", "U+01AF-01B0", "U+1EA0-1EF9", "U+20AB"], " latin-ext": ["U+0100-024F", "U+0259", "U+1E00-1EFF", "U+2020", "U+20A0-20AB", "U+20AD-20CF", "U+2113", "U+2C60-2C7F", "U+A720-A7FF"], " latin": ["U+0000-00FF", "U+0131", "U+0152-0153", "U+02BB-02BC", "U+02C6", "U+02DA", "U+02DC", "U+2000-206F", "U+2074", "U+20AC", "U+2122", "U+2191", "U+2193", "U+2212", "U+2215", "U+FEFF", "U+FFFD"]} \ No newline at end of file diff --git a/src/cmd_optimise.py b/src/cmd_optimise.py new file mode 100644 index 0000000..439134f --- /dev/null +++ b/src/cmd_optimise.py @@ -0,0 +1,77 @@ +import copy +import hashlib +import json +import os +import shutil +import string +import subprocess + +import utils + +with open(utils.asset_path('ranges.json')) as f: + default_ranges = json.load(f) + +default_variation = { + 'variable': False, + 'css': {} +} + + +def optimise(config): + # Check if destination is fine + destination = os.path.abspath(config['output']['dir']) + try: + if not os.path.isdir(destination): + os.makedirs(destination, exist_ok=True) + if not os.access(destination, os.W_OK): + raise Exception() + except: + print(f'Output directory not writable: "{destination}"') + exit(1) + + # Clean + if config['output']['clean']: + print(f'Cleaning: "{destination}"') + shutil.rmtree(destination) + os.makedirs(destination) + + # Go over each font and variation of it. + # Then go over every range and format and generate the subset + # Finally add the relevant CSS + + css = '' + with open(utils.asset_path('css.template')) as f: + template = string.Template(f.read()) + for font, variations in config['fonts'].items(): + css += f'\n\n/* {font} */\n' + for variation in variations: + variation = utils.update_deep(default_variation, variation) + print(f"Processing: {font} {os.path.basename(variation['file'])}") + source = os.path.join(config['context'], variation['file']) + for format in config['output']['formats']: + for range, codes in default_ranges.items(): + unicodes = ', '.join(codes) + + # Create unique key on all parameters + key = font+variation['file']+format+unicodes + key = hashlib.sha1(key.encode()).hexdigest() + + # Generate subset + output_file = os.path.join(destination, f'{key}.{format}') + print(f" {range}@{format} -> {output_file}") + command = f'pyftsubset --unicodes="{unicodes}" --layout-features="*" --flavor="{format}" --output-file="{output_file}" {source}' + subprocess.call(command, shell=True) + + # Generate CSS + ending = format + if variation['variable']: + ending += '-variations' + + src = f"url({config['output']['prefix']}{os.path.basename(output_file)}) format('{ending}')" + merged = utils.update_deep(config['output']['css'], variation['css']) + additional = '\n '.join([f"{key}: {value};" for key, value in merged.items()]) + css += template.substitute(range=range, font=font, src=src, + unicodes=unicodes, additional=additional) + + with open(os.path.join(destination, 'fonts.css'), 'w') as f: + f.write(css.strip()) diff --git a/src/config.py b/src/config.py new file mode 100644 index 0000000..43dc218 --- /dev/null +++ b/src/config.py @@ -0,0 +1,48 @@ +import os + +import jsonschema +import yaml + +import flags +import utils + +default_config = { + 'output': { + 'dir': 'generated', + 'formats': ['woff2'], + 'prefix': '/', + 'css': { + 'font-display': 'swap', + 'font-style': 'normal', + 'font-weight': '400', + }, + 'clean': False, + }, + "context": ".", +} + + +def validate(config): + schema_file = utils.asset_path('config.schema.yaml') + with open(schema_file, 'r') as f: + schema = yaml.safe_load(f) + return jsonschema.validate(config, schema) + + +def load(path): + # Load config + path = os.path.abspath(path) + with open(path, 'r') as f: + config = yaml.safe_load(f) + + # Setting dynamic defaults + default_config['context'] = os.path.dirname(path) + if flags.OUTPUT_DIRECTORY != None: + default_config['output']['dir'] = flags.OUTPUT_DIRECTORY + if flags.CLEAN != None: + default_config['output']['clean'] = flags.CLEAN + if flags.PREFIX != None: + default_config['output']['prefix'] = flags.PREFIX + + # Merge defaults + return utils.update_deep(default_config, config) diff --git a/src/flags.py b/src/flags.py new file mode 100644 index 0000000..3e540b3 --- /dev/null +++ b/src/flags.py @@ -0,0 +1,4 @@ +VERBOSE = False +OUTPUT_DIRECTORY = None +CLEAN = None +PREFIX = None diff --git a/src/gen_ranges.py b/src/gen_ranges.py new file mode 100644 index 0000000..97e21aa --- /dev/null +++ b/src/gen_ranges.py @@ -0,0 +1,26 @@ +import json +import os + +import requests + +output = './src/json/ranges.json' + + +guide = requests.get('https://fonts.googleapis.com/css2?family=Roboto&display=swap', + headers={'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:107.0) Gecko/20100101 Firefox/107.0'}) + +block_height = 9 +lines = guide.text.strip().split('\n') +ranges = {} +for i in range(len(lines)//9): + offset = i * block_height + variation = lines[offset: offset+block_height] + name = variation[0][2:-3] + codes = variation[7].replace('unicode-range:', '').replace(';', '').split(',') + codes = [code.strip() for code in codes] + ranges[name] = codes + +output = os.path.abspath(output) +os.makedirs(os.path.dirname(output), exist_ok=True) +with open('./src/json/ranges.json', 'w') as f: + json.dump(ranges, f) diff --git a/src/main.py b/src/main.py new file mode 100644 index 0000000..df3d99a --- /dev/null +++ b/src/main.py @@ -0,0 +1,32 @@ + +import click + +import cmd_optimise +import flags +from config import load, validate + + +@click.command() +@click.version_option("0.1.0") +@click.option('-v', '--verbose', is_flag=True, default=False, help="Run in verbose mode.") +@click.option('-c', '--config', type=click.Path(), required=True, help="Path to the config file.") +@click.option('-o', '--output-directory', type=click.Path(), help="Path to the output directory.") +@click.option('--clean', is_flag=True, help="Clean the output directory before generating.") +@click.option('--prefix', help="Prefix for the generated css font URLs.") +def cli(verbose, config, output_directory, clean, prefix): + # Flags + flags.VERBOSE = verbose + if flags.VERBOSE: + click.echo("Running in verbose mode.") + flags.OUTPUT_DIRECTORY = output_directory + flags.CLEAN = clean + flags.PREFIX = prefix + + # Run + c = load(config) + validate(c) + cmd_optimise.optimise(c) + + +if __name__ == '__main__': + cli(auto_envvar_prefix="GLYPHANCE") diff --git a/src/utils.py b/src/utils.py new file mode 100644 index 0000000..4b25872 --- /dev/null +++ b/src/utils.py @@ -0,0 +1,23 @@ +import collections.abc +import copy +import os + + +def update_deep(d, u, first=True): + """ + Deep update + https://stackoverflow.com/a/3233356/2425183 + """ + if first: + d = copy.deepcopy(d) + u = copy.deepcopy(u) + for k, v in u.items(): + if isinstance(v, collections.abc.Mapping): + d[k] = update_deep(d.get(k, {}), v, False) + else: + d[k] = v + return d + + +def asset_path(name: str) -> str: + return os.path.join(os.path.dirname(__file__), 'assets', name)