crossandra


Namecrossandra JSON
Version 1.2.4 PyPI version JSON
download
home_page
SummaryA simple tokenizer operating on enums with a decent amount of configuration
upload_time2022-12-10 05:41:40
maintainer
docs_urlNone
author
requires_python>=3.9
licenseMIT
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"
}
        
Elapsed time: 0.01775s