chrontext


Namechrontext JSON
Version 0.8.15 PyPI version JSON
download
home_pageNone
SummaryHybrid SPARQL query engine for timeseries data
upload_time2024-04-23 08:29:15
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseNone
keywords rdf graph arrow sparql timeseries
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # chrontext
[SPARQL](https://www.w3.org/TR/sparql11-overview/)- and [Apache Arrow](https://arrow.apache.org/)-based high throughput access to time series data residing in an arbitrary time series database which is contextualized by a knowledge graph. 
It is built in [Rust](https://www.rust-lang.org/) using [pola.rs](https://www.pola.rs/), [spargebra](https://docs.rs/spargebra/latest/spargebra/), [sparesults](https://docs.rs/sparesults/0.1.1/sparesults/) and [oxrdf](https://docs.rs/oxrdf/latest/oxrdf/) from the [Oxigraph](https://github.com/oxigraph/oxigraph) project. 

Chrontext is written with data analysts and data engineers who want to extract contextualised time series data as data frames. 
Chrontext allows them to do this in an efficient way using SPARQL. 
It supports data extraction scenarios in industry where data needs to be accessed in cloud data lake and on-premise settings by supporting in principle arbitrary time series database backends. 
Currently, we support OPC UA HA and Dremio (using SQL over Apache Arrow Flight). Chrontext can be configured to push down query executions into the time series database according to its capabilities in order to offload computations and minimize I/O. 

To read more about Chrontext, read the preprint article [Chrontext: Portable Sparql Queries Over Contextualised Time Series Data in Industrial Settings](https://papers.ssrn.com/sol3/papers.cfm?abstract_id=4310978).
This is joint work by Magnus Bakken and Professor [Ahmet Soylu](https://www.oslomet.no/om/ansatt/ahmetsoy/) at OsloMet. 
Please reach out to us if you would like help trying Chrontext. 

## Metadata
Chrontext assumes that we have a knowledge base in a SPARQL database and a time series database. The knowledge base is annotated to link some URIs to identifiers of time series in the time series database. 
![Chrontext Metadata Representation](doc/chrontext_representation.png)

## Execution
At query time, we rewrite queries that span both "static" data in the SPARQL database and the time series database into parts that concern the SPARQL engine and the time series database respectively. 
The "static" queries are amended to extract the metadata linking URIs to time series. 
Query execution is then interleaved and results are combined to produce the answer to the original query. 
![Chrontext sequence diagram](doc/chrontext_seq.png)

## Queries in python
We can make queries in Python. The code assumes that we have a SPARQL-endpoint and an Arrow Flight SQL-endpoint (Dremio) set up. 
```python
import pathlib
from chrontext import Engine, TimeseriesDremioDatabase, TimeseriesTable

tables = [
    TimeseriesTable(
        resource_name="my_resource",
        schema="my_nas",
        time_series_table="ts.parquet",
        value_column="v",
        timestamp_column="ts",
        identifier_column="id",
        value_datatype="http://www.w3.org/2001/XMLSchema#unsignedInt")
]
arrow_flight_sql_db = TimeseriesDremioDatabase(host=DREMIO_HOST, port=DREMIO_PORT, username="dremio",
                                                   password="dremio123", tables=tables)
engine = Engine(sparql_endpoint=OXIGRAPH_QUERY_ENDPOINT, timeseries_dremio_db=timeseries_dremio_db)
engine.init()

df = engine.query("""
PREFIX xsd:<http://www.w3.org/2001/XMLSchema#>
PREFIX chrontext:<https://github.com/DataTreehouse/chrontext#>
PREFIX types:<http://example.org/types#>
SELECT ?w ?s ?t ?v WHERE {
    ?w a types:BigWidget .
    ?w types:hasSensor ?s .
    ?s chrontext:hasTimeseries ?ts .
    ?ts chrontext:hasDataPoint ?dp .
    ?dp chrontext:hasTimestamp ?t .
    ?dp chrontext:hasValue ?v .
    FILTER(?t > "2022-06-01T08:46:53"^^xsd:dateTime && ?v < 200) .
}
    """)
```

## Installing pre-built wheels
Chrontext is in pip, just use:
```shell
pip install chrontext
```

## License
All code produced since August 1st. 2023 is copyrighted to [Data Treehouse AS](https://www.data-treehouse.com/) with an Apache 2.0 license unless otherwise noted. 

All code which was produced before August 1st. 2023 copyrighted to [Prediktor AS](https://www.prediktor.com/) with an Apache 2.0 license unless otherwise noted, and has been financed by [The Research Council of Norway](https://www.forskningsradet.no/en/) (grant no. 316656) and [Prediktor AS](https://www.prediktor.com/) as part of a PhD Degree. The code at this state is archived in the repository at [https://github.com/DataTreehouse/chrontext](https://github.com/DataTreehouse/chrontext).


            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "chrontext",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "rdf, graph, arrow, sparql, timeseries",
    "author": null,
    "author_email": "Magnus Bakken <magnus@data-treehouse.com>",
    "download_url": "https://files.pythonhosted.org/packages/31/63/7f6a0b9a4d61e821a53e5a49a201664e05d7247fd363bd4ac72406e2b981/chrontext-0.8.15.tar.gz",
    "platform": null,
    "description": "# chrontext\n[SPARQL](https://www.w3.org/TR/sparql11-overview/)- and [Apache Arrow](https://arrow.apache.org/)-based high throughput access to time series data residing in an arbitrary time series database which is contextualized by a knowledge graph. \nIt is built in [Rust](https://www.rust-lang.org/) using [pola.rs](https://www.pola.rs/), [spargebra](https://docs.rs/spargebra/latest/spargebra/), [sparesults](https://docs.rs/sparesults/0.1.1/sparesults/) and [oxrdf](https://docs.rs/oxrdf/latest/oxrdf/) from the [Oxigraph](https://github.com/oxigraph/oxigraph) project. \n\nChrontext is written with data analysts and data engineers who want to extract contextualised time series data as data frames. \nChrontext allows them to do this in an efficient way using SPARQL. \nIt supports data extraction scenarios in industry where data needs to be accessed in cloud data lake and on-premise settings by supporting in principle arbitrary time series database backends. \nCurrently, we support OPC UA HA and Dremio (using SQL over Apache Arrow Flight). Chrontext can be configured to push down query executions into the time series database according to its capabilities in order to offload computations and minimize I/O. \n\nTo read more about Chrontext, read the preprint article [Chrontext: Portable Sparql Queries Over Contextualised Time Series Data in Industrial Settings](https://papers.ssrn.com/sol3/papers.cfm?abstract_id=4310978).\nThis is joint work by Magnus Bakken and Professor [Ahmet Soylu](https://www.oslomet.no/om/ansatt/ahmetsoy/) at OsloMet. \nPlease reach out to us if you would like help trying Chrontext. \n\n## Metadata\nChrontext assumes that we have a knowledge base in a SPARQL database and a time series database. The knowledge base is annotated to link some URIs to identifiers of time series in the time series database. \n![Chrontext Metadata Representation](doc/chrontext_representation.png)\n\n## Execution\nAt query time, we rewrite queries that span both \"static\" data in the SPARQL database and the time series database into parts that concern the SPARQL engine and the time series database respectively. \nThe \"static\" queries are amended to extract the metadata linking URIs to time series. \nQuery execution is then interleaved and results are combined to produce the answer to the original query. \n![Chrontext sequence diagram](doc/chrontext_seq.png)\n\n## Queries in python\nWe can make queries in Python. The code assumes that we have a SPARQL-endpoint and an Arrow Flight SQL-endpoint (Dremio) set up. \n```python\nimport pathlib\nfrom chrontext import Engine, TimeseriesDremioDatabase, TimeseriesTable\n\ntables = [\n    TimeseriesTable(\n        resource_name=\"my_resource\",\n        schema=\"my_nas\",\n        time_series_table=\"ts.parquet\",\n        value_column=\"v\",\n        timestamp_column=\"ts\",\n        identifier_column=\"id\",\n        value_datatype=\"http://www.w3.org/2001/XMLSchema#unsignedInt\")\n]\narrow_flight_sql_db = TimeseriesDremioDatabase(host=DREMIO_HOST, port=DREMIO_PORT, username=\"dremio\",\n                                                   password=\"dremio123\", tables=tables)\nengine = Engine(sparql_endpoint=OXIGRAPH_QUERY_ENDPOINT, timeseries_dremio_db=timeseries_dremio_db)\nengine.init()\n\ndf = engine.query(\"\"\"\nPREFIX xsd:<http://www.w3.org/2001/XMLSchema#>\nPREFIX chrontext:<https://github.com/DataTreehouse/chrontext#>\nPREFIX types:<http://example.org/types#>\nSELECT ?w ?s ?t ?v WHERE {\n    ?w a types:BigWidget .\n    ?w types:hasSensor ?s .\n    ?s chrontext:hasTimeseries ?ts .\n    ?ts chrontext:hasDataPoint ?dp .\n    ?dp chrontext:hasTimestamp ?t .\n    ?dp chrontext:hasValue ?v .\n    FILTER(?t > \"2022-06-01T08:46:53\"^^xsd:dateTime && ?v < 200) .\n}\n    \"\"\")\n```\n\n## Installing pre-built wheels\nChrontext is in pip, just use:\n```shell\npip install chrontext\n```\n\n## License\nAll code produced since August 1st. 2023 is copyrighted to [Data Treehouse AS](https://www.data-treehouse.com/) with an Apache 2.0 license unless otherwise noted. \n\nAll code which was produced before August 1st. 2023 copyrighted to [Prediktor AS](https://www.prediktor.com/) with an Apache 2.0 license unless otherwise noted, and has been financed by [The Research Council of Norway](https://www.forskningsradet.no/en/) (grant no. 316656) and [Prediktor AS](https://www.prediktor.com/) as part of a PhD Degree. The code at this state is archived in the repository at [https://github.com/DataTreehouse/chrontext](https://github.com/DataTreehouse/chrontext).\n\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Hybrid SPARQL query engine for timeseries data",
    "version": "0.8.15",
    "project_urls": {
        "Changelog": "https://github.com/DataTreehouse/chrontext/releases",
        "Documentation": "https://github.com/DataTreehouse/chrontext",
        "Homepage": "https://github.com/DataTreehouse/chrontext",
        "Repository": "https://github.com/DataTreehouse/chrontext"
    },
    "split_keywords": [
        "rdf",
        " graph",
        " arrow",
        " sparql",
        " timeseries"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "459f033721551caea274b223826c7bdcd0c36bb5e0269334f1557e64c93d22df",
                "md5": "daa7cb6d3ae507fef6bfda361d573ae2",
                "sha256": "27ccd08b33798093eb98947ab5f00288ba46cfe45285e19a310c7ffc2db18d07"
            },
            "downloads": -1,
            "filename": "chrontext-0.8.15-cp310-cp310-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "daa7cb6d3ae507fef6bfda361d573ae2",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 20719638,
            "upload_time": "2024-04-23T08:27:23",
            "upload_time_iso_8601": "2024-04-23T08:27:23.446451Z",
            "url": "https://files.pythonhosted.org/packages/45/9f/033721551caea274b223826c7bdcd0c36bb5e0269334f1557e64c93d22df/chrontext-0.8.15-cp310-cp310-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7a336de15a348ab911ea624f527a79ab1e2a8f9495d79cd4fd2285aad9926427",
                "md5": "71d7c576d6fc55b7df1889f2c45365fc",
                "sha256": "076fd6dfde4918ce5eb5e70aded0e399535f2b185c6d9eb3914d18110669e1ea"
            },
            "downloads": -1,
            "filename": "chrontext-0.8.15-cp310-cp310-macosx_12_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "71d7c576d6fc55b7df1889f2c45365fc",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 20710624,
            "upload_time": "2024-04-23T08:20:51",
            "upload_time_iso_8601": "2024-04-23T08:20:51.992996Z",
            "url": "https://files.pythonhosted.org/packages/7a/33/6de15a348ab911ea624f527a79ab1e2a8f9495d79cd4fd2285aad9926427/chrontext-0.8.15-cp310-cp310-macosx_12_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f48f8375e25f434155e9a23c53f5935fd3a6d9ad603de43dc0784b4414487af2",
                "md5": "5372481973001e87717f73bbb38cebeb",
                "sha256": "a75e571851fe54f9f58acfedb19243dc7a069f1f63edc3bfb6a2a9ab9ddb4ebc"
            },
            "downloads": -1,
            "filename": "chrontext-0.8.15-cp310-cp310-manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "5372481973001e87717f73bbb38cebeb",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 29704647,
            "upload_time": "2024-04-23T08:30:02",
            "upload_time_iso_8601": "2024-04-23T08:30:02.737356Z",
            "url": "https://files.pythonhosted.org/packages/f4/8f/8375e25f434155e9a23c53f5935fd3a6d9ad603de43dc0784b4414487af2/chrontext-0.8.15-cp310-cp310-manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "6549631a1aad67f63f99191292827d10ca4e930205160fe594377f18846e3ef5",
                "md5": "c6dfddd643fb4f7bba3b9aaf3fa7dcac",
                "sha256": "98059610532c02637bb98b1e93ba68c5b6e8ea2054ed1018750a94393feb118d"
            },
            "downloads": -1,
            "filename": "chrontext-0.8.15-cp310-none-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "c6dfddd643fb4f7bba3b9aaf3fa7dcac",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.8",
            "size": 23567309,
            "upload_time": "2024-04-23T08:46:19",
            "upload_time_iso_8601": "2024-04-23T08:46:19.254028Z",
            "url": "https://files.pythonhosted.org/packages/65/49/631a1aad67f63f99191292827d10ca4e930205160fe594377f18846e3ef5/chrontext-0.8.15-cp310-none-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "eaeada1561bff15e989d394efe1378290442cfda2403487b4d7b3e19846b4d12",
                "md5": "4d5d8db58faa959f2b09f7df86fd0dfd",
                "sha256": "948bbe4cc2985efe2ffc9b657c0f5988325b82a9788184788f4427842abf8f7d"
            },
            "downloads": -1,
            "filename": "chrontext-0.8.15-cp311-cp311-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "4d5d8db58faa959f2b09f7df86fd0dfd",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 20717930,
            "upload_time": "2024-04-23T08:26:35",
            "upload_time_iso_8601": "2024-04-23T08:26:35.983672Z",
            "url": "https://files.pythonhosted.org/packages/ea/ea/da1561bff15e989d394efe1378290442cfda2403487b4d7b3e19846b4d12/chrontext-0.8.15-cp311-cp311-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e02daa325abcd4b48f72c467f7b9cd711d9501c06db63ce94a3e1b43f7612a5b",
                "md5": "1fb0fa5ea416bbd7641c69dc9ba5e816",
                "sha256": "d298dc89f44b011c33e72d146d9f94dca7df2a9c3591314f3878cb6fc01a4e4b"
            },
            "downloads": -1,
            "filename": "chrontext-0.8.15-cp311-cp311-macosx_12_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "1fb0fa5ea416bbd7641c69dc9ba5e816",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 20707242,
            "upload_time": "2024-04-23T08:26:11",
            "upload_time_iso_8601": "2024-04-23T08:26:11.455910Z",
            "url": "https://files.pythonhosted.org/packages/e0/2d/aa325abcd4b48f72c467f7b9cd711d9501c06db63ce94a3e1b43f7612a5b/chrontext-0.8.15-cp311-cp311-macosx_12_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "5857341706ba91ec20c1371ba24f8ef2f3b03103e86bc0dd0e4c23e3163d56af",
                "md5": "9acc91de309a0688c24164d0bb7780e3",
                "sha256": "ee6a994b6acd690ab9305cc82132c8e644220b09308438dc027ec00f572caa5a"
            },
            "downloads": -1,
            "filename": "chrontext-0.8.15-cp311-cp311-manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "9acc91de309a0688c24164d0bb7780e3",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 29704651,
            "upload_time": "2024-04-23T08:29:40",
            "upload_time_iso_8601": "2024-04-23T08:29:40.914107Z",
            "url": "https://files.pythonhosted.org/packages/58/57/341706ba91ec20c1371ba24f8ef2f3b03103e86bc0dd0e4c23e3163d56af/chrontext-0.8.15-cp311-cp311-manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a915a9aed8eb55da14b1e5fe17ab090bf8b709b310f7b7041774169315807a48",
                "md5": "3ecc1e1b80402923ec94a9b5b65ab7c2",
                "sha256": "4afaf791cc3b44a6791e0042524bfb43e6d0e673516d223e2681d50388e8c63b"
            },
            "downloads": -1,
            "filename": "chrontext-0.8.15-cp311-none-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "3ecc1e1b80402923ec94a9b5b65ab7c2",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.8",
            "size": 23567932,
            "upload_time": "2024-04-23T08:41:27",
            "upload_time_iso_8601": "2024-04-23T08:41:27.386231Z",
            "url": "https://files.pythonhosted.org/packages/a9/15/a9aed8eb55da14b1e5fe17ab090bf8b709b310f7b7041774169315807a48/chrontext-0.8.15-cp311-none-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "16f297fd0396ce1e08e837807c2f30e193d44418961624c6044714bd0dc6e519",
                "md5": "6024fe0804bccb381b042002718ae525",
                "sha256": "a2ef5ec3708c9604811f9e03bdea35a1f00d51ff12c7b3977af7fec6f8afcc6e"
            },
            "downloads": -1,
            "filename": "chrontext-0.8.15-cp38-cp38-manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "6024fe0804bccb381b042002718ae525",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 29707180,
            "upload_time": "2024-04-23T08:29:28",
            "upload_time_iso_8601": "2024-04-23T08:29:28.501022Z",
            "url": "https://files.pythonhosted.org/packages/16/f2/97fd0396ce1e08e837807c2f30e193d44418961624c6044714bd0dc6e519/chrontext-0.8.15-cp38-cp38-manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "b793a4f717cbcf7125dbf34f8940a01ccc17d56898fc74b5b6409d01a2ea864d",
                "md5": "44f726fa8b80b22aff5ef5684c7f8a3f",
                "sha256": "5cd20bc47665d5fdeac4f9bc8d8b0e33971f4f69d5a25616d1a571f3fe54734d"
            },
            "downloads": -1,
            "filename": "chrontext-0.8.15-cp38-none-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "44f726fa8b80b22aff5ef5684c7f8a3f",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": ">=3.8",
            "size": 23567407,
            "upload_time": "2024-04-23T08:41:30",
            "upload_time_iso_8601": "2024-04-23T08:41:30.162673Z",
            "url": "https://files.pythonhosted.org/packages/b7/93/a4f717cbcf7125dbf34f8940a01ccc17d56898fc74b5b6409d01a2ea864d/chrontext-0.8.15-cp38-none-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "07e62bfada56f1844b7c425909d4a9328a6d72f565d18e733afa5480df043257",
                "md5": "831b135ab76d6709047d435799f7cb52",
                "sha256": "fb18cc8ebef4ee9902b1a0e5c039ea7f8a1e5bdf5e136ef0808415a462f0bbd6"
            },
            "downloads": -1,
            "filename": "chrontext-0.8.15-cp39-cp39-manylinux_2_28_x86_64.whl",
            "has_sig": false,
            "md5_digest": "831b135ab76d6709047d435799f7cb52",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 29705947,
            "upload_time": "2024-04-23T08:29:12",
            "upload_time_iso_8601": "2024-04-23T08:29:12.441935Z",
            "url": "https://files.pythonhosted.org/packages/07/e6/2bfada56f1844b7c425909d4a9328a6d72f565d18e733afa5480df043257/chrontext-0.8.15-cp39-cp39-manylinux_2_28_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "0c7e1f40d992c58d7d4b7721ffb0388420883f53800dec7df09623ffadcddaab",
                "md5": "e300959f6c1377eff021fd6f45572c05",
                "sha256": "d2308bf687f159d24137021f23d552aa1c3140040c8626ca9858cb0d2091d83a"
            },
            "downloads": -1,
            "filename": "chrontext-0.8.15-cp39-none-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "e300959f6c1377eff021fd6f45572c05",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.8",
            "size": 23566678,
            "upload_time": "2024-04-23T08:40:35",
            "upload_time_iso_8601": "2024-04-23T08:40:35.282680Z",
            "url": "https://files.pythonhosted.org/packages/0c/7e/1f40d992c58d7d4b7721ffb0388420883f53800dec7df09623ffadcddaab/chrontext-0.8.15-cp39-none-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "31637f6a0b9a4d61e821a53e5a49a201664e05d7247fd363bd4ac72406e2b981",
                "md5": "9e77e7976e7deee1641597c773984b50",
                "sha256": "858161b6fd590d41c99056ffc66d450038be3476a9754521fd504cab92005ff2"
            },
            "downloads": -1,
            "filename": "chrontext-0.8.15.tar.gz",
            "has_sig": false,
            "md5_digest": "9e77e7976e7deee1641597c773984b50",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 8869158,
            "upload_time": "2024-04-23T08:29:15",
            "upload_time_iso_8601": "2024-04-23T08:29:15.644139Z",
            "url": "https://files.pythonhosted.org/packages/31/63/7f6a0b9a4d61e821a53e5a49a201664e05d7247fd363bd4ac72406e2b981/chrontext-0.8.15.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-04-23 08:29:15",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "DataTreehouse",
    "github_project": "chrontext",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "chrontext"
}
        
Elapsed time: 0.25438s