Initial Commit
This commit is contained in:
commit
de2d228143
2
.gitattributes
vendored
Normal file
2
.gitattributes
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
# Auto detect text files and perform LF normalization
|
||||
* text=auto
|
18
.gitignore
vendored
Normal file
18
.gitignore
vendored
Normal file
|
@ -0,0 +1,18 @@
|
|||
# Generated by Cargo
|
||||
# will have compiled files and executables
|
||||
debug/
|
||||
target/
|
||||
|
||||
# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries
|
||||
# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html
|
||||
Cargo.lock
|
||||
|
||||
# These are backup files generated by rustfmt
|
||||
**/*.rs.bk
|
||||
|
||||
# MSVC Windows builds of rustc generate these, which store debugging information
|
||||
*.pdb
|
||||
|
||||
|
||||
# Docs build
|
||||
/docs/.cache/
|
13
Cargo.toml
Normal file
13
Cargo.toml
Normal file
|
@ -0,0 +1,13 @@
|
|||
[package]
|
||||
name = "comline"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
anyhow = "1.0.71"
|
||||
once_cell = "1.17.1"
|
||||
pest = "2.6.0"
|
||||
pest_derive = "2.6.0"
|
||||
rmp = "0.8.11"
|
21
LICENSE
Normal file
21
LICENSE
Normal file
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2023 NewWars
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
4
docs/README.md
Normal file
4
docs/README.md
Normal file
|
@ -0,0 +1,4 @@
|
|||
# Docs
|
||||
|
||||
|
||||
## Resource Links
|
9
docs/docs/codegen/index.md
Normal file
9
docs/docs/codegen/index.md
Normal file
|
@ -0,0 +1,9 @@
|
|||
## Motivations
|
||||
|
||||
Comparing to other libraries:
|
||||
as for example in contrast compared with Protobuf's gRPC codegen
|
||||
implementations for some languages that might lack more concrete details,
|
||||
they mildly specify Message typing, but do not provide enough Service
|
||||
typing information to help IDE tools in showing or optionally enforcing
|
||||
through abstraction interfaces (if the language has them)
|
||||
|
11
docs/docs/idl/docstrings.md
Normal file
11
docs/docs/idl/docstrings.md
Normal file
|
@ -0,0 +1,11 @@
|
|||
# Documentation String
|
||||
|
||||
// TODO: Think about this, it was a quick thought about docstrings
|
||||
// that able showed about commands on minecraft
|
||||
// https://discord.com/channels/273534239310479360/273539705595756544/1116664750294716427
|
||||
```cpp
|
||||
/// Send a message to someone
|
||||
/// @message: Message to send
|
||||
/// !returns: If the message was send with success
|
||||
fn send_message(message: Message) -> bool
|
||||
```
|
10
docs/docs/idl/enum.md
Normal file
10
docs/docs/idl/enum.md
Normal file
|
@ -0,0 +1,10 @@
|
|||
# Enum
|
||||
|
||||
``` py linenums="1"
|
||||
enum Deliver {
|
||||
To
|
||||
Reply
|
||||
Forward
|
||||
}
|
||||
```
|
||||
|
13
docs/docs/idl/index.md
Normal file
13
docs/docs/idl/index.md
Normal file
|
@ -0,0 +1,13 @@
|
|||
# Summary
|
||||
IDL (stands for Interface Description Language) which
|
||||
can also be called a schema format, is used to define properties
|
||||
like settings, structures, enumerations, errors, protocols, etc...
|
||||
|
||||
|
||||
|
||||
## Icons and Emojs
|
||||
:smile:
|
||||
:fontawesome-regular-face-laugh-wink:
|
||||
:fontawesome-brands-twitter:{ .twitter }
|
||||
:octicons-heart-fill-24:{ .heart }
|
||||
|
8
docs/docs/idl/protocol.md
Normal file
8
docs/docs/idl/protocol.md
Normal file
|
@ -0,0 +1,8 @@
|
|||
# Protocol
|
||||
|
||||
``` py linenums="1"
|
||||
protocol Mail {
|
||||
fn send_message() ->
|
||||
}
|
||||
```
|
||||
|
25
docs/docs/idl/settings.md
Normal file
25
docs/docs/idl/settings.md
Normal file
|
@ -0,0 +1,25 @@
|
|||
# Settings
|
||||
``` py linenums="1"
|
||||
setting {
|
||||
index-all=True # Make structures, enums, errors protocols indexing explicit by default
|
||||
index-structs=True # Make structures indexing explicit by default
|
||||
index-enums=True # Make enums indexing explicit by default
|
||||
index-errors=True # Make errors indexing explicit by default
|
||||
index-protocols=True # Make protocols indexing explicit by default
|
||||
|
||||
forbid-default-index-all=False # Forbid indexing explicit for any component by default
|
||||
forbid-default-index-structs=False # Forbid indexing explicit for structs by default
|
||||
forbid-default-index-enums=False # Forbid indexing explicit for enums by default
|
||||
forbid-default-index-errors=False # Forbid indexing explicit for errors by default
|
||||
forbid-default-index-protocols=False # Forbid indexing explicit for protocols by default
|
||||
|
||||
forbid-index-all=False # Forbid indexing entirely for any component by default
|
||||
forbid-index-structs=False # Forbid indexing entirely for structs by default
|
||||
forbid-index-enums=False # Forbid indexing entirely for enums by default
|
||||
forbid-index-errors=False # Forbid indexing entirely for errors by default
|
||||
forbid-index-protocols=False # Forbid indexing entirely for protocols by default
|
||||
}
|
||||
```
|
||||
Values for each **parameter** above are the **default** value, which you
|
||||
can change to affect the whole schema
|
||||
|
21
docs/docs/idl/structure.md
Normal file
21
docs/docs/idl/structure.md
Normal file
|
@ -0,0 +1,21 @@
|
|||
# Structure
|
||||
A **structure** (also called **struct** or **message**) defines
|
||||
the properties of the data carried and set on their **fields**,
|
||||
for each field, they also have properties of their own like **index**,
|
||||
**type** and **default** value
|
||||
|
||||
``` py linenums="1"
|
||||
struct Message {
|
||||
1# sender: str = "Bee"
|
||||
2# deliver: Deliver = Deliver::To
|
||||
3# recipient: str = "Flower"
|
||||
}
|
||||
```
|
||||
|
||||
## Field
|
||||
A field has a index, a **name** (also called **id**), a **type**, and
|
||||
optionally a **default** value
|
||||
```py linenums="1"
|
||||
1# optional sender: str = "Bee"
|
||||
```
|
||||
|
45
docs/docs/index.md
Normal file
45
docs/docs/index.md
Normal file
|
@ -0,0 +1,45 @@
|
|||
# Welcome to Comline
|
||||
Comline is an agnostic schema, RPC/IPC (or any other similar terminologies)
|
||||
library, similar to ones like:
|
||||
|
||||
- [Protobuf](https://protobuf.dev/), [Capn'Proto](https://capnproto.org/), [Fuchsia IDL (FIDL)](https://fuchsia.dev/fuchsia-src/get-started/sdk/learn/fidl)
|
||||
- [Apache Avro](https://avro.apache.org/), [Apache Thrift](https://thrift.apache.org/docs/idl)
|
||||
|
||||
|
||||
## What constitutes Comline?
|
||||
|
||||
### [Interface Definition Language (IDL or also named Schema)](./idl/index.md)
|
||||
Some of the distinct differences to other libraries is that this
|
||||
[IDL/Schema](./idl/index.md) allows to be more flexible, optional or robust,
|
||||
detailed and specific when setting options, rules, message structures,
|
||||
protocols (named services in protobuf, interfaces in capn'proto) and so on...
|
||||
|
||||
|
||||
### [Intermediate Representation (IR)](./ir/index.md)
|
||||
Schemas compile into an Intermiate Representation that solidifies the structure as a sort of "mini-spec",
|
||||
which then can output to other formats like a rpc schema such as
|
||||
[OpenRPC](https://open-rpc.org/), a custom text format, or better a binary
|
||||
compact format like [msgpack](https://msgpack.org/) which is ideal to reduce wire load
|
||||
|
||||
|
||||
### [Call System (CaSy)](./casy/index.md)
|
||||
Yet another one is that the call system can be provided and the library is able
|
||||
to do the intended routing, so specs like [json-rpc](https://www.jsonrpc.org/)
|
||||
can be used, or a custom format that is binary compact like msgpack, or any
|
||||
custom call format that you may need to use or implement
|
||||
|
||||
Even another one is that the message serialization can be specified so that
|
||||
you can use any data format, from JSON to even other schema library's formats,
|
||||
or once again binary minimalist formats like msgpack
|
||||
(might sound repetitive, but it's just a good format for many cases)
|
||||
|
||||
|
||||
### [Code Generation (Codegen)](./codegen/index.md)
|
||||
Codegen is a common feature that similar libraries have, however
|
||||
some of them lack details at development time and might make the experience
|
||||
more indicated towards "try-it-out" and not provide so much detail,
|
||||
|
||||
Comline tries to provide more language specific generation that fits as best,
|
||||
detailed and information specific to them as possible, be it for compiled
|
||||
or dynamic languages, it's believed to be important to have as much information
|
||||
detail as possible at development type.
|
3
docs/docs/ir/index.md
Normal file
3
docs/docs/ir/index.md
Normal file
|
@ -0,0 +1,3 @@
|
|||
# Summary
|
||||
|
||||
|
5
docs/docs/planning.md
Normal file
5
docs/docs/planning.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
# Project planning
|
||||
|
||||
A very good contextually conversation of thoughts and improvement changes:
|
||||
|
||||
[Discord](https://discord.com/channels/273534239310479360/273539705595756544/1106395278325583965)
|
47
docs/docs/planning/generation.md
Normal file
47
docs/docs/planning/generation.md
Normal file
|
@ -0,0 +1,47 @@
|
|||
# Generation Proposals
|
||||
|
||||
##
|
||||
|
||||
## Proposals for Schema into IR into Codegen
|
||||
From the following schema:
|
||||
=== "IDL"
|
||||
```cpp
|
||||
struct Message {
|
||||
receiver: string
|
||||
}
|
||||
```
|
||||
|
||||
#### Generation for Compiled Languages
|
||||
Generates the respective code for the languages:
|
||||
|
||||
=== "Rust"
|
||||
```rs
|
||||
trait Message {
|
||||
fn receiver() -> String;
|
||||
fn subject() -> String;
|
||||
fn message() -> String;
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
#### Generation for Dynamic Languages
|
||||
Generates the respective code for the languages:
|
||||
|
||||
=== "Python"
|
||||
|
||||
```py
|
||||
class Message(Protocol):
|
||||
receiver: string
|
||||
subject: string
|
||||
message: string
|
||||
```
|
||||
|
||||
=== "TypeScript"
|
||||
|
||||
```ts
|
||||
interface Message {
|
||||
receiver: string
|
||||
subject: string
|
||||
message: string
|
||||
}
|
||||
```
|
21
docs/docs/planning/index.md
Normal file
21
docs/docs/planning/index.md
Normal file
|
@ -0,0 +1,21 @@
|
|||
# Planning and Proposals
|
||||
|
||||
|
||||
!!! example
|
||||
|
||||
=== "Unordered List"
|
||||
|
||||
``` markdown
|
||||
* Sed sagittis eleifend rutrum
|
||||
* Donec vitae suscipit est
|
||||
* Nulla tempor lobortis orci
|
||||
```
|
||||
|
||||
=== "Ordered List"
|
||||
|
||||
``` markdown
|
||||
1. Sed sagittis eleifend rutrum
|
||||
2. Donec vitae suscipit est
|
||||
3. Nulla tempor lobortis orci
|
||||
```
|
||||
|
2
docs/docs/planning/syntax.md
Normal file
2
docs/docs/planning/syntax.md
Normal file
|
@ -0,0 +1,2 @@
|
|||
# Syntax Proposals
|
||||
|
10
docs/docs/planning/syntax/proposal #1.md
Normal file
10
docs/docs/planning/syntax/proposal #1.md
Normal file
|
@ -0,0 +1,10 @@
|
|||
# Syntax Proposal #1
|
||||
|
||||
|
||||
```cpp
|
||||
|
||||
```
|
||||
|
||||
|
||||
## Compilation into IR
|
||||
On
|
92
docs/mkdocs.yml
Normal file
92
docs/mkdocs.yml
Normal file
|
@ -0,0 +1,92 @@
|
|||
site_name: Comline
|
||||
|
||||
nav:
|
||||
- Home: 'index.md'
|
||||
- Project Planing: 'planning.md'
|
||||
- 'IDL (Interface Description Language)':
|
||||
- 'idl/index.md'
|
||||
- Settings: 'idl/settings.md'
|
||||
- Structure: 'idl/structure.md'
|
||||
- Enum: 'idl/enum.md'
|
||||
- Protocol: 'idl/protocol.md'
|
||||
- Docstrings: "idl/docstrings.md"
|
||||
- 'IR (Intermediate Representation)':
|
||||
- 'ir/index.md'
|
||||
|
||||
|
||||
theme:
|
||||
name: material
|
||||
features:
|
||||
- navigation.tabs
|
||||
- navigation.sections
|
||||
- toc.integrate
|
||||
- navigation.top
|
||||
- search.suggest
|
||||
- search.highlight
|
||||
- content.tabs.link
|
||||
- content.code.annotation
|
||||
- content.code.copy
|
||||
language: en
|
||||
palette:
|
||||
- scheme: default
|
||||
toggle:
|
||||
icon: material/weather-night
|
||||
name: Switch to dark mode
|
||||
primary: teal
|
||||
accent: purple
|
||||
|
||||
- scheme: slate
|
||||
toggle:
|
||||
icon: material/weather-sunny
|
||||
name: Switch to light mode
|
||||
primary: teal
|
||||
accent: lime
|
||||
|
||||
|
||||
# TODO: The social plugin is disabled due to not Cairo lib not being available on Nix
|
||||
#plugins:
|
||||
# - social
|
||||
|
||||
#extra:
|
||||
# social:
|
||||
# - icon: fontawesome/brands/github-alt
|
||||
# link: https://github.com/james-willett
|
||||
# - icon: fontawesome/brands/twitter
|
||||
# link: https://twitter.com/TheJamesWillett
|
||||
# - icon: fontawesome/brands/linkedin
|
||||
# link: https://www.linkedin.com/in/willettjames/
|
||||
|
||||
version:
|
||||
provider: mike
|
||||
default: stable
|
||||
|
||||
markdown_extensions:
|
||||
- pymdownx.highlight:
|
||||
anchor_linenums: true
|
||||
|
||||
- pymdownx.inlinehilite
|
||||
- pymdownx.snippets
|
||||
- admonition
|
||||
|
||||
- pymdownx.arithmatex:
|
||||
generic: true
|
||||
|
||||
- pymdownx.tabbed:
|
||||
alternate_style: true
|
||||
slugify: !!python/object/apply:pymdownx.slugs.slugify
|
||||
kwds:
|
||||
case: lower
|
||||
|
||||
- footnotes
|
||||
- pymdownx.details
|
||||
- pymdownx.superfences
|
||||
- pymdownx.mark
|
||||
- attr_list
|
||||
|
||||
- pymdownx.emoji:
|
||||
emoji_index: !!python/name:materialx.emoji.twemoji
|
||||
emoji_generator: !!python/name:materialx.emoji.to_svg
|
||||
|
||||
|
||||
copyright: |
|
||||
© 2023 <a href="https://git.ablecorp.us/DOOME1M8Cover/comline-rs" target="_blank" rel="noopener">comline-rs</a>
|
758
docs/poetry.lock
generated
Normal file
758
docs/poetry.lock
generated
Normal file
|
@ -0,0 +1,758 @@
|
|||
# This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand.
|
||||
|
||||
[[package]]
|
||||
name = "certifi"
|
||||
version = "2023.5.7"
|
||||
description = "Python package for providing Mozilla's CA Bundle."
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.6"
|
||||
files = [
|
||||
{file = "certifi-2023.5.7-py3-none-any.whl", hash = "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716"},
|
||||
{file = "certifi-2023.5.7.tar.gz", hash = "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "charset-normalizer"
|
||||
version = "3.1.0"
|
||||
description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet."
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.7.0"
|
||||
files = [
|
||||
{file = "charset-normalizer-3.1.0.tar.gz", hash = "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5"},
|
||||
{file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b"},
|
||||
{file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60"},
|
||||
{file = "charset_normalizer-3.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1"},
|
||||
{file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0"},
|
||||
{file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f"},
|
||||
{file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0"},
|
||||
{file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795"},
|
||||
{file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c"},
|
||||
{file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203"},
|
||||
{file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1"},
|
||||
{file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137"},
|
||||
{file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce"},
|
||||
{file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a"},
|
||||
{file = "charset_normalizer-3.1.0-cp310-cp310-win32.whl", hash = "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448"},
|
||||
{file = "charset_normalizer-3.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8"},
|
||||
{file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19"},
|
||||
{file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017"},
|
||||
{file = "charset_normalizer-3.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df"},
|
||||
{file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a"},
|
||||
{file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41"},
|
||||
{file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1"},
|
||||
{file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62"},
|
||||
{file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6"},
|
||||
{file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5"},
|
||||
{file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be"},
|
||||
{file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb"},
|
||||
{file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac"},
|
||||
{file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324"},
|
||||
{file = "charset_normalizer-3.1.0-cp311-cp311-win32.whl", hash = "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909"},
|
||||
{file = "charset_normalizer-3.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755"},
|
||||
{file = "charset_normalizer-3.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373"},
|
||||
{file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab"},
|
||||
{file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9"},
|
||||
{file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f"},
|
||||
{file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28"},
|
||||
{file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d"},
|
||||
{file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d"},
|
||||
{file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d"},
|
||||
{file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6"},
|
||||
{file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84"},
|
||||
{file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c"},
|
||||
{file = "charset_normalizer-3.1.0-cp37-cp37m-win32.whl", hash = "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974"},
|
||||
{file = "charset_normalizer-3.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23"},
|
||||
{file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531"},
|
||||
{file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c"},
|
||||
{file = "charset_normalizer-3.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14"},
|
||||
{file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb"},
|
||||
{file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1"},
|
||||
{file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b"},
|
||||
{file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0"},
|
||||
{file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649"},
|
||||
{file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326"},
|
||||
{file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11"},
|
||||
{file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b"},
|
||||
{file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd"},
|
||||
{file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8"},
|
||||
{file = "charset_normalizer-3.1.0-cp38-cp38-win32.whl", hash = "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0"},
|
||||
{file = "charset_normalizer-3.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59"},
|
||||
{file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e"},
|
||||
{file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31"},
|
||||
{file = "charset_normalizer-3.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f"},
|
||||
{file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e"},
|
||||
{file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f"},
|
||||
{file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854"},
|
||||
{file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706"},
|
||||
{file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e"},
|
||||
{file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0"},
|
||||
{file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230"},
|
||||
{file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7"},
|
||||
{file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e"},
|
||||
{file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f"},
|
||||
{file = "charset_normalizer-3.1.0-cp39-cp39-win32.whl", hash = "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1"},
|
||||
{file = "charset_normalizer-3.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b"},
|
||||
{file = "charset_normalizer-3.1.0-py3-none-any.whl", hash = "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "click"
|
||||
version = "8.1.3"
|
||||
description = "Composable command line interface toolkit"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
files = [
|
||||
{file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"},
|
||||
{file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"},
|
||||
]
|
||||
|
||||
[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"
|
||||
files = [
|
||||
{file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
|
||||
{file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ghp-import"
|
||||
version = "2.1.0"
|
||||
description = "Copy your docs directly to the gh-pages branch."
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
files = [
|
||||
{file = "ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343"},
|
||||
{file = "ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
python-dateutil = ">=2.8.1"
|
||||
|
||||
[package.extras]
|
||||
dev = ["flake8", "markdown", "twine", "wheel"]
|
||||
|
||||
[[package]]
|
||||
name = "idna"
|
||||
version = "3.4"
|
||||
description = "Internationalized Domain Names in Applications (IDNA)"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.5"
|
||||
files = [
|
||||
{file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"},
|
||||
{file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "jinja2"
|
||||
version = "3.1.2"
|
||||
description = "A very fast and expressive template engine."
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
files = [
|
||||
{file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"},
|
||||
{file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
MarkupSafe = ">=2.0"
|
||||
|
||||
[package.extras]
|
||||
i18n = ["Babel (>=2.7)"]
|
||||
|
||||
[[package]]
|
||||
name = "markdown"
|
||||
version = "3.3.7"
|
||||
description = "Python implementation of Markdown."
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.6"
|
||||
files = [
|
||||
{file = "Markdown-3.3.7-py3-none-any.whl", hash = "sha256:f5da449a6e1c989a4cea2631aa8ee67caa5a2ef855d551c88f9e309f4634c621"},
|
||||
{file = "Markdown-3.3.7.tar.gz", hash = "sha256:cbb516f16218e643d8e0a95b309f77eb118cb138d39a4f27851e6a63581db874"},
|
||||
]
|
||||
|
||||
[package.extras]
|
||||
testing = ["coverage", "pyyaml"]
|
||||
|
||||
[[package]]
|
||||
name = "markupsafe"
|
||||
version = "2.1.3"
|
||||
description = "Safely add untrusted strings to HTML/XML markup."
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
files = [
|
||||
{file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"},
|
||||
{file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"},
|
||||
{file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"},
|
||||
{file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"},
|
||||
{file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"},
|
||||
{file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"},
|
||||
{file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"},
|
||||
{file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"},
|
||||
{file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"},
|
||||
{file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"},
|
||||
{file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"},
|
||||
{file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"},
|
||||
{file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"},
|
||||
{file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"},
|
||||
{file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"},
|
||||
{file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"},
|
||||
{file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"},
|
||||
{file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"},
|
||||
{file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"},
|
||||
{file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"},
|
||||
{file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"},
|
||||
{file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"},
|
||||
{file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"},
|
||||
{file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"},
|
||||
{file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"},
|
||||
{file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"},
|
||||
{file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"},
|
||||
{file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"},
|
||||
{file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"},
|
||||
{file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"},
|
||||
{file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"},
|
||||
{file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"},
|
||||
{file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"},
|
||||
{file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"},
|
||||
{file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"},
|
||||
{file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"},
|
||||
{file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"},
|
||||
{file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"},
|
||||
{file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"},
|
||||
{file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"},
|
||||
{file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"},
|
||||
{file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"},
|
||||
{file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"},
|
||||
{file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"},
|
||||
{file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"},
|
||||
{file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"},
|
||||
{file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"},
|
||||
{file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"},
|
||||
{file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"},
|
||||
{file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "mergedeep"
|
||||
version = "1.3.4"
|
||||
description = "A deep merge function for 🐍."
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.6"
|
||||
files = [
|
||||
{file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"},
|
||||
{file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "mike"
|
||||
version = "1.1.2"
|
||||
description = "Manage multiple versions of your MkDocs-powered documentation"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
files = [
|
||||
{file = "mike-1.1.2-py3-none-any.whl", hash = "sha256:4c307c28769834d78df10f834f57f810f04ca27d248f80a75f49c6fa2d1527ca"},
|
||||
{file = "mike-1.1.2.tar.gz", hash = "sha256:56c3f1794c2d0b5fdccfa9b9487beb013ca813de2e3ad0744724e9d34d40b77b"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
jinja2 = "*"
|
||||
mkdocs = ">=1.0"
|
||||
pyyaml = ">=5.1"
|
||||
verspec = "*"
|
||||
|
||||
[package.extras]
|
||||
dev = ["coverage", "flake8 (>=3.0)", "shtab"]
|
||||
test = ["coverage", "flake8 (>=3.0)", "shtab"]
|
||||
|
||||
[[package]]
|
||||
name = "mkdocs"
|
||||
version = "1.4.3"
|
||||
description = "Project documentation with Markdown."
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
files = [
|
||||
{file = "mkdocs-1.4.3-py3-none-any.whl", hash = "sha256:6ee46d309bda331aac915cd24aab882c179a933bd9e77b80ce7d2eaaa3f689dd"},
|
||||
{file = "mkdocs-1.4.3.tar.gz", hash = "sha256:5955093bbd4dd2e9403c5afaf57324ad8b04f16886512a3ee6ef828956481c57"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
click = ">=7.0"
|
||||
colorama = {version = ">=0.4", markers = "platform_system == \"Windows\""}
|
||||
ghp-import = ">=1.0"
|
||||
jinja2 = ">=2.11.1"
|
||||
markdown = ">=3.2.1,<3.4"
|
||||
mergedeep = ">=1.3.4"
|
||||
packaging = ">=20.5"
|
||||
pyyaml = ">=5.1"
|
||||
pyyaml-env-tag = ">=0.1"
|
||||
watchdog = ">=2.0"
|
||||
|
||||
[package.extras]
|
||||
i18n = ["babel (>=2.9.0)"]
|
||||
min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.3)", "jinja2 (==2.11.1)", "markdown (==3.2.1)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "packaging (==20.5)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "typing-extensions (==3.10)", "watchdog (==2.0)"]
|
||||
|
||||
[[package]]
|
||||
name = "mkdocs-material"
|
||||
version = "9.1.15"
|
||||
description = "Documentation that simply works"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
files = [
|
||||
{file = "mkdocs_material-9.1.15-py3-none-any.whl", hash = "sha256:b49e12869ab464558e2dd3c5792da5b748a7e0c48ee83b4d05715f98125a7a39"},
|
||||
{file = "mkdocs_material-9.1.15.tar.gz", hash = "sha256:8513ab847c9a541ed3d11a3a7eed556caf72991ee786c31c5aac6691a121088a"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
colorama = ">=0.4"
|
||||
jinja2 = ">=3.0"
|
||||
markdown = ">=3.2"
|
||||
mkdocs = ">=1.4.2"
|
||||
mkdocs-material-extensions = ">=1.1"
|
||||
pygments = ">=2.14"
|
||||
pymdown-extensions = ">=9.9.1"
|
||||
regex = ">=2022.4.24"
|
||||
requests = ">=2.26"
|
||||
|
||||
[[package]]
|
||||
name = "mkdocs-material-extensions"
|
||||
version = "1.1.1"
|
||||
description = "Extension pack for Python Markdown and MkDocs Material."
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
files = [
|
||||
{file = "mkdocs_material_extensions-1.1.1-py3-none-any.whl", hash = "sha256:e41d9f38e4798b6617ad98ca8f7f1157b1e4385ac1459ca1e4ea219b556df945"},
|
||||
{file = "mkdocs_material_extensions-1.1.1.tar.gz", hash = "sha256:9c003da71e2cc2493d910237448c672e00cefc800d3d6ae93d2fc69979e3bd93"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "packaging"
|
||||
version = "23.1"
|
||||
description = "Core utilities for Python packages"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
files = [
|
||||
{file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"},
|
||||
{file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pillow"
|
||||
version = "9.5.0"
|
||||
description = "Python Imaging Library (Fork)"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
files = [
|
||||
{file = "Pillow-9.5.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:ace6ca218308447b9077c14ea4ef381ba0b67ee78d64046b3f19cf4e1139ad16"},
|
||||
{file = "Pillow-9.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d3d403753c9d5adc04d4694d35cf0391f0f3d57c8e0030aac09d7678fa8030aa"},
|
||||
{file = "Pillow-9.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ba1b81ee69573fe7124881762bb4cd2e4b6ed9dd28c9c60a632902fe8db8b38"},
|
||||
{file = "Pillow-9.5.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe7e1c262d3392afcf5071df9afa574544f28eac825284596ac6db56e6d11062"},
|
||||
{file = "Pillow-9.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f36397bf3f7d7c6a3abdea815ecf6fd14e7fcd4418ab24bae01008d8d8ca15e"},
|
||||
{file = "Pillow-9.5.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:252a03f1bdddce077eff2354c3861bf437c892fb1832f75ce813ee94347aa9b5"},
|
||||
{file = "Pillow-9.5.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:85ec677246533e27770b0de5cf0f9d6e4ec0c212a1f89dfc941b64b21226009d"},
|
||||
{file = "Pillow-9.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b416f03d37d27290cb93597335a2f85ed446731200705b22bb927405320de903"},
|
||||
{file = "Pillow-9.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1781a624c229cb35a2ac31cc4a77e28cafc8900733a864870c49bfeedacd106a"},
|
||||
{file = "Pillow-9.5.0-cp310-cp310-win32.whl", hash = "sha256:8507eda3cd0608a1f94f58c64817e83ec12fa93a9436938b191b80d9e4c0fc44"},
|
||||
{file = "Pillow-9.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:d3c6b54e304c60c4181da1c9dadf83e4a54fd266a99c70ba646a9baa626819eb"},
|
||||
{file = "Pillow-9.5.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:7ec6f6ce99dab90b52da21cf0dc519e21095e332ff3b399a357c187b1a5eee32"},
|
||||
{file = "Pillow-9.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:560737e70cb9c6255d6dcba3de6578a9e2ec4b573659943a5e7e4af13f298f5c"},
|
||||
{file = "Pillow-9.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96e88745a55b88a7c64fa49bceff363a1a27d9a64e04019c2281049444a571e3"},
|
||||
{file = "Pillow-9.5.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d9c206c29b46cfd343ea7cdfe1232443072bbb270d6a46f59c259460db76779a"},
|
||||
{file = "Pillow-9.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cfcc2c53c06f2ccb8976fb5c71d448bdd0a07d26d8e07e321c103416444c7ad1"},
|
||||
{file = "Pillow-9.5.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:a0f9bb6c80e6efcde93ffc51256d5cfb2155ff8f78292f074f60f9e70b942d99"},
|
||||
{file = "Pillow-9.5.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:8d935f924bbab8f0a9a28404422da8af4904e36d5c33fc6f677e4c4485515625"},
|
||||
{file = "Pillow-9.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fed1e1cf6a42577953abbe8e6cf2fe2f566daebde7c34724ec8803c4c0cda579"},
|
||||
{file = "Pillow-9.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c1170d6b195555644f0616fd6ed929dfcf6333b8675fcca044ae5ab110ded296"},
|
||||
{file = "Pillow-9.5.0-cp311-cp311-win32.whl", hash = "sha256:54f7102ad31a3de5666827526e248c3530b3a33539dbda27c6843d19d72644ec"},
|
||||
{file = "Pillow-9.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:cfa4561277f677ecf651e2b22dc43e8f5368b74a25a8f7d1d4a3a243e573f2d4"},
|
||||
{file = "Pillow-9.5.0-cp311-cp311-win_arm64.whl", hash = "sha256:965e4a05ef364e7b973dd17fc765f42233415974d773e82144c9bbaaaea5d089"},
|
||||
{file = "Pillow-9.5.0-cp312-cp312-win32.whl", hash = "sha256:22baf0c3cf0c7f26e82d6e1adf118027afb325e703922c8dfc1d5d0156bb2eeb"},
|
||||
{file = "Pillow-9.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:432b975c009cf649420615388561c0ce7cc31ce9b2e374db659ee4f7d57a1f8b"},
|
||||
{file = "Pillow-9.5.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:5d4ebf8e1db4441a55c509c4baa7a0587a0210f7cd25fcfe74dbbce7a4bd1906"},
|
||||
{file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:375f6e5ee9620a271acb6820b3d1e94ffa8e741c0601db4c0c4d3cb0a9c224bf"},
|
||||
{file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:99eb6cafb6ba90e436684e08dad8be1637efb71c4f2180ee6b8f940739406e78"},
|
||||
{file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dfaaf10b6172697b9bceb9a3bd7b951819d1ca339a5ef294d1f1ac6d7f63270"},
|
||||
{file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:763782b2e03e45e2c77d7779875f4432e25121ef002a41829d8868700d119392"},
|
||||
{file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:35f6e77122a0c0762268216315bf239cf52b88865bba522999dc38f1c52b9b47"},
|
||||
{file = "Pillow-9.5.0-cp37-cp37m-win32.whl", hash = "sha256:aca1c196f407ec7cf04dcbb15d19a43c507a81f7ffc45b690899d6a76ac9fda7"},
|
||||
{file = "Pillow-9.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322724c0032af6692456cd6ed554bb85f8149214d97398bb80613b04e33769f6"},
|
||||
{file = "Pillow-9.5.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:a0aa9417994d91301056f3d0038af1199eb7adc86e646a36b9e050b06f526597"},
|
||||
{file = "Pillow-9.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f8286396b351785801a976b1e85ea88e937712ee2c3ac653710a4a57a8da5d9c"},
|
||||
{file = "Pillow-9.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c830a02caeb789633863b466b9de10c015bded434deb3ec87c768e53752ad22a"},
|
||||
{file = "Pillow-9.5.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fbd359831c1657d69bb81f0db962905ee05e5e9451913b18b831febfe0519082"},
|
||||
{file = "Pillow-9.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8fc330c3370a81bbf3f88557097d1ea26cd8b019d6433aa59f71195f5ddebbf"},
|
||||
{file = "Pillow-9.5.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:7002d0797a3e4193c7cdee3198d7c14f92c0836d6b4a3f3046a64bd1ce8df2bf"},
|
||||
{file = "Pillow-9.5.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:229e2c79c00e85989a34b5981a2b67aa079fd08c903f0aaead522a1d68d79e51"},
|
||||
{file = "Pillow-9.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9adf58f5d64e474bed00d69bcd86ec4bcaa4123bfa70a65ce72e424bfb88ed96"},
|
||||
{file = "Pillow-9.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:662da1f3f89a302cc22faa9f14a262c2e3951f9dbc9617609a47521c69dd9f8f"},
|
||||
{file = "Pillow-9.5.0-cp38-cp38-win32.whl", hash = "sha256:6608ff3bf781eee0cd14d0901a2b9cc3d3834516532e3bd673a0a204dc8615fc"},
|
||||
{file = "Pillow-9.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:e49eb4e95ff6fd7c0c402508894b1ef0e01b99a44320ba7d8ecbabefddcc5569"},
|
||||
{file = "Pillow-9.5.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:482877592e927fd263028c105b36272398e3e1be3269efda09f6ba21fd83ec66"},
|
||||
{file = "Pillow-9.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3ded42b9ad70e5f1754fb7c2e2d6465a9c842e41d178f262e08b8c85ed8a1d8e"},
|
||||
{file = "Pillow-9.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c446d2245ba29820d405315083d55299a796695d747efceb5717a8b450324115"},
|
||||
{file = "Pillow-9.5.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8aca1152d93dcc27dc55395604dcfc55bed5f25ef4c98716a928bacba90d33a3"},
|
||||
{file = "Pillow-9.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:608488bdcbdb4ba7837461442b90ea6f3079397ddc968c31265c1e056964f1ef"},
|
||||
{file = "Pillow-9.5.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:60037a8db8750e474af7ffc9faa9b5859e6c6d0a50e55c45576bf28be7419705"},
|
||||
{file = "Pillow-9.5.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:07999f5834bdc404c442146942a2ecadd1cb6292f5229f4ed3b31e0a108746b1"},
|
||||
{file = "Pillow-9.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a127ae76092974abfbfa38ca2d12cbeddcdeac0fb71f9627cc1135bedaf9d51a"},
|
||||
{file = "Pillow-9.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:489f8389261e5ed43ac8ff7b453162af39c3e8abd730af8363587ba64bb2e865"},
|
||||
{file = "Pillow-9.5.0-cp39-cp39-win32.whl", hash = "sha256:9b1af95c3a967bf1da94f253e56b6286b50af23392a886720f563c547e48e964"},
|
||||
{file = "Pillow-9.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:77165c4a5e7d5a284f10a6efaa39a0ae8ba839da344f20b111d62cc932fa4e5d"},
|
||||
{file = "Pillow-9.5.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:833b86a98e0ede388fa29363159c9b1a294b0905b5128baf01db683672f230f5"},
|
||||
{file = "Pillow-9.5.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aaf305d6d40bd9632198c766fb64f0c1a83ca5b667f16c1e79e1661ab5060140"},
|
||||
{file = "Pillow-9.5.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0852ddb76d85f127c135b6dd1f0bb88dbb9ee990d2cd9aa9e28526c93e794fba"},
|
||||
{file = "Pillow-9.5.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:91ec6fe47b5eb5a9968c79ad9ed78c342b1f97a091677ba0e012701add857829"},
|
||||
{file = "Pillow-9.5.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:cb841572862f629b99725ebaec3287fc6d275be9b14443ea746c1dd325053cbd"},
|
||||
{file = "Pillow-9.5.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:c380b27d041209b849ed246b111b7c166ba36d7933ec6e41175fd15ab9eb1572"},
|
||||
{file = "Pillow-9.5.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c9af5a3b406a50e313467e3565fc99929717f780164fe6fbb7704edba0cebbe"},
|
||||
{file = "Pillow-9.5.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5671583eab84af046a397d6d0ba25343c00cd50bce03787948e0fff01d4fd9b1"},
|
||||
{file = "Pillow-9.5.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:84a6f19ce086c1bf894644b43cd129702f781ba5751ca8572f08aa40ef0ab7b7"},
|
||||
{file = "Pillow-9.5.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1e7723bd90ef94eda669a3c2c19d549874dd5badaeefabefd26053304abe5799"},
|
||||
{file = "Pillow-9.5.0.tar.gz", hash = "sha256:bf548479d336726d7a0eceb6e767e179fbde37833ae42794602631a070d630f1"},
|
||||
]
|
||||
|
||||
[package.extras]
|
||||
docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"]
|
||||
tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"]
|
||||
|
||||
[[package]]
|
||||
name = "pygments"
|
||||
version = "2.15.1"
|
||||
description = "Pygments is a syntax highlighting package written in Python."
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
files = [
|
||||
{file = "Pygments-2.15.1-py3-none-any.whl", hash = "sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1"},
|
||||
{file = "Pygments-2.15.1.tar.gz", hash = "sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c"},
|
||||
]
|
||||
|
||||
[package.extras]
|
||||
plugins = ["importlib-metadata"]
|
||||
|
||||
[[package]]
|
||||
name = "pymdown-extensions"
|
||||
version = "10.0.1"
|
||||
description = "Extension pack for Python Markdown."
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
files = [
|
||||
{file = "pymdown_extensions-10.0.1-py3-none-any.whl", hash = "sha256:ae66d84013c5d027ce055693e09a4628b67e9dec5bce05727e45b0918e36f274"},
|
||||
{file = "pymdown_extensions-10.0.1.tar.gz", hash = "sha256:b44e1093a43b8a975eae17b03c3a77aad4681b3b56fce60ce746dbef1944c8cb"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
markdown = ">=3.2"
|
||||
pyyaml = "*"
|
||||
|
||||
[[package]]
|
||||
name = "python-dateutil"
|
||||
version = "2.8.2"
|
||||
description = "Extensions to the standard Python datetime module"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
|
||||
files = [
|
||||
{file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"},
|
||||
{file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
six = ">=1.5"
|
||||
|
||||
[[package]]
|
||||
name = "pyyaml"
|
||||
version = "6.0"
|
||||
description = "YAML parser and emitter for Python"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.6"
|
||||
files = [
|
||||
{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"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pyyaml-env-tag"
|
||||
version = "0.1"
|
||||
description = "A custom YAML tag for referencing environment variables in YAML files. "
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.6"
|
||||
files = [
|
||||
{file = "pyyaml_env_tag-0.1-py3-none-any.whl", hash = "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069"},
|
||||
{file = "pyyaml_env_tag-0.1.tar.gz", hash = "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
pyyaml = "*"
|
||||
|
||||
[[package]]
|
||||
name = "regex"
|
||||
version = "2023.6.3"
|
||||
description = "Alternative regular expression module, to replace re."
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.6"
|
||||
files = [
|
||||
{file = "regex-2023.6.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:824bf3ac11001849aec3fa1d69abcb67aac3e150a933963fb12bda5151fe1bfd"},
|
||||
{file = "regex-2023.6.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:05ed27acdf4465c95826962528f9e8d41dbf9b1aa8531a387dee6ed215a3e9ef"},
|
||||
{file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b49c764f88a79160fa64f9a7b425620e87c9f46095ef9c9920542ab2495c8bc"},
|
||||
{file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8e3f1316c2293e5469f8f09dc2d76efb6c3982d3da91ba95061a7e69489a14ef"},
|
||||
{file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:43e1dd9d12df9004246bacb79a0e5886b3b6071b32e41f83b0acbf293f820ee8"},
|
||||
{file = "regex-2023.6.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4959e8bcbfda5146477d21c3a8ad81b185cd252f3d0d6e4724a5ef11c012fb06"},
|
||||
{file = "regex-2023.6.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:af4dd387354dc83a3bff67127a124c21116feb0d2ef536805c454721c5d7993d"},
|
||||
{file = "regex-2023.6.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2239d95d8e243658b8dbb36b12bd10c33ad6e6933a54d36ff053713f129aa536"},
|
||||
{file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:890e5a11c97cf0d0c550eb661b937a1e45431ffa79803b942a057c4fb12a2da2"},
|
||||
{file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a8105e9af3b029f243ab11ad47c19b566482c150c754e4c717900a798806b222"},
|
||||
{file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:25be746a8ec7bc7b082783216de8e9473803706723b3f6bef34b3d0ed03d57e2"},
|
||||
{file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:3676f1dd082be28b1266c93f618ee07741b704ab7b68501a173ce7d8d0d0ca18"},
|
||||
{file = "regex-2023.6.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:10cb847aeb1728412c666ab2e2000ba6f174f25b2bdc7292e7dd71b16db07568"},
|
||||
{file = "regex-2023.6.3-cp310-cp310-win32.whl", hash = "sha256:dbbbfce33cd98f97f6bffb17801b0576e653f4fdb1d399b2ea89638bc8d08ae1"},
|
||||
{file = "regex-2023.6.3-cp310-cp310-win_amd64.whl", hash = "sha256:c5f8037000eb21e4823aa485149f2299eb589f8d1fe4b448036d230c3f4e68e0"},
|
||||
{file = "regex-2023.6.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c123f662be8ec5ab4ea72ea300359023a5d1df095b7ead76fedcd8babbedf969"},
|
||||
{file = "regex-2023.6.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9edcbad1f8a407e450fbac88d89e04e0b99a08473f666a3f3de0fd292badb6aa"},
|
||||
{file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcba6dae7de533c876255317c11f3abe4907ba7d9aa15d13e3d9710d4315ec0e"},
|
||||
{file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29cdd471ebf9e0f2fb3cac165efedc3c58db841d83a518b082077e612d3ee5df"},
|
||||
{file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:12b74fbbf6cbbf9dbce20eb9b5879469e97aeeaa874145517563cca4029db65c"},
|
||||
{file = "regex-2023.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c29ca1bd61b16b67be247be87390ef1d1ef702800f91fbd1991f5c4421ebae8"},
|
||||
{file = "regex-2023.6.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d77f09bc4b55d4bf7cc5eba785d87001d6757b7c9eec237fe2af57aba1a071d9"},
|
||||
{file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ea353ecb6ab5f7e7d2f4372b1e779796ebd7b37352d290096978fea83c4dba0c"},
|
||||
{file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:10590510780b7541969287512d1b43f19f965c2ece6c9b1c00fc367b29d8dce7"},
|
||||
{file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e2fbd6236aae3b7f9d514312cdb58e6494ee1c76a9948adde6eba33eb1c4264f"},
|
||||
{file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:6b2675068c8b56f6bfd5a2bda55b8accbb96c02fd563704732fd1c95e2083461"},
|
||||
{file = "regex-2023.6.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74419d2b50ecb98360cfaa2974da8689cb3b45b9deff0dcf489c0d333bcc1477"},
|
||||
{file = "regex-2023.6.3-cp311-cp311-win32.whl", hash = "sha256:fb5ec16523dc573a4b277663a2b5a364e2099902d3944c9419a40ebd56a118f9"},
|
||||
{file = "regex-2023.6.3-cp311-cp311-win_amd64.whl", hash = "sha256:09e4a1a6acc39294a36b7338819b10baceb227f7f7dbbea0506d419b5a1dd8af"},
|
||||
{file = "regex-2023.6.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:0654bca0cdf28a5956c83839162692725159f4cda8d63e0911a2c0dc76166525"},
|
||||
{file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:463b6a3ceb5ca952e66550a4532cef94c9a0c80dc156c4cc343041951aec1697"},
|
||||
{file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87b2a5bb5e78ee0ad1de71c664d6eb536dc3947a46a69182a90f4410f5e3f7dd"},
|
||||
{file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6343c6928282c1f6a9db41f5fd551662310e8774c0e5ebccb767002fcf663ca9"},
|
||||
{file = "regex-2023.6.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6192d5af2ccd2a38877bfef086d35e6659566a335b1492786ff254c168b1693"},
|
||||
{file = "regex-2023.6.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:74390d18c75054947e4194019077e243c06fbb62e541d8817a0fa822ea310c14"},
|
||||
{file = "regex-2023.6.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:742e19a90d9bb2f4a6cf2862b8b06dea5e09b96c9f2df1779e53432d7275331f"},
|
||||
{file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:8abbc5d54ea0ee80e37fef009e3cec5dafd722ed3c829126253d3e22f3846f1e"},
|
||||
{file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:c2b867c17a7a7ae44c43ebbeb1b5ff406b3e8d5b3e14662683e5e66e6cc868d3"},
|
||||
{file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:d831c2f8ff278179705ca59f7e8524069c1a989e716a1874d6d1aab6119d91d1"},
|
||||
{file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:ee2d1a9a253b1729bb2de27d41f696ae893507c7db224436abe83ee25356f5c1"},
|
||||
{file = "regex-2023.6.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:61474f0b41fe1a80e8dfa70f70ea1e047387b7cd01c85ec88fa44f5d7561d787"},
|
||||
{file = "regex-2023.6.3-cp36-cp36m-win32.whl", hash = "sha256:0b71e63226e393b534105fcbdd8740410dc6b0854c2bfa39bbda6b0d40e59a54"},
|
||||
{file = "regex-2023.6.3-cp36-cp36m-win_amd64.whl", hash = "sha256:bbb02fd4462f37060122e5acacec78e49c0fbb303c30dd49c7f493cf21fc5b27"},
|
||||
{file = "regex-2023.6.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b862c2b9d5ae38a68b92e215b93f98d4c5e9454fa36aae4450f61dd33ff48487"},
|
||||
{file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:976d7a304b59ede34ca2921305b57356694f9e6879db323fd90a80f865d355a3"},
|
||||
{file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:83320a09188e0e6c39088355d423aa9d056ad57a0b6c6381b300ec1a04ec3d16"},
|
||||
{file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9427a399501818a7564f8c90eced1e9e20709ece36be701f394ada99890ea4b3"},
|
||||
{file = "regex-2023.6.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7178bbc1b2ec40eaca599d13c092079bf529679bf0371c602edaa555e10b41c3"},
|
||||
{file = "regex-2023.6.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:837328d14cde912af625d5f303ec29f7e28cdab588674897baafaf505341f2fc"},
|
||||
{file = "regex-2023.6.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2d44dc13229905ae96dd2ae2dd7cebf824ee92bc52e8cf03dcead37d926da019"},
|
||||
{file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d54af539295392611e7efbe94e827311eb8b29668e2b3f4cadcfe6f46df9c777"},
|
||||
{file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:7117d10690c38a622e54c432dfbbd3cbd92f09401d622902c32f6d377e2300ee"},
|
||||
{file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bb60b503ec8a6e4e3e03a681072fa3a5adcbfa5479fa2d898ae2b4a8e24c4591"},
|
||||
{file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:65ba8603753cec91c71de423a943ba506363b0e5c3fdb913ef8f9caa14b2c7e0"},
|
||||
{file = "regex-2023.6.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:271f0bdba3c70b58e6f500b205d10a36fb4b58bd06ac61381b68de66442efddb"},
|
||||
{file = "regex-2023.6.3-cp37-cp37m-win32.whl", hash = "sha256:9beb322958aaca059f34975b0df135181f2e5d7a13b84d3e0e45434749cb20f7"},
|
||||
{file = "regex-2023.6.3-cp37-cp37m-win_amd64.whl", hash = "sha256:fea75c3710d4f31389eed3c02f62d0b66a9da282521075061ce875eb5300cf23"},
|
||||
{file = "regex-2023.6.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8f56fcb7ff7bf7404becdfc60b1e81a6d0561807051fd2f1860b0d0348156a07"},
|
||||
{file = "regex-2023.6.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d2da3abc88711bce7557412310dfa50327d5769a31d1c894b58eb256459dc289"},
|
||||
{file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a99b50300df5add73d307cf66abea093304a07eb017bce94f01e795090dea87c"},
|
||||
{file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5708089ed5b40a7b2dc561e0c8baa9535b77771b64a8330b684823cfd5116036"},
|
||||
{file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:687ea9d78a4b1cf82f8479cab23678aff723108df3edeac098e5b2498879f4a7"},
|
||||
{file = "regex-2023.6.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d3850beab9f527f06ccc94b446c864059c57651b3f911fddb8d9d3ec1d1b25d"},
|
||||
{file = "regex-2023.6.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8915cc96abeb8983cea1df3c939e3c6e1ac778340c17732eb63bb96247b91d2"},
|
||||
{file = "regex-2023.6.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:841d6e0e5663d4c7b4c8099c9997be748677d46cbf43f9f471150e560791f7ff"},
|
||||
{file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9edce5281f965cf135e19840f4d93d55b3835122aa76ccacfd389e880ba4cf82"},
|
||||
{file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b956231ebdc45f5b7a2e1f90f66a12be9610ce775fe1b1d50414aac1e9206c06"},
|
||||
{file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:36efeba71c6539d23c4643be88295ce8c82c88bbd7c65e8a24081d2ca123da3f"},
|
||||
{file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:cf67ca618b4fd34aee78740bea954d7c69fdda419eb208c2c0c7060bb822d747"},
|
||||
{file = "regex-2023.6.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b4598b1897837067a57b08147a68ac026c1e73b31ef6e36deeeb1fa60b2933c9"},
|
||||
{file = "regex-2023.6.3-cp38-cp38-win32.whl", hash = "sha256:f415f802fbcafed5dcc694c13b1292f07fe0befdb94aa8a52905bd115ff41e88"},
|
||||
{file = "regex-2023.6.3-cp38-cp38-win_amd64.whl", hash = "sha256:d4f03bb71d482f979bda92e1427f3ec9b220e62a7dd337af0aa6b47bf4498f72"},
|
||||
{file = "regex-2023.6.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ccf91346b7bd20c790310c4147eee6ed495a54ddb6737162a36ce9dbef3e4751"},
|
||||
{file = "regex-2023.6.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b28f5024a3a041009eb4c333863d7894d191215b39576535c6734cd88b0fcb68"},
|
||||
{file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0bb18053dfcfed432cc3ac632b5e5e5c5b7e55fb3f8090e867bfd9b054dbcbf"},
|
||||
{file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a5bfb3004f2144a084a16ce19ca56b8ac46e6fd0651f54269fc9e230edb5e4a"},
|
||||
{file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c6b48d0fa50d8f4df3daf451be7f9689c2bde1a52b1225c5926e3f54b6a9ed1"},
|
||||
{file = "regex-2023.6.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:051da80e6eeb6e239e394ae60704d2b566aa6a7aed6f2890a7967307267a5dc6"},
|
||||
{file = "regex-2023.6.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4c3b7fa4cdaa69268748665a1a6ff70c014d39bb69c50fda64b396c9116cf77"},
|
||||
{file = "regex-2023.6.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:457b6cce21bee41ac292d6753d5e94dcbc5c9e3e3a834da285b0bde7aa4a11e9"},
|
||||
{file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:aad51907d74fc183033ad796dd4c2e080d1adcc4fd3c0fd4fd499f30c03011cd"},
|
||||
{file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:0385e73da22363778ef2324950e08b689abdf0b108a7d8decb403ad7f5191938"},
|
||||
{file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:c6a57b742133830eec44d9b2290daf5cbe0a2f1d6acee1b3c7b1c7b2f3606df7"},
|
||||
{file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:3e5219bf9e75993d73ab3d25985c857c77e614525fac9ae02b1bebd92f7cecac"},
|
||||
{file = "regex-2023.6.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e5087a3c59eef624a4591ef9eaa6e9a8d8a94c779dade95d27c0bc24650261cd"},
|
||||
{file = "regex-2023.6.3-cp39-cp39-win32.whl", hash = "sha256:20326216cc2afe69b6e98528160b225d72f85ab080cbdf0b11528cbbaba2248f"},
|
||||
{file = "regex-2023.6.3-cp39-cp39-win_amd64.whl", hash = "sha256:bdff5eab10e59cf26bc479f565e25ed71a7d041d1ded04ccf9aee1d9f208487a"},
|
||||
{file = "regex-2023.6.3.tar.gz", hash = "sha256:72d1a25bf36d2050ceb35b517afe13864865268dfb45910e2e17a84be6cbfeb0"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "requests"
|
||||
version = "2.31.0"
|
||||
description = "Python HTTP for Humans."
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
files = [
|
||||
{file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"},
|
||||
{file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
certifi = ">=2017.4.17"
|
||||
charset-normalizer = ">=2,<4"
|
||||
idna = ">=2.5,<4"
|
||||
urllib3 = ">=1.21.1,<3"
|
||||
|
||||
[package.extras]
|
||||
socks = ["PySocks (>=1.5.6,!=1.5.7)"]
|
||||
use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"]
|
||||
|
||||
[[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.*"
|
||||
files = [
|
||||
{file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
|
||||
{file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "urllib3"
|
||||
version = "2.0.3"
|
||||
description = "HTTP library with thread-safe connection pooling, file post, and more."
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
files = [
|
||||
{file = "urllib3-2.0.3-py3-none-any.whl", hash = "sha256:48e7fafa40319d358848e1bc6809b208340fafe2096f1725d05d67443d0483d1"},
|
||||
{file = "urllib3-2.0.3.tar.gz", hash = "sha256:bee28b5e56addb8226c96f7f13ac28cb4c301dd5ea8a6ca179c0b9835e032825"},
|
||||
]
|
||||
|
||||
[package.extras]
|
||||
brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"]
|
||||
secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"]
|
||||
socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"]
|
||||
zstd = ["zstandard (>=0.18.0)"]
|
||||
|
||||
[[package]]
|
||||
name = "verspec"
|
||||
version = "0.1.0"
|
||||
description = "Flexible version handling"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
files = [
|
||||
{file = "verspec-0.1.0-py3-none-any.whl", hash = "sha256:741877d5633cc9464c45a469ae2a31e801e6dbbaa85b9675d481cda100f11c31"},
|
||||
{file = "verspec-0.1.0.tar.gz", hash = "sha256:c4504ca697b2056cdb4bfa7121461f5a0e81809255b41c03dda4ba823637c01e"},
|
||||
]
|
||||
|
||||
[package.extras]
|
||||
test = ["coverage", "flake8 (>=3.7)", "mypy", "pretend", "pytest"]
|
||||
|
||||
[[package]]
|
||||
name = "watchdog"
|
||||
version = "3.0.0"
|
||||
description = "Filesystem events monitoring"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
files = [
|
||||
{file = "watchdog-3.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:336adfc6f5cc4e037d52db31194f7581ff744b67382eb6021c868322e32eef41"},
|
||||
{file = "watchdog-3.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a70a8dcde91be523c35b2bf96196edc5730edb347e374c7de7cd20c43ed95397"},
|
||||
{file = "watchdog-3.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:adfdeab2da79ea2f76f87eb42a3ab1966a5313e5a69a0213a3cc06ef692b0e96"},
|
||||
{file = "watchdog-3.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2b57a1e730af3156d13b7fdddfc23dea6487fceca29fc75c5a868beed29177ae"},
|
||||
{file = "watchdog-3.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7ade88d0d778b1b222adebcc0927428f883db07017618a5e684fd03b83342bd9"},
|
||||
{file = "watchdog-3.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7e447d172af52ad204d19982739aa2346245cc5ba6f579d16dac4bfec226d2e7"},
|
||||
{file = "watchdog-3.0.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:9fac43a7466eb73e64a9940ac9ed6369baa39b3bf221ae23493a9ec4d0022674"},
|
||||
{file = "watchdog-3.0.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8ae9cda41fa114e28faf86cb137d751a17ffd0316d1c34ccf2235e8a84365c7f"},
|
||||
{file = "watchdog-3.0.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:25f70b4aa53bd743729c7475d7ec41093a580528b100e9a8c5b5efe8899592fc"},
|
||||
{file = "watchdog-3.0.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4f94069eb16657d2c6faada4624c39464f65c05606af50bb7902e036e3219be3"},
|
||||
{file = "watchdog-3.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7c5f84b5194c24dd573fa6472685b2a27cc5a17fe5f7b6fd40345378ca6812e3"},
|
||||
{file = "watchdog-3.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3aa7f6a12e831ddfe78cdd4f8996af9cf334fd6346531b16cec61c3b3c0d8da0"},
|
||||
{file = "watchdog-3.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:233b5817932685d39a7896b1090353fc8efc1ef99c9c054e46c8002561252fb8"},
|
||||
{file = "watchdog-3.0.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:13bbbb462ee42ec3c5723e1205be8ced776f05b100e4737518c67c8325cf6100"},
|
||||
{file = "watchdog-3.0.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8f3ceecd20d71067c7fd4c9e832d4e22584318983cabc013dbf3f70ea95de346"},
|
||||
{file = "watchdog-3.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c9d8c8ec7efb887333cf71e328e39cffbf771d8f8f95d308ea4125bf5f90ba64"},
|
||||
{file = "watchdog-3.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:0e06ab8858a76e1219e68c7573dfeba9dd1c0219476c5a44d5333b01d7e1743a"},
|
||||
{file = "watchdog-3.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:d00e6be486affb5781468457b21a6cbe848c33ef43f9ea4a73b4882e5f188a44"},
|
||||
{file = "watchdog-3.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:c07253088265c363d1ddf4b3cdb808d59a0468ecd017770ed716991620b8f77a"},
|
||||
{file = "watchdog-3.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:5113334cf8cf0ac8cd45e1f8309a603291b614191c9add34d33075727a967709"},
|
||||
{file = "watchdog-3.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:51f90f73b4697bac9c9a78394c3acbbd331ccd3655c11be1a15ae6fe289a8c83"},
|
||||
{file = "watchdog-3.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:ba07e92756c97e3aca0912b5cbc4e5ad802f4557212788e72a72a47ff376950d"},
|
||||
{file = "watchdog-3.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:d429c2430c93b7903914e4db9a966c7f2b068dd2ebdd2fa9b9ce094c7d459f33"},
|
||||
{file = "watchdog-3.0.0-py3-none-win32.whl", hash = "sha256:3ed7c71a9dccfe838c2f0b6314ed0d9b22e77d268c67e015450a29036a81f60f"},
|
||||
{file = "watchdog-3.0.0-py3-none-win_amd64.whl", hash = "sha256:4c9956d27be0bb08fc5f30d9d0179a855436e655f046d288e2bcc11adfae893c"},
|
||||
{file = "watchdog-3.0.0-py3-none-win_ia64.whl", hash = "sha256:5d9f3a10e02d7371cd929b5d8f11e87d4bad890212ed3901f9b4d68767bee759"},
|
||||
{file = "watchdog-3.0.0.tar.gz", hash = "sha256:4d98a320595da7a7c5a18fc48cb633c2e73cda78f93cac2ef42d42bf609a33f9"},
|
||||
]
|
||||
|
||||
[package.extras]
|
||||
watchmedo = ["PyYAML (>=3.10)"]
|
||||
|
||||
[metadata]
|
||||
lock-version = "2.0"
|
||||
python-versions = "^3.10"
|
||||
content-hash = "ce80fa802ddadce5c76b7078f8f7f882fec5dc4efa50143dd2cbb9142ed0674b"
|
21
docs/pyproject.toml
Normal file
21
docs/pyproject.toml
Normal file
|
@ -0,0 +1,21 @@
|
|||
[tool.poetry]
|
||||
name = "comline-docs"
|
||||
version = "0.1.0"
|
||||
description = ""
|
||||
authors = ["DOOME1M8"]
|
||||
readme = "README.md"
|
||||
# packages = [{include = "comline_docs"}]
|
||||
|
||||
[tool.poetry.dependencies]
|
||||
python = "^3.10"
|
||||
mkdocs = "^1.4.3"
|
||||
mkdocs-material = "^9.1.11"
|
||||
pillow = "^9.5.0"
|
||||
# cairosvg = "^2.7.0"
|
||||
mike = "^1.1.2"
|
||||
|
||||
|
||||
|
||||
[build-system]
|
||||
requires = ["poetry-core"]
|
||||
build-backend = "poetry.core.masonry.api"
|
47
examples/dev.cls
Normal file
47
examples/dev.cls
Normal file
|
@ -0,0 +1,47 @@
|
|||
tag @?
|
||||
namespace examples.full
|
||||
|
||||
// Standard Imports
|
||||
import std::str::StringBounds
|
||||
|
||||
settings {
|
||||
indexed-all=false
|
||||
allow-debugging=true
|
||||
}
|
||||
|
||||
settings MailSettings(struct, protocol) {
|
||||
indexed=true
|
||||
}
|
||||
|
||||
@settings=MailSettings
|
||||
struct Mail {
|
||||
1# sender: str
|
||||
2# recipient: str
|
||||
}
|
||||
|
||||
struct Article {
|
||||
@validators=[StringBounds(min_chars=3 max_chars=32]
|
||||
1# title: str
|
||||
|
||||
@validators=[StringBounds(min_chars=24 max_chars=412]
|
||||
2# content: str
|
||||
}
|
||||
|
||||
@hidden
|
||||
@settings=MailSettings
|
||||
protocol Mail {
|
||||
1# async function send(Mail)
|
||||
}
|
||||
|
||||
|
||||
// Maximum amount of articles that a provider can send
|
||||
const SENT_ARTICLES_MAX: u8 = 10
|
||||
|
||||
//#provider=Server // TODO: This is the original proposal, it would only dictate direction, below is the new proposal
|
||||
#provider=Multiple consumer=Multiple // TODO: These parameters need more situational introspection to be documented
|
||||
protocol Feed {
|
||||
// Fetches new articles since last fetch
|
||||
@flexible async stream
|
||||
#timeout=1000ms per_send_timeout=10s cooldown=10s
|
||||
1# function fetch_articles() -> Article[SENT_ARTICLES_MAX]
|
||||
}
|
70
examples/example.cls
Normal file
70
examples/example.cls
Normal file
|
@ -0,0 +1,70 @@
|
|||
// TODO: Think if the IDL should compile into a IR (Intermediate Representation)
|
||||
|
||||
// Identifier for this schema, every identifier should be unique, generated by the schema compiler
|
||||
// so its not necessary to do this manually
|
||||
tag 0563125512
|
||||
|
||||
// Namespacing for the package as per usual schemas do
|
||||
namespace examples.thing.basic
|
||||
|
||||
|
||||
settings {
|
||||
// This option makes so messages(consequentially structs) by default do not require to specify a succession index,
|
||||
// and so this makes that both caller and provider are required to communicate on the same schema version
|
||||
indexed_fields = false
|
||||
}
|
||||
|
||||
// Imports from standard library schema types or from other schemas
|
||||
|
||||
|
||||
// Constants are immutable values that exist permanently in schema types, useful for universal references
|
||||
const WORLD_COUNT u8 = 10
|
||||
|
||||
|
||||
// A basic message structure with versioning, the default is versioned unless specified so
|
||||
struct MessageVersioned {
|
||||
optional str world_name: 1
|
||||
str person_name: 2
|
||||
}
|
||||
|
||||
// A basic message structure without versioning
|
||||
struct Message versioned=False {
|
||||
str world_name
|
||||
}
|
||||
|
||||
|
||||
// Protocol definition that can be used for RPC, IPC or anything of the likes you can turn it into.
|
||||
// The »provider« setting means that this protocol should be served by a Server, or a Client, or both
|
||||
// its useful for limiting who can make cals to who.
|
||||
// You can still specify per function who calls who, the field is for default behavior
|
||||
protocol World provider=Server {
|
||||
// One-way call that only the client can do to the server, synchronous, no return
|
||||
// since its synchronous, the call will still be blocking on the caller until the provider is done processing it
|
||||
function hello()
|
||||
|
||||
// Similar to above, one-way, no return, but this time asynchronous so the caller won't wait, and the provider
|
||||
// won't send a signal to the caller saying that it is done
|
||||
async function hello_await()
|
||||
|
||||
// Two-way call, both client and server are providers and callers
|
||||
async client server function hello_both()
|
||||
|
||||
// One-way call, asynchronous, single return, since its asynchronous and a return is specified,
|
||||
// the caller has the option to await or to be blocking, since it doesn't impact the provider
|
||||
async function hello_back() -> str
|
||||
|
||||
// Two-way call, both client and server are providers and callers, and returns a value, similar as above
|
||||
async client server function hello_back_both() -> str
|
||||
|
||||
// Two-way call, both client and server are providers and callers, and returns a value, similar as above
|
||||
// difference being a timeout is specified, so if the call process time exceeds the time til return,
|
||||
// the caller will abort waiting for the response or return signal
|
||||
async client server function hello_back_both() -> str: timeout_ms=1000
|
||||
}
|
||||
|
||||
|
||||
// TODO: Think what »discoverable« should mean, just like Fuchsia IDL
|
||||
@discoverable
|
||||
protocol OpenWorld {
|
||||
}
|
||||
|
26
examples/greet.cls
Normal file
26
examples/greet.cls
Normal file
|
@ -0,0 +1,26 @@
|
|||
namespace example.test
|
||||
const SOMETHING: str = test
|
||||
|
||||
settings {
|
||||
// Make indexing default in parts desired
|
||||
indexed_schema=True // Everything indexed
|
||||
indexed_structures=True
|
||||
indexed_enums=True
|
||||
indexed_protocols=True
|
||||
|
||||
// Forbid indexing for in parts desired
|
||||
forbid_non_indexing=False
|
||||
forbid_struct_indexing=False
|
||||
forbid_enum_indexing=False
|
||||
forbid_protocol_indexing=False
|
||||
}
|
||||
|
||||
enum Motion {
|
||||
1# Wave
|
||||
2# Turn
|
||||
}
|
||||
|
||||
struct Greet {
|
||||
|
||||
}
|
||||
|
4
examples/imports/ant.cls
Normal file
4
examples/imports/ant.cls
Normal file
|
@ -0,0 +1,4 @@
|
|||
namespace examples.imports.ant
|
||||
|
||||
settings {
|
||||
}
|
1
examples/imports/food.cls
Normal file
1
examples/imports/food.cls
Normal file
|
@ -0,0 +1 @@
|
|||
namespace examples.imports.ant
|
15
examples/imports/hole.cls
Normal file
15
examples/imports/hole.cls
Normal file
|
@ -0,0 +1,15 @@
|
|||
namespace examples.imports.ant
|
||||
|
||||
// Imports whole schemas by name from a underlying namespace
|
||||
import examples::imports::{ant food}
|
||||
|
||||
// Or imports exactly the components you want like structures, enums and errors
|
||||
import examples::imports::ant {Ant, Mood, CantCarryError}
|
||||
import examples::imports::food {Food, State, NotEdibleError}
|
||||
|
||||
settings {
|
||||
}
|
||||
|
||||
protocol Gathering {
|
||||
|
||||
}
|
67
examples/simple.cls
Normal file
67
examples/simple.cls
Normal file
|
@ -0,0 +1,67 @@
|
|||
namespace examples.thing.simple
|
||||
|
||||
const AGREEMENT_KEY: string = "agreement_key"
|
||||
|
||||
|
||||
validator StringBounds min_chars=0 max_chars=1024 {
|
||||
assert_error(
|
||||
value.length > params.max_chars or value.length < params.min_chars,
|
||||
"String {value.name} must be more than {params.min_chars} and less than {params.max_chars}"
|
||||
)
|
||||
}
|
||||
|
||||
validator PasswordCheck min_chars=16 max_chars=60 {
|
||||
assert_validate(StringBounds(min_chars=params.min_chars max_chars=params.max_chars)
|
||||
}
|
||||
|
||||
@settings(versioned=False validate_fields=False)
|
||||
struct Credentials {
|
||||
@validators([StringBounds(min_chars=8 max_chars=16)])
|
||||
1# username: str = "test"
|
||||
|
||||
@validators=[PasswordCheck()]
|
||||
2# password: str
|
||||
}
|
||||
|
||||
struct CredentialsOther {
|
||||
#1 username: union (
|
||||
str [validators=[StringBounds(min_chars=8 max_chars=16]],
|
||||
null
|
||||
) = "test" | null
|
||||
|
||||
#2 password: str [validators=[PasswordCheck()]]
|
||||
}
|
||||
|
||||
enum RegisterStatus {
|
||||
Ok
|
||||
UsernameTaken
|
||||
}
|
||||
|
||||
error TellBackError back="Foo" {
|
||||
message = "Could not get the provider to tell \"{back}\" back"
|
||||
}
|
||||
|
||||
protocol Registry provider=Server {
|
||||
|
||||
@argument.0.username.validate=true
|
||||
#timeout_ms=100
|
||||
#cooldown_ms=200
|
||||
function register(Credentials) returns RegisterStatus
|
||||
|
||||
@return.0.validators=[StringBounds(min_chars=8)]
|
||||
function my_username() returns str
|
||||
|
||||
@return.0.validators=[StringBounds(min_chars=8)]
|
||||
function tell_back(str = "back") returns str throws TellBackError
|
||||
|
||||
}
|
||||
|
||||
struct TellBackResponse {
|
||||
|
||||
}
|
||||
|
||||
@
|
||||
protocol Events provider=Server {
|
||||
async function poke()
|
||||
}
|
||||
|
21
examples/simple_gen.rs
Normal file
21
examples/simple_gen.rs
Normal file
|
@ -0,0 +1,21 @@
|
|||
|
||||
|
||||
trait Registry {
|
||||
fn register(message: Credentials) -> RegisterStatus;
|
||||
fn my_username() -> String;
|
||||
fn tell_back(message: String) -> Result<String, TellBackError>;
|
||||
}
|
||||
|
||||
#[derive(ValidatorStringBounds<[u8; 8]>)]
|
||||
struct Credentials {
|
||||
|
||||
}
|
||||
|
||||
struct RegisterStatus {
|
||||
|
||||
}
|
||||
|
||||
struct TellBackError {
|
||||
|
||||
}
|
||||
|
1
src/codegen.rs
Normal file
1
src/codegen.rs
Normal file
|
@ -0,0 +1 @@
|
|||
mod rust;
|
75
src/codegen/rust.rs
Normal file
75
src/codegen/rust.rs
Normal file
|
@ -0,0 +1,75 @@
|
|||
// Standard Uses
|
||||
|
||||
// Local Uses
|
||||
use crate::ir::unit::{Protocol, Unit};
|
||||
|
||||
// External Uses
|
||||
|
||||
fn unit_to_code(unit: Unit) -> String {
|
||||
let mut code = String::new();
|
||||
|
||||
match unit {
|
||||
Unit::Items(_) => {}
|
||||
Unit::Tag(_) => {}
|
||||
Unit::Namespace(_) => {}
|
||||
Unit::Imports(_) => {}
|
||||
Unit::Settings(_) => {}
|
||||
Unit::Consts(_) => {}
|
||||
Unit::Structs(_) => {}
|
||||
Unit::Enums(_) => {}
|
||||
Unit::Errors(_) => {}
|
||||
Unit::Protocols(protocols) => {
|
||||
for protocol in protocols {
|
||||
code.push_str(&*protocol_to_code(protocol))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
code
|
||||
}
|
||||
fn protocol_to_code(protocol: Protocol) -> String {
|
||||
let mut code = String::new();
|
||||
|
||||
// Trait Start
|
||||
// TODO: Maybe only include async_trait if at least one of the functions need it
|
||||
code.push_str("#[async_trait]");
|
||||
code.push_str(&*format!("pub trait {} {{", protocol.id));
|
||||
|
||||
// Functions
|
||||
for function in protocol.functions {
|
||||
let mut fn_code = String::new();
|
||||
|
||||
// Async definition (with async_trait)
|
||||
if function.async_ {
|
||||
fn_code.push_str("async ");
|
||||
}
|
||||
|
||||
// Fn
|
||||
fn_code.push_str(&*format!("fn {} (", function.id));
|
||||
|
||||
// Arguments
|
||||
let mut idx = 0;
|
||||
while idx != function.arguments.len() {
|
||||
let argument = function.arguments.get(idx).unwrap();
|
||||
|
||||
if argument.id.is_none() {
|
||||
fn_code.push_str(&*format!("arg{}: {:?}", idx, argument.type_));
|
||||
if idx != function.arguments.len() { fn_code.push_str(", ") }
|
||||
} else {
|
||||
fn_code.push_str(&*format!("{}: {:?}", argument.id.clone().unwrap(), argument.type_));
|
||||
if idx != function.arguments.len() { fn_code.push_str(", ") }
|
||||
}
|
||||
|
||||
idx += 1;
|
||||
}
|
||||
|
||||
// Returns
|
||||
|
||||
code.push_str(&*fn_code)
|
||||
}
|
||||
|
||||
// Trait End
|
||||
code.push_str("}}");
|
||||
|
||||
code.to_owned()
|
||||
}
|
1
src/idl.rs
Normal file
1
src/idl.rs
Normal file
|
@ -0,0 +1 @@
|
|||
pub mod pest;
|
127
src/idl/idl.pest
Normal file
127
src/idl/idl.pest
Normal file
|
@ -0,0 +1,127 @@
|
|||
// IDL grammar
|
||||
schema = _{ namespace ~ (COMMENT | settings | constant | validator | enumeration | structure | error | protocol)* }
|
||||
|
||||
namespace = { "namespace" ~ WS ~ domain ~ WS }
|
||||
|
||||
constant = { "const" ~ WS ~ id ~ WS? ~ ":" ~ WS ~ kind ~ WS ~ ("=" ~ WS ~ value)? ~ WS? }
|
||||
|
||||
settings = {
|
||||
"settings" ~ WS? ~ id? ~ WS? ~
|
||||
"{" ~ WS? ~ parameter* ~ WS? ~"}"
|
||||
~ WS?
|
||||
}
|
||||
|
||||
enumeration = {
|
||||
"enum" ~ WS ~ id ~ WS? ~ parameter* ~ WS? ~
|
||||
"{" ~ WS? ~ enum_variant+ ~ WS? ~ "}"
|
||||
~ WS?
|
||||
}
|
||||
enum_variant = { digit+ ~ WS? ~ "#" ~ WS ~ id ~ WS? }
|
||||
|
||||
validator = {
|
||||
"validator" ~ WS ~ id ~ WS? ~ parameter* ~ WS? ~
|
||||
"{" ~ WS? ~ function_call* ~ WS? ~ "}"
|
||||
~ WS?
|
||||
}
|
||||
|
||||
// TODO: This is a temporary arragement of
|
||||
// possibly used chars in a expression,
|
||||
// a real comprehension needs to be done
|
||||
expression = {
|
||||
(operation ~ WS? ~ boolean_operator? ~ WS?)+
|
||||
}
|
||||
function_call = {
|
||||
id ~ WS? ~ "(" ~ WS? ~
|
||||
(","? ~ WS? ~ function_call_arg)*
|
||||
~ WS? ~ ")" ~ WS?
|
||||
}
|
||||
function_call_arg = {
|
||||
expression | string_interpolated
|
||||
}
|
||||
|
||||
string_interpolated = {
|
||||
"\"" ~
|
||||
(string | WS |
|
||||
("{" ~ domain ~ "}"))*
|
||||
~ "\""
|
||||
}
|
||||
string = @{ (alpha | digit | WS+)+ }
|
||||
|
||||
|
||||
entity = { digit+ | domain }
|
||||
operation = {
|
||||
(entity ~ WS? ~ operator ~ WS?
|
||||
~ (expression | entity)+)
|
||||
|
||||
}
|
||||
operator = {
|
||||
"==" | "!=" | "<" | ">" | "+" | "-" | "/" | "|"
|
||||
}
|
||||
boolean_operator = {
|
||||
"or" | "and"
|
||||
}
|
||||
|
||||
structure = {
|
||||
"struct" ~ WS ~ id ~ WS? ~ parameter* ~ WS? ~
|
||||
"{" ~ WS? ~ (constant | field)+ ~ WS? ~ "}"
|
||||
~ WS?
|
||||
}
|
||||
field = {
|
||||
(index ~ "#")? ~ (WS? ~ requirement)? ~
|
||||
WS? ~ id ~ WS? ~ ":" ~ WS? ~ kind ~
|
||||
(WS? ~ "=" ~ WS? ~ value)? ~ WS?
|
||||
}
|
||||
index = { digit }
|
||||
requirement = { "optional" }
|
||||
|
||||
error = {
|
||||
"error" ~ WS ~ id ~ WS? ~ parameter* ~ WS? ~
|
||||
"{" ~ WS? ~ (parameter | field)+ ~ WS? ~ "}" ~ WS?
|
||||
}
|
||||
|
||||
protocol = {
|
||||
"protocol" ~ WS ~ id ~ WS? ~ parameter* ~ WS? ~
|
||||
"{" ~ WS? ~ function+ ~ "}" ~ WS?
|
||||
}
|
||||
function = {
|
||||
(index ~ WS? ~ "#" ~ WS?)? ~
|
||||
(asynchronous ~ WS?)? ~
|
||||
(direction ~ WS?)? ~
|
||||
"function" ~ WS ~ id ~ WS? ~
|
||||
"(" ~ WS? ~ argument* ~ WS? ~ ")" ~ WS? ~
|
||||
("->" ~ WS? ~ returns+ ~ WS?)? ~
|
||||
(":" ~ WS? ~ parameter+ ~ WS?)? ~
|
||||
("!" ~ WS? ~ throw+ ~ WS?)? ~
|
||||
WS?
|
||||
}
|
||||
direction = { "client" | "server" }
|
||||
|
||||
asynchronous = { "async" }
|
||||
argument = {
|
||||
","? ~ WS? ~
|
||||
((id ~ WS? ~ ":" ~ WS? ~ kind) | kind)
|
||||
~ WS?
|
||||
}
|
||||
returns = { ","? ~ WS? ~ (kind) ~ WS? }
|
||||
parameter = {
|
||||
","? ~ WS? ~ id ~ WS? ~ "=" ~ WS? ~ value ~ WS?
|
||||
}
|
||||
throw = {
|
||||
","? ~ WS? ~ id ~ WS?
|
||||
}
|
||||
|
||||
domain = @{ (id | ".")+ }
|
||||
id = @{ (alpha | "_")+ }
|
||||
kind = @{ (alpha | digit)+ }
|
||||
|
||||
// Replace text with match anything inside " "
|
||||
value = { ("\"" ~ inner_string ~ "\"") | inner_namespaced }
|
||||
inner_string = @{ (alpha | digit | WS | "{" | "}" | ".")+ }
|
||||
inner_namespaced = @{ (alpha | digit | "::")+ }
|
||||
|
||||
alpha = { 'a'..'z' | 'A'..'Z' }
|
||||
digit = { '0'..'9' }
|
||||
|
||||
WS = _{ (" " | "\t" | "\n")+ }
|
||||
COMMENT = _{ "//" ~ (!NEWLINE ~ ANY)* ~ NEWLINE }
|
||||
// MULTILINE_COMMENT = _{ "/*" ~ (MULTILINE_COMMENT | !"*/" ~ ANY)* ~ "*/" }
|
270
src/idl/pest.rs
Normal file
270
src/idl/pest.rs
Normal file
|
@ -0,0 +1,270 @@
|
|||
// Standard Uses
|
||||
|
||||
// Local Uses
|
||||
use crate::ir::primitive;
|
||||
use crate::ir::primitive::TypeValue;
|
||||
use crate::ir::unit::{Argument, Const, Direction, Enum, EnumVariant, Error, Field, Function, Parameter, Protocol, Settings, Struct, Unit};
|
||||
|
||||
// External Uses
|
||||
use anyhow::Result;
|
||||
use pest::iterators::{Pair, Pairs};
|
||||
use pest::Parser;
|
||||
|
||||
|
||||
#[derive(Parser)]
|
||||
#[grammar = "idl/idl.pest"]
|
||||
pub struct IDLParser;
|
||||
|
||||
|
||||
pub fn parse_into_unit(raw: &str) -> Result<Unit> {
|
||||
let parse = IDLParser::parse(Rule::schema, raw)?;
|
||||
|
||||
let mut items: Vec<Unit> = vec![];
|
||||
|
||||
for record in parse.into_iter() {
|
||||
items.push(parse_inner(record).unwrap());
|
||||
}
|
||||
|
||||
Ok(Unit::Items(items))
|
||||
}
|
||||
|
||||
fn parse_inner(record: Pair<Rule>) -> Result<Unit> {
|
||||
// let consts: Vec<Const> = vec![];
|
||||
|
||||
let inner = match record.as_rule() {
|
||||
Rule::namespace => {
|
||||
Ok(Unit::Namespace(record.into_inner().as_str().to_owned()))
|
||||
}
|
||||
Rule::constant => {
|
||||
let pairs = record.into_inner();
|
||||
|
||||
let mut id: Option<String> = None;
|
||||
let mut kind: Option<TypeValue> = None;
|
||||
let mut default: Option<Vec<u8>> = None;
|
||||
|
||||
for pair in pairs.flatten().collect::<Vec<Pair<Rule>>>() {
|
||||
match pair.as_rule() {
|
||||
Rule::id => id = Some(pair.as_str().to_owned()),
|
||||
Rule::kind => kind = Some(primitive::to_type(pair.as_str())),
|
||||
Rule::value => {
|
||||
let under = pair.into_inner().next().unwrap();
|
||||
|
||||
default = match under.as_rule() {
|
||||
Rule::inner_string => Some(under.as_str().as_bytes().to_vec()),
|
||||
Rule::inner_namespaced => Some(under.as_str().as_bytes().to_vec()),
|
||||
_ => None
|
||||
};
|
||||
}
|
||||
Rule::inner_string | Rule::inner_namespaced => {}
|
||||
_ => { unreachable!("Reached a unexpected rule that was possibly forgotten") }
|
||||
}
|
||||
}
|
||||
|
||||
Ok(
|
||||
Unit::Consts(
|
||||
vec![
|
||||
Const {
|
||||
id: id.ok_or("Id is not present").unwrap(),
|
||||
type_: kind.ok_or("Type is not present").unwrap(),
|
||||
default_value: default.unwrap()
|
||||
}
|
||||
]
|
||||
)
|
||||
)
|
||||
}
|
||||
Rule::settings => {
|
||||
let mut pairs = record.into_inner();
|
||||
|
||||
let id: String = pairs.next().unwrap().as_str().to_owned();
|
||||
let parameters: Vec<Parameter> = to_parameters(pairs);
|
||||
|
||||
Ok(Unit::Settings(
|
||||
vec![
|
||||
Settings { id, parameters }
|
||||
]
|
||||
))
|
||||
}
|
||||
Rule::enumeration => {
|
||||
let mut pairs = record.into_inner();
|
||||
|
||||
// let mut index: Option<u8> = None;
|
||||
let id: String = pairs.next().unwrap().as_str().to_owned();
|
||||
let variants: Vec<EnumVariant> = vec![];
|
||||
|
||||
Ok(Unit::Enums(
|
||||
vec![
|
||||
Enum { id, variants }
|
||||
]
|
||||
))
|
||||
}
|
||||
Rule::enum_variant => { todo!() }
|
||||
Rule::structure => {
|
||||
let mut pairs = record.into_inner();
|
||||
|
||||
let id: String = pairs.next().unwrap().as_str().to_owned();
|
||||
let mut parameters: Vec<Parameter> = vec![];
|
||||
let mut fields: Vec<Field> = vec![];
|
||||
|
||||
for pair in pairs {
|
||||
match pair.as_rule() {
|
||||
Rule::parameter => parameters.push(to_parameter(pair.into_inner())),
|
||||
Rule::field => fields.push(to_field(pair.into_inner())),
|
||||
_ => unreachable!()
|
||||
}
|
||||
}
|
||||
|
||||
Ok(Unit::Structs(vec![
|
||||
Struct { id, parameters, fields }
|
||||
]))
|
||||
}
|
||||
Rule::error => {
|
||||
let mut pairs = record.into_inner();
|
||||
|
||||
let id: String = pairs.next().unwrap().as_str().to_owned();
|
||||
let mut parameters: Vec<Parameter> = vec![];
|
||||
let mut fields: Vec<Field> = vec![];
|
||||
|
||||
for pair in pairs {
|
||||
match pair.as_rule() {
|
||||
Rule::parameter => parameters.push(to_parameter(pair.into_inner())),
|
||||
Rule::field => fields.push(to_field(pair.into_inner())),
|
||||
_ => unreachable!()
|
||||
}
|
||||
}
|
||||
|
||||
Ok(Unit::Errors(vec![
|
||||
Error { id, parameters, fields }
|
||||
]))
|
||||
}
|
||||
Rule::protocol => {
|
||||
let mut pairs = record.into_inner();
|
||||
|
||||
let id: String = pairs.next().unwrap().as_str().to_owned();
|
||||
let mut parameters: Vec<Parameter> = vec![];
|
||||
let mut functions: Vec<Function> = vec![];
|
||||
|
||||
for pair in pairs {
|
||||
match pair.as_rule() {
|
||||
Rule::parameter => parameters.push(to_parameter(pair.into_inner())),
|
||||
Rule::function => functions.push(to_function(pair.into_inner())),
|
||||
_ => unreachable!()
|
||||
}
|
||||
}
|
||||
|
||||
Ok(Unit::Protocols(vec![
|
||||
Protocol {
|
||||
id,
|
||||
parameters,
|
||||
functions: vec![],
|
||||
}
|
||||
]))
|
||||
}
|
||||
Rule::function => { todo!() }
|
||||
Rule::argument => { todo!() }
|
||||
Rule::returns => { todo!() }
|
||||
Rule::throw => { todo!() }
|
||||
Rule::COMMENT => { todo!() }
|
||||
_ => unreachable!()
|
||||
};
|
||||
|
||||
inner
|
||||
}
|
||||
|
||||
|
||||
fn to_parameters(mut pairs: Pairs<Rule>) -> Vec<Parameter> {
|
||||
let mut params = vec![];
|
||||
|
||||
while let Some(pair) = pairs.next() {
|
||||
params.push(to_parameter(pair.into_inner()));
|
||||
}
|
||||
|
||||
params
|
||||
}
|
||||
|
||||
fn to_parameter(mut pairs: Pairs<Rule>) -> Parameter {
|
||||
Parameter {
|
||||
id: pairs.next().unwrap().as_str().to_owned(),
|
||||
value: pairs.next().unwrap().as_str().as_bytes().to_vec()
|
||||
}
|
||||
}
|
||||
|
||||
fn to_field(pairs: Pairs<Rule>) -> Field {
|
||||
let mut index: u8 = 0;
|
||||
let mut optional: bool = false;
|
||||
let mut field_id: Option<String> = None;
|
||||
let mut field_kind: Option<TypeValue> = None;
|
||||
let mut field_value: Option<Vec<u8>> = None;
|
||||
|
||||
for field_pair in pairs {
|
||||
match field_pair.as_rule() {
|
||||
Rule::index => index = field_pair.as_str().parse().unwrap(),
|
||||
Rule::requirement => optional = true,
|
||||
Rule::id => field_id = Some(field_pair.as_str().to_owned()),
|
||||
Rule::kind => field_kind = Some(primitive::to_type(field_pair.as_str())),
|
||||
Rule::value => field_value = Some(field_pair.as_str().as_bytes().to_vec()),
|
||||
_ => println!("field bad {:?}", field_pair.as_rule())
|
||||
}
|
||||
}
|
||||
|
||||
Field {
|
||||
id: field_id.ok_or("Id is not present").unwrap(),
|
||||
index, optional,
|
||||
type_: field_kind.unwrap(),
|
||||
default_value: field_value.unwrap(),
|
||||
}
|
||||
}
|
||||
|
||||
fn to_function(pairs: Pairs<Rule>) -> Function {
|
||||
let mut index: Option<u8> = None;
|
||||
let mut async_: bool = false;
|
||||
let mut direction = Direction::Both;
|
||||
let mut id: Option<String> = None;
|
||||
let mut arguments: Vec<Argument> = vec![];
|
||||
let parameters: Vec<Parameter> = vec![];
|
||||
let returns: Vec<TypeValue> = vec![];
|
||||
let throws: Vec<String> = vec![];
|
||||
|
||||
for pair in pairs {
|
||||
match pair.as_rule() {
|
||||
Rule::index => index = Some(pair.as_str().parse().unwrap()),
|
||||
Rule::id => id = Some(pair.as_str().to_owned()),
|
||||
Rule::direction => direction = match pair.as_str() {
|
||||
"client" => Direction::Client,
|
||||
"server" => Direction::Server,
|
||||
dir => panic!("Direction {:#} does not exist", dir)
|
||||
},
|
||||
Rule::asynchronous => async_ = true,
|
||||
Rule::argument => {
|
||||
arguments.push(to_argument(pair.into_inner()))
|
||||
}
|
||||
Rule::returns => {}
|
||||
Rule::parameter => {}
|
||||
Rule::throw => {}
|
||||
_ => unreachable!()
|
||||
}
|
||||
}
|
||||
|
||||
Function {
|
||||
index: index.unwrap(),
|
||||
id: id.unwrap(),
|
||||
async_,
|
||||
direction,
|
||||
arguments, return_: returns, parameters, throws,
|
||||
}
|
||||
}
|
||||
|
||||
fn to_argument(pairs: Pairs<Rule>) -> Argument {
|
||||
let mut id: Option<String> = None;
|
||||
let mut kind: Option<TypeValue> = None;
|
||||
|
||||
for pair in pairs {
|
||||
match pair.as_rule() {
|
||||
Rule::id => id = Some(pair.as_str().to_owned()),
|
||||
Rule::kind => kind = Some(primitive::to_type(pair.as_str())),
|
||||
_ => unreachable!()
|
||||
}
|
||||
}
|
||||
|
||||
Argument { id, type_: kind.unwrap() }
|
||||
}
|
||||
|
6
src/ir.rs
Normal file
6
src/ir.rs
Normal file
|
@ -0,0 +1,6 @@
|
|||
// Relative Modules
|
||||
mod sanitizer;
|
||||
mod context;
|
||||
mod serialization;
|
||||
pub mod unit;
|
||||
pub mod primitive;
|
24
src/ir/context.rs
Normal file
24
src/ir/context.rs
Normal file
|
@ -0,0 +1,24 @@
|
|||
// Standard Uses
|
||||
|
||||
// Local Uses
|
||||
use crate::ir::unit::Unit;
|
||||
use crate::ir::serialization::Origin;
|
||||
|
||||
// External Uses
|
||||
|
||||
|
||||
pub struct Context {
|
||||
pub units: Vec<(Origin, Unit)>
|
||||
}
|
||||
|
||||
#[allow(unused)]
|
||||
impl Context {
|
||||
fn add_unit(self, origin: Origin, unit: Unit) {
|
||||
todo!()
|
||||
}
|
||||
|
||||
fn sanitize_units(self) {
|
||||
|
||||
}
|
||||
}
|
||||
|
96
src/ir/primitive.rs
Normal file
96
src/ir/primitive.rs
Normal file
|
@ -0,0 +1,96 @@
|
|||
// Standard Uses
|
||||
|
||||
// Local Uses
|
||||
|
||||
// External Uses
|
||||
|
||||
|
||||
#[derive(Debug, Eq, PartialEq)]
|
||||
#[repr(u8)]
|
||||
pub enum Primitive {
|
||||
U8(u8) = 0,
|
||||
U16(u16),
|
||||
U32(u32),
|
||||
U64(u64),
|
||||
U128(u128),
|
||||
|
||||
S8(u8),
|
||||
S16(u16),
|
||||
S32(u32),
|
||||
S64(u64),
|
||||
S128(u128),
|
||||
|
||||
// Float(f32),
|
||||
// Double(f64),
|
||||
|
||||
String(String),
|
||||
Namespaced(String)
|
||||
}
|
||||
|
||||
#[derive(Debug, Eq, PartialEq)]
|
||||
#[repr(u8)]
|
||||
pub enum TypeValue {
|
||||
U8 = 0, U16, U32, U64, U128,
|
||||
S8, S16, S32, S64, S128,
|
||||
// Float, Double,
|
||||
String,
|
||||
Namespaced
|
||||
}
|
||||
|
||||
fn to_primitive(type_: &str, value: &str) -> Primitive {
|
||||
match type_ {
|
||||
"u8" => Primitive::U8(value.parse().unwrap()),
|
||||
"u16" => Primitive::U16(value.parse().unwrap()),
|
||||
"u32" => Primitive::U32(value.parse().unwrap()),
|
||||
"u64" => Primitive::U64(value.parse().unwrap()),
|
||||
"u128" => Primitive::U128(value.parse().unwrap()),
|
||||
|
||||
"s8" => Primitive::U8(value.parse().unwrap()),
|
||||
"s16" => Primitive::U16(value.parse().unwrap()),
|
||||
"s32" => Primitive::U32(value.parse().unwrap()),
|
||||
"s64" => Primitive::U64(value.parse().unwrap()),
|
||||
"s128" => Primitive::U128(value.parse().unwrap()),
|
||||
|
||||
// TODO: Should multiple alias be present? »string« could be enough
|
||||
"str" | "string" => Primitive::String(value.to_owned()),
|
||||
_ => { panic!("Got unknown type '{type_}'") }
|
||||
}
|
||||
}
|
||||
|
||||
pub fn to_type(type_: &str) -> TypeValue {
|
||||
match type_ {
|
||||
"u8" => TypeValue::U8{},
|
||||
"u16" => TypeValue::U16{},
|
||||
"u32" => TypeValue::U32{},
|
||||
"u64" => TypeValue::U64{},
|
||||
"u128" => TypeValue::U128{},
|
||||
|
||||
"s8" => TypeValue::S8{},
|
||||
"s16" => TypeValue::S16{},
|
||||
"s32" => TypeValue::S32{},
|
||||
"s64" => TypeValue::S64{},
|
||||
"s128" => TypeValue::S128{},
|
||||
|
||||
"str" => TypeValue::String{},
|
||||
|
||||
_ => TypeValue::Namespaced{}
|
||||
}
|
||||
}
|
||||
|
||||
fn to_value(type_: &TypeValue, value: &str) -> Vec<u8> {
|
||||
match type_ {
|
||||
TypeValue::U8 => Vec::from([value.parse::<u8>().unwrap()]),
|
||||
TypeValue::U16 => Vec::from([value.parse::<u8>().unwrap()]),
|
||||
TypeValue::U32 => Vec::from([value.parse::<u8>().unwrap()]),
|
||||
TypeValue::U64 => Vec::from([value.parse::<u8>().unwrap()]),
|
||||
TypeValue::U128 => Vec::from([value.parse::<u8>().unwrap()]),
|
||||
TypeValue::S8 => Vec::from([value.parse::<u8>().unwrap()]),
|
||||
TypeValue::S16 => Vec::from([value.parse::<u8>().unwrap()]),
|
||||
TypeValue::S32 => Vec::from([value.parse::<u8>().unwrap()]),
|
||||
TypeValue::S64 => Vec::from([value.parse::<u8>().unwrap()]),
|
||||
TypeValue::S128 => Vec::from([value.parse::<u8>().unwrap()]),
|
||||
TypeValue::String => Vec::from([value.parse::<u8>().unwrap()]),
|
||||
TypeValue::Namespaced => Vec::from([value.parse::<u8>().unwrap()]),
|
||||
}
|
||||
}
|
||||
|
14
src/ir/sanitizer.rs
Normal file
14
src/ir/sanitizer.rs
Normal file
|
@ -0,0 +1,14 @@
|
|||
// Standard Uses
|
||||
|
||||
// Local Uses
|
||||
use crate::ir::context::Context;
|
||||
|
||||
// External Uses
|
||||
|
||||
|
||||
#[allow(unused)]
|
||||
fn sanitize_context_units(context: &Context) {
|
||||
for (_, unit) in &context.units {
|
||||
|
||||
}
|
||||
}
|
13
src/ir/serialization.rs
Normal file
13
src/ir/serialization.rs
Normal file
|
@ -0,0 +1,13 @@
|
|||
// Relative Modules
|
||||
mod messagepack;
|
||||
|
||||
// Standard Uses
|
||||
|
||||
// Local Uses
|
||||
|
||||
// External Uses
|
||||
|
||||
|
||||
#[allow(unused)]
|
||||
pub struct Origin {}
|
||||
|
20
src/ir/serialization/messagepack.rs
Normal file
20
src/ir/serialization/messagepack.rs
Normal file
|
@ -0,0 +1,20 @@
|
|||
// Standard Uses
|
||||
|
||||
// Local Uses
|
||||
use crate::ir::unit::Unit;
|
||||
|
||||
// External Uses
|
||||
#[allow(unused)]
|
||||
use rmp;
|
||||
|
||||
|
||||
// https://docs.rs/rmp/latest/rmp/
|
||||
#[allow(unused)]
|
||||
fn from_bytes(raw: Vec<u8>) -> Unit {
|
||||
todo!()
|
||||
}
|
||||
|
||||
#[allow(unused)]
|
||||
fn to_bytes(unit: Unit) -> Vec<u8> {
|
||||
todo!()
|
||||
}
|
136
src/ir/unit.rs
Normal file
136
src/ir/unit.rs
Normal file
|
@ -0,0 +1,136 @@
|
|||
// Standard Uses
|
||||
|
||||
// Local Uses
|
||||
use crate::ir::primitive::{Primitive, TypeValue};
|
||||
|
||||
// External Uses
|
||||
|
||||
|
||||
/// Intermediate Representation Unit
|
||||
#[allow(unused)]
|
||||
#[derive(Debug, Eq, PartialEq)]
|
||||
pub enum Unit {
|
||||
Items(Vec<Unit>),
|
||||
Tag(String),
|
||||
Namespace(String),
|
||||
Imports(String),
|
||||
Settings(Vec<Settings>),
|
||||
Consts(Vec<Const>),
|
||||
Structs(Vec<Struct>),
|
||||
Enums(Vec<Enum>),
|
||||
Errors(Vec<Error>),
|
||||
Protocols(Vec<Protocol>),
|
||||
}
|
||||
|
||||
|
||||
#[allow(unused)]
|
||||
#[derive(Debug, Eq, PartialEq)]
|
||||
pub enum Type {
|
||||
Primitive(Primitive),
|
||||
Union,
|
||||
Namespaced
|
||||
}
|
||||
|
||||
#[allow(unused)]
|
||||
#[derive(Debug, Eq, PartialEq)]
|
||||
pub enum DefaultValue {
|
||||
Any
|
||||
}
|
||||
|
||||
#[derive(Debug, Eq, PartialEq)]
|
||||
pub struct Settings {
|
||||
pub id: String,
|
||||
pub parameters: Vec<Parameter>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Eq, PartialEq)]
|
||||
pub struct Const {
|
||||
pub id: String,
|
||||
pub type_: TypeValue,
|
||||
pub default_value: Vec<u8>
|
||||
}
|
||||
|
||||
#[allow(unused)]
|
||||
#[derive(Debug, Eq, PartialEq)]
|
||||
pub struct Struct {
|
||||
pub id: String,
|
||||
pub parameters: Vec<Parameter>,
|
||||
pub fields: Vec<Field>,
|
||||
}
|
||||
|
||||
#[allow(unused)]
|
||||
#[derive(Debug, Eq, PartialEq)]
|
||||
pub struct Enum {
|
||||
pub id: String,
|
||||
pub variants: Vec<EnumVariant>
|
||||
}
|
||||
|
||||
#[allow(unused)]
|
||||
#[derive(Debug, Eq, PartialEq)]
|
||||
pub struct EnumVariant {
|
||||
pub id: String,
|
||||
pub type_: Option<TypeValue>
|
||||
}
|
||||
|
||||
#[allow(unused)]
|
||||
#[derive(Debug, Eq, PartialEq)]
|
||||
pub struct Error {
|
||||
pub id: String,
|
||||
pub parameters: Vec<Parameter>,
|
||||
pub fields: Vec<Field>,
|
||||
}
|
||||
|
||||
#[allow(unused)]
|
||||
#[derive(Debug, Eq, PartialEq)]
|
||||
pub struct Parameter {
|
||||
pub id: String,
|
||||
pub value: Vec<u8>
|
||||
}
|
||||
|
||||
#[allow(unused)]
|
||||
#[derive(Debug, Eq, PartialEq)]
|
||||
pub struct Field {
|
||||
pub index: u8,
|
||||
pub optional: bool,
|
||||
pub id: String,
|
||||
pub type_: TypeValue,
|
||||
pub default_value: Vec<u8>,
|
||||
}
|
||||
|
||||
#[allow(unused)]
|
||||
#[derive(Debug, Eq, PartialEq)]
|
||||
pub struct Protocol {
|
||||
pub id: String,
|
||||
pub parameters: Vec<Parameter>,
|
||||
pub functions: Vec<Function>
|
||||
}
|
||||
|
||||
#[allow(unused)]
|
||||
#[derive(Debug, Eq, PartialEq)]
|
||||
pub enum Direction { Client, Server, Both }
|
||||
|
||||
#[allow(unused)]
|
||||
#[derive(Debug, Eq, PartialEq)]
|
||||
pub struct Function {
|
||||
pub index: u8,
|
||||
pub id: String,
|
||||
pub async_: bool,
|
||||
pub direction: Direction,
|
||||
pub arguments: Vec<Argument>,
|
||||
pub return_: Vec<TypeValue>,
|
||||
pub parameters: Vec<Parameter>,
|
||||
pub throws: Vec<String>
|
||||
}
|
||||
|
||||
#[allow(unused)]
|
||||
#[derive(Debug, Eq, PartialEq)]
|
||||
pub struct Argument {
|
||||
pub id: Option<String>,
|
||||
pub type_: TypeValue
|
||||
}
|
||||
|
||||
#[allow(unused)]
|
||||
pub fn from_binary(data: Vec<u8>) -> Unit {
|
||||
todo!()
|
||||
}
|
||||
|
9
src/lib.rs
Normal file
9
src/lib.rs
Normal file
|
@ -0,0 +1,9 @@
|
|||
// Extern
|
||||
extern crate pest;
|
||||
#[macro_use]
|
||||
extern crate pest_derive;
|
||||
|
||||
// Relative Modules
|
||||
pub mod ir;
|
||||
pub mod codegen;
|
||||
pub mod idl;
|
1
tests/idl/mod.rs
Normal file
1
tests/idl/mod.rs
Normal file
|
@ -0,0 +1 @@
|
|||
mod pest;
|
23
tests/idl/pest.rs
Normal file
23
tests/idl/pest.rs
Normal file
|
@ -0,0 +1,23 @@
|
|||
// Standard Uses
|
||||
|
||||
// Local Uses
|
||||
|
||||
// External Uses
|
||||
use comline_rs::idl;
|
||||
use comline_rs::ir::unit::Unit;
|
||||
|
||||
|
||||
#[test]
|
||||
fn from_raw_to_unit() {
|
||||
let raw = std::fs::read_to_string("tests/idl/simple.cls").unwrap();
|
||||
let unit = idl::pest::parse_into_unit(raw.as_str()).unwrap();
|
||||
|
||||
assert_eq!(
|
||||
unit, Unit::Items(vec![
|
||||
Unit::Namespace("".to_string()),
|
||||
|
||||
]
|
||||
)
|
||||
)
|
||||
}
|
||||
|
22
tests/idl/simple.cls
Normal file
22
tests/idl/simple.cls
Normal file
|
@ -0,0 +1,22 @@
|
|||
namespace tests.idl.simple
|
||||
|
||||
const DEFAULT_NAME: str = "flower"
|
||||
|
||||
settings Test {
|
||||
forbid_optional_indexing=True
|
||||
}
|
||||
|
||||
struct Message {
|
||||
1# name: str = DEFAULT_NAME
|
||||
2# optional recipient: str[validators=StringBounds(min_chars=3 max_chars=12)] = "bee"
|
||||
}
|
||||
|
||||
error RecipientNotFoundError {
|
||||
message = "Recipient with name {self.recipient} not found"
|
||||
1# recipient: str[validators=StringBounds(min_chars=8 max_chars=16)]
|
||||
}
|
||||
|
||||
protocol Mail provider=Both {
|
||||
1# function send_message(message: Message) -> str ! NotFoundError[function.message.recipient]
|
||||
: timeout_ms=1000
|
||||
}
|
2
tests/mod.rs
Normal file
2
tests/mod.rs
Normal file
|
@ -0,0 +1,2 @@
|
|||
mod idl;
|
||||
mod units;
|
2
tests/units/consts.cls
Normal file
2
tests/units/consts.cls
Normal file
|
@ -0,0 +1,2 @@
|
|||
const VERSION: u8 = 1
|
||||
|
27
tests/units/dev.cls
Normal file
27
tests/units/dev.cls
Normal file
|
@ -0,0 +1,27 @@
|
|||
namespace example
|
||||
|
||||
const PROTOCOL: u8 = 0
|
||||
const SECRET: u8 = 1
|
||||
|
||||
enum Motion {
|
||||
1 # Wave
|
||||
2 # MoveArm
|
||||
}
|
||||
|
||||
struct Hello {
|
||||
const SHAKE: u8 = 20
|
||||
|
||||
1 # name: u8
|
||||
}
|
||||
|
||||
struct Goodbye versioned=false {
|
||||
wave: bool = false
|
||||
}
|
||||
|
||||
protocol Greet {
|
||||
function smile
|
||||
function wave ()
|
||||
function wave_wait () -> u8
|
||||
function wave_and_go () -> str: timeout_ms=100
|
||||
function wave_with (motion: Motion)
|
||||
}
|
28
tests/units/mod.rs
Normal file
28
tests/units/mod.rs
Normal file
|
@ -0,0 +1,28 @@
|
|||
// Standard Uses
|
||||
use std::string::ToString;
|
||||
|
||||
// Local Uses
|
||||
|
||||
// External Uses
|
||||
use once_cell::sync::Lazy;
|
||||
use comline_rs::ir::unit::{Const, Unit};
|
||||
use comline_rs::ir::primitive::TypeValue;
|
||||
|
||||
|
||||
// Unit with a namespace and a constant
|
||||
#[allow(unused)]
|
||||
static UNIT_NAMESPACE_CONST_1: Lazy<Unit> = Lazy::new( || {
|
||||
Unit::Items(
|
||||
vec![
|
||||
Unit::Namespace("units.test".to_string()),
|
||||
Unit::Consts(vec![
|
||||
Const {
|
||||
id: "".to_string(),
|
||||
type_: TypeValue::U8,
|
||||
default_value: vec![],
|
||||
}
|
||||
])
|
||||
]
|
||||
)
|
||||
});
|
||||
|
12
tests/units/protocol/args.cls
Normal file
12
tests/units/protocol/args.cls
Normal file
|
@ -0,0 +1,12 @@
|
|||
namespace units.protocols_args
|
||||
|
||||
protocol Proposals {
|
||||
function call(Args)
|
||||
function call(kind: u8, name: str, message: str)
|
||||
}
|
||||
|
||||
struct Args {
|
||||
kind: u8
|
||||
name: str
|
||||
message: str
|
||||
}
|
0
tests/units/protocol/directions.cls
Normal file
0
tests/units/protocol/directions.cls
Normal file
0
tests/units/protocol/scalars.cls
Normal file
0
tests/units/protocol/scalars.cls
Normal file
Loading…
Reference in a new issue