pyzotero 1.6.10__tar.gz → 1.6.13__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.
- {pyzotero-1.6.10 → pyzotero-1.6.13}/PKG-INFO +46 -56
- {pyzotero-1.6.10 → pyzotero-1.6.13}/README.md +1 -1
- {pyzotero-1.6.10 → pyzotero-1.6.13}/pyproject.toml +18 -19
- {pyzotero-1.6.10 → pyzotero-1.6.13}/src/pyzotero/zotero.py +14 -16
- pyzotero-1.6.10/.coveragerc +0 -3
- pyzotero-1.6.10/.github/ISSUE_TEMPLATE/bug_report.md +0 -34
- pyzotero-1.6.10/.github/ISSUE_TEMPLATE/usage_question.md +0 -15
- pyzotero-1.6.10/.github/dependabot.yml +0 -16
- pyzotero-1.6.10/.github/pull_request_template.md +0 -23
- pyzotero-1.6.10/.github/workflows/tests.yml +0 -115
- pyzotero-1.6.10/.gitignore +0 -6
- pyzotero-1.6.10/.readthedocs.yaml +0 -26
- pyzotero-1.6.10/AUTHORS +0 -2
- pyzotero-1.6.10/CITATION.cff +0 -16
- pyzotero-1.6.10/CONTRIBUTING.md +0 -100
- pyzotero-1.6.10/CONTRIBUTORS.md +0 -22
- pyzotero-1.6.10/__init__.py +0 -0
- pyzotero-1.6.10/doc/Makefile +0 -130
- pyzotero-1.6.10/doc/_templates/layout.html +0 -23
- pyzotero-1.6.10/doc/cat.png +0 -0
- pyzotero-1.6.10/doc/conf.py +0 -273
- pyzotero-1.6.10/doc/index.rst +0 -1111
- pyzotero-1.6.10/dump_contributors.py +0 -13
- pyzotero-1.6.10/example/.gitignore +0 -3
- pyzotero-1.6.10/example/local_base_use.py +0 -7
- pyzotero-1.6.10/example/local_copy_pdf.py +0 -63
- pyzotero-1.6.10/example/local_get_item_detail.py +0 -68
- pyzotero-1.6.10/example/local_search_title.py +0 -43
- pyzotero-1.6.10/setup.cfg +0 -4
- pyzotero-1.6.10/setup.py +0 -12
- pyzotero-1.6.10/src/_version.py +0 -21
- pyzotero-1.6.10/src/pyzotero.egg-info/PKG-INFO +0 -163
- pyzotero-1.6.10/src/pyzotero.egg-info/SOURCES.txt +0 -59
- pyzotero-1.6.10/src/pyzotero.egg-info/dependency_links.txt +0 -1
- pyzotero-1.6.10/src/pyzotero.egg-info/requires.txt +0 -12
- pyzotero-1.6.10/src/pyzotero.egg-info/top_level.txt +0 -2
- pyzotero-1.6.10/tests/api_responses/__init__.py +0 -0
- pyzotero-1.6.10/tests/api_responses/attachments_doc.json +0 -54
- pyzotero-1.6.10/tests/api_responses/citation_doc.xml +0 -21
- pyzotero-1.6.10/tests/api_responses/collection_doc.json +0 -19
- pyzotero-1.6.10/tests/api_responses/collection_tags.json +0 -53
- pyzotero-1.6.10/tests/api_responses/collection_versions.json +0 -4
- pyzotero-1.6.10/tests/api_responses/collections_doc.json +0 -564
- pyzotero-1.6.10/tests/api_responses/creation_doc.json +0 -7
- pyzotero-1.6.10/tests/api_responses/groups_doc.json +0 -33
- pyzotero-1.6.10/tests/api_responses/item_doc.json +0 -105
- pyzotero-1.6.10/tests/api_responses/item_fields.json +0 -406
- pyzotero-1.6.10/tests/api_responses/item_file.pdf +0 -1
- pyzotero-1.6.10/tests/api_responses/item_template.json +0 -13
- pyzotero-1.6.10/tests/api_responses/item_types.json +0 -106
- pyzotero-1.6.10/tests/api_responses/item_versions.json +0 -4
- pyzotero-1.6.10/tests/api_responses/items_doc.json +0 -1690
- pyzotero-1.6.10/tests/api_responses/keys_doc.txt +0 -10
- pyzotero-1.6.10/tests/api_responses/tags_doc.json +0 -19
- pyzotero-1.6.10/tests/test_async.py +0 -24
- pyzotero-1.6.10/tests/test_zotero.py +0 -751
- pyzotero-1.6.10/uv.lock +0 -590
- {pyzotero-1.6.10 → pyzotero-1.6.13}/LICENSE.md +0 -0
- {pyzotero-1.6.10 → pyzotero-1.6.13}/src/pyzotero/__init__.py +0 -0
- {pyzotero-1.6.10 → pyzotero-1.6.13}/src/pyzotero/filetransport.py +0 -0
- {pyzotero-1.6.10 → pyzotero-1.6.13}/src/pyzotero/zotero_errors.py +0 -0
|
@@ -1,48 +1,45 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.3
|
|
2
2
|
Name: pyzotero
|
|
3
|
-
Version: 1.6.
|
|
3
|
+
Version: 1.6.13
|
|
4
4
|
Summary: Python wrapper for the Zotero API
|
|
5
|
+
Keywords: Zotero,DH
|
|
6
|
+
Author: Stephan Hügel
|
|
5
7
|
Author-email: Stephan Hügel <urschrei@gmail.com>
|
|
6
8
|
License: # Blue Oak Model License
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
Project-URL: Repository, https://github.com/urschrei/pyzotero
|
|
43
|
-
Project-URL: Tracker, https://github.com/urschrei/pyzotero/issues
|
|
44
|
-
Project-URL: documentation, https://pyzotero.readthedocs.org
|
|
45
|
-
Keywords: Zotero,DH
|
|
9
|
+
|
|
10
|
+
Version 1.0.0
|
|
11
|
+
|
|
12
|
+
## Purpose
|
|
13
|
+
|
|
14
|
+
This license gives everyone as much permission to work with this software as possible, while protecting contributors from liability.
|
|
15
|
+
|
|
16
|
+
## Acceptance
|
|
17
|
+
|
|
18
|
+
In order to receive this license, you must agree to its rules. The rules of this license are both obligations under that agreement and conditions to your license. You must not do anything with this software that triggers a rule that you cannot or will not follow.
|
|
19
|
+
|
|
20
|
+
## Copyright
|
|
21
|
+
|
|
22
|
+
Each contributor licenses you to do everything with this software that would otherwise infringe that contributor's copyright in it.
|
|
23
|
+
|
|
24
|
+
## Notices
|
|
25
|
+
|
|
26
|
+
You must ensure that everyone who gets a copy of any part of this software from you, with or without changes, also gets the text of this license or a link to <https://blueoakcouncil.org/license/1.0.0>.
|
|
27
|
+
|
|
28
|
+
## Excuse
|
|
29
|
+
|
|
30
|
+
If anyone notifies you in writing that you have not complied with [Notices](#notices), you can keep your license by taking all practical steps to comply within 30 days after the notice. If you do not do so, your license ends immediately.
|
|
31
|
+
|
|
32
|
+
## Patent
|
|
33
|
+
|
|
34
|
+
Each contributor licenses you to do everything with this software that would otherwise infringe any patent claims they can license or become able to license.
|
|
35
|
+
|
|
36
|
+
## Reliability
|
|
37
|
+
|
|
38
|
+
No contributor can revoke this license.
|
|
39
|
+
|
|
40
|
+
## No Liability
|
|
41
|
+
|
|
42
|
+
***As far as the law allows, this software comes as is, without any warranty or condition, and no contributor will be liable to anyone for any damages related to this software or this license, under any kind of legal claim.***
|
|
46
43
|
Classifier: Programming Language :: Python
|
|
47
44
|
Classifier: Programming Language :: Python :: 3.9
|
|
48
45
|
Classifier: Programming Language :: Python :: 3.10
|
|
@@ -56,22 +53,15 @@ Classifier: Intended Audience :: Education
|
|
|
56
53
|
Classifier: License :: OSI Approved :: Blue Oak Model License (BlueOak-1.0.0)
|
|
57
54
|
Classifier: Operating System :: OS Independent
|
|
58
55
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
56
|
+
Requires-Dist: feedparser>=6.0.12
|
|
57
|
+
Requires-Dist: bibtexparser>=1.4.3,<2.0.0
|
|
58
|
+
Requires-Dist: httpx>=0.28.1
|
|
59
|
+
Requires-Dist: whenever>=0.8.8
|
|
59
60
|
Requires-Python: >=3.9
|
|
61
|
+
Project-URL: Repository, https://github.com/urschrei/pyzotero
|
|
62
|
+
Project-URL: Tracker, https://github.com/urschrei/pyzotero/issues
|
|
63
|
+
Project-URL: documentation, https://pyzotero.readthedocs.org
|
|
60
64
|
Description-Content-Type: text/markdown
|
|
61
|
-
License-File: LICENSE.md
|
|
62
|
-
License-File: AUTHORS
|
|
63
|
-
Requires-Dist: feedparser>=6.0.11
|
|
64
|
-
Requires-Dist: pytz
|
|
65
|
-
Requires-Dist: bibtexparser
|
|
66
|
-
Requires-Dist: httpx>=0.28.1
|
|
67
|
-
Provides-Extra: test
|
|
68
|
-
Requires-Dist: pytest>=7.4.2; extra == "test"
|
|
69
|
-
Requires-Dist: httpretty; extra == "test"
|
|
70
|
-
Requires-Dist: python-dateutil; extra == "test"
|
|
71
|
-
Requires-Dist: ipython; extra == "test"
|
|
72
|
-
Requires-Dist: pytest-asyncio; extra == "test"
|
|
73
|
-
Requires-Dist: pytest-cov>=6.0.0; extra == "test"
|
|
74
|
-
Dynamic: license-file
|
|
75
65
|
|
|
76
66
|
[](https://pypi.python.org/pypi/Pyzotero/) [](http://pyzotero.readthedocs.org/en/latest/?badge=latest) [](https://pypi.python.org/pypi/Pyzotero) [](https://anaconda.org/conda-forge/pyzotero) [](https://pepy.tech/project/pyzotero)
|
|
77
67
|
|
|
@@ -79,7 +69,7 @@ Dynamic: license-file
|
|
|
79
69
|
|
|
80
70
|
# Quickstart
|
|
81
71
|
|
|
82
|
-
1. `pip install pyzotero` **or** `conda
|
|
72
|
+
1. `uv add pyzotero` **or** `pip install pyzotero` **or** `conda install conda-forge::pyzotero`
|
|
83
73
|
2. You'll need the ID of the personal or group library you want to access:
|
|
84
74
|
- Your **personal library ID** is available [here](https://www.zotero.org/settings/keys), in the section `Your userID for use in API calls`
|
|
85
75
|
- For **group libraries**, the ID can be found by opening the group's page: `https://www.zotero.org/groups/groupname`, and hovering over the `group settings` link. The ID is the integer after `/groups/`
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
# Quickstart
|
|
6
6
|
|
|
7
|
-
1. `pip install pyzotero` **or** `conda
|
|
7
|
+
1. `uv add pyzotero` **or** `pip install pyzotero` **or** `conda install conda-forge::pyzotero`
|
|
8
8
|
2. You'll need the ID of the personal or group library you want to access:
|
|
9
9
|
- Your **personal library ID** is available [here](https://www.zotero.org/settings/keys), in the section `Your userID for use in API calls`
|
|
10
10
|
- For **group libraries**, the ID can be found by opening the group's page: `https://www.zotero.org/groups/groupname`, and hovering over the `group settings` link. The ID is the integer after `/groups/`
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "pyzotero"
|
|
3
|
-
|
|
3
|
+
version = "1.6.13"
|
|
4
4
|
description = "Python wrapper for the Zotero API"
|
|
5
|
+
readme = "README.md"
|
|
5
6
|
requires-python = ">=3.9"
|
|
6
7
|
dependencies = [
|
|
7
|
-
"feedparser >= 6.0.
|
|
8
|
-
"
|
|
9
|
-
"bibtexparser",
|
|
8
|
+
"feedparser >= 6.0.12",
|
|
9
|
+
"bibtexparser>=1.4.3,<2.0.0",
|
|
10
10
|
"httpx>=0.28.1",
|
|
11
|
+
"whenever>=0.8.8",
|
|
11
12
|
]
|
|
12
13
|
authors = [{ name = "Stephan Hügel", email = "urschrei@gmail.com" }]
|
|
13
14
|
license = {file = "LICENSE.md"}
|
|
@@ -32,28 +33,28 @@ Repository = "https://github.com/urschrei/pyzotero"
|
|
|
32
33
|
Tracker = "https://github.com/urschrei/pyzotero/issues"
|
|
33
34
|
documentation = "https://pyzotero.readthedocs.org"
|
|
34
35
|
|
|
35
|
-
[
|
|
36
|
-
|
|
37
|
-
"pytest >=
|
|
38
|
-
"
|
|
36
|
+
[dependency-groups]
|
|
37
|
+
dev = [
|
|
38
|
+
"pytest >= 8.4.2",
|
|
39
|
+
"pytz>=2025.2",
|
|
40
|
+
"httpretty >= 1.1.4",
|
|
39
41
|
"python-dateutil",
|
|
40
42
|
"ipython",
|
|
41
43
|
"pytest-asyncio",
|
|
42
44
|
"pytest-cov>=6.0.0",
|
|
45
|
+
"tzdata>=2025.2"
|
|
46
|
+
]
|
|
47
|
+
doc = [
|
|
48
|
+
"sphinx",
|
|
49
|
+
"sphinx-rtd-theme"
|
|
43
50
|
]
|
|
44
|
-
|
|
45
|
-
[tool.setuptools.dynamic]
|
|
46
|
-
readme = {file = "README.md", content-type = "text/markdown"}
|
|
47
51
|
|
|
48
52
|
[build-system]
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
"setuptools >= 45",
|
|
52
|
-
"setuptools-scm[toml] >= 6.2",
|
|
53
|
-
]
|
|
53
|
+
requires = ["uv_build>=0.8.14,<0.9.0"]
|
|
54
|
+
build-backend = "uv_build"
|
|
54
55
|
|
|
55
56
|
[tool.pytest.ini_options]
|
|
56
|
-
minversion = "
|
|
57
|
+
minversion = "8.3.0"
|
|
57
58
|
addopts = [
|
|
58
59
|
"--import-mode=importlib", "--cov=pyzotero", "--cov-report=xml",
|
|
59
60
|
]
|
|
@@ -63,8 +64,6 @@ testpaths = [
|
|
|
63
64
|
asyncio_mode = "strict"
|
|
64
65
|
asyncio_default_fixture_loop_scope = "function"
|
|
65
66
|
|
|
66
|
-
[tool.setuptools_scm]
|
|
67
|
-
write_to = "src/_version.py"
|
|
68
67
|
|
|
69
68
|
[tool.ruff]
|
|
70
69
|
exclude = [
|
|
@@ -7,7 +7,6 @@ __author__ = "Stephan Hügel"
|
|
|
7
7
|
__api_version__ = "3"
|
|
8
8
|
|
|
9
9
|
import copy
|
|
10
|
-
import datetime
|
|
11
10
|
import hashlib
|
|
12
11
|
import io
|
|
13
12
|
import json
|
|
@@ -33,7 +32,7 @@ from urllib.parse import (
|
|
|
33
32
|
import bibtexparser
|
|
34
33
|
import feedparser
|
|
35
34
|
import httpx
|
|
36
|
-
import
|
|
35
|
+
import whenever
|
|
37
36
|
from httpx import Request
|
|
38
37
|
|
|
39
38
|
import pyzotero as pz
|
|
@@ -361,6 +360,11 @@ class Zotero:
|
|
|
361
360
|
if c := self.client:
|
|
362
361
|
c.close()
|
|
363
362
|
|
|
363
|
+
@property
|
|
364
|
+
def __version__(self):
|
|
365
|
+
"""Return the version of the pyzotero library"""
|
|
366
|
+
return pz.__version__
|
|
367
|
+
|
|
364
368
|
def _check_for_component(self, url, component):
|
|
365
369
|
"""Check a url path query fragment for a specific query parameter"""
|
|
366
370
|
return bool(parse_qs(url).get(component))
|
|
@@ -419,13 +423,9 @@ class Zotero:
|
|
|
419
423
|
"""
|
|
420
424
|
# cache template and retrieval time for subsequent calls
|
|
421
425
|
try:
|
|
422
|
-
thetime =
|
|
423
|
-
tzinfo=pytz.timezone("GMT"),
|
|
424
|
-
)
|
|
426
|
+
thetime = whenever.ZonedDateTime.now("Europe/London").py_datetime()
|
|
425
427
|
except AttributeError:
|
|
426
|
-
thetime =
|
|
427
|
-
tzinfo=pytz.timezone("GMT"),
|
|
428
|
-
)
|
|
428
|
+
thetime = whenever.ZonedDateTime.now("Europe/London").py_datetime()
|
|
429
429
|
self.templates[key] = {"tmplt": response.json(), "updated": thetime}
|
|
430
430
|
return copy.deepcopy(response.json())
|
|
431
431
|
|
|
@@ -470,7 +470,7 @@ class Zotero:
|
|
|
470
470
|
params = {}
|
|
471
471
|
if not self.url_params:
|
|
472
472
|
self.url_params = {}
|
|
473
|
-
merged_params = params
|
|
473
|
+
merged_params = {**params, **self.url_params}
|
|
474
474
|
# our incoming url might be from the "links" dict, in which case it will contain url parameters.
|
|
475
475
|
# Unfortunately, httpx doesn't like to merge query paramaters in the url string and passed params
|
|
476
476
|
# so we strip the url params, combining them with our existing url_params
|
|
@@ -545,9 +545,7 @@ class Zotero:
|
|
|
545
545
|
# If the template is more than an hour old, try a 304
|
|
546
546
|
if (
|
|
547
547
|
abs(
|
|
548
|
-
|
|
549
|
-
tzinfo=pytz.timezone("GMT"),
|
|
550
|
-
)
|
|
548
|
+
whenever.ZonedDateTime.now("Europe/London").py_datetime()
|
|
551
549
|
- self.templates[template]["updated"],
|
|
552
550
|
).seconds
|
|
553
551
|
> ONE_HOUR
|
|
@@ -800,7 +798,7 @@ class Zotero:
|
|
|
800
798
|
if self.snapshot:
|
|
801
799
|
self.snapshot = False
|
|
802
800
|
pth += ".zip"
|
|
803
|
-
with Path.open(
|
|
801
|
+
with Path(pth).open("wb") as f:
|
|
804
802
|
f.write(file)
|
|
805
803
|
|
|
806
804
|
@retrieve
|
|
@@ -1854,7 +1852,7 @@ class Zupload:
|
|
|
1854
1852
|
if Path(str(self.basedir.joinpath(templt["filename"]))).is_file():
|
|
1855
1853
|
try:
|
|
1856
1854
|
# if it is a file, try to open it, and catch the error
|
|
1857
|
-
with Path
|
|
1855
|
+
with Path(str(self.basedir.joinpath(templt["filename"]))).open():
|
|
1858
1856
|
pass
|
|
1859
1857
|
except OSError:
|
|
1860
1858
|
msg = f"The file at {self.basedir.joinpath(templt['filename'])!s} couldn't be opened or found."
|
|
@@ -1914,7 +1912,7 @@ class Zupload:
|
|
|
1914
1912
|
"""Step 1: get upload authorisation for a file"""
|
|
1915
1913
|
mtypes = mimetypes.guess_type(attachment)
|
|
1916
1914
|
digest = hashlib.md5() # noqa: S324
|
|
1917
|
-
with Path.open(
|
|
1915
|
+
with Path(attachment).open("rb") as att:
|
|
1918
1916
|
for chunk in iter(lambda: att.read(8192), b""):
|
|
1919
1917
|
digest.update(chunk)
|
|
1920
1918
|
auth_headers = {"Content-Type": "application/x-www-form-urlencoded"}
|
|
@@ -1961,7 +1959,7 @@ class Zupload:
|
|
|
1961
1959
|
upload_list = [("key", upload_dict.pop("key"))]
|
|
1962
1960
|
for key, value in upload_dict.items():
|
|
1963
1961
|
upload_list.append((key, value))
|
|
1964
|
-
upload_list.append(("file", Path.open(
|
|
1962
|
+
upload_list.append(("file", Path(attachment).open("rb").read()))
|
|
1965
1963
|
upload_pairs = tuple(upload_list)
|
|
1966
1964
|
try:
|
|
1967
1965
|
self.zinstance._check_backoff()
|
pyzotero-1.6.10/.coveragerc
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Bug report
|
|
3
|
-
about: Found a bug in Pyzotero?
|
|
4
|
-
title: ''
|
|
5
|
-
labels: ''
|
|
6
|
-
assignees: urschrei
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
# Note
|
|
11
|
-
This issue tracker is for bug reports. Please don't ask about how to use the library here – the docs are comprehensive and include examples: https://pyzotero.readthedocs.io.
|
|
12
|
-
|
|
13
|
-
You can also ask questions on the forum: https://forums.zotero.org/discussions
|
|
14
|
-
|
|
15
|
-
# Reporting Bugs
|
|
16
|
-
If at all possible, provide a [MVCE](https://stackoverflow.com/help/minimal-reproducible-example). If this is inappropriate (e.g. it's obviously a bug), just fill in the below:
|
|
17
|
-
|
|
18
|
-
Platform:
|
|
19
|
-
Python version:
|
|
20
|
-
Pyzotero version:
|
|
21
|
-
|
|
22
|
-
# Problem Description
|
|
23
|
-
- What were you trying to do?
|
|
24
|
-
- What API call did it involve
|
|
25
|
-
- What error was raised?
|
|
26
|
-
|
|
27
|
-
# More Details
|
|
28
|
-
If possible, paste the full traceback in a code block below, and fill in the summary
|
|
29
|
-
<details>
|
|
30
|
-
<summary>Traceback</summary>
|
|
31
|
-
|
|
32
|
-
code goes here, indented with four spaces
|
|
33
|
-
|
|
34
|
-
</details>
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Usage question
|
|
3
|
-
about: How do I use the library and API?
|
|
4
|
-
title: ''
|
|
5
|
-
labels: ''
|
|
6
|
-
assignees:
|
|
7
|
-
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
# Note
|
|
11
|
-
This issue tracker is for **bug reports**. Please don't ask about how to use the library here – the docs are comprehensive and include examples: https://pyzotero.readthedocs.io.
|
|
12
|
-
|
|
13
|
-
You can also ask questions on the forum: https://forums.zotero.org/discussions
|
|
14
|
-
|
|
15
|
-
A guide to the Zotero API itself is here: https://www.zotero.org/support/dev/web_api/v3/start
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
version: 2
|
|
2
|
-
updates:
|
|
3
|
-
- package-ecosystem: "pip"
|
|
4
|
-
directory: "/"
|
|
5
|
-
schedule:
|
|
6
|
-
interval: "weekly"
|
|
7
|
-
open-pull-requests-limit: 20
|
|
8
|
-
groups:
|
|
9
|
-
# Specify a name for the group, which will be used in pull request titles
|
|
10
|
-
# and branch names
|
|
11
|
-
python-dependencies:
|
|
12
|
-
# Define patterns to include dependencies in the group (based on
|
|
13
|
-
# dependency name)
|
|
14
|
-
applies-to: version-updates # Applies the group rule to version updates
|
|
15
|
-
patterns:
|
|
16
|
-
- "*"
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
<!-- Thanks for opening a PR. Please read the following:
|
|
2
|
-
|
|
3
|
-
- **Base your changes on the `main` branch**
|
|
4
|
-
- If necessary, rebase against `main` before opening a pull request
|
|
5
|
-
- This codebase uses Ruff. PRs that reformat code will not be accepted.
|
|
6
|
-
- Ensure that all methods added have a proper docstring. **Please do not use Doctest**
|
|
7
|
-
- If at all possible, don't add dependencies
|
|
8
|
-
- If it is unavoidable, you must ensure that the dependency is maintained, and supported
|
|
9
|
-
- Ensure that you add your dependency to [pyproject.toml](pyproject.toml)
|
|
10
|
-
- Run the tests and ensure that they pass. If you are adding a feature **you must add tests that exercise it**
|
|
11
|
-
- If your pull request is a feature **document the feature**
|
|
12
|
-
- One feature per pull request
|
|
13
|
-
- [squash](http://git-scm.com/book/en/Git-Tools-Rewriting-History#Squashing-Commits) your commits before opening a pull request unless it makes no sense to do so
|
|
14
|
-
- If in doubt, comment your code.
|
|
15
|
-
|
|
16
|
-
## License of Contributed Code
|
|
17
|
-
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you shall be licensed under the Blua Oak Model License 1.0, without any additional terms or conditions.
|
|
18
|
-
Please note that pull requests with licenses that are more restrictive than or otherwise incompatible with the license will not be accepted. -->
|
|
19
|
-
|
|
20
|
-
Description of changes:
|
|
21
|
-
Issue reference (if applicable):
|
|
22
|
-
|
|
23
|
-
- [ ] I have read [the CONTRIBUTING doc](CONTRIBUTING.md)
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
name: Build wheel, release and publish on new tag
|
|
2
|
-
|
|
3
|
-
on: [push, pull_request]
|
|
4
|
-
|
|
5
|
-
jobs:
|
|
6
|
-
lint:
|
|
7
|
-
name: run Ruff
|
|
8
|
-
runs-on: ubuntu-latest
|
|
9
|
-
steps:
|
|
10
|
-
- uses: actions/checkout@v4
|
|
11
|
-
with:
|
|
12
|
-
fetch-depth: 0 # Optional, use if you use setuptools_scm
|
|
13
|
-
submodules: false # Optional, use if you have submodules
|
|
14
|
-
name: Check out repo
|
|
15
|
-
- uses: astral-sh/ruff-action@v3
|
|
16
|
-
with:
|
|
17
|
-
args: "check --verbose"
|
|
18
|
-
|
|
19
|
-
build:
|
|
20
|
-
name: Build and test
|
|
21
|
-
runs-on: ubuntu-latest
|
|
22
|
-
strategy:
|
|
23
|
-
matrix:
|
|
24
|
-
python-version: [3.9, 3.10.9, 3.11, 3.12, 3.13]
|
|
25
|
-
|
|
26
|
-
steps:
|
|
27
|
-
- name: check out repo
|
|
28
|
-
uses: actions/checkout@v4
|
|
29
|
-
with:
|
|
30
|
-
fetch-depth: 0 # Optional, use if you use setuptools_scm
|
|
31
|
-
submodules: false # Optional, use if you have submodules
|
|
32
|
-
|
|
33
|
-
- name: Install uv and set the python version
|
|
34
|
-
uses: astral-sh/setup-uv@v5
|
|
35
|
-
with:
|
|
36
|
-
python-version: ${{ matrix.python-version }}
|
|
37
|
-
|
|
38
|
-
- name: Install the project and deps
|
|
39
|
-
run: uv sync --all-extras --dev
|
|
40
|
-
|
|
41
|
-
- name: Run tests
|
|
42
|
-
run: uv run pytest
|
|
43
|
-
|
|
44
|
-
- name: Build wheel
|
|
45
|
-
run: uv build --no-sources --wheel -o dist
|
|
46
|
-
|
|
47
|
-
- uses: actions/upload-artifact@v4
|
|
48
|
-
name: Upload wheel as artifact
|
|
49
|
-
with:
|
|
50
|
-
name: wheels-${{ strategy.job-index }}
|
|
51
|
-
path: |
|
|
52
|
-
./dist/*.whl
|
|
53
|
-
|
|
54
|
-
make_sdist:
|
|
55
|
-
name: Make SDist
|
|
56
|
-
runs-on: ubuntu-latest
|
|
57
|
-
steps:
|
|
58
|
-
- uses: actions/checkout@v4
|
|
59
|
-
with:
|
|
60
|
-
fetch-depth: 0 # Optional, use if you use setuptools_scm
|
|
61
|
-
submodules: true # Optional, use if you have submodules
|
|
62
|
-
|
|
63
|
-
- name: Install uv
|
|
64
|
-
uses: astral-sh/setup-uv@v5
|
|
65
|
-
|
|
66
|
-
- name: Build SDist
|
|
67
|
-
run: uv build --no-sources --sdist -o dist
|
|
68
|
-
|
|
69
|
-
- uses: actions/upload-artifact@v4
|
|
70
|
-
with:
|
|
71
|
-
path: dist/*.tar.gz
|
|
72
|
-
|
|
73
|
-
status_check:
|
|
74
|
-
name: All Checks
|
|
75
|
-
needs: [lint, build]
|
|
76
|
-
runs-on: ubuntu-latest
|
|
77
|
-
if: always()
|
|
78
|
-
steps:
|
|
79
|
-
- name: Check status
|
|
80
|
-
if: contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled')
|
|
81
|
-
run: exit 1
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
release_artifacts:
|
|
85
|
-
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
|
|
86
|
-
name: Release repaired and tested wheels
|
|
87
|
-
needs: [status_check, make_sdist]
|
|
88
|
-
runs-on: ubuntu-latest
|
|
89
|
-
environment: release
|
|
90
|
-
permissions:
|
|
91
|
-
# IMPORTANT: this permission is mandatory for trusted publishing
|
|
92
|
-
id-token: write
|
|
93
|
-
contents: write
|
|
94
|
-
|
|
95
|
-
steps:
|
|
96
|
-
- uses: actions/checkout@v4
|
|
97
|
-
|
|
98
|
-
- name: Download compressed artifacts
|
|
99
|
-
id: download
|
|
100
|
-
uses: actions/download-artifact@v4
|
|
101
|
-
with:
|
|
102
|
-
path: ./artifacts
|
|
103
|
-
merge-multiple: true
|
|
104
|
-
|
|
105
|
-
- name: Create release and upload wheels
|
|
106
|
-
uses: ncipollo/release-action@v1
|
|
107
|
-
with:
|
|
108
|
-
allowUpdates: true
|
|
109
|
-
artifacts: "${{ steps.download.outputs.download-path }}/*.whl,${{ steps.download.outputs.download-path }}/*.gz,${{ steps.download.outputs.download-path }}/*.so,${{ steps.download.outputs.download-path }}/*.dylib,${{ steps.download.outputs.download-path }}/*.lib,${{ steps.download.outputs.download-path }}/*.dll"
|
|
110
|
-
token: ${{ secrets.GITHUB_TOKEN }}
|
|
111
|
-
|
|
112
|
-
- name: PyPI Publish
|
|
113
|
-
uses: pypa/gh-action-pypi-publish@release/v1
|
|
114
|
-
with:
|
|
115
|
-
packages-dir: ${{ steps.download.outputs.download-path }}
|
pyzotero-1.6.10/.gitignore
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
# .readthedocs.yaml
|
|
2
|
-
# Read the Docs configuration file
|
|
3
|
-
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
|
|
4
|
-
|
|
5
|
-
# Required
|
|
6
|
-
version: 2
|
|
7
|
-
|
|
8
|
-
# Set the version of Python and other tools you might need
|
|
9
|
-
build:
|
|
10
|
-
os: ubuntu-22.04
|
|
11
|
-
tools:
|
|
12
|
-
python: "3.11"
|
|
13
|
-
|
|
14
|
-
jobs:
|
|
15
|
-
post_create_environment:
|
|
16
|
-
- python -m pip install sphinx_rtd_theme
|
|
17
|
-
|
|
18
|
-
python:
|
|
19
|
-
install:
|
|
20
|
-
- method: pip
|
|
21
|
-
path: .
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
# Build documentation in the docs/ directory with Sphinx
|
|
25
|
-
sphinx:
|
|
26
|
-
configuration: doc/conf.py
|
pyzotero-1.6.10/AUTHORS
DELETED
pyzotero-1.6.10/CITATION.cff
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
cff-version: 1.1.0
|
|
2
|
-
message: "If you use this software, please cite it using these metadata."
|
|
3
|
-
abstract: "Pyzotero: a Python client for the Zotero API"
|
|
4
|
-
authors:
|
|
5
|
-
-
|
|
6
|
-
family-names: "Hügel"
|
|
7
|
-
given-names: Stephan
|
|
8
|
-
orcid: "https://orcid.org/0000-0003-4379-2450"
|
|
9
|
-
title: "Pyzotero"
|
|
10
|
-
date-released: 2019-05-18
|
|
11
|
-
doi: "10.5281/zenodo.2917290"
|
|
12
|
-
keywords:
|
|
13
|
-
- zotero
|
|
14
|
-
license: BlueOak-1.0.0
|
|
15
|
-
repository-code: "https://github.com/urschrei/pyzotero"
|
|
16
|
-
version: "1.3.15"
|