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.
Files changed (57) hide show
  1. {arccos_api-0.5.2 → arccos_api-0.5.3}/MANIFEST.in +1 -0
  2. arccos_api-0.5.3/PKG-INFO +192 -0
  3. arccos_api-0.5.3/README.md +151 -0
  4. arccos_api-0.5.3/arccos_api.egg-info/PKG-INFO +192 -0
  5. {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos_api.egg-info/SOURCES.txt +3 -0
  6. arccos_api-0.5.3/docs/cli.md +149 -0
  7. arccos_api-0.5.3/docs/openapi.yaml +1329 -0
  8. arccos_api-0.5.3/docs/python-api.md +144 -0
  9. {arccos_api-0.5.2 → arccos_api-0.5.3}/pyproject.toml +1 -1
  10. arccos_api-0.5.2/PKG-INFO +0 -466
  11. arccos_api-0.5.2/README.md +0 -425
  12. arccos_api-0.5.2/arccos_api.egg-info/PKG-INFO +0 -466
  13. {arccos_api-0.5.2 → arccos_api-0.5.3}/LICENSE +0 -0
  14. {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/__init__.py +0 -0
  15. {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/__main__.py +0 -0
  16. {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/_http.py +0 -0
  17. {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/_validation.py +0 -0
  18. {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/auth.py +0 -0
  19. {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/cli/__init__.py +0 -0
  20. {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/cli/_helpers.py +0 -0
  21. {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/cli/achievements.py +0 -0
  22. {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/cli/analytics.py +0 -0
  23. {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/cli/auth.py +0 -0
  24. {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/cli/clubs.py +0 -0
  25. {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/cli/courses.py +0 -0
  26. {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/cli/handicap.py +0 -0
  27. {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/cli/presentation.py +0 -0
  28. {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/cli/rounds.py +0 -0
  29. {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/cli/stats.py +0 -0
  30. {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/client.py +0 -0
  31. {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/exceptions.py +0 -0
  32. {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/py.typed +0 -0
  33. {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/resources/__init__.py +0 -0
  34. {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/resources/clubs.py +0 -0
  35. {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/resources/courses.py +0 -0
  36. {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/resources/handicap.py +0 -0
  37. {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/resources/rounds.py +0 -0
  38. {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/resources/stats.py +0 -0
  39. {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos/types.py +0 -0
  40. {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos_api.egg-info/dependency_links.txt +0 -0
  41. {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos_api.egg-info/entry_points.txt +0 -0
  42. {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos_api.egg-info/requires.txt +0 -0
  43. {arccos_api-0.5.2 → arccos_api-0.5.3}/arccos_api.egg-info/top_level.txt +0 -0
  44. {arccos_api-0.5.2 → arccos_api-0.5.3}/setup.cfg +0 -0
  45. {arccos_api-0.5.2 → arccos_api-0.5.3}/tests/fixtures/contracts/courses_played.json +0 -0
  46. {arccos_api-0.5.2 → arccos_api-0.5.3}/tests/fixtures/contracts/personal_bests.json +0 -0
  47. {arccos_api-0.5.2 → arccos_api-0.5.3}/tests/fixtures/contracts/rounds.json +0 -0
  48. {arccos_api-0.5.2 → arccos_api-0.5.3}/tests/fixtures/contracts/smart_distances.json +0 -0
  49. {arccos_api-0.5.2 → arccos_api-0.5.3}/tests/test_auth.py +0 -0
  50. {arccos_api-0.5.2 → arccos_api-0.5.3}/tests/test_cli.py +0 -0
  51. {arccos_api-0.5.2 → arccos_api-0.5.3}/tests/test_client.py +0 -0
  52. {arccos_api-0.5.2 → arccos_api-0.5.3}/tests/test_contracts.py +0 -0
  53. {arccos_api-0.5.2 → arccos_api-0.5.3}/tests/test_exceptions.py +0 -0
  54. {arccos_api-0.5.2 → arccos_api-0.5.3}/tests/test_http.py +0 -0
  55. {arccos_api-0.5.2 → arccos_api-0.5.3}/tests/test_resources.py +0 -0
  56. {arccos_api-0.5.2 → arccos_api-0.5.3}/tests/test_rounds.py +0 -0
  57. {arccos_api-0.5.2 → arccos_api-0.5.3}/tests/test_security.py +0 -0
@@ -1,6 +1,7 @@
1
1
  include LICENSE
2
2
  include README.md
3
3
  include pyproject.toml
4
+ recursive-include docs *.md *.yaml
4
5
  recursive-include tests/fixtures *.json
5
6
  recursive-exclude __pycache__ *
6
7
  global-exclude *.pyc *.pyo
@@ -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
+ [![PyPI](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fpypi.org%2Fpypi%2Farccos-api%2Fjson&query=%24.info.version&label=PyPI&color=orange)](https://pypi.org/project/arccos-api/)
49
+ [![Tests](https://github.com/pfrederiksen/arccos-api/actions/workflows/tests.yml/badge.svg)](https://github.com/pfrederiksen/arccos-api/actions/workflows/tests.yml)
50
+ [![Python](https://img.shields.io/pypi/pyversions/arccos-api)](https://pypi.org/project/arccos-api/)
51
+ [![License](https://img.shields.io/pypi/l/arccos-api)](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
+ [![PyPI](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fpypi.org%2Fpypi%2Farccos-api%2Fjson&query=%24.info.version&label=PyPI&color=orange)](https://pypi.org/project/arccos-api/)
8
+ [![Tests](https://github.com/pfrederiksen/arccos-api/actions/workflows/tests.yml/badge.svg)](https://github.com/pfrederiksen/arccos-api/actions/workflows/tests.yml)
9
+ [![Python](https://img.shields.io/pypi/pyversions/arccos-api)](https://pypi.org/project/arccos-api/)
10
+ [![License](https://img.shields.io/pypi/l/arccos-api)](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
+ [![PyPI](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fpypi.org%2Fpypi%2Farccos-api%2Fjson&query=%24.info.version&label=PyPI&color=orange)](https://pypi.org/project/arccos-api/)
49
+ [![Tests](https://github.com/pfrederiksen/arccos-api/actions/workflows/tests.yml/badge.svg)](https://github.com/pfrederiksen/arccos-api/actions/workflows/tests.yml)
50
+ [![Python](https://img.shields.io/pypi/pyversions/arccos-api)](https://pypi.org/project/arccos-api/)
51
+ [![License](https://img.shields.io/pypi/l/arccos-api)](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