arxiv 2.3.1__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.
Files changed (33) hide show
  1. arxiv-2.3.2.dev15/.github/ISSUE_TEMPLATE/bug_report.md +27 -0
  2. arxiv-2.3.2.dev15/.github/ISSUE_TEMPLATE/feature_request.md +19 -0
  3. arxiv-2.3.2.dev15/.github/ISSUE_TEMPLATE/question.md +8 -0
  4. arxiv-2.3.2.dev15/.github/pull_request_template.md +13 -0
  5. arxiv-2.3.2.dev15/.github/workflows/docs.yml +44 -0
  6. arxiv-2.3.2.dev15/.github/workflows/python-package.yml +29 -0
  7. arxiv-2.3.2.dev15/.github/workflows/static-analysis.yaml +40 -0
  8. arxiv-2.3.2.dev15/.gitignore +64 -0
  9. arxiv-2.3.2.dev15/.python-version +1 -0
  10. arxiv-2.3.2.dev15/Makefile +58 -0
  11. {arxiv-2.3.1/arxiv.egg-info → arxiv-2.3.2.dev15}/PKG-INFO +90 -26
  12. arxiv-2.3.1/PKG-INFO → arxiv-2.3.2.dev15/README.md +62 -36
  13. {arxiv-2.3.1 → arxiv-2.3.2.dev15}/arxiv/__init__.py +75 -46
  14. arxiv-2.3.2.dev15/pyproject.toml +122 -0
  15. arxiv-2.3.2.dev15/release.sh +138 -0
  16. arxiv-2.3.2.dev15/requirements.txt +8 -0
  17. arxiv-2.3.2.dev15/tests/.gitignore +1 -0
  18. arxiv-2.3.2.dev15/tests/__init__.py +0 -0
  19. arxiv-2.3.2.dev15/uv.lock +1137 -0
  20. arxiv-2.3.1/README.md +0 -110
  21. arxiv-2.3.1/arxiv.egg-info/SOURCES.txt +0 -16
  22. arxiv-2.3.1/arxiv.egg-info/dependency_links.txt +0 -1
  23. arxiv-2.3.1/arxiv.egg-info/requires.txt +0 -2
  24. arxiv-2.3.1/arxiv.egg-info/top_level.txt +0 -1
  25. arxiv-2.3.1/setup.cfg +0 -12
  26. arxiv-2.3.1/setup.py +0 -35
  27. {arxiv-2.3.1 → arxiv-2.3.2.dev15}/LICENSE.txt +0 -0
  28. {arxiv-2.3.1 → arxiv-2.3.2.dev15}/arxiv/arxiv.py +0 -0
  29. {arxiv-2.3.1 → arxiv-2.3.2.dev15}/tests/test_api_bugs.py +0 -0
  30. {arxiv-2.3.1 → arxiv-2.3.2.dev15}/tests/test_client.py +0 -0
  31. {arxiv-2.3.1 → arxiv-2.3.2.dev15}/tests/test_download.py +0 -0
  32. {arxiv-2.3.1 → arxiv-2.3.2.dev15}/tests/test_package.py +0 -0
  33. {arxiv-2.3.1 → 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,8 @@
1
+ ---
2
+ name: Question
3
+ about: Ask about using this package
4
+ title: ''
5
+ labels: question
6
+ ---
7
+
8
+ <!-- See [Stack Overflow's "How do I ask a good question?"](https://stackoverflow.com/help/how-to-ask) -->
@@ -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.1
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
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: 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
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
- 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
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
  [![PyPI](https://img.shields.io/pypi/v/arxiv)](https://pypi.org/project/arxiv/) ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/arxiv) [![GitHub Workflow Status (branch)](https://img.shields.io/github/actions/workflow/status/lukasschwab/arxiv.py/python-package.yml?branch=master)](https://github.com/lukasschwab/arxiv.py/actions?query=branch%3Amaster) [![Full package documentation](https://img.shields.io/badge/docs-hosted-brightgreen)](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
- In your Python script, include the line
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.1
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
  [![PyPI](https://img.shields.io/pypi/v/arxiv)](https://pypi.org/project/arxiv/) ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/arxiv) [![GitHub Workflow Status (branch)](https://img.shields.io/github/actions/workflow/status/lukasschwab/arxiv.py/python-package.yml?branch=master)](https://github.com/lukasschwab/arxiv.py/actions?query=branch%3Amaster) [![Full package documentation](https://img.shields.io/badge/docs-hosted-brightgreen)](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
- In your Python script, include the line
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