# arXiv Query Language
The arXiv search API enables filtering articles based on various **fields** such as "title", "author", "category", etc.
Queries follow the format `{field_prefix}:{value}`, e.g., `ti:AlexNet`.
The query language supports combining field filters using logical operators AND, OR, ANDNOT.
Constructing these queries manually presents two challenges:
1. Writing syntactically correct query strings with abbreviated field prefixes
2. Navigating numerous arXiv category identifiers
This repository provides a pythonic query builder to address both challenges.
See the [arxiv documentation](https://info.arxiv.org/help/api/user-manual.html#query_details) for the official Search API details.
See the [arXiv Search API behavior](#important-arxiv-search-api-behavior) section for API behavior details and caveats.
## Installation
```shell
pip install arxivql
```
## Query
The `Query` class provides constructors for all supported arXiv fields and methods to combine them.
### Field Constructors
```python
from arxivql import Query as Q
# Single word search
print(Q.title('word'))
# Output:
# ti:word
# Exact phrase and author name searches
print(Q.abstract('some words'))
print(Q.author("Ilya Sutskever"))
# Output:
# abs:"some words"
# au:"Ilya Sutskever"
```
Multi-word field values are automatically double-quoted for exact phrase matching.
For ANY word matching, pass a **list** to the constructor:
```python
Q.abstract(["Syntactic", "natural language processing", "synthetic corpus"])
# Output:
# abs:(Syntactic "natural language processing" "synthetic corpus")
```
For ALL words matching, pass a **tuple** to the constructor:
```python
Q.abstract(("Syntactic", "natural language processing", "synthetic corpus"))
# Output:
# abs:(Syntactic AND "natural language processing" AND "synthetic corpus")
```
Note: All searches are case-insensitive.
### Logical Operations
Complex queries can be constructed by combining field filters using regular python logic operators:
```python
a1 = Q.author("Ilya Sutskever")
a2 = Q.author(("Geoffrey", "Hinton"))
c1 = Q.category("cs.NE") # See taxonomy section for preferred category construction
c2 = Q.category("cs.CL")
# AND operator
q1 = a1 & a2 & c1
# Output:
# ((au:"Ilya Sutskever" AND au:(Geoffrey AND Hinton)) AND cat:cs.NE)
# OR operator
q2 = (a1 | a2) & (c1 | c2)
# Output:
# ((au:"Ilya Sutskever" OR au:(Geoffrey AND Hinton)) AND (cat:cs.NE OR cat:cs.CL))
# ANDNOT operator
q3 = a1 & ~a2
# Output:
# (au:"Ilya Sutskever" ANDNOT au:(Geoffrey AND Hinton))
```
The following operations raise exceptions due to arXiv API limitations:
```python
~a1 # Error: standalone NOT operator not supported
a1 | ~a2 # Error: ORNOT operator not supported
```
### Wildcards
Wildcards (`?` and `*`) can be used in queries as usual. See the [arXiv Search API behavior](#important-arxiv-search-api-behavior) section for more details.
### Category Taxonomy
The `Taxonomy` class provides a structured interface for managing arXiv categories.
Basic usage:
```python
from arxivql import Taxonomy as T
print(T.cs.AI)
print(Q.category(T.cs.AI))
print(Q.category(T.cs))
print(Q.category((T.cs.LG, T.stat.ML)) & Q.title("LLM"))
# Output:
# cs.AI
# cat:cs.AI
# cat:cs.*
# (cat:(cs.LG AND stat.ML) AND ti:LLM)
```
Note the wildcard syntax in archive-level queries (e.g., `T.cs`).
The Taxonomy class provides comprehensive category information:
```python
category = T.astro_ph.HE
print("id: ", category.id)
print("name: ", category.name)
print("group_name: ", category.group_name)
print("archive_id: ", category.archive_id)
print("archive_name:", category.archive_name)
print("description: ", category.description)
# Output:
# id: astro-ph.HE
# name: High Energy Astrophysical Phenomena
# group_name: Physics
# archive_id: astro-ph
# archive_name: Astrophysics
# description: Cosmic ray production, acceleration, propagation, detection. Gamma ray astronomy and bursts, X-rays, charged particles, supernovae and other explosive phenomena, stellar remnants and accretion systems, jets, microquasars, neutron stars, pulsars, black holes
```
The library also provides useful category catalog:
```python
from arxivql.taxonomy import catalog, categories_by_id
print(len(categories_by_id.keys()))
# Output:
# 157
print(len(catalog.all_categories))
# Output:
# 157
print(len(catalog.all_archives))
print(Q.category(catalog.all_archives))
# Output:
# 20
# cat:(cs.* econ.* eess.* math.* q-bio.* q-fin.* stat.* astro-ph* cond-mat* nlin.* physics.* gr-qc hep-ex hep-lat hep-ph hep-th math-ph nucl-ex nucl-th quant-ph)
# Broad Machine Learning categories, see official classification guide
# https://blog.arxiv.org/2019/12/05/arxiv-machine-learning-classification-guide
print(len(catalog.ml_broad))
print(Q.category(catalog.ml_broad))
# Output:
# 16
# cat:(cs.LG stat.ML math.OC cs.CV cs.CL eess.AS cs.IR cs.HC cs.SI cs.CY cs.GR cs.SY cs.AI cs.MM cs.ET cs.NE)
# Core Machine Learning categories according to Andrej Karpathy's `arxiv sanity preserver` project:
# https://github.com/karpathy/arxiv-sanity-preserver
print(len(catalog.ml_karpathy))
print(Q.category(catalog.ml_karpathy))
# Output:
# 6
# cat:(cs.CV cs.AI cs.CL cs.LG cs.NE stat.ML)
```
### Usage with Python arXiv Client
Constructed queries can be directly used in [python arXiv API wrapper](https://pypi.org/project/arxiv):
```python
# pip install arxiv
import arxiv
from arxivql import Query as Q, Taxonomy as T
query = Q.author("Ilya Sutskever") & Q.title("autoencoders") & ~Q.category(T.cs.AI)
search = arxiv.Search(query=query)
client = arxiv.Client()
results = list(client.results(search))
print(f"query = {query}")
for result in results:
print(result.get_short_id(), result.title)
# Output:
# query = ((au:"Ilya Sutskever" AND ti:autoencoders) ANDNOT cat:cs.AI)
# 1611.02731v2 Variational Lossy Autoencoder
```
## Important arXiv Search API Behavior
- Category searches consider all listed categories, not only primary ones.
- arXiv supports two wildcard characters: `?` and `*`.
- `?` replaces one character in a word
- `*` replaces zero or more characters in a word
- They don't match the first character of the term, i.e., `au:??tskever` fails, but `au:Sutske???` is okay
- Categories can also be "wildcarded", i.e., `cat:cs.?I` is a valid filter
- `?` and `*` can be combined, e.g., `cat:q-?i*` is valid and matches both `q-bio` and `q-fin`
- Quoted items imply exact sequence matching:
- For text fields, this means standard phrase matching
- For categories, order matters: `cat:"hep-th cs.AI"` differs from `cat:"cs.AI hep-th"`. Article categories are ordered in arXiv API.
- Queries like `cat:"cs.* hep-th"` or `cat:"cs.*"` return no results as they search for literal category names, and, e.g., literal `cs.*` category does not exist.
- Double quotes are special characters and should be carefully handled. E.g., `"""` finds nothing, and `""2"""` is equivalent to `"2"` and `2`.
- This library raises exceptions for most such problematic queries.
- Spaces between terms or fields imply OR operations:
`cat:hep-th cat:cs.AI` equals `cat:hep-th OR cat:cs.AI`
- Parentheses serve two purposes:
1. Grouping logical operations
2. Defining field scope, e.g., `ti:(some words)` treats spaces as OR operations.
Examples:
- `cat:(cs.AI hep-th)` matches articles with either category
- `cat:(cs.* hep-th)` functions as expected with wildcards
- Explicit operators in field scopes are supported:
`ti:(some OR words)` and `ti:(some AND words)` are valid
- The `id_list` parameter (and legacy `id:` field filter) in the arXiv Search API is used internally to filter over the "major" article IDs (`2410.21276`), not the "version" IDs (`2410.21276v1`).
- When used with a non-empty query:
```python
# pip install arxiv
arxiv.Search(query="au:Sutskever", id_list=["2303.08774v6"]) # zero results
arxiv.Search(query="au:Sutskever", id_list=["2303.08774"]) # -> 2303.08774v6 (latest)
```
- BUT if the query is left empty, `id_list` and `id:` can be used to search for the exact article version:
```python
arxiv.Search(id_list=["2303.08774"]) # -> 2303.08774v6 (latest)
arxiv.Search(id_list=["2303.08774v4"]) # -> 2303.08774v4
arxiv.Search(id_list=["2303.08774v5"]) # -> 2303.08774v5
arxiv.Search(id_list=["2303.08774v99"]) # -> obscure error
```
# arXiv Categories Taxonomy
The arXiv taxonomy consists of three hierarchical levels: group → archive → category.
For complete details, consult the [arXiv Category Taxonomy](https://arxiv.org/category_taxonomy) and [arXiv Catchup Interface](https://arxiv.org/catchup).
## Category
Categories represent the finest granularity of classification.
Category identifiers typically follow the pattern `{archive}.{category}`, with some exceptions noted below.
Example: In `astro-ph.HE`, the hierarchy is:
- Group: `Physics`
- Archive: `Astrophysics`
- Category: `High Energy Astrophysical Phenomena`
- Queryable ID: `astro-ph.HE`
<img src="https://raw.githubusercontent.com/romazu/arxivql/main/assets/images/taxonomy_astro-ph.HE-fs8.png" width="35%">
## Group
Groups constitute the top level of taxonomy, currently including:
- Computer Science
- Economics
- Electrical Engineering and Systems Science
- Mathematics
- Physics
- Quantitative Biology
- Quantitative Finance
- Statistics
## Archive
Archives form the intermediate level, with each belonging to exactly one group.
Special cases:
1. Single-archive groups:
- When a group contains only one archive, they share the same name
- Example: `q-fin.CP` category has `Quantitative Finance` → `Quantitative Finance` → `Computational Finance`
<img src="https://raw.githubusercontent.com/romazu/arxivql/main/assets/images/taxonomy_q-fin.CP-fs8.png" width="35%">
2. Single-category archives:
- When an archive contains only one category, the archive name is omitted from the identifier
- Example: `hep-th` category has `Physics` → `High Energy Physics - Theory` → `High Energy Physics - Theory`
<img src="https://raw.githubusercontent.com/romazu/arxivql/main/assets/images/taxonomy_hep-th-fs8.png" width="35%">
Note: The `Physics` group contains a `Physics` archive alongside other archives, which may cause confusion.
Raw data
{
"_id": null,
"home_page": "https://github.com/romazu/arxivql",
"name": "arxivql",
"maintainer": null,
"docs_url": null,
"requires_python": "<4.0,>=3.7",
"maintainer_email": null,
"keywords": "arxiv, api, academic, articles, query, language, dsl",
"author": "Roman Zubov",
"author_email": "romazu@protonmail.com",
"download_url": "https://files.pythonhosted.org/packages/9a/18/e24cf15f2d8bb7b4a9b5de08d97385b38ce3962ca30a20f7133a6a0eef7d/arxivql-0.2.2.tar.gz",
"platform": null,
"description": "# arXiv Query Language\n\nThe arXiv search API enables filtering articles based on various **fields** such as \"title\", \"author\", \"category\", etc.\nQueries follow the format `{field_prefix}:{value}`, e.g., `ti:AlexNet`.\nThe query language supports combining field filters using logical operators AND, OR, ANDNOT.\nConstructing these queries manually presents two challenges:\n1. Writing syntactically correct query strings with abbreviated field prefixes\n2. Navigating numerous arXiv category identifiers\n\nThis repository provides a pythonic query builder to address both challenges.\nSee the [arxiv documentation](https://info.arxiv.org/help/api/user-manual.html#query_details) for the official Search API details.\nSee the [arXiv Search API behavior](#important-arxiv-search-api-behavior) section for API behavior details and caveats.\n\n## Installation\n```shell\npip install arxivql\n```\n\n## Query\nThe `Query` class provides constructors for all supported arXiv fields and methods to combine them.\n\n### Field Constructors\n\n```python\nfrom arxivql import Query as Q\n\n# Single word search\nprint(Q.title('word'))\n# Output:\n# ti:word\n\n# Exact phrase and author name searches\nprint(Q.abstract('some words'))\nprint(Q.author(\"Ilya Sutskever\"))\n# Output:\n# abs:\"some words\"\n# au:\"Ilya Sutskever\"\n```\nMulti-word field values are automatically double-quoted for exact phrase matching.\nFor ANY word matching, pass a **list** to the constructor:\n```python\nQ.abstract([\"Syntactic\", \"natural language processing\", \"synthetic corpus\"])\n# Output:\n# abs:(Syntactic \"natural language processing\" \"synthetic corpus\")\n```\nFor ALL words matching, pass a **tuple** to the constructor:\n```python\nQ.abstract((\"Syntactic\", \"natural language processing\", \"synthetic corpus\"))\n# Output:\n# abs:(Syntactic AND \"natural language processing\" AND \"synthetic corpus\")\n```\nNote: All searches are case-insensitive.\n\n\n### Logical Operations\nComplex queries can be constructed by combining field filters using regular python logic operators:\n```python\na1 = Q.author(\"Ilya Sutskever\")\na2 = Q.author((\"Geoffrey\", \"Hinton\"))\nc1 = Q.category(\"cs.NE\") # See taxonomy section for preferred category construction\nc2 = Q.category(\"cs.CL\")\n\n# AND operator\nq1 = a1 & a2 & c1\n# Output:\n# ((au:\"Ilya Sutskever\" AND au:(Geoffrey AND Hinton)) AND cat:cs.NE)\n\n# OR operator\nq2 = (a1 | a2) & (c1 | c2)\n# Output:\n# ((au:\"Ilya Sutskever\" OR au:(Geoffrey AND Hinton)) AND (cat:cs.NE OR cat:cs.CL))\n\n# ANDNOT operator\nq3 = a1 & ~a2\n# Output:\n# (au:\"Ilya Sutskever\" ANDNOT au:(Geoffrey AND Hinton))\n```\nThe following operations raise exceptions due to arXiv API limitations:\n```python\n~a1 # Error: standalone NOT operator not supported\na1 | ~a2 # Error: ORNOT operator not supported\n```\n\n### Wildcards\nWildcards (`?` and `*`) can be used in queries as usual. See the [arXiv Search API behavior](#important-arxiv-search-api-behavior) section for more details.\n\n### Category Taxonomy\nThe `Taxonomy` class provides a structured interface for managing arXiv categories.\nBasic usage:\n\n```python\nfrom arxivql import Taxonomy as T\n\nprint(T.cs.AI)\nprint(Q.category(T.cs.AI))\nprint(Q.category(T.cs))\nprint(Q.category((T.cs.LG, T.stat.ML)) & Q.title(\"LLM\"))\n# Output:\n# cs.AI\n# cat:cs.AI\n# cat:cs.*\n# (cat:(cs.LG AND stat.ML) AND ti:LLM)\n```\nNote the wildcard syntax in archive-level queries (e.g., `T.cs`).\n\nThe Taxonomy class provides comprehensive category information:\n```python\ncategory = T.astro_ph.HE\nprint(\"id: \", category.id)\nprint(\"name: \", category.name)\nprint(\"group_name: \", category.group_name)\nprint(\"archive_id: \", category.archive_id)\nprint(\"archive_name:\", category.archive_name)\nprint(\"description: \", category.description)\n# Output:\n# id: astro-ph.HE\n# name: High Energy Astrophysical Phenomena\n# group_name: Physics\n# archive_id: astro-ph\n# archive_name: Astrophysics\n# description: Cosmic ray production, acceleration, propagation, detection. Gamma ray astronomy and bursts, X-rays, charged particles, supernovae and other explosive phenomena, stellar remnants and accretion systems, jets, microquasars, neutron stars, pulsars, black holes\n```\n\nThe library also provides useful category catalog:\n\n```python\nfrom arxivql.taxonomy import catalog, categories_by_id\n\nprint(len(categories_by_id.keys()))\n# Output:\n# 157\n\nprint(len(catalog.all_categories))\n# Output:\n# 157\n\nprint(len(catalog.all_archives))\nprint(Q.category(catalog.all_archives))\n# Output:\n# 20\n# cat:(cs.* econ.* eess.* math.* q-bio.* q-fin.* stat.* astro-ph* cond-mat* nlin.* physics.* gr-qc hep-ex hep-lat hep-ph hep-th math-ph nucl-ex nucl-th quant-ph)\n\n# Broad Machine Learning categories, see official classification guide\n# https://blog.arxiv.org/2019/12/05/arxiv-machine-learning-classification-guide\nprint(len(catalog.ml_broad))\nprint(Q.category(catalog.ml_broad))\n# Output:\n# 16\n# cat:(cs.LG stat.ML math.OC cs.CV cs.CL eess.AS cs.IR cs.HC cs.SI cs.CY cs.GR cs.SY cs.AI cs.MM cs.ET cs.NE)\n\n# Core Machine Learning categories according to Andrej Karpathy's `arxiv sanity preserver` project:\n# https://github.com/karpathy/arxiv-sanity-preserver\nprint(len(catalog.ml_karpathy))\nprint(Q.category(catalog.ml_karpathy))\n# Output:\n# 6\n# cat:(cs.CV cs.AI cs.CL cs.LG cs.NE stat.ML)\n```\n\n### Usage with Python arXiv Client\nConstructed queries can be directly used in [python arXiv API wrapper](https://pypi.org/project/arxiv):\n\n```python\n# pip install arxiv\n\nimport arxiv\nfrom arxivql import Query as Q, Taxonomy as T\n\nquery = Q.author(\"Ilya Sutskever\") & Q.title(\"autoencoders\") & ~Q.category(T.cs.AI)\nsearch = arxiv.Search(query=query)\nclient = arxiv.Client()\nresults = list(client.results(search))\n\nprint(f\"query = {query}\")\nfor result in results:\n print(result.get_short_id(), result.title)\n\n# Output:\n# query = ((au:\"Ilya Sutskever\" AND ti:autoencoders) ANDNOT cat:cs.AI)\n# 1611.02731v2 Variational Lossy Autoencoder\n```\n\n## Important arXiv Search API Behavior\n- Category searches consider all listed categories, not only primary ones.\n\n- arXiv supports two wildcard characters: `?` and `*`.\n - `?` replaces one character in a word\n - `*` replaces zero or more characters in a word\n - They don't match the first character of the term, i.e., `au:??tskever` fails, but `au:Sutske???` is okay\n - Categories can also be \"wildcarded\", i.e., `cat:cs.?I` is a valid filter\n - `?` and `*` can be combined, e.g., `cat:q-?i*` is valid and matches both `q-bio` and `q-fin`\n\n- Quoted items imply exact sequence matching:\n - For text fields, this means standard phrase matching\n - For categories, order matters: `cat:\"hep-th cs.AI\"` differs from `cat:\"cs.AI hep-th\"`. Article categories are ordered in arXiv API.\n - Queries like `cat:\"cs.* hep-th\"` or `cat:\"cs.*\"` return no results as they search for literal category names, and, e.g., literal `cs.*` category does not exist.\n - Double quotes are special characters and should be carefully handled. E.g., `\"\"\"` finds nothing, and `\"\"2\"\"\"` is equivalent to `\"2\"` and `2`.\n - This library raises exceptions for most such problematic queries. \n\n- Spaces between terms or fields imply OR operations:\n `cat:hep-th cat:cs.AI` equals `cat:hep-th OR cat:cs.AI`\n\n- Parentheses serve two purposes:\n 1. Grouping logical operations\n 2. Defining field scope, e.g., `ti:(some words)` treats spaces as OR operations.\n Examples:\n - `cat:(cs.AI hep-th)` matches articles with either category\n - `cat:(cs.* hep-th)` functions as expected with wildcards\n\n- Explicit operators in field scopes are supported:\n `ti:(some OR words)` and `ti:(some AND words)` are valid\n\n- The `id_list` parameter (and legacy `id:` field filter) in the arXiv Search API is used internally to filter over the \"major\" article IDs (`2410.21276`), not the \"version\" IDs (`2410.21276v1`).\n - When used with a non-empty query:\n ```python\n # pip install arxiv\n \n arxiv.Search(query=\"au:Sutskever\", id_list=[\"2303.08774v6\"]) # zero results\n arxiv.Search(query=\"au:Sutskever\", id_list=[\"2303.08774\"]) # -> 2303.08774v6 (latest)\n ```\n - BUT if the query is left empty, `id_list` and `id:` can be used to search for the exact article version:\n ```python\n arxiv.Search(id_list=[\"2303.08774\"]) # -> 2303.08774v6 (latest)\n arxiv.Search(id_list=[\"2303.08774v4\"]) # -> 2303.08774v4\n arxiv.Search(id_list=[\"2303.08774v5\"]) # -> 2303.08774v5\n arxiv.Search(id_list=[\"2303.08774v99\"]) # -> obscure error\n ```\n\n# arXiv Categories Taxonomy\nThe arXiv taxonomy consists of three hierarchical levels: group \u2192 archive \u2192 category.\nFor complete details, consult the [arXiv Category Taxonomy](https://arxiv.org/category_taxonomy) and [arXiv Catchup Interface](https://arxiv.org/catchup).\n\n## Category\nCategories represent the finest granularity of classification.\nCategory identifiers typically follow the pattern `{archive}.{category}`, with some exceptions noted below.\nExample: In `astro-ph.HE`, the hierarchy is:\n- Group: `Physics`\n- Archive: `Astrophysics`\n- Category: `High Energy Astrophysical Phenomena`\n- Queryable ID: `astro-ph.HE`\n\n<img src=\"https://raw.githubusercontent.com/romazu/arxivql/main/assets/images/taxonomy_astro-ph.HE-fs8.png\" width=\"35%\">\n\n## Group\nGroups constitute the top level of taxonomy, currently including:\n- Computer Science\n- Economics\n- Electrical Engineering and Systems Science\n- Mathematics\n- Physics\n- Quantitative Biology\n- Quantitative Finance\n- Statistics\n\n## Archive\nArchives form the intermediate level, with each belonging to exactly one group.\n\nSpecial cases:\n1. Single-archive groups:\n - When a group contains only one archive, they share the same name\n - Example: `q-fin.CP` category has `Quantitative Finance` \u2192 `Quantitative Finance` \u2192 `Computational Finance`\n\n <img src=\"https://raw.githubusercontent.com/romazu/arxivql/main/assets/images/taxonomy_q-fin.CP-fs8.png\" width=\"35%\">\n\n2. Single-category archives:\n - When an archive contains only one category, the archive name is omitted from the identifier\n - Example: `hep-th` category has `Physics` \u2192 `High Energy Physics - Theory` \u2192 `High Energy Physics - Theory`\n\n <img src=\"https://raw.githubusercontent.com/romazu/arxivql/main/assets/images/taxonomy_hep-th-fs8.png\" width=\"35%\">\n\nNote: The `Physics` group contains a `Physics` archive alongside other archives, which may cause confusion.",
"bugtrack_url": null,
"license": "MIT",
"summary": "A pythonic query builder for arXiv search API",
"version": "0.2.2",
"project_urls": {
"Homepage": "https://github.com/romazu/arxivql",
"Repository": "https://github.com/romazu/arxivql"
},
"split_keywords": [
"arxiv",
" api",
" academic",
" articles",
" query",
" language",
" dsl"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "518de8a79929656f80fb0a1d2b6c3ba7b7cd1d13a56d79e4db58483aaa0c9c37",
"md5": "72063969ef07e4df282d0e6845563055",
"sha256": "acdf16fb999c17a633b8301dec46fb6c83988bb7bc9e895d1adfdb6eb3c242c5"
},
"downloads": -1,
"filename": "arxivql-0.2.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "72063969ef07e4df282d0e6845563055",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<4.0,>=3.7",
"size": 24179,
"upload_time": "2024-10-29T12:13:41",
"upload_time_iso_8601": "2024-10-29T12:13:41.910635Z",
"url": "https://files.pythonhosted.org/packages/51/8d/e8a79929656f80fb0a1d2b6c3ba7b7cd1d13a56d79e4db58483aaa0c9c37/arxivql-0.2.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "9a18e24cf15f2d8bb7b4a9b5de08d97385b38ce3962ca30a20f7133a6a0eef7d",
"md5": "dfa48da45cdaacffdffad404990e21af",
"sha256": "ad7c552db86f1271d402f6720a7f554db7ae6da4e470d59d4eb5420c5ed88cd5"
},
"downloads": -1,
"filename": "arxivql-0.2.2.tar.gz",
"has_sig": false,
"md5_digest": "dfa48da45cdaacffdffad404990e21af",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<4.0,>=3.7",
"size": 26699,
"upload_time": "2024-10-29T12:13:43",
"upload_time_iso_8601": "2024-10-29T12:13:43.434068Z",
"url": "https://files.pythonhosted.org/packages/9a/18/e24cf15f2d8bb7b4a9b5de08d97385b38ce3962ca30a20f7133a6a0eef7d/arxivql-0.2.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-10-29 12:13:43",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "romazu",
"github_project": "arxivql",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "arxivql"
}