arxiv 2.3.2__tar.gz → 2.3.2.dev15__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- arxiv-2.3.2.dev15/.github/ISSUE_TEMPLATE/bug_report.md +27 -0
- arxiv-2.3.2.dev15/.github/ISSUE_TEMPLATE/feature_request.md +19 -0
- arxiv-2.3.2.dev15/.github/ISSUE_TEMPLATE/question.md +8 -0
- arxiv-2.3.2.dev15/.github/pull_request_template.md +13 -0
- arxiv-2.3.2.dev15/.github/workflows/docs.yml +44 -0
- arxiv-2.3.2.dev15/.github/workflows/python-package.yml +29 -0
- arxiv-2.3.2.dev15/.github/workflows/static-analysis.yaml +40 -0
- arxiv-2.3.2.dev15/.gitignore +64 -0
- arxiv-2.3.2.dev15/.python-version +1 -0
- arxiv-2.3.2.dev15/Makefile +58 -0
- {arxiv-2.3.2/arxiv.egg-info → arxiv-2.3.2.dev15}/PKG-INFO +90 -26
- arxiv-2.3.2/PKG-INFO → arxiv-2.3.2.dev15/README.md +62 -36
- {arxiv-2.3.2 → arxiv-2.3.2.dev15}/arxiv/__init__.py +58 -34
- arxiv-2.3.2.dev15/pyproject.toml +122 -0
- arxiv-2.3.2.dev15/release.sh +138 -0
- arxiv-2.3.2.dev15/requirements.txt +8 -0
- arxiv-2.3.2.dev15/tests/.gitignore +1 -0
- arxiv-2.3.2.dev15/tests/__init__.py +0 -0
- arxiv-2.3.2.dev15/uv.lock +1137 -0
- arxiv-2.3.2/README.md +0 -110
- arxiv-2.3.2/arxiv.egg-info/SOURCES.txt +0 -16
- arxiv-2.3.2/arxiv.egg-info/dependency_links.txt +0 -1
- arxiv-2.3.2/arxiv.egg-info/requires.txt +0 -2
- arxiv-2.3.2/arxiv.egg-info/top_level.txt +0 -1
- arxiv-2.3.2/setup.cfg +0 -12
- arxiv-2.3.2/setup.py +0 -35
- {arxiv-2.3.2 → arxiv-2.3.2.dev15}/LICENSE.txt +0 -0
- {arxiv-2.3.2 → arxiv-2.3.2.dev15}/arxiv/arxiv.py +0 -0
- {arxiv-2.3.2 → arxiv-2.3.2.dev15}/tests/test_api_bugs.py +0 -0
- {arxiv-2.3.2 → arxiv-2.3.2.dev15}/tests/test_client.py +0 -0
- {arxiv-2.3.2 → arxiv-2.3.2.dev15}/tests/test_download.py +0 -0
- {arxiv-2.3.2 → arxiv-2.3.2.dev15}/tests/test_package.py +0 -0
- {arxiv-2.3.2 → arxiv-2.3.2.dev15}/tests/test_result.py +0 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Bug report
|
|
3
|
+
about: Create a report to help us improve
|
|
4
|
+
title: ''
|
|
5
|
+
labels: bug
|
|
6
|
+
assignees: lukasschwab
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Description
|
|
10
|
+
> A clear and concise description of what the bug is.
|
|
11
|
+
|
|
12
|
+
## Steps to reproduce
|
|
13
|
+
> Steps to reproduce the behavior; ideally, include a code snippet.
|
|
14
|
+
|
|
15
|
+
## Expected behavior
|
|
16
|
+
> A clear and concise description of what you expected to happen.
|
|
17
|
+
|
|
18
|
+
# Versions
|
|
19
|
+
|
|
20
|
+
<!-- Run `python --version`. -->
|
|
21
|
+
+ `python` version:
|
|
22
|
+
|
|
23
|
+
<!-- Run `pip freeze | grep arxiv`. -->
|
|
24
|
+
+ `arxiv.py` version:
|
|
25
|
+
|
|
26
|
+
# Additional context
|
|
27
|
+
> Add any other context about the problem here.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Feature request
|
|
3
|
+
about: Suggest an idea for this project
|
|
4
|
+
title: ''
|
|
5
|
+
labels: enhancement
|
|
6
|
+
assignees: lukasschwab
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Motivation
|
|
10
|
+
> A clear and concise description of what the problem is. For example, "I'm always frustrated when..."
|
|
11
|
+
|
|
12
|
+
# Solution
|
|
13
|
+
> A clear and concise description of what you want to happen.
|
|
14
|
+
|
|
15
|
+
## Considered alternatives
|
|
16
|
+
> A clear and concise description of any alternative solutions or features you've considered.
|
|
17
|
+
|
|
18
|
+
# Additional context
|
|
19
|
+
> Add any other context about the feature request here.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<!-- Thanks for your contribution! -->
|
|
2
|
+
|
|
3
|
+
# Description
|
|
4
|
+
|
|
5
|
+
## Breaking changes
|
|
6
|
+
> List any changes that break the API usage supported on `master`.
|
|
7
|
+
|
|
8
|
+
# Relevant issues
|
|
9
|
+
> List [GitHub issues](https://github.com/lukasschwab/arxiv.py/issues) relevant to this change.
|
|
10
|
+
|
|
11
|
+
# Checklist
|
|
12
|
+
|
|
13
|
+
- [ ] (If appropriate) `README.md` example usage has been updated.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
name: docs
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [ master ]
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
build:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
steps:
|
|
15
|
+
- uses: actions/checkout@v4
|
|
16
|
+
- name: Install UV
|
|
17
|
+
uses: astral-sh/setup-uv@v4
|
|
18
|
+
with:
|
|
19
|
+
enable-cache: true
|
|
20
|
+
cache-dependency-glob: "uv.lock"
|
|
21
|
+
- name: Set up Python
|
|
22
|
+
run: uv python install 3.11
|
|
23
|
+
- name: Install dependencies
|
|
24
|
+
run: uv sync --group dev
|
|
25
|
+
- name: Build docs
|
|
26
|
+
run: uv run make docs
|
|
27
|
+
- uses: actions/upload-pages-artifact@v3
|
|
28
|
+
with:
|
|
29
|
+
path: docs/
|
|
30
|
+
|
|
31
|
+
# Deploy the artifact to GitHub Pages. Only this job has the requisite
|
|
32
|
+
# permissions.
|
|
33
|
+
deploy:
|
|
34
|
+
needs: build
|
|
35
|
+
runs-on: ubuntu-latest
|
|
36
|
+
permissions:
|
|
37
|
+
pages: write
|
|
38
|
+
id-token: write
|
|
39
|
+
environment:
|
|
40
|
+
name: github-pages
|
|
41
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
42
|
+
steps:
|
|
43
|
+
- id: deployment
|
|
44
|
+
uses: actions/deploy-pages@v4
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Run tests with UV
|
|
2
|
+
name: python-test
|
|
3
|
+
|
|
4
|
+
on:
|
|
5
|
+
push:
|
|
6
|
+
branches: [ master ]
|
|
7
|
+
pull_request:
|
|
8
|
+
workflow_dispatch:
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
test:
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
strategy:
|
|
14
|
+
fail-fast: false
|
|
15
|
+
matrix:
|
|
16
|
+
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@v4
|
|
19
|
+
- name: Install UV
|
|
20
|
+
uses: astral-sh/setup-uv@v4
|
|
21
|
+
with:
|
|
22
|
+
enable-cache: true
|
|
23
|
+
cache-dependency-glob: "uv.lock"
|
|
24
|
+
- name: Set up Python ${{ matrix.python-version }}
|
|
25
|
+
run: uv python install ${{ matrix.python-version }}
|
|
26
|
+
- name: Install dependencies
|
|
27
|
+
run: uv sync --group dev
|
|
28
|
+
- name: Run tests
|
|
29
|
+
run: uv run make test
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
name: static-analysis
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [ master ]
|
|
6
|
+
pull_request:
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
quality-checks:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
steps:
|
|
13
|
+
- uses: actions/checkout@v4
|
|
14
|
+
- name: Install UV
|
|
15
|
+
uses: astral-sh/setup-uv@v4
|
|
16
|
+
with:
|
|
17
|
+
enable-cache: true
|
|
18
|
+
cache-dependency-glob: "uv.lock"
|
|
19
|
+
- name: Install dependencies
|
|
20
|
+
run: uv sync --group dev
|
|
21
|
+
- name: Lint
|
|
22
|
+
run: uv run make lint
|
|
23
|
+
- name: Format check
|
|
24
|
+
run: uv run ruff format --check .
|
|
25
|
+
- name: Type check (allow failures for now)
|
|
26
|
+
run: uv run make type-check || echo "Type checking has known issues - skipping for CI"
|
|
27
|
+
|
|
28
|
+
security-audit:
|
|
29
|
+
runs-on: ubuntu-latest
|
|
30
|
+
steps:
|
|
31
|
+
- uses: actions/checkout@v4
|
|
32
|
+
- name: Install UV
|
|
33
|
+
uses: astral-sh/setup-uv@v4
|
|
34
|
+
with:
|
|
35
|
+
enable-cache: true
|
|
36
|
+
cache-dependency-glob: "uv.lock"
|
|
37
|
+
- name: Install dependencies
|
|
38
|
+
run: uv sync --group dev
|
|
39
|
+
- name: Security audit
|
|
40
|
+
run: uv run make audit
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
ADMIN.md
|
|
2
|
+
.vscode
|
|
3
|
+
docs
|
|
4
|
+
|
|
5
|
+
#####=== Python ===#####
|
|
6
|
+
|
|
7
|
+
# Byte-compiled / optimized / DLL files
|
|
8
|
+
__pycache__/
|
|
9
|
+
*.py[cod]
|
|
10
|
+
*.pytest_cache
|
|
11
|
+
|
|
12
|
+
# C extensions
|
|
13
|
+
*.so
|
|
14
|
+
|
|
15
|
+
# Distribution / packaging
|
|
16
|
+
.Python
|
|
17
|
+
env/
|
|
18
|
+
build/
|
|
19
|
+
develop-eggs/
|
|
20
|
+
dist/
|
|
21
|
+
downloads/
|
|
22
|
+
*.eggs/
|
|
23
|
+
lib/
|
|
24
|
+
lib64/
|
|
25
|
+
parts/
|
|
26
|
+
sdist/
|
|
27
|
+
var/
|
|
28
|
+
*.egg-info/
|
|
29
|
+
.installed.cfg
|
|
30
|
+
*.egg
|
|
31
|
+
|
|
32
|
+
# PyInstaller
|
|
33
|
+
# Usually these files are written by a python script from a template
|
|
34
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
35
|
+
*.manifest
|
|
36
|
+
*.spec
|
|
37
|
+
|
|
38
|
+
# Installer logs
|
|
39
|
+
pip-log.txt
|
|
40
|
+
pip-delete-this-directory.txt
|
|
41
|
+
|
|
42
|
+
# Unit test / coverage reports
|
|
43
|
+
htmlcov/
|
|
44
|
+
.tox/
|
|
45
|
+
.coverage
|
|
46
|
+
.cache
|
|
47
|
+
nosetests.xml
|
|
48
|
+
coverage.xml
|
|
49
|
+
|
|
50
|
+
# Translations
|
|
51
|
+
*.mo
|
|
52
|
+
*.pot
|
|
53
|
+
|
|
54
|
+
# Django stuff:
|
|
55
|
+
*.log
|
|
56
|
+
|
|
57
|
+
# Sphinx documentation
|
|
58
|
+
docs/_build/
|
|
59
|
+
|
|
60
|
+
# PyBuilder
|
|
61
|
+
target/
|
|
62
|
+
|
|
63
|
+
# UV and Python tooling
|
|
64
|
+
.venv/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.10.4
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
source := ${wildcard ./arxiv/*.py}
|
|
2
|
+
tests := ${wildcard tests/*.py}
|
|
3
|
+
|
|
4
|
+
# UV-based development workflow (assumes UV is installed)
|
|
5
|
+
.PHONY: all install install-dev lint format test audit docs clean sync lock help
|
|
6
|
+
|
|
7
|
+
# Default target
|
|
8
|
+
all: lint test docs
|
|
9
|
+
|
|
10
|
+
# Installation and dependency management
|
|
11
|
+
install:
|
|
12
|
+
uv sync
|
|
13
|
+
|
|
14
|
+
install-dev:
|
|
15
|
+
uv sync --group dev
|
|
16
|
+
|
|
17
|
+
sync:
|
|
18
|
+
uv sync --group dev
|
|
19
|
+
|
|
20
|
+
lock:
|
|
21
|
+
uv lock
|
|
22
|
+
|
|
23
|
+
# Development tasks
|
|
24
|
+
format: $(source) $(tests)
|
|
25
|
+
uv run ruff format .
|
|
26
|
+
|
|
27
|
+
lint: $(source) $(tests)
|
|
28
|
+
uv run ruff check .
|
|
29
|
+
|
|
30
|
+
type-check: $(source)
|
|
31
|
+
uv run mypy arxiv/__init__.py
|
|
32
|
+
|
|
33
|
+
test: $(source) $(tests)
|
|
34
|
+
uv run pytest
|
|
35
|
+
|
|
36
|
+
audit:
|
|
37
|
+
uv run pip-audit
|
|
38
|
+
|
|
39
|
+
docs: docs/index.html
|
|
40
|
+
docs/index.html: $(source) README.md
|
|
41
|
+
uv run pdoc --docformat "restructuredtext" ./arxiv/__init__.py -o docs
|
|
42
|
+
|
|
43
|
+
clean:
|
|
44
|
+
rm -rf build dist .pytest_cache
|
|
45
|
+
rm -rf __pycache__ **/__pycache__
|
|
46
|
+
rm -rf *.pyc **/*.pyc
|
|
47
|
+
rm -rf arxiv.egg-info arxiv/_version.py
|
|
48
|
+
uv cache clean
|
|
49
|
+
|
|
50
|
+
# Convenience commands
|
|
51
|
+
check: lint type-check test
|
|
52
|
+
|
|
53
|
+
# Release and distribution
|
|
54
|
+
build:
|
|
55
|
+
uv build
|
|
56
|
+
|
|
57
|
+
release:
|
|
58
|
+
./release.sh
|
|
@@ -1,37 +1,40 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: arxiv
|
|
3
|
-
Version: 2.3.2
|
|
4
|
-
Summary: Python wrapper for the arXiv API
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
3
|
+
Version: 2.3.2.dev15
|
|
4
|
+
Summary: Python wrapper for the arXiv API
|
|
5
|
+
Project-URL: Homepage, https://github.com/lukasschwab/arxiv.py
|
|
6
|
+
Project-URL: Repository, https://github.com/lukasschwab/arxiv.py
|
|
7
|
+
Project-URL: Documentation, https://lukasschwab.me/arxiv.py/
|
|
8
|
+
Project-URL: Issues, https://github.com/lukasschwab/arxiv.py/issues
|
|
9
|
+
Author-email: Lukas Schwab <lukas.schwab@gmail.com>
|
|
10
|
+
License-Expression: MIT
|
|
11
|
+
License-File: LICENSE.txt
|
|
12
|
+
Keywords: academic,api,arxiv,journals,papers,wrapper
|
|
13
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: Intended Audience :: Science/Research
|
|
16
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
17
|
+
Classifier: Operating System :: OS Independent
|
|
18
|
+
Classifier: Programming Language :: Python :: 3
|
|
11
19
|
Classifier: Programming Language :: Python :: 3.9
|
|
12
20
|
Classifier: Programming Language :: Python :: 3.10
|
|
13
21
|
Classifier: Programming Language :: Python :: 3.11
|
|
14
22
|
Classifier: Programming Language :: Python :: 3.12
|
|
15
23
|
Classifier: Programming Language :: Python :: 3.13
|
|
16
|
-
Classifier:
|
|
17
|
-
Classifier:
|
|
18
|
-
Requires-Python: >=3.
|
|
19
|
-
Description-Content-Type: text/markdown
|
|
20
|
-
License-File: LICENSE.txt
|
|
24
|
+
Classifier: Topic :: Scientific/Engineering
|
|
25
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
26
|
+
Requires-Python: >=3.9
|
|
21
27
|
Requires-Dist: feedparser~=6.0.10
|
|
22
28
|
Requires-Dist: requests~=2.32.0
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
Dynamic: requires-dist
|
|
33
|
-
Dynamic: requires-python
|
|
34
|
-
Dynamic: summary
|
|
29
|
+
Requires-Dist: typing-extensions>=4.0.0; python_version < '3.11'
|
|
30
|
+
Provides-Extra: dev
|
|
31
|
+
Requires-Dist: pdoc==14.5.1; extra == 'dev'
|
|
32
|
+
Requires-Dist: pip-audit>=1.1.2; extra == 'dev'
|
|
33
|
+
Requires-Dist: pytest>=6.2.2; extra == 'dev'
|
|
34
|
+
Requires-Dist: ruff>=0.1.2; extra == 'dev'
|
|
35
|
+
Provides-Extra: test
|
|
36
|
+
Requires-Dist: pytest>=6.2.2; extra == 'test'
|
|
37
|
+
Description-Content-Type: text/markdown
|
|
35
38
|
|
|
36
39
|
# arxiv.py
|
|
37
40
|
[](https://pypi.org/project/arxiv/)  [](https://github.com/lukasschwab/arxiv.py/actions?query=branch%3Amaster) [](https://lukasschwab.me/arxiv.py/index.html)
|
|
@@ -44,11 +47,26 @@ Python wrapper for [the arXiv API](https://arxiv.org/help/api/index).
|
|
|
44
47
|
|
|
45
48
|
### Installation
|
|
46
49
|
|
|
50
|
+
#### For End Users (Recommended)
|
|
51
|
+
|
|
47
52
|
```bash
|
|
48
53
|
$ pip install arxiv
|
|
49
54
|
```
|
|
50
55
|
|
|
51
|
-
|
|
56
|
+
#### For Modern Python Development (with UV)
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
$ uv add arxiv
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Or for a one-off script:
|
|
63
|
+
```bash
|
|
64
|
+
$ uvx --from arxiv python -c "import arxiv; print('Working!')"
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
#### Usage
|
|
68
|
+
|
|
69
|
+
In your Python script, include the line:
|
|
52
70
|
|
|
53
71
|
```python
|
|
54
72
|
import arxiv
|
|
@@ -143,3 +161,49 @@ The `Result` objects yielded by `Client.results` include metadata about each pap
|
|
|
143
161
|
The meaning of the underlying raw data is documented in the [arXiv API User Manual: Details of Atom Results Returned](https://arxiv.org/help/api/user-manual#_details_of_atom_results_returned).
|
|
144
162
|
|
|
145
163
|
`Result` also exposes helper methods for downloading papers: `Result.download_pdf` and `Result.download_source`.
|
|
164
|
+
|
|
165
|
+
## Development
|
|
166
|
+
|
|
167
|
+
This project uses [UV](https://astral.sh/uv) for development, while maintaining compatibility with traditional pip installation for end users.
|
|
168
|
+
|
|
169
|
+
### Development Setup
|
|
170
|
+
|
|
171
|
+
1. **Install UV** (if you haven't already):
|
|
172
|
+
```bash
|
|
173
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
2. **Clone and setup**:
|
|
177
|
+
```bash
|
|
178
|
+
git clone https://github.com/lukasschwab/arxiv.py
|
|
179
|
+
cd arxiv.py
|
|
180
|
+
make dev-setup
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
3. **Available commands**:
|
|
184
|
+
```bash
|
|
185
|
+
make test # Run tests
|
|
186
|
+
make lint # Run linting
|
|
187
|
+
make format # Format code
|
|
188
|
+
make docs # Generate docs
|
|
189
|
+
make check # Run lint + test
|
|
190
|
+
make audit # Security audit
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### For End Users
|
|
194
|
+
|
|
195
|
+
Even though development uses UV, **end users can continue using pip** as always:
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
pip install arxiv # Still works perfectly!
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
Both installation methods provide the same functionality - UV just offers a faster development experience.
|
|
202
|
+
|
|
203
|
+
### Modern Python Packaging
|
|
204
|
+
|
|
205
|
+
This project uses current Python packaging standards:
|
|
206
|
+
- **`pyproject.toml`** for all configuration (no setup.py)
|
|
207
|
+
- **`uv.lock`** for reproducible development environments
|
|
208
|
+
- **Hatchling** build backend for fast, reliable builds
|
|
209
|
+
- **UV** for lightning-fast dependency management
|
|
@@ -1,38 +1,3 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: arxiv
|
|
3
|
-
Version: 2.3.2
|
|
4
|
-
Summary: Python wrapper for the arXiv API: https://arxiv.org/help/api/
|
|
5
|
-
Home-page: https://github.com/lukasschwab/arxiv.py
|
|
6
|
-
Author: Lukas Schwab
|
|
7
|
-
Author-email: lukas.schwab@gmail.com
|
|
8
|
-
License: MIT
|
|
9
|
-
Keywords: arxiv api wrapper academic journals papers
|
|
10
|
-
Classifier: Programming Language :: Python
|
|
11
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
12
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
13
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
14
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
15
|
-
Classifier: Programming Language :: Python :: 3.13
|
|
16
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
17
|
-
Classifier: Operating System :: OS Independent
|
|
18
|
-
Requires-Python: >=3.7
|
|
19
|
-
Description-Content-Type: text/markdown
|
|
20
|
-
License-File: LICENSE.txt
|
|
21
|
-
Requires-Dist: feedparser~=6.0.10
|
|
22
|
-
Requires-Dist: requests~=2.32.0
|
|
23
|
-
Dynamic: author
|
|
24
|
-
Dynamic: author-email
|
|
25
|
-
Dynamic: classifier
|
|
26
|
-
Dynamic: description
|
|
27
|
-
Dynamic: description-content-type
|
|
28
|
-
Dynamic: home-page
|
|
29
|
-
Dynamic: keywords
|
|
30
|
-
Dynamic: license
|
|
31
|
-
Dynamic: license-file
|
|
32
|
-
Dynamic: requires-dist
|
|
33
|
-
Dynamic: requires-python
|
|
34
|
-
Dynamic: summary
|
|
35
|
-
|
|
36
1
|
# arxiv.py
|
|
37
2
|
[](https://pypi.org/project/arxiv/)  [](https://github.com/lukasschwab/arxiv.py/actions?query=branch%3Amaster) [](https://lukasschwab.me/arxiv.py/index.html)
|
|
38
3
|
|
|
@@ -44,11 +9,26 @@ Python wrapper for [the arXiv API](https://arxiv.org/help/api/index).
|
|
|
44
9
|
|
|
45
10
|
### Installation
|
|
46
11
|
|
|
12
|
+
#### For End Users (Recommended)
|
|
13
|
+
|
|
47
14
|
```bash
|
|
48
15
|
$ pip install arxiv
|
|
49
16
|
```
|
|
50
17
|
|
|
51
|
-
|
|
18
|
+
#### For Modern Python Development (with UV)
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
$ uv add arxiv
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Or for a one-off script:
|
|
25
|
+
```bash
|
|
26
|
+
$ uvx --from arxiv python -c "import arxiv; print('Working!')"
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
#### Usage
|
|
30
|
+
|
|
31
|
+
In your Python script, include the line:
|
|
52
32
|
|
|
53
33
|
```python
|
|
54
34
|
import arxiv
|
|
@@ -143,3 +123,49 @@ The `Result` objects yielded by `Client.results` include metadata about each pap
|
|
|
143
123
|
The meaning of the underlying raw data is documented in the [arXiv API User Manual: Details of Atom Results Returned](https://arxiv.org/help/api/user-manual#_details_of_atom_results_returned).
|
|
144
124
|
|
|
145
125
|
`Result` also exposes helper methods for downloading papers: `Result.download_pdf` and `Result.download_source`.
|
|
126
|
+
|
|
127
|
+
## Development
|
|
128
|
+
|
|
129
|
+
This project uses [UV](https://astral.sh/uv) for development, while maintaining compatibility with traditional pip installation for end users.
|
|
130
|
+
|
|
131
|
+
### Development Setup
|
|
132
|
+
|
|
133
|
+
1. **Install UV** (if you haven't already):
|
|
134
|
+
```bash
|
|
135
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
2. **Clone and setup**:
|
|
139
|
+
```bash
|
|
140
|
+
git clone https://github.com/lukasschwab/arxiv.py
|
|
141
|
+
cd arxiv.py
|
|
142
|
+
make dev-setup
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
3. **Available commands**:
|
|
146
|
+
```bash
|
|
147
|
+
make test # Run tests
|
|
148
|
+
make lint # Run linting
|
|
149
|
+
make format # Format code
|
|
150
|
+
make docs # Generate docs
|
|
151
|
+
make check # Run lint + test
|
|
152
|
+
make audit # Security audit
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### For End Users
|
|
156
|
+
|
|
157
|
+
Even though development uses UV, **end users can continue using pip** as always:
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
pip install arxiv # Still works perfectly!
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
Both installation methods provide the same functionality - UV just offers a faster development experience.
|
|
164
|
+
|
|
165
|
+
### Modern Python Packaging
|
|
166
|
+
|
|
167
|
+
This project uses current Python packaging standards:
|
|
168
|
+
- **`pyproject.toml`** for all configuration (no setup.py)
|
|
169
|
+
- **`uv.lock`** for reproducible development environments
|
|
170
|
+
- **Hatchling** build backend for fast, reliable builds
|
|
171
|
+
- **UV** for lightning-fast dependency management
|