Name | crossandra JSON |
Version |
1.2.4
JSON |
| download |
home_page | |
Summary | A simple tokenizer operating on enums with a decent amount of configuration |
upload_time | 2022-12-10 05:41:40 |
maintainer | |
docs_url | None |
author | |
requires_python | >=3.9 |
license | MIT |
keywords |
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# Crossandra
Crossandra is a fast and simple tokenization library for Python operating on enums and regular expressions, with a decent amount of configuration.
## Installation
Crossandra is available on PyPI and can be installed with pip, or any other Python package manager:
```sh
$ pip install crossandra
```
(Some systems may require you to use `pip3`, `python -m pip`, or `py -m pip` instead)
## License
Crossandra is licensed under the MIT License.
## Reference
### `Crossandra`
```py
Crossandra(
token_source: type[Enum] = Empty,
*,
ignore_whitespace: bool = False,
ignored_characters: str = "",
suppress_unknown: bool = False,
rules: list[Rule | RuleGroup] | None = None
)
```
- `token_source`: an enum containing all possible tokens (defaults to an empty enum)
- `ignore_whitespace`: whether spaces, tabs, newlines etc. should be ignored
- `ignored_characters`: characters to skip during tokenization
- `suppress_unknown`: whether unknown tokens should continue without throwing an error
- `rules`: a list of additional rules to use
The enum takes priority over the rule list.
---
When all tokens are of length 1 and there are no additional rules, Crossandra will use a simpler tokenization method (the so called Fast Mode).
> **Example:** Tokenizing noisy Brainfuck code *(tested on MacBook Air M1 (256/16))*
```py
# Setup
from random import choices
from string import punctuation
program = "".join(choices(punctuation, k=...))
```
k | Default | Fast Mode | Speedup
:---: | :---: | :---: | :---:
10 | 0.00004s | 0.00002s | 2x
100 | 0.00016s | 0.00003s | 5.3x
1000 | 0.0015s | 0.00013s | 11.5x
10000 | 0.014s | 0.0009s | 15.6x
100000 | 0.29s | 0.009s | 32.2x
### `Rule`
```py
Rule[T](
pattern: str,
converter: Callable[[str], T] | bool = True,
flags: RegexFlag | int = 0
)
```
Used for defining custom rules. `pattern` is a regex pattern to match (`flags` can be supplied).
When `converter` is a callable, it's used on the matched substring.
When `converter` is `True`, it will directly return the matched substring.
When `converter` is `False`, it will not include the matched substring in the token list.
### `RuleGroup`
```py
RuleGroup(rules: tuple[Rule[Any], ...])
```
Used for storing multiple Rules in one object. Can be constructed by ORing two or more Rules.
### `common`
The `common` submodule is a collection of commonly used patterns.
Rules:
- CHAR (e.g. `'h'`)
- LETTER (e.g. `m`)
- WORD (e.g. `ball`)
- SINGLE_QUOTED_STRING (e.g. `'nice fish'`)
- DOUBLE_QUOTED_STRING (e.g. `"hello there"`)
- C_NAME (e.g. `crossandra_rocks`)
- NEWLINE (`\n`; `\r\n` is converted to `\n` before tokenization)
- DIGIT (e.g. `7`)
- HEXDIGIT (e.g. `c`)
- DECIMAL (e.g. `3.14`)
- INT (e.g. `2137`)
- SIGNED_INT (e.g. `-1`)
- FLOAT (e.g. `1e3`)
- SIGNED_FLOAT (e.g. `+4.3`)
RuleGroups:
- STRING (`SINGLE_QUOTED_STRING | DOUBLE_QUOTED_STRING`)
- NUMBER (`INT | FLOAT`)
- SIGNED_NUMBER (`SIGNED_INT | SIGNED_FLOAT`)
## Examples
```py
from enum import Enum
from crossandra import Crossandra
class Brainfuck(Enum):
ADD = "+"
SUB = "-"
LEFT = "<"
RIGHT = ">"
READ = ","
WRITE = "."
BEGIN_LOOP = "["
END_LOOP = "]"
bf = Crossandra(Brainfuck, suppress_unknown=True)
print(*bf.tokenize("cat program: ,[.,]"), sep="\n")
# Brainfuck.READ
# Brainfuck.BEGIN_LOOP
# Brainfuck.WRITE
# Brainfuck.READ
# Brainfuck.END_LOOP
```
```py
from crossandra import Crossandra, Rule, common
def hex2rgb(hex_color: str) -> tuple[int, int, int]:
r, g, b = (int(hex_color[i:i+2], 16) for i in range(1, 6, 2))
return r, g, b
t = Crossandra(
ignore_whitespace=True,
rules=[
Rule(r"#[0-9a-fA-F]+", hex2rgb),
common.WORD
]
)
text = "My favorite color is #facade"
print(t.tokenize(text))
# ['My', 'favorite', 'color', 'is', (250, 202, 222)]
```
```py
# Supporting Samarium's numbers and arithmetic operators
from enum import Enum
from crossandra import Crossandra, Rule
def sm_int(string: str) -> int:
return int(string.replace("/", "1").replace("\\", "0"), 2)
class Op(Enum):
ADD = "+"
SUB = "-"
MUL = "++"
DIV = "--"
POW = "+++"
MOD = "---"
sm = Crossandra(
Op,
ignore_whitespace=True,
rules=[Rule(r"(?:\\|/)+", sm_int)]
)
print(*sm.tokenize(r"//\ ++ /\\/ --- /\/\/ - ///"))
# 6 Op.MUL 9 Op.MOD 21 Op.SUB 7
```
Raw data
{
"_id": null,
"home_page": "",
"name": "crossandra",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": "",
"keywords": "",
"author": "",
"author_email": "trag1c <trag1cdev@yahoo.com>",
"download_url": "https://files.pythonhosted.org/packages/c1/57/dc3eba0f1446958bdac6c2df0a837bcd1973da0bd0e22beb19cee4494942/crossandra-1.2.4.tar.gz",
"platform": null,
"description": "# Crossandra\nCrossandra is a fast and simple tokenization library for Python operating on enums and regular expressions, with a decent amount of configuration.\n\n## Installation\nCrossandra is available on PyPI and can be installed with pip, or any other Python package manager:\n```sh\n$ pip install crossandra\n```\n(Some systems may require you to use `pip3`, `python -m pip`, or `py -m pip` instead)\n\n## License\nCrossandra is licensed under the MIT License.\n\n## Reference\n### `Crossandra`\n```py\nCrossandra(\n token_source: type[Enum] = Empty,\n *,\n ignore_whitespace: bool = False,\n ignored_characters: str = \"\",\n suppress_unknown: bool = False,\n rules: list[Rule | RuleGroup] | None = None\n)\n```\n- `token_source`: an enum containing all possible tokens (defaults to an empty enum)\n- `ignore_whitespace`: whether spaces, tabs, newlines etc. should be ignored\n- `ignored_characters`: characters to skip during tokenization\n- `suppress_unknown`: whether unknown tokens should continue without throwing an error\n- `rules`: a list of additional rules to use\n\nThe enum takes priority over the rule list.\n\n---\n\nWhen all tokens are of length 1 and there are no additional rules, Crossandra will use a simpler tokenization method (the so called Fast Mode).\n\n> **Example:** Tokenizing noisy Brainfuck code *(tested on MacBook Air M1 (256/16))*\n\n```py\n# Setup\nfrom random import choices\nfrom string import punctuation\n\nprogram = \"\".join(choices(punctuation, k=...))\n```\n\nk | Default | Fast Mode | Speedup\n:---: | :---: | :---: | :---:\n10 | 0.00004s | 0.00002s | 2x\n100 | 0.00016s | 0.00003s | 5.3x\n1000 | 0.0015s | 0.00013s | 11.5x\n10000 | 0.014s | 0.0009s | 15.6x\n100000 | 0.29s | 0.009s | 32.2x\n\n\n### `Rule`\n```py\nRule[T](\n pattern: str,\n converter: Callable[[str], T] | bool = True,\n flags: RegexFlag | int = 0\n)\n```\nUsed for defining custom rules. `pattern` is a regex pattern to match (`flags` can be supplied). \nWhen `converter` is a callable, it's used on the matched substring. \nWhen `converter` is `True`, it will directly return the matched substring. \nWhen `converter` is `False`, it will not include the matched substring in the token list.\n\n### `RuleGroup`\n```py\nRuleGroup(rules: tuple[Rule[Any], ...])\n```\nUsed for storing multiple Rules in one object. Can be constructed by ORing two or more Rules.\n\n### `common`\nThe `common` submodule is a collection of commonly used patterns.\n\nRules:\n- CHAR (e.g. `'h'`)\n- LETTER (e.g. `m`)\n- WORD (e.g. `ball`)\n- SINGLE_QUOTED_STRING (e.g. `'nice fish'`)\n- DOUBLE_QUOTED_STRING (e.g. `\"hello there\"`)\n- C_NAME (e.g. `crossandra_rocks`)\n- NEWLINE (`\\n`; `\\r\\n` is converted to `\\n` before tokenization)\n- DIGIT (e.g. `7`)\n- HEXDIGIT (e.g. `c`)\n- DECIMAL (e.g. `3.14`)\n- INT (e.g. `2137`)\n- SIGNED_INT (e.g. `-1`)\n- FLOAT (e.g. `1e3`)\n- SIGNED_FLOAT (e.g. `+4.3`)\n\nRuleGroups:\n- STRING (`SINGLE_QUOTED_STRING | DOUBLE_QUOTED_STRING`)\n- NUMBER (`INT | FLOAT`)\n- SIGNED_NUMBER (`SIGNED_INT | SIGNED_FLOAT`)\n\n\n## Examples\n```py\nfrom enum import Enum\nfrom crossandra import Crossandra\n\nclass Brainfuck(Enum):\n ADD = \"+\"\n SUB = \"-\"\n LEFT = \"<\"\n RIGHT = \">\"\n READ = \",\"\n WRITE = \".\"\n BEGIN_LOOP = \"[\"\n END_LOOP = \"]\"\n\nbf = Crossandra(Brainfuck, suppress_unknown=True)\nprint(*bf.tokenize(\"cat program: ,[.,]\"), sep=\"\\n\")\n# Brainfuck.READ\n# Brainfuck.BEGIN_LOOP\n# Brainfuck.WRITE\n# Brainfuck.READ\n# Brainfuck.END_LOOP\n```\n```py\nfrom crossandra import Crossandra, Rule, common\n\ndef hex2rgb(hex_color: str) -> tuple[int, int, int]:\n r, g, b = (int(hex_color[i:i+2], 16) for i in range(1, 6, 2))\n return r, g, b\n\nt = Crossandra(\n ignore_whitespace=True,\n rules=[\n Rule(r\"#[0-9a-fA-F]+\", hex2rgb),\n common.WORD\n ]\n)\n\ntext = \"My favorite color is #facade\"\nprint(t.tokenize(text))\n# ['My', 'favorite', 'color', 'is', (250, 202, 222)]\n```\n```py\n# Supporting Samarium's numbers and arithmetic operators\nfrom enum import Enum\nfrom crossandra import Crossandra, Rule\n\ndef sm_int(string: str) -> int:\n return int(string.replace(\"/\", \"1\").replace(\"\\\\\", \"0\"), 2)\n\nclass Op(Enum):\n ADD = \"+\"\n SUB = \"-\"\n MUL = \"++\"\n DIV = \"--\"\n POW = \"+++\"\n MOD = \"---\"\n\nsm = Crossandra(\n Op,\n ignore_whitespace=True,\n rules=[Rule(r\"(?:\\\\|/)+\", sm_int)]\n)\n\nprint(*sm.tokenize(r\"//\\ ++ /\\\\/ --- /\\/\\/ - ///\"))\n# 6 Op.MUL 9 Op.MOD 21 Op.SUB 7\n```\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "A simple tokenizer operating on enums with a decent amount of configuration",
"version": "1.2.4",
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"md5": "4f594d575777741596c4346ca9f5ccd0",
"sha256": "460375145e22d6a4e5a67a8fb46b6cdc795ce1556c5e68828d3c11d30b91fae4"
},
"downloads": -1,
"filename": "crossandra-1.2.4-cp310-cp310-macosx_10_9_universal2.whl",
"has_sig": false,
"md5_digest": "4f594d575777741596c4346ca9f5ccd0",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 170041,
"upload_time": "2022-12-10T05:40:52",
"upload_time_iso_8601": "2022-12-10T05:40:52.444382Z",
"url": "https://files.pythonhosted.org/packages/bd/9c/a60b0545e7590c5cb2d0b54c4d42a1c82eab932a08d91771240aa8b070b7/crossandra-1.2.4-cp310-cp310-macosx_10_9_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "9343e092b6060fbf93438915f6f83809",
"sha256": "a23060af8c04d6369d58c0724522f8009c5e9ae8e5a53b366f0a9068ccd3f20e"
},
"downloads": -1,
"filename": "crossandra-1.2.4-cp310-cp310-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "9343e092b6060fbf93438915f6f83809",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 89443,
"upload_time": "2022-12-10T05:40:53",
"upload_time_iso_8601": "2022-12-10T05:40:53.924033Z",
"url": "https://files.pythonhosted.org/packages/cd/57/931a1ec1b753ffbacb996b06f0b26d28dce090897c88835d6be9da2e23ee/crossandra-1.2.4-cp310-cp310-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "c532ac5251ec67f6d742d7160900f3cf",
"sha256": "2fbd5ee6c476fb4072e6b2e453130baac8a241224db2fb1039fc00c4a59ceb62"
},
"downloads": -1,
"filename": "crossandra-1.2.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "c532ac5251ec67f6d742d7160900f3cf",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 160876,
"upload_time": "2022-12-10T05:40:56",
"upload_time_iso_8601": "2022-12-10T05:40:56.246421Z",
"url": "https://files.pythonhosted.org/packages/e2/21/ef85b7c5aea24fa63b83cb0ef236ee7e9f3e707d55c4110e133c19f48aa4/crossandra-1.2.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "4081fe102635dec8eeb32c01a533a2db",
"sha256": "7d5299be21fc022fc629e84253cf609509630d3a163546c49ad1b4ea30c4f7f1"
},
"downloads": -1,
"filename": "crossandra-1.2.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "4081fe102635dec8eeb32c01a533a2db",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 162934,
"upload_time": "2022-12-10T05:40:57",
"upload_time_iso_8601": "2022-12-10T05:40:57.322566Z",
"url": "https://files.pythonhosted.org/packages/dd/d4/9709eb615dbfbf365ded557a68efcf6254185b5ad4d2f24f7d3fbb9412d4/crossandra-1.2.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "47e9fbbd7df3f29c52611099f9ad4881",
"sha256": "bfda033399fc36259c126c10d7fdf50ecae1a082c2d3d749d42bbe631a0934db"
},
"downloads": -1,
"filename": "crossandra-1.2.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "47e9fbbd7df3f29c52611099f9ad4881",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 166607,
"upload_time": "2022-12-10T05:40:58",
"upload_time_iso_8601": "2022-12-10T05:40:58.674113Z",
"url": "https://files.pythonhosted.org/packages/6e/c9/fa6356c7bac4e3a40545d8fa993fddb524806ff7f6d9bdeacba9e0e511f9/crossandra-1.2.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "1085ddbaa157213ff79e50ac0c8c604e",
"sha256": "286149af1c2e6a9cfa4e269493a453792708fae3259d8bc9e2c93e956f5656ef"
},
"downloads": -1,
"filename": "crossandra-1.2.4-cp310-cp310-musllinux_1_1_aarch64.whl",
"has_sig": false,
"md5_digest": "1085ddbaa157213ff79e50ac0c8c604e",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 156962,
"upload_time": "2022-12-10T05:40:59",
"upload_time_iso_8601": "2022-12-10T05:40:59.807898Z",
"url": "https://files.pythonhosted.org/packages/31/d7/b0869ca6e3a710374858d0c59d44bcd95e95f1b49bfb897cb605bd273375/crossandra-1.2.4-cp310-cp310-musllinux_1_1_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "587af76278b3d28d98c0e5c9ebbf9583",
"sha256": "e11f858142a71d2541440e5014c01a3d440e9bf625c9eb0f66fc7f32143d2d16"
},
"downloads": -1,
"filename": "crossandra-1.2.4-cp310-cp310-musllinux_1_1_i686.whl",
"has_sig": false,
"md5_digest": "587af76278b3d28d98c0e5c9ebbf9583",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 161637,
"upload_time": "2022-12-10T05:41:01",
"upload_time_iso_8601": "2022-12-10T05:41:01.116041Z",
"url": "https://files.pythonhosted.org/packages/e8/88/6889fc6d36ba8cb42d63bb3c8cc75788beeb9a055f64888a8e34d9a1ec43/crossandra-1.2.4-cp310-cp310-musllinux_1_1_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "b3b45b94aad07be643c84e3fd759c240",
"sha256": "cb13d5bfe4566d8e98153970e8bb425bc4ad91ae03d916a87b88caa7ecf1b291"
},
"downloads": -1,
"filename": "crossandra-1.2.4-cp310-cp310-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "b3b45b94aad07be643c84e3fd759c240",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 157805,
"upload_time": "2022-12-10T05:41:02",
"upload_time_iso_8601": "2022-12-10T05:41:02.274642Z",
"url": "https://files.pythonhosted.org/packages/8a/aa/131c9856d644a2482ef8976bff2f28764da18a1d32ba02e260a2aa118626/crossandra-1.2.4-cp310-cp310-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "26b19f000a65a2f0e1a589c3d74c53b8",
"sha256": "f55a74fbd0d16c5ecd1c617666a53d11de21d5e5b7201b15b19b59ecfdea1b24"
},
"downloads": -1,
"filename": "crossandra-1.2.4-cp310-cp310-win32.whl",
"has_sig": false,
"md5_digest": "26b19f000a65a2f0e1a589c3d74c53b8",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 65456,
"upload_time": "2022-12-10T05:41:03",
"upload_time_iso_8601": "2022-12-10T05:41:03.934019Z",
"url": "https://files.pythonhosted.org/packages/df/d4/79cf373c67f5dac971bf4c90a3f23b5b7493790148f7f15a4052c7947fd6/crossandra-1.2.4-cp310-cp310-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "e1f9e8a825c9ef314a7867097914ed7b",
"sha256": "aa8c1fc192c91d2b4dbe0ed259816a787277006588ed7f5294a4b2db15e2021d"
},
"downloads": -1,
"filename": "crossandra-1.2.4-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "e1f9e8a825c9ef314a7867097914ed7b",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": ">=3.9",
"size": 74507,
"upload_time": "2022-12-10T05:41:05",
"upload_time_iso_8601": "2022-12-10T05:41:05.577995Z",
"url": "https://files.pythonhosted.org/packages/c5/cb/861ae8c75b45a2a00f6599465ed37158445cc94885d0a34bec2898817e53/crossandra-1.2.4-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "8aa06481f0bf50e72d37192e276c8736",
"sha256": "5055723dab8ecf28f5ca512b733ddfc896785c3f50ac65ab7f025928a1547b40"
},
"downloads": -1,
"filename": "crossandra-1.2.4-cp311-cp311-macosx_10_9_universal2.whl",
"has_sig": false,
"md5_digest": "8aa06481f0bf50e72d37192e276c8736",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 168353,
"upload_time": "2022-12-10T05:41:07",
"upload_time_iso_8601": "2022-12-10T05:41:07.029760Z",
"url": "https://files.pythonhosted.org/packages/62/1f/2c7dd4609c7fe0bbf5d66b0cf8ff0749f7c67df576d96b2a6edacceb6e30/crossandra-1.2.4-cp311-cp311-macosx_10_9_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "a135de42ba4bea3c7f173896954997bf",
"sha256": "21ef41a6489093a06885babb099f4943feee8f572b09ece779c899b4972300c1"
},
"downloads": -1,
"filename": "crossandra-1.2.4-cp311-cp311-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "a135de42ba4bea3c7f173896954997bf",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 88652,
"upload_time": "2022-12-10T05:41:08",
"upload_time_iso_8601": "2022-12-10T05:41:08.472496Z",
"url": "https://files.pythonhosted.org/packages/a6/76/0093811e66958165cc2e9a65bb4ce54c648ae1ebc07372b6cc6342085755/crossandra-1.2.4-cp311-cp311-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "d4a3ad07605068869196f6ac6b261673",
"sha256": "9dfbca7a37f7824062fdb08fc80d614f64f7f31bed540cac12a375884eb46182"
},
"downloads": -1,
"filename": "crossandra-1.2.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "d4a3ad07605068869196f6ac6b261673",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 159917,
"upload_time": "2022-12-10T05:41:09",
"upload_time_iso_8601": "2022-12-10T05:41:09.887923Z",
"url": "https://files.pythonhosted.org/packages/f1/87/5784961031e4c5f27586945f531f2123272d9ea5a10c9700458edb925c7f/crossandra-1.2.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "3249602c4922e084393b82dc541a8cf3",
"sha256": "db3d00e30877d5c23d867dec56a8e36e0ec7cd475f4172db3202ef709d0bd8d6"
},
"downloads": -1,
"filename": "crossandra-1.2.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "3249602c4922e084393b82dc541a8cf3",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 161957,
"upload_time": "2022-12-10T05:41:14",
"upload_time_iso_8601": "2022-12-10T05:41:14.775968Z",
"url": "https://files.pythonhosted.org/packages/d8/4c/e666fceb50434501d4ea79b959abddbfaf1b94c051a6e9da7b2065cc22a7/crossandra-1.2.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "a52f8c4a8085591076fafa19ab119e65",
"sha256": "68e18fba9c7c1cca29b180dcf323e44194e9cae980ecf2e303b649f2a8e1e217"
},
"downloads": -1,
"filename": "crossandra-1.2.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "a52f8c4a8085591076fafa19ab119e65",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 164938,
"upload_time": "2022-12-10T05:41:16",
"upload_time_iso_8601": "2022-12-10T05:41:16.340084Z",
"url": "https://files.pythonhosted.org/packages/6d/9b/34542e1d15fc7538d7099f712842fb915d76f5b83a2c124bab519e5d4316/crossandra-1.2.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "8fff660db359cf12edd7d63a18f1e382",
"sha256": "8154cdb42a5b20491d9d2ac3ecd55219eca8973c7c15e2cfd03a4d2280163732"
},
"downloads": -1,
"filename": "crossandra-1.2.4-cp311-cp311-musllinux_1_1_aarch64.whl",
"has_sig": false,
"md5_digest": "8fff660db359cf12edd7d63a18f1e382",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 155795,
"upload_time": "2022-12-10T05:41:17",
"upload_time_iso_8601": "2022-12-10T05:41:17.743209Z",
"url": "https://files.pythonhosted.org/packages/cc/cd/c6672a5abe3a2ee25b6c66740e44bf874c4a509fbaf5dd310e196300fee0/crossandra-1.2.4-cp311-cp311-musllinux_1_1_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "1c58060d026068487fcf777431099d44",
"sha256": "cdbd2607a141152b6cac2386d61419028533621fef9eb8df8e6118ab6ab8a51f"
},
"downloads": -1,
"filename": "crossandra-1.2.4-cp311-cp311-musllinux_1_1_i686.whl",
"has_sig": false,
"md5_digest": "1c58060d026068487fcf777431099d44",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 159635,
"upload_time": "2022-12-10T05:41:19",
"upload_time_iso_8601": "2022-12-10T05:41:19.408844Z",
"url": "https://files.pythonhosted.org/packages/ca/0c/ae9a160e425c872939104e690db9f9c0ff9362035ca7502e549cc843bf6b/crossandra-1.2.4-cp311-cp311-musllinux_1_1_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "100ec07acc23b3abd6e7d41211053664",
"sha256": "5c4a2152cb5b8f1ddacd1a80d2c252219349c3a5893b40250784825b99b154e6"
},
"downloads": -1,
"filename": "crossandra-1.2.4-cp311-cp311-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "100ec07acc23b3abd6e7d41211053664",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 156651,
"upload_time": "2022-12-10T05:41:20",
"upload_time_iso_8601": "2022-12-10T05:41:20.459237Z",
"url": "https://files.pythonhosted.org/packages/03/cb/e5d7f126f68227275f2bb297f4b04cc800bd121c7106689d71823887ff66/crossandra-1.2.4-cp311-cp311-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "c780200fa4499d96e3da8ec32911b36e",
"sha256": "69a8ef7123dc68a7436b3ff87b07b574ab5a6c705db0990dd3bd88b6a0426461"
},
"downloads": -1,
"filename": "crossandra-1.2.4-cp311-cp311-win32.whl",
"has_sig": false,
"md5_digest": "c780200fa4499d96e3da8ec32911b36e",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 65124,
"upload_time": "2022-12-10T05:41:21",
"upload_time_iso_8601": "2022-12-10T05:41:21.892413Z",
"url": "https://files.pythonhosted.org/packages/28/0e/1c2c4f8de4e93da93814b641a339b8a9f2c7ec2779077695e059ecdc1bad/crossandra-1.2.4-cp311-cp311-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "0a91de710d0b0a3504ffb570afb3f4a5",
"sha256": "08f0035673f0d9b8d3cc5bc46be39dfcd8435407cb0611c23d024ab1e4add8d0"
},
"downloads": -1,
"filename": "crossandra-1.2.4-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "0a91de710d0b0a3504ffb570afb3f4a5",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": ">=3.9",
"size": 74086,
"upload_time": "2022-12-10T05:41:23",
"upload_time_iso_8601": "2022-12-10T05:41:23.484766Z",
"url": "https://files.pythonhosted.org/packages/e8/6a/c5272b9e9dfb4f9ae7b690bfa9295298479ab9c05c38878002b90b9edc4f/crossandra-1.2.4-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "295a31080d3bb2a54c297ef2f1eb5102",
"sha256": "181e62148aab4c0cdbcab1c594e92e0ca33417effd5c2d6b91d809cb60ec8981"
},
"downloads": -1,
"filename": "crossandra-1.2.4-cp39-cp39-macosx_10_9_universal2.whl",
"has_sig": false,
"md5_digest": "295a31080d3bb2a54c297ef2f1eb5102",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 169995,
"upload_time": "2022-12-10T05:41:27",
"upload_time_iso_8601": "2022-12-10T05:41:27.965423Z",
"url": "https://files.pythonhosted.org/packages/7e/e9/5845e769800d2867aa3d3af0b75dc520735b9ae5b95853ebe990531dfa9a/crossandra-1.2.4-cp39-cp39-macosx_10_9_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "2034eb578475f08f0ac9a5f7f34da934",
"sha256": "3fc156319597ea9dad5ac0a0047e126e3baa062b7fb5de66c694286b6a570852"
},
"downloads": -1,
"filename": "crossandra-1.2.4-cp39-cp39-macosx_10_9_x86_64.whl",
"has_sig": false,
"md5_digest": "2034eb578475f08f0ac9a5f7f34da934",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 89445,
"upload_time": "2022-12-10T05:41:29",
"upload_time_iso_8601": "2022-12-10T05:41:29.419731Z",
"url": "https://files.pythonhosted.org/packages/00/60/b07388ebf8e2e700d1c266110441135c60bf88731f2d4071ff1efab82a64/crossandra-1.2.4-cp39-cp39-macosx_10_9_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "38c912c649b88f2db226be9d479561bc",
"sha256": "6d28ea6879e6925152d1636a1e6be6f60a17991cf5c576fd234eaa196e146b94"
},
"downloads": -1,
"filename": "crossandra-1.2.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "38c912c649b88f2db226be9d479561bc",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 160587,
"upload_time": "2022-12-10T05:41:30",
"upload_time_iso_8601": "2022-12-10T05:41:30.705731Z",
"url": "https://files.pythonhosted.org/packages/91/0d/273bde89df1fa89792057c277cbe984d8fec0738fc819d84e59d8027049b/crossandra-1.2.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "44eed6835782807556c39a248a631593",
"sha256": "b096890d67ddf57c0894b4eaae8b9bb28db552ed7db65828b3bb40c128e2d27d"
},
"downloads": -1,
"filename": "crossandra-1.2.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "44eed6835782807556c39a248a631593",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 162575,
"upload_time": "2022-12-10T05:41:31",
"upload_time_iso_8601": "2022-12-10T05:41:31.788930Z",
"url": "https://files.pythonhosted.org/packages/4c/43/130e9b16367c988bc4c219e476181869adfdbcbebbf88b7c96da5bd62675/crossandra-1.2.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "508a4a616b22d4e8a60218bce727464a",
"sha256": "aeb3a2856522a4455a3fbc3e1ee84be1409c786e3c9cec31453c02f4466b392b"
},
"downloads": -1,
"filename": "crossandra-1.2.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl",
"has_sig": false,
"md5_digest": "508a4a616b22d4e8a60218bce727464a",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 166192,
"upload_time": "2022-12-10T05:41:32",
"upload_time_iso_8601": "2022-12-10T05:41:32.843223Z",
"url": "https://files.pythonhosted.org/packages/75/84/cce494010b375aaee3d64fc4747e0af8ea786c546e80834d6338f18d9b5c/crossandra-1.2.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "4c831f15392dd74db8b49caaf9c6b1eb",
"sha256": "7ec198536c9a2c68ea509d2b53412def8f5e36a26f4573a54817ae79cdc11d0e"
},
"downloads": -1,
"filename": "crossandra-1.2.4-cp39-cp39-musllinux_1_1_aarch64.whl",
"has_sig": false,
"md5_digest": "4c831f15392dd74db8b49caaf9c6b1eb",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 156755,
"upload_time": "2022-12-10T05:41:33",
"upload_time_iso_8601": "2022-12-10T05:41:33.926269Z",
"url": "https://files.pythonhosted.org/packages/7d/ec/13237eda6bcd7980b4499538f635d5a67715a4b4e3c116235d63d06b0831/crossandra-1.2.4-cp39-cp39-musllinux_1_1_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "8147ca25d5de7f8520d22f40d5dc9680",
"sha256": "f42f0965493fda4542c31bf5a156e5a5ec31b7556a3a6dcbd5270519cf855a4d"
},
"downloads": -1,
"filename": "crossandra-1.2.4-cp39-cp39-musllinux_1_1_i686.whl",
"has_sig": false,
"md5_digest": "8147ca25d5de7f8520d22f40d5dc9680",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 161334,
"upload_time": "2022-12-10T05:41:34",
"upload_time_iso_8601": "2022-12-10T05:41:34.981716Z",
"url": "https://files.pythonhosted.org/packages/c3/87/2d0346a69783f9cffc7c424725da3e9bbbad0e91a094b4cf98b20279b210/crossandra-1.2.4-cp39-cp39-musllinux_1_1_i686.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "3084f6c110432ef542a8e32b414201cb",
"sha256": "8bae1918a1dcc9d140c0cd963ae283d8cc8f2a1886b27c49190384ca293e4ef9"
},
"downloads": -1,
"filename": "crossandra-1.2.4-cp39-cp39-musllinux_1_1_x86_64.whl",
"has_sig": false,
"md5_digest": "3084f6c110432ef542a8e32b414201cb",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 157628,
"upload_time": "2022-12-10T05:41:36",
"upload_time_iso_8601": "2022-12-10T05:41:36.063824Z",
"url": "https://files.pythonhosted.org/packages/6f/17/5b077ae1e826b0231500fb8465fa2de33aaea06cd66559cd0db7f7b80c02/crossandra-1.2.4-cp39-cp39-musllinux_1_1_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "8394843ee72acc61797dbd44794ebd10",
"sha256": "c0db657d80096652b5588c6051410b839c8363ec802a1f743921f99daea1949f"
},
"downloads": -1,
"filename": "crossandra-1.2.4-cp39-cp39-win32.whl",
"has_sig": false,
"md5_digest": "8394843ee72acc61797dbd44794ebd10",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 65391,
"upload_time": "2022-12-10T05:41:37",
"upload_time_iso_8601": "2022-12-10T05:41:37.741269Z",
"url": "https://files.pythonhosted.org/packages/c0/48/e1548f262cbecbe620dc4f20d4311f98201bbd66095aac1ea0a97599e98f/crossandra-1.2.4-cp39-cp39-win32.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "ed833a9c11d74c8078da8f0f235da8a4",
"sha256": "a511d148e347cb84096942c433cd0a27313d485d87af280b67666726a0e7e107"
},
"downloads": -1,
"filename": "crossandra-1.2.4-cp39-cp39-win_amd64.whl",
"has_sig": false,
"md5_digest": "ed833a9c11d74c8078da8f0f235da8a4",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": ">=3.9",
"size": 74460,
"upload_time": "2022-12-10T05:41:39",
"upload_time_iso_8601": "2022-12-10T05:41:39.131100Z",
"url": "https://files.pythonhosted.org/packages/b9/95/d9927433dc3026ace380cb4e1a9ec0eee7134a070f8b390a0a55af66d235/crossandra-1.2.4-cp39-cp39-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"md5": "35be68fa88b1f13c275dc1e7e969a12a",
"sha256": "e78e961d6543466ab4b1b491026e7da87b1b795407353c87e69c7facb4636f01"
},
"downloads": -1,
"filename": "crossandra-1.2.4.tar.gz",
"has_sig": false,
"md5_digest": "35be68fa88b1f13c275dc1e7e969a12a",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 6498,
"upload_time": "2022-12-10T05:41:40",
"upload_time_iso_8601": "2022-12-10T05:41:40.259377Z",
"url": "https://files.pythonhosted.org/packages/c1/57/dc3eba0f1446958bdac6c2df0a837bcd1973da0bd0e22beb19cee4494942/crossandra-1.2.4.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2022-12-10 05:41:40",
"github": false,
"gitlab": false,
"bitbucket": false,
"lcname": "crossandra"
}