arccos-api 0.5.2__tar.gz → 0.5.3__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.
- {arccos_api-0.5.2 → arccos_api-0.5.3}/MANIFEST.in +1 -0
- arccos_api-0.5.3/PKG-INFO +192 -0
- arccos_api-0.5.3/README.md +151 -0
- arccos_api-0.5.3/arccos_api.egg-info/PKG-INFO +192 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos_api.egg-info/SOURCES.txt +3 -0
- arccos_api-0.5.3/docs/cli.md +149 -0
- arccos_api-0.5.3/docs/openapi.yaml +1329 -0
- arccos_api-0.5.3/docs/python-api.md +144 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/pyproject.toml +1 -1
- arccos_api-0.5.2/PKG-INFO +0 -466
- arccos_api-0.5.2/README.md +0 -425
- arccos_api-0.5.2/arccos_api.egg-info/PKG-INFO +0 -466
- {arccos_api-0.5.2 → arccos_api-0.5.3}/LICENSE +0 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/__init__.py +0 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/__main__.py +0 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/_http.py +0 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/_validation.py +0 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/auth.py +0 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/cli/__init__.py +0 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/cli/_helpers.py +0 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/cli/achievements.py +0 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/cli/analytics.py +0 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/cli/auth.py +0 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/cli/clubs.py +0 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/cli/courses.py +0 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/cli/handicap.py +0 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/cli/presentation.py +0 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/cli/rounds.py +0 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/cli/stats.py +0 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/client.py +0 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/exceptions.py +0 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/py.typed +0 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/resources/__init__.py +0 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/resources/clubs.py +0 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/resources/courses.py +0 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/resources/handicap.py +0 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/resources/rounds.py +0 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/resources/stats.py +0 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/types.py +0 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos_api.egg-info/dependency_links.txt +0 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos_api.egg-info/entry_points.txt +0 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos_api.egg-info/requires.txt +0 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos_api.egg-info/top_level.txt +0 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/setup.cfg +0 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/tests/fixtures/contracts/courses_played.json +0 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/tests/fixtures/contracts/personal_bests.json +0 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/tests/fixtures/contracts/rounds.json +0 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/tests/fixtures/contracts/smart_distances.json +0 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/tests/test_auth.py +0 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/tests/test_cli.py +0 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/tests/test_client.py +0 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/tests/test_contracts.py +0 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/tests/test_exceptions.py +0 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/tests/test_http.py +0 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/tests/test_resources.py +0 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/tests/test_rounds.py +0 -0
- {arccos_api-0.5.2 → arccos_api-0.5.3}/tests/test_security.py +0 -0
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: arccos-api
|
|
3
|
+
Version: 0.5.3
|
|
4
|
+
Summary: Unofficial Python CLI and client library for the Arccos Golf API
|
|
5
|
+
Author: Paul Frederiksen
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/pfrederiksen/arccos-api
|
|
8
|
+
Project-URL: Repository, https://github.com/pfrederiksen/arccos-api
|
|
9
|
+
Project-URL: Issues, https://github.com/pfrederiksen/arccos-api/issues
|
|
10
|
+
Project-URL: PyPI, https://pypi.org/project/arccos-api/
|
|
11
|
+
Project-URL: Changelog, https://github.com/pfrederiksen/arccos-api/blob/main/CHANGELOG.md
|
|
12
|
+
Keywords: golf,arccos,api,cli,golf-stats
|
|
13
|
+
Classifier: Development Status :: 4 - Beta
|
|
14
|
+
Classifier: Environment :: Console
|
|
15
|
+
Classifier: Intended Audience :: Developers
|
|
16
|
+
Classifier: Intended Audience :: End Users/Desktop
|
|
17
|
+
Classifier: Programming Language :: Python :: 3
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
22
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
23
|
+
Requires-Python: >=3.11
|
|
24
|
+
Description-Content-Type: text/markdown
|
|
25
|
+
License-File: LICENSE
|
|
26
|
+
Requires-Dist: requests<3,>=2.31
|
|
27
|
+
Requires-Dist: click<9,>=8.1
|
|
28
|
+
Requires-Dist: rich<16,>=13.0
|
|
29
|
+
Provides-Extra: keyring
|
|
30
|
+
Requires-Dist: keyring<27,>=25; extra == "keyring"
|
|
31
|
+
Provides-Extra: dev
|
|
32
|
+
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
33
|
+
Requires-Dist: pytest-cov; extra == "dev"
|
|
34
|
+
Requires-Dist: ruff; extra == "dev"
|
|
35
|
+
Requires-Dist: mypy; extra == "dev"
|
|
36
|
+
Requires-Dist: types-requests; extra == "dev"
|
|
37
|
+
Requires-Dist: openapi-spec-validator<0.8,>=0.7; extra == "dev"
|
|
38
|
+
Requires-Dist: build>=0.10.0; extra == "dev"
|
|
39
|
+
Requires-Dist: twine>=4.0.0; extra == "dev"
|
|
40
|
+
Dynamic: license-file
|
|
41
|
+
|
|
42
|
+
<p align="center">
|
|
43
|
+
<img src="https://raw.githubusercontent.com/pfrederiksen/arccos-api/main/assets/banner.png" alt="arccos-api banner" width="100%">
|
|
44
|
+
</p>
|
|
45
|
+
|
|
46
|
+
# arccos-api
|
|
47
|
+
|
|
48
|
+
[](https://pypi.org/project/arccos-api/)
|
|
49
|
+
[](https://github.com/pfrederiksen/arccos-api/actions/workflows/tests.yml)
|
|
50
|
+
[](https://pypi.org/project/arccos-api/)
|
|
51
|
+
[](https://github.com/pfrederiksen/arccos-api/blob/main/LICENSE)
|
|
52
|
+
|
|
53
|
+
Your Arccos Golf data, from the terminal or Python.
|
|
54
|
+
|
|
55
|
+
`arccos-api` is an unofficial, read-only client for exploring your own rounds,
|
|
56
|
+
handicap, club distances, strokes gained, pace of play, and more.
|
|
57
|
+
|
|
58
|
+
> **Important:** Arccos does not provide a public API. This project is not affiliated with
|
|
59
|
+
> Arccos Golf LLC, and upstream changes may occasionally require a library update.
|
|
60
|
+
|
|
61
|
+
## What you can do
|
|
62
|
+
|
|
63
|
+
- Browse rounds and hole-by-hole scoring
|
|
64
|
+
- Track handicap, scoring, and strokes-gained trends
|
|
65
|
+
- Inspect smart distances, club shots, and dispersion
|
|
66
|
+
- Compare rounds and review personal bests
|
|
67
|
+
- Explore courses, pace of play, and hole imagery metadata
|
|
68
|
+
- Export data as JSON, CSV, or NDJSON
|
|
69
|
+
- Use the same data through a Python client
|
|
70
|
+
|
|
71
|
+
Golf data access is **read-only by design**. The client only sends `GET` requests
|
|
72
|
+
to the Arccos data API. Login and token refresh use the authentication service's
|
|
73
|
+
required `POST` requests, but never create, edit, or delete golf or account data.
|
|
74
|
+
|
|
75
|
+
## Install
|
|
76
|
+
|
|
77
|
+
Requires Python 3.11 or newer.
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
pip install arccos-api
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
For the CLI on macOS or Linux, Homebrew is also available:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
brew install pfrederiksen/tap/arccos-api
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Optional operating-system keyring support:
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
pip install 'arccos-api[keyring]'
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Quick start
|
|
96
|
+
|
|
97
|
+
Authenticate once, then start exploring:
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
arccos login
|
|
101
|
+
arccos rounds
|
|
102
|
+
arccos handicap
|
|
103
|
+
arccos clubs
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Some useful next steps:
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
arccos round 12345678 # hole-by-hole round detail
|
|
110
|
+
arccos stats --dashboard # strokes-gained dashboard
|
|
111
|
+
arccos trends # handicap trend
|
|
112
|
+
arccos pace # pace of play by course
|
|
113
|
+
arccos export -f csv -o rounds.csv
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Most display commands support `--json`, and every command supports `--help`.
|
|
117
|
+
See the [CLI guide](https://github.com/pfrederiksen/arccos-api/blob/main/docs/cli.md) for the complete command list, filtering,
|
|
118
|
+
profiles, shell completion, and export examples.
|
|
119
|
+
|
|
120
|
+
## Use it from Python
|
|
121
|
+
|
|
122
|
+
`arccos login` caches credentials, so Python can reuse them without putting a
|
|
123
|
+
password in source code:
|
|
124
|
+
|
|
125
|
+
```python
|
|
126
|
+
from arccos import ArccosClient
|
|
127
|
+
|
|
128
|
+
with ArccosClient() as client:
|
|
129
|
+
rounds = client.rounds.list(limit=5)
|
|
130
|
+
handicap = client.handicap.current()
|
|
131
|
+
distances = client.clubs.smart_distances()
|
|
132
|
+
|
|
133
|
+
print(f"Handicap: {handicap['userHcp']:.1f}")
|
|
134
|
+
for round_ in rounds:
|
|
135
|
+
print(round_["startTime"][:10], round_["noOfShots"])
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
You can also authenticate directly:
|
|
139
|
+
|
|
140
|
+
```python
|
|
141
|
+
client = ArccosClient(email="you@example.com", password="your_password")
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
See the [Python client guide](https://github.com/pfrederiksen/arccos-api/blob/main/docs/python-api.md) for resources and examples, or
|
|
145
|
+
browse the complete [OpenAPI 3.1 specification](https://github.com/pfrederiksen/arccos-api/blob/main/docs/openapi.yaml).
|
|
146
|
+
|
|
147
|
+
## Documentation
|
|
148
|
+
|
|
149
|
+
| Guide | Contents |
|
|
150
|
+
|---|---|
|
|
151
|
+
| [CLI guide](https://github.com/pfrederiksen/arccos-api/blob/main/docs/cli.md) | Commands, filters, exports, profiles, and environment variables |
|
|
152
|
+
| [Python client](https://github.com/pfrederiksen/arccos-api/blob/main/docs/python-api.md) | Authentication, resources, and usage examples |
|
|
153
|
+
| [OpenAPI specification](https://github.com/pfrederiksen/arccos-api/blob/main/docs/openapi.yaml) | Complete endpoint and schema reference |
|
|
154
|
+
| [Examples](https://github.com/pfrederiksen/arccos-api/tree/main/examples) | Runnable Python scripts |
|
|
155
|
+
| [Contributing](https://github.com/pfrederiksen/arccos-api/blob/main/CONTRIBUTING.md) | Local setup, tests, style, and releases |
|
|
156
|
+
| [Security](https://github.com/pfrederiksen/arccos-api/blob/main/SECURITY.md) | Credential handling and vulnerability reporting |
|
|
157
|
+
| [Changelog](https://github.com/pfrederiksen/arccos-api/blob/main/CHANGELOG.md) | Release history |
|
|
158
|
+
|
|
159
|
+
## Credentials and privacy
|
|
160
|
+
|
|
161
|
+
- Credentials are cached with owner-only permissions in your platform's config
|
|
162
|
+
directory. Legacy `~/.arccos_creds.json` files migrate automatically.
|
|
163
|
+
- Named profiles are available through `ARCCOS_PROFILE` or command options.
|
|
164
|
+
- Set `ARCCOS_KEYRING=true` to use the optional OS keyring integration.
|
|
165
|
+
- `arccos logout` clears local credentials but cannot revoke upstream tokens;
|
|
166
|
+
change your Arccos password if credentials may be compromised.
|
|
167
|
+
- Use your own account and avoid aggressive polling.
|
|
168
|
+
|
|
169
|
+
Run `arccos doctor` to check configuration, credentials, and API connectivity.
|
|
170
|
+
See [SECURITY.md](https://github.com/pfrederiksen/arccos-api/blob/main/SECURITY.md) to report a vulnerability privately.
|
|
171
|
+
|
|
172
|
+
## Development
|
|
173
|
+
|
|
174
|
+
```bash
|
|
175
|
+
git clone https://github.com/pfrederiksen/arccos-api.git
|
|
176
|
+
cd arccos-api
|
|
177
|
+
python3 -m venv .venv
|
|
178
|
+
source .venv/bin/activate
|
|
179
|
+
pip install -e '.[dev]'
|
|
180
|
+
pytest
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
Tests use mocked and sanitized responses; no Arccos account is required.
|
|
184
|
+
See [CONTRIBUTING.md](https://github.com/pfrederiksen/arccos-api/blob/main/CONTRIBUTING.md) for the full development workflow.
|
|
185
|
+
|
|
186
|
+
## Disclaimer
|
|
187
|
+
|
|
188
|
+
Not affiliated with, endorsed by, or connected to Arccos Golf LLC. Use your own
|
|
189
|
+
account credentials only. This project is intended for personal data access and
|
|
190
|
+
research.
|
|
191
|
+
|
|
192
|
+
Released under the [MIT License](https://github.com/pfrederiksen/arccos-api/blob/main/LICENSE).
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="https://raw.githubusercontent.com/pfrederiksen/arccos-api/main/assets/banner.png" alt="arccos-api banner" width="100%">
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
# arccos-api
|
|
6
|
+
|
|
7
|
+
[](https://pypi.org/project/arccos-api/)
|
|
8
|
+
[](https://github.com/pfrederiksen/arccos-api/actions/workflows/tests.yml)
|
|
9
|
+
[](https://pypi.org/project/arccos-api/)
|
|
10
|
+
[](https://github.com/pfrederiksen/arccos-api/blob/main/LICENSE)
|
|
11
|
+
|
|
12
|
+
Your Arccos Golf data, from the terminal or Python.
|
|
13
|
+
|
|
14
|
+
`arccos-api` is an unofficial, read-only client for exploring your own rounds,
|
|
15
|
+
handicap, club distances, strokes gained, pace of play, and more.
|
|
16
|
+
|
|
17
|
+
> **Important:** Arccos does not provide a public API. This project is not affiliated with
|
|
18
|
+
> Arccos Golf LLC, and upstream changes may occasionally require a library update.
|
|
19
|
+
|
|
20
|
+
## What you can do
|
|
21
|
+
|
|
22
|
+
- Browse rounds and hole-by-hole scoring
|
|
23
|
+
- Track handicap, scoring, and strokes-gained trends
|
|
24
|
+
- Inspect smart distances, club shots, and dispersion
|
|
25
|
+
- Compare rounds and review personal bests
|
|
26
|
+
- Explore courses, pace of play, and hole imagery metadata
|
|
27
|
+
- Export data as JSON, CSV, or NDJSON
|
|
28
|
+
- Use the same data through a Python client
|
|
29
|
+
|
|
30
|
+
Golf data access is **read-only by design**. The client only sends `GET` requests
|
|
31
|
+
to the Arccos data API. Login and token refresh use the authentication service's
|
|
32
|
+
required `POST` requests, but never create, edit, or delete golf or account data.
|
|
33
|
+
|
|
34
|
+
## Install
|
|
35
|
+
|
|
36
|
+
Requires Python 3.11 or newer.
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
pip install arccos-api
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
For the CLI on macOS or Linux, Homebrew is also available:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
brew install pfrederiksen/tap/arccos-api
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Optional operating-system keyring support:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
pip install 'arccos-api[keyring]'
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Quick start
|
|
55
|
+
|
|
56
|
+
Authenticate once, then start exploring:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
arccos login
|
|
60
|
+
arccos rounds
|
|
61
|
+
arccos handicap
|
|
62
|
+
arccos clubs
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Some useful next steps:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
arccos round 12345678 # hole-by-hole round detail
|
|
69
|
+
arccos stats --dashboard # strokes-gained dashboard
|
|
70
|
+
arccos trends # handicap trend
|
|
71
|
+
arccos pace # pace of play by course
|
|
72
|
+
arccos export -f csv -o rounds.csv
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Most display commands support `--json`, and every command supports `--help`.
|
|
76
|
+
See the [CLI guide](https://github.com/pfrederiksen/arccos-api/blob/main/docs/cli.md) for the complete command list, filtering,
|
|
77
|
+
profiles, shell completion, and export examples.
|
|
78
|
+
|
|
79
|
+
## Use it from Python
|
|
80
|
+
|
|
81
|
+
`arccos login` caches credentials, so Python can reuse them without putting a
|
|
82
|
+
password in source code:
|
|
83
|
+
|
|
84
|
+
```python
|
|
85
|
+
from arccos import ArccosClient
|
|
86
|
+
|
|
87
|
+
with ArccosClient() as client:
|
|
88
|
+
rounds = client.rounds.list(limit=5)
|
|
89
|
+
handicap = client.handicap.current()
|
|
90
|
+
distances = client.clubs.smart_distances()
|
|
91
|
+
|
|
92
|
+
print(f"Handicap: {handicap['userHcp']:.1f}")
|
|
93
|
+
for round_ in rounds:
|
|
94
|
+
print(round_["startTime"][:10], round_["noOfShots"])
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
You can also authenticate directly:
|
|
98
|
+
|
|
99
|
+
```python
|
|
100
|
+
client = ArccosClient(email="you@example.com", password="your_password")
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
See the [Python client guide](https://github.com/pfrederiksen/arccos-api/blob/main/docs/python-api.md) for resources and examples, or
|
|
104
|
+
browse the complete [OpenAPI 3.1 specification](https://github.com/pfrederiksen/arccos-api/blob/main/docs/openapi.yaml).
|
|
105
|
+
|
|
106
|
+
## Documentation
|
|
107
|
+
|
|
108
|
+
| Guide | Contents |
|
|
109
|
+
|---|---|
|
|
110
|
+
| [CLI guide](https://github.com/pfrederiksen/arccos-api/blob/main/docs/cli.md) | Commands, filters, exports, profiles, and environment variables |
|
|
111
|
+
| [Python client](https://github.com/pfrederiksen/arccos-api/blob/main/docs/python-api.md) | Authentication, resources, and usage examples |
|
|
112
|
+
| [OpenAPI specification](https://github.com/pfrederiksen/arccos-api/blob/main/docs/openapi.yaml) | Complete endpoint and schema reference |
|
|
113
|
+
| [Examples](https://github.com/pfrederiksen/arccos-api/tree/main/examples) | Runnable Python scripts |
|
|
114
|
+
| [Contributing](https://github.com/pfrederiksen/arccos-api/blob/main/CONTRIBUTING.md) | Local setup, tests, style, and releases |
|
|
115
|
+
| [Security](https://github.com/pfrederiksen/arccos-api/blob/main/SECURITY.md) | Credential handling and vulnerability reporting |
|
|
116
|
+
| [Changelog](https://github.com/pfrederiksen/arccos-api/blob/main/CHANGELOG.md) | Release history |
|
|
117
|
+
|
|
118
|
+
## Credentials and privacy
|
|
119
|
+
|
|
120
|
+
- Credentials are cached with owner-only permissions in your platform's config
|
|
121
|
+
directory. Legacy `~/.arccos_creds.json` files migrate automatically.
|
|
122
|
+
- Named profiles are available through `ARCCOS_PROFILE` or command options.
|
|
123
|
+
- Set `ARCCOS_KEYRING=true` to use the optional OS keyring integration.
|
|
124
|
+
- `arccos logout` clears local credentials but cannot revoke upstream tokens;
|
|
125
|
+
change your Arccos password if credentials may be compromised.
|
|
126
|
+
- Use your own account and avoid aggressive polling.
|
|
127
|
+
|
|
128
|
+
Run `arccos doctor` to check configuration, credentials, and API connectivity.
|
|
129
|
+
See [SECURITY.md](https://github.com/pfrederiksen/arccos-api/blob/main/SECURITY.md) to report a vulnerability privately.
|
|
130
|
+
|
|
131
|
+
## Development
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
git clone https://github.com/pfrederiksen/arccos-api.git
|
|
135
|
+
cd arccos-api
|
|
136
|
+
python3 -m venv .venv
|
|
137
|
+
source .venv/bin/activate
|
|
138
|
+
pip install -e '.[dev]'
|
|
139
|
+
pytest
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
Tests use mocked and sanitized responses; no Arccos account is required.
|
|
143
|
+
See [CONTRIBUTING.md](https://github.com/pfrederiksen/arccos-api/blob/main/CONTRIBUTING.md) for the full development workflow.
|
|
144
|
+
|
|
145
|
+
## Disclaimer
|
|
146
|
+
|
|
147
|
+
Not affiliated with, endorsed by, or connected to Arccos Golf LLC. Use your own
|
|
148
|
+
account credentials only. This project is intended for personal data access and
|
|
149
|
+
research.
|
|
150
|
+
|
|
151
|
+
Released under the [MIT License](https://github.com/pfrederiksen/arccos-api/blob/main/LICENSE).
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: arccos-api
|
|
3
|
+
Version: 0.5.3
|
|
4
|
+
Summary: Unofficial Python CLI and client library for the Arccos Golf API
|
|
5
|
+
Author: Paul Frederiksen
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/pfrederiksen/arccos-api
|
|
8
|
+
Project-URL: Repository, https://github.com/pfrederiksen/arccos-api
|
|
9
|
+
Project-URL: Issues, https://github.com/pfrederiksen/arccos-api/issues
|
|
10
|
+
Project-URL: PyPI, https://pypi.org/project/arccos-api/
|
|
11
|
+
Project-URL: Changelog, https://github.com/pfrederiksen/arccos-api/blob/main/CHANGELOG.md
|
|
12
|
+
Keywords: golf,arccos,api,cli,golf-stats
|
|
13
|
+
Classifier: Development Status :: 4 - Beta
|
|
14
|
+
Classifier: Environment :: Console
|
|
15
|
+
Classifier: Intended Audience :: Developers
|
|
16
|
+
Classifier: Intended Audience :: End Users/Desktop
|
|
17
|
+
Classifier: Programming Language :: Python :: 3
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
22
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
23
|
+
Requires-Python: >=3.11
|
|
24
|
+
Description-Content-Type: text/markdown
|
|
25
|
+
License-File: LICENSE
|
|
26
|
+
Requires-Dist: requests<3,>=2.31
|
|
27
|
+
Requires-Dist: click<9,>=8.1
|
|
28
|
+
Requires-Dist: rich<16,>=13.0
|
|
29
|
+
Provides-Extra: keyring
|
|
30
|
+
Requires-Dist: keyring<27,>=25; extra == "keyring"
|
|
31
|
+
Provides-Extra: dev
|
|
32
|
+
Requires-Dist: pytest>=8.0; extra == "dev"
|
|
33
|
+
Requires-Dist: pytest-cov; extra == "dev"
|
|
34
|
+
Requires-Dist: ruff; extra == "dev"
|
|
35
|
+
Requires-Dist: mypy; extra == "dev"
|
|
36
|
+
Requires-Dist: types-requests; extra == "dev"
|
|
37
|
+
Requires-Dist: openapi-spec-validator<0.8,>=0.7; extra == "dev"
|
|
38
|
+
Requires-Dist: build>=0.10.0; extra == "dev"
|
|
39
|
+
Requires-Dist: twine>=4.0.0; extra == "dev"
|
|
40
|
+
Dynamic: license-file
|
|
41
|
+
|
|
42
|
+
<p align="center">
|
|
43
|
+
<img src="https://raw.githubusercontent.com/pfrederiksen/arccos-api/main/assets/banner.png" alt="arccos-api banner" width="100%">
|
|
44
|
+
</p>
|
|
45
|
+
|
|
46
|
+
# arccos-api
|
|
47
|
+
|
|
48
|
+
[](https://pypi.org/project/arccos-api/)
|
|
49
|
+
[](https://github.com/pfrederiksen/arccos-api/actions/workflows/tests.yml)
|
|
50
|
+
[](https://pypi.org/project/arccos-api/)
|
|
51
|
+
[](https://github.com/pfrederiksen/arccos-api/blob/main/LICENSE)
|
|
52
|
+
|
|
53
|
+
Your Arccos Golf data, from the terminal or Python.
|
|
54
|
+
|
|
55
|
+
`arccos-api` is an unofficial, read-only client for exploring your own rounds,
|
|
56
|
+
handicap, club distances, strokes gained, pace of play, and more.
|
|
57
|
+
|
|
58
|
+
> **Important:** Arccos does not provide a public API. This project is not affiliated with
|
|
59
|
+
> Arccos Golf LLC, and upstream changes may occasionally require a library update.
|
|
60
|
+
|
|
61
|
+
## What you can do
|
|
62
|
+
|
|
63
|
+
- Browse rounds and hole-by-hole scoring
|
|
64
|
+
- Track handicap, scoring, and strokes-gained trends
|
|
65
|
+
- Inspect smart distances, club shots, and dispersion
|
|
66
|
+
- Compare rounds and review personal bests
|
|
67
|
+
- Explore courses, pace of play, and hole imagery metadata
|
|
68
|
+
- Export data as JSON, CSV, or NDJSON
|
|
69
|
+
- Use the same data through a Python client
|
|
70
|
+
|
|
71
|
+
Golf data access is **read-only by design**. The client only sends `GET` requests
|
|
72
|
+
to the Arccos data API. Login and token refresh use the authentication service's
|
|
73
|
+
required `POST` requests, but never create, edit, or delete golf or account data.
|
|
74
|
+
|
|
75
|
+
## Install
|
|
76
|
+
|
|
77
|
+
Requires Python 3.11 or newer.
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
pip install arccos-api
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
For the CLI on macOS or Linux, Homebrew is also available:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
brew install pfrederiksen/tap/arccos-api
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Optional operating-system keyring support:
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
pip install 'arccos-api[keyring]'
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Quick start
|
|
96
|
+
|
|
97
|
+
Authenticate once, then start exploring:
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
arccos login
|
|
101
|
+
arccos rounds
|
|
102
|
+
arccos handicap
|
|
103
|
+
arccos clubs
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Some useful next steps:
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
arccos round 12345678 # hole-by-hole round detail
|
|
110
|
+
arccos stats --dashboard # strokes-gained dashboard
|
|
111
|
+
arccos trends # handicap trend
|
|
112
|
+
arccos pace # pace of play by course
|
|
113
|
+
arccos export -f csv -o rounds.csv
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
Most display commands support `--json`, and every command supports `--help`.
|
|
117
|
+
See the [CLI guide](https://github.com/pfrederiksen/arccos-api/blob/main/docs/cli.md) for the complete command list, filtering,
|
|
118
|
+
profiles, shell completion, and export examples.
|
|
119
|
+
|
|
120
|
+
## Use it from Python
|
|
121
|
+
|
|
122
|
+
`arccos login` caches credentials, so Python can reuse them without putting a
|
|
123
|
+
password in source code:
|
|
124
|
+
|
|
125
|
+
```python
|
|
126
|
+
from arccos import ArccosClient
|
|
127
|
+
|
|
128
|
+
with ArccosClient() as client:
|
|
129
|
+
rounds = client.rounds.list(limit=5)
|
|
130
|
+
handicap = client.handicap.current()
|
|
131
|
+
distances = client.clubs.smart_distances()
|
|
132
|
+
|
|
133
|
+
print(f"Handicap: {handicap['userHcp']:.1f}")
|
|
134
|
+
for round_ in rounds:
|
|
135
|
+
print(round_["startTime"][:10], round_["noOfShots"])
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
You can also authenticate directly:
|
|
139
|
+
|
|
140
|
+
```python
|
|
141
|
+
client = ArccosClient(email="you@example.com", password="your_password")
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
See the [Python client guide](https://github.com/pfrederiksen/arccos-api/blob/main/docs/python-api.md) for resources and examples, or
|
|
145
|
+
browse the complete [OpenAPI 3.1 specification](https://github.com/pfrederiksen/arccos-api/blob/main/docs/openapi.yaml).
|
|
146
|
+
|
|
147
|
+
## Documentation
|
|
148
|
+
|
|
149
|
+
| Guide | Contents |
|
|
150
|
+
|---|---|
|
|
151
|
+
| [CLI guide](https://github.com/pfrederiksen/arccos-api/blob/main/docs/cli.md) | Commands, filters, exports, profiles, and environment variables |
|
|
152
|
+
| [Python client](https://github.com/pfrederiksen/arccos-api/blob/main/docs/python-api.md) | Authentication, resources, and usage examples |
|
|
153
|
+
| [OpenAPI specification](https://github.com/pfrederiksen/arccos-api/blob/main/docs/openapi.yaml) | Complete endpoint and schema reference |
|
|
154
|
+
| [Examples](https://github.com/pfrederiksen/arccos-api/tree/main/examples) | Runnable Python scripts |
|
|
155
|
+
| [Contributing](https://github.com/pfrederiksen/arccos-api/blob/main/CONTRIBUTING.md) | Local setup, tests, style, and releases |
|
|
156
|
+
| [Security](https://github.com/pfrederiksen/arccos-api/blob/main/SECURITY.md) | Credential handling and vulnerability reporting |
|
|
157
|
+
| [Changelog](https://github.com/pfrederiksen/arccos-api/blob/main/CHANGELOG.md) | Release history |
|
|
158
|
+
|
|
159
|
+
## Credentials and privacy
|
|
160
|
+
|
|
161
|
+
- Credentials are cached with owner-only permissions in your platform's config
|
|
162
|
+
directory. Legacy `~/.arccos_creds.json` files migrate automatically.
|
|
163
|
+
- Named profiles are available through `ARCCOS_PROFILE` or command options.
|
|
164
|
+
- Set `ARCCOS_KEYRING=true` to use the optional OS keyring integration.
|
|
165
|
+
- `arccos logout` clears local credentials but cannot revoke upstream tokens;
|
|
166
|
+
change your Arccos password if credentials may be compromised.
|
|
167
|
+
- Use your own account and avoid aggressive polling.
|
|
168
|
+
|
|
169
|
+
Run `arccos doctor` to check configuration, credentials, and API connectivity.
|
|
170
|
+
See [SECURITY.md](https://github.com/pfrederiksen/arccos-api/blob/main/SECURITY.md) to report a vulnerability privately.
|
|
171
|
+
|
|
172
|
+
## Development
|
|
173
|
+
|
|
174
|
+
```bash
|
|
175
|
+
git clone https://github.com/pfrederiksen/arccos-api.git
|
|
176
|
+
cd arccos-api
|
|
177
|
+
python3 -m venv .venv
|
|
178
|
+
source .venv/bin/activate
|
|
179
|
+
pip install -e '.[dev]'
|
|
180
|
+
pytest
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
Tests use mocked and sanitized responses; no Arccos account is required.
|
|
184
|
+
See [CONTRIBUTING.md](https://github.com/pfrederiksen/arccos-api/blob/main/CONTRIBUTING.md) for the full development workflow.
|
|
185
|
+
|
|
186
|
+
## Disclaimer
|
|
187
|
+
|
|
188
|
+
Not affiliated with, endorsed by, or connected to Arccos Golf LLC. Use your own
|
|
189
|
+
account credentials only. This project is intended for personal data access and
|
|
190
|
+
research.
|
|
191
|
+
|
|
192
|
+
Released under the [MIT License](https://github.com/pfrederiksen/arccos-api/blob/main/LICENSE).
|
|
@@ -34,6 +34,9 @@ arccos_api.egg-info/dependency_links.txt
|
|
|
34
34
|
arccos_api.egg-info/entry_points.txt
|
|
35
35
|
arccos_api.egg-info/requires.txt
|
|
36
36
|
arccos_api.egg-info/top_level.txt
|
|
37
|
+
docs/cli.md
|
|
38
|
+
docs/openapi.yaml
|
|
39
|
+
docs/python-api.md
|
|
37
40
|
tests/test_auth.py
|
|
38
41
|
tests/test_cli.py
|
|
39
42
|
tests/test_client.py
|