citrascope 0.1.0__py3-none-any.whl → 0.4.0__py3-none-any.whl

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 (37) hide show
  1. citrascope/__main__.py +13 -13
  2. citrascope/api/abstract_api_client.py +7 -0
  3. citrascope/api/citra_api_client.py +43 -2
  4. citrascope/citra_scope_daemon.py +205 -61
  5. citrascope/constants.py +23 -0
  6. citrascope/hardware/abstract_astro_hardware_adapter.py +70 -2
  7. citrascope/hardware/adapter_registry.py +94 -0
  8. citrascope/hardware/indi_adapter.py +456 -16
  9. citrascope/hardware/kstars_dbus_adapter.py +179 -0
  10. citrascope/hardware/nina_adv_http_adapter.py +593 -0
  11. citrascope/hardware/nina_adv_http_survey_template.json +328 -0
  12. citrascope/logging/__init__.py +2 -1
  13. citrascope/logging/_citrascope_logger.py +80 -1
  14. citrascope/logging/web_log_handler.py +75 -0
  15. citrascope/settings/citrascope_settings.py +140 -0
  16. citrascope/settings/settings_file_manager.py +126 -0
  17. citrascope/tasks/runner.py +129 -29
  18. citrascope/tasks/scope/base_telescope_task.py +25 -10
  19. citrascope/tasks/scope/static_telescope_task.py +11 -3
  20. citrascope/web/__init__.py +1 -0
  21. citrascope/web/app.py +479 -0
  22. citrascope/web/server.py +132 -0
  23. citrascope/web/static/api.js +82 -0
  24. citrascope/web/static/app.js +502 -0
  25. citrascope/web/static/config.js +438 -0
  26. citrascope/web/static/img/citra.png +0 -0
  27. citrascope/web/static/img/favicon.png +0 -0
  28. citrascope/web/static/style.css +152 -0
  29. citrascope/web/static/websocket.js +127 -0
  30. citrascope/web/templates/dashboard.html +407 -0
  31. {citrascope-0.1.0.dist-info → citrascope-0.4.0.dist-info}/METADATA +87 -47
  32. citrascope-0.4.0.dist-info/RECORD +38 -0
  33. {citrascope-0.1.0.dist-info → citrascope-0.4.0.dist-info}/WHEEL +1 -1
  34. citrascope/settings/_citrascope_settings.py +0 -42
  35. citrascope-0.1.0.dist-info/RECORD +0 -21
  36. docs/index.md +0 -47
  37. {citrascope-0.1.0.dist-info → citrascope-0.4.0.dist-info}/entry_points.txt +0 -0
@@ -1,27 +1,31 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: citrascope
3
- Version: 0.1.0
3
+ Version: 0.4.0
4
4
  Summary: Remotely control a telescope while it polls for tasks, collects and edge processes data, and delivers results and data for further processing.
5
- Author-email: Christopher Stevens <chris@citra.space>
5
+ Author-email: Patrick McDavid <patrick@citra.space>
6
6
  License-Expression: MIT
7
- Requires-Python: >=3.9
7
+ Requires-Python: <3.13,>=3.10
8
8
  Requires-Dist: click
9
+ Requires-Dist: fastapi>=0.104.0
9
10
  Requires-Dist: httpx
10
- Requires-Dist: pixelemon
11
- Requires-Dist: pydantic-settings
12
- Requires-Dist: pyindi-client
13
- Requires-Dist: pytest-cov
11
+ Requires-Dist: platformdirs>=4.0.0
14
12
  Requires-Dist: python-dateutil
15
- Requires-Dist: python-json-logger
16
13
  Requires-Dist: requests
17
14
  Requires-Dist: skyfield
18
- Requires-Dist: types-python-dateutil
15
+ Requires-Dist: uvicorn[standard]>=0.24.0
16
+ Requires-Dist: websockets>=12.0
17
+ Provides-Extra: all
18
+ Requires-Dist: dbus-python; extra == 'all'
19
+ Requires-Dist: pixelemon; extra == 'all'
20
+ Requires-Dist: plotly; extra == 'all'
21
+ Requires-Dist: pyindi-client; extra == 'all'
19
22
  Provides-Extra: build
20
23
  Requires-Dist: build; extra == 'build'
21
24
  Provides-Extra: deploy
22
25
  Requires-Dist: twine; extra == 'deploy'
23
26
  Provides-Extra: dev
24
27
  Requires-Dist: black; extra == 'dev'
28
+ Requires-Dist: bump-my-version; extra == 'dev'
25
29
  Requires-Dist: flake8; extra == 'dev'
26
30
  Requires-Dist: flake8-pytest-style; extra == 'dev'
27
31
  Requires-Dist: isort; extra == 'dev'
@@ -30,10 +34,13 @@ Requires-Dist: mypy; extra == 'dev'
30
34
  Requires-Dist: pre-commit; extra == 'dev'
31
35
  Requires-Dist: pytest; extra == 'dev'
32
36
  Requires-Dist: pytest-cov; extra == 'dev'
33
- Provides-Extra: docs
34
- Requires-Dist: sphinx; extra == 'docs'
35
- Requires-Dist: sphinx-autodoc-typehints; extra == 'docs'
36
- Requires-Dist: sphinx-markdown-builder; extra == 'docs'
37
+ Requires-Dist: types-python-dateutil; extra == 'dev'
38
+ Provides-Extra: indi
39
+ Requires-Dist: pixelemon; extra == 'indi'
40
+ Requires-Dist: plotly; extra == 'indi'
41
+ Requires-Dist: pyindi-client; extra == 'indi'
42
+ Provides-Extra: kstars
43
+ Requires-Dist: dbus-python; extra == 'kstars'
37
44
  Provides-Extra: test
38
45
  Requires-Dist: mockito; extra == 'test'
39
46
  Requires-Dist: pytest; extra == 'test'
@@ -41,68 +48,78 @@ Requires-Dist: pytest-cov; extra == 'test'
41
48
  Description-Content-Type: text/markdown
42
49
 
43
50
  # CitraScope
44
- [![Pytest](https://github.com/citra-space/citrascope/actions/workflows/pytest.yml/badge.svg)](https://github.com/citra-space/citrascope/actions/workflows/pytest.yml) [![Build and Push Docker Image](https://github.com/citra-space/citrascope/actions/workflows/docker-publish.yml/badge.svg)](https://github.com/citra-space/citrascope/actions/workflows/docker-publish.yml)
51
+ [![Pytest](https://github.com/citra-space/citrascope/actions/workflows/pytest.yml/badge.svg)](https://github.com/citra-space/citrascope/actions/workflows/pytest.yml) [![Publish Python Package](https://github.com/citra-space/citrascope/actions/workflows/pypi-publish.yml/badge.svg)](https://github.com/citra-space/citrascope/actions/workflows/pypi-publish.yml)
45
52
 
46
53
  Remotely control a telescope while it polls for tasks, collects observations, and delivers data for further processing.
47
54
 
48
55
  ## Features
49
-
56
+ - Offers a web UI to configure hardware and connect to Citra.space's api
50
57
  - Connects to Citra.space's API and identifies itself as an online telescope
51
- - Connects to configured INDI telescope and camera hardware
58
+ - Connects to configured telescope and camera hardware
52
59
  - Acts as a task daemon carrying out and remitting photography tasks
53
60
 
61
+ ## Documentation
62
+
63
+ Full documentation is available at [docs.citra.space](https://docs.citra.space/citrascope/).
64
+
65
+ Documentation source is maintained in the [citra-space/docs](https://github.com/citra-space/docs) repository.
66
+
54
67
  ## Installation
55
68
 
56
- Install CitraScope from PyPI:
69
+ **Important:** CitraScope requires Python 3.10, 3.11, or 3.12.
70
+
71
+ ### Check Your Python Version
57
72
 
58
73
  ```sh
59
- pip install citrascope
74
+ python3 --version
60
75
  ```
61
76
 
62
- This provides the `citrascope` command-line tool. To see available commands:
77
+ If you don't have a compatible version, install one with [pyenv](https://github.com/pyenv/pyenv):
63
78
 
64
79
  ```sh
65
- citrascope --help
80
+ pyenv install 3.12.0
81
+ pyenv local 3.12.0 # Sets Python 3.12.0 for the current directory
66
82
  ```
67
83
 
68
- ## Usage
84
+ ### Install CitraScope
69
85
 
70
- Run the CLI tool:
86
+ **Recommended: Using pip in a virtual environment**
71
87
 
72
88
  ```sh
73
- citrascope start
89
+ python3 -m venv citrascope-env
90
+ source citrascope-env/bin/activate # On Windows: citrascope-env\Scripts\activate
91
+ pip install citrascope
74
92
  ```
75
93
 
76
- To connect to the Citra Dev server:
94
+ ### Optional Dependencies
95
+
96
+ For Linux-based telescope control (INDI):
77
97
 
78
98
  ```sh
79
- citrascope start --dev
99
+ pip install citrascope[indi]
80
100
  ```
81
101
 
82
- ## Configuration
102
+ This provides the `citrascope` command-line tool. To see available commands:
83
103
 
84
- Settings are managed via environment variables with the prefix `CITRASCOPE_`. You must configure your personal access token and telescope ID, as well as INDI server details. You can set these variables in your shell or in a `.env` file at the project root.
104
+ ```sh
105
+ citrascope --help
106
+ ```
85
107
 
86
- Example `.env` file:
108
+ ## Usage
87
109
 
88
- ```env
89
- CITRASCOPE_PERSONAL_ACCESS_TOKEN=citra_pat_xxx
90
- CITRASCOPE_TELESCOPE_ID=xxx
91
- # CITRASCOPE_INDI_SERVER_URL=127.0.0.1
92
- CITRASCOPE_INDI_SERVER_URL=host.docker.internal # use with devcontainer for accessing a localhost indi server
93
- CITRASCOPE_INDI_SERVER_PORT=7624
94
- CITRASCOPE_INDI_TELESCOPE_NAME=Telescope Simulator
95
- ```
110
+ ### Starting the Daemon
96
111
 
97
- **Variable descriptions:**
112
+ Run the daemon with:
98
113
 
99
- - `CITRASCOPE_PERSONAL_ACCESS_TOKEN`: Your CitraScope personal access token (required)
100
- - `CITRASCOPE_TELESCOPE_ID`: Your telescope ID (required)
101
- - `CITRASCOPE_INDI_SERVER_URL`: Hostname or IP address of the INDI server (default: `host.docker.internal` for devcontainers, or `127.0.0.1` for local)
102
- - `CITRASCOPE_INDI_SERVER_PORT`: Port for the INDI server (default: `7624`)
103
- - `CITRASCOPE_INDI_TELESCOPE_NAME`: Name of the INDI telescope device (default: `Telescope Simulator`)
114
+ ```sh
115
+ citrascope
116
+ ```
104
117
 
105
- You can copy `.env.example` to `.env` and tweak your values.
118
+ By default, this starts the web interface on `http://localhost:24872`. You can customize the port:
119
+
120
+ ```sh
121
+ citrascope --web-port 8080
122
+ ```
106
123
 
107
124
  ## Developer Setup
108
125
 
@@ -112,6 +129,16 @@ By opening this project in VS Code and choosing "Reopen in Container" (or using
112
129
 
113
130
  The devcontainer also ensures all required system dependencies (like `cmake`) are installed automatically.
114
131
 
132
+ ### Python Version
133
+
134
+ This project requires Python 3.10 or higher, up to Python 3.12. A `.python-version` file is included specifying Python 3.12 as the recommended version. If you use [pyenv](https://github.com/pyenv/pyenv), it will automatically use this version when you enter the project directory.
135
+
136
+ ### If not using the dev container:
137
+ ```sh
138
+ python -m venv .venv
139
+ source .venv/bin/activate
140
+ ```
141
+
115
142
  ### Installing Development Dependencies
116
143
 
117
144
  To install development dependencies (for code style, linting, and pre-commit hooks):
@@ -138,20 +165,33 @@ pre-commit run --all-files
138
165
 
139
166
  This ensures code style and quality checks are enforced for all contributors.
140
167
 
168
+ ### Releasing a New Version
169
+
170
+ To bump the version and create a release:
171
+
172
+ ```sh
173
+ bump-my-version bump patch # 0.1.3 → 0.1.4
174
+ bump-my-version bump minor # 0.1.3 → 0.2.0
175
+ bump-my-version bump major # 0.1.3 → 1.0.0
176
+ git push && git push --tags
177
+ ```
178
+
179
+ Then create a release in the GitHub UI from the new tag. This triggers automatic PyPI publishing.
180
+
141
181
  ### Running and Debugging with VS Code
142
182
 
143
183
  If you are using Visual Studio Code, you can run or debug the project directly using the pre-configured launch options in `.vscode/launch.json`:
144
184
 
145
- - **Python: citrascope dev start** — Runs the main entry point with development options.
146
- - **Python: citrascope dev start DEBUG logging** — Runs with development options and sets log level to DEBUG for more detailed output.
185
+ - **Python: citrascope** — Runs the daemon with default settings
186
+ - **Python: citrascope (custom port)** — Runs with web interface on port 8080
147
187
 
148
- To use these, open the Run and Debug panel in VS Code, select the desired configuration, and click the Run or Debug button. This is a convenient way to start or debug the app without manually entering commands.
188
+ To use these, open the Run and Debug panel in VS Code, select the desired configuration, and click the Run or Debug button.
149
189
 
150
190
  ## Running Tests
151
191
 
152
192
  This project uses [pytest](https://pytest.org/) for unit testing. All tests are located in the `tests/` directory.
153
193
 
154
- To run tests manually:
194
+ To run unit tests within your devcontainer:
155
195
 
156
196
  ```bash
157
197
  pytest
@@ -0,0 +1,38 @@
1
+ citrascope/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ citrascope/__main__.py,sha256=W7uY30MOuIlmhzVEoiZ_6BMmKrsqIvxcAxqw4-pOT3k,596
3
+ citrascope/citra_scope_daemon.py,sha256=mw7U2gEgfDc3TuXVUHZAkHjSwY2T259FW02LAjz7vWU,10315
4
+ citrascope/constants.py,sha256=Mc7SLzCelUMDV96BIwP684fFLGANCOEO_mM3GCeRDVY,968
5
+ citrascope/api/abstract_api_client.py,sha256=gjmA9mw1O-TK16nYahOWClAwqPc_L1E3F2llZJeKTPw,624
6
+ citrascope/api/citra_api_client.py,sha256=8rpz25Diy8YhuCiQ9HqMi4TIqxAc6BbrvqoFu8u-orQ,6007
7
+ citrascope/hardware/abstract_astro_hardware_adapter.py,sha256=BdQrZkLSh2siszG8fGNEWpknC5wyZXZWgbaq7Zc7cAo,6131
8
+ citrascope/hardware/adapter_registry.py,sha256=fFIZhXYphZ_p480c6hICpcx9fNOeX-EG2tvLHm372dM,3170
9
+ citrascope/hardware/indi_adapter.py,sha256=uNrjkfxD0zjOPfar6J-frb6A87VkEjsL7SD9N9bEsC8,29903
10
+ citrascope/hardware/kstars_dbus_adapter.py,sha256=Nv6ijVDvgTCTZUmRFh3Wh-YS7ChiztiXF17OWlzJwoo,7001
11
+ citrascope/hardware/nina_adv_http_adapter.py,sha256=2McglZprEJQ8OKnqFXDrZCcl2AylkWO8Y1kGrS_nwtY,26261
12
+ citrascope/hardware/nina_adv_http_survey_template.json,sha256=beg4H6Bzby-0x5uDc_eRJQ_rKs8VT64sDJyAzS_q1l4,14424
13
+ citrascope/logging/__init__.py,sha256=YU38HLMWfbXh_H-s7W7Zx2pbCR4f_tRk7z0G8xqz4_o,179
14
+ citrascope/logging/_citrascope_logger.py,sha256=GkqNpFJWiatqrBr8t4o2nHt7V9bBDJ8mysM0F4AXMa8,3479
15
+ citrascope/logging/web_log_handler.py,sha256=d0XQzHJZ5M1v3H351tdkBYg7EOwFzXpp7PA9nYejIV0,2659
16
+ citrascope/settings/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
+ citrascope/settings/citrascope_settings.py,sha256=yBDlM5uCnhUQgIrNDMTPX6cmgKnKl-lvra41-7XN40E,5966
18
+ citrascope/settings/settings_file_manager.py,sha256=Yijb-I9hbbVJ2thkr7OrfkNknSPt1RDpsE7VvqAs0a8,4193
19
+ citrascope/tasks/runner.py,sha256=xVnGWe_iYutBYqIhgOOriPjPcYUJ8IRbYRYKiAbehAQ,12584
20
+ citrascope/tasks/task.py,sha256=0u0oN56E6KaNz19ba_7WuY43Sk4CTXc8UPT7sdUpRXo,1287
21
+ citrascope/tasks/scope/base_telescope_task.py,sha256=wIdyUxplFNhf_YMdCXOK6pG7HF7tZn_id59TvYyWZAY,9674
22
+ citrascope/tasks/scope/static_telescope_task.py,sha256=XP53zYVcyLHLvebDU06Jx0ghPK3tb0c_XmO60yj_XSA,1132
23
+ citrascope/tasks/scope/tracking_telescope_task.py,sha256=k5LEmEi_xnFHNjqPNYb8_tqDdCFD3YGe25Wh_brJXHk,1130
24
+ citrascope/web/__init__.py,sha256=CgU36fyNSxGXjUy3hsHwx7UxF8UO4Qsb7PjC9-6tRmY,38
25
+ citrascope/web/app.py,sha256=OfBur9oM06NakrA30MOk9CgX0ewJ7IZl4kn0gtQgHJ4,20261
26
+ citrascope/web/server.py,sha256=IJJk4HgEwcsjHercL-Q5z39NmJRbkNk_51HIUKKhtRE,5242
27
+ citrascope/web/static/api.js,sha256=s-b1FIw-pTo3A8kLlLINVqHhIvfHwTWA7cEvz4N8Gqc,1924
28
+ citrascope/web/static/app.js,sha256=xwKBzLB2uWytyUDdzrT6qsQBwIfESypjf8jSLnrQRZg,17820
29
+ citrascope/web/static/config.js,sha256=4pjMH8yS24JkH62OpklEdPC0EAmd7e5c21WWETz1EO0,15701
30
+ citrascope/web/static/style.css,sha256=haVMnKlULZ-SL_qmLyqnrwHdX28s6KzVK9uE_R5nlLo,2877
31
+ citrascope/web/static/websocket.js,sha256=UITw1DDfehOKpjlltn5MXhewZYGKzPFmaTtMFtC0-Ps,3931
32
+ citrascope/web/static/img/citra.png,sha256=Bq8dPWB6fNz7a_H0FuEtNmZWcPHH2iV2OC-fMg4REbQ,205570
33
+ citrascope/web/static/img/favicon.png,sha256=zrbUlpFXDB_zmsIdhhn8_klnc2Ma3N6Q8ouBMAxFjbM,24873
34
+ citrascope/web/templates/dashboard.html,sha256=4ChTsnMMP6VyfdQT9bM4rRruYHJorAeZFOMDhI-j3fA,24155
35
+ citrascope-0.4.0.dist-info/METADATA,sha256=eombd_1rHdc9ubLY6PM7M2UKBqLMeT8aOQDUtqqWMP0,6481
36
+ citrascope-0.4.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
37
+ citrascope-0.4.0.dist-info/entry_points.txt,sha256=fP22Lt8bNZ_whBowDnOWSADf_FUrgAWnIhqqPf5Xo2g,55
38
+ citrascope-0.4.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.27.0
2
+ Generator: hatchling 1.28.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -1,42 +0,0 @@
1
- from pydantic_settings import BaseSettings, SettingsConfigDict
2
-
3
- from citrascope.logging import CITRASCOPE_LOGGER
4
-
5
- UNDEFINED_STRING = "undefined"
6
-
7
-
8
- class CitraScopeSettings(BaseSettings):
9
- model_config = SettingsConfigDict(
10
- env_prefix="CITRASCOPE_",
11
- env_nested_delimiter="__",
12
- )
13
-
14
- # Default to production API
15
- host: str = "api.citra.space"
16
- port: int = 443
17
-
18
- personal_access_token: str = UNDEFINED_STRING
19
- use_ssl: bool = True
20
- telescope_id: str = UNDEFINED_STRING
21
-
22
- indi_server_url: str = "localhost"
23
- indi_server_port: int = 7624
24
- indi_telescope_name: str = UNDEFINED_STRING
25
- indi_camera_name: str = UNDEFINED_STRING
26
-
27
- log_level: str = "INFO"
28
-
29
- def __init__(self, dev: bool = False, log_level: str = "INFO", **kwargs):
30
- super().__init__(**kwargs)
31
- self.log_level = log_level
32
- if dev:
33
- self.host = "dev.api.citra.space"
34
- CITRASCOPE_LOGGER.info("Using development API endpoint.")
35
-
36
- def model_post_init(self, __context) -> None:
37
- if self.personal_access_token == UNDEFINED_STRING:
38
- CITRASCOPE_LOGGER.warning(f"{self.__class__.__name__} personal_access_token has not been set")
39
- exit(1)
40
- if self.telescope_id == UNDEFINED_STRING:
41
- CITRASCOPE_LOGGER.warning(f"{self.__class__.__name__} telescope_id has not been set")
42
- exit(1)
@@ -1,21 +0,0 @@
1
- citrascope/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- citrascope/__main__.py,sha256=MlIzMVRL_tnvd8vJcZXENIglepirST3KDPfVpN7V9bE,673
3
- citrascope/citra_scope_daemon.py,sha256=rQ4U7r2q5n9FSxM7E7xTdhpJjYCT7Mv_3PhUPkWwMTc,4073
4
- citrascope/api/abstract_api_client.py,sha256=FG386RwHZtsCNaGGx0bhwxajyj_0B6SxU3p2w0R4tYU,472
5
- citrascope/api/citra_api_client.py,sha256=7T7woGN-cjTYF8CNkGSjWXCKO-q0ufnBLGrdT2pdY3w,4173
6
- citrascope/hardware/abstract_astro_hardware_adapter.py,sha256=JOw0PDoFrgicB5qZrurlLrVcDsjQNjHcxyFJ6674KJ8,3748
7
- citrascope/hardware/indi_adapter.py,sha256=57AvH-AzthqXyefUgMq21GfcFfNh9WcGoara03NiJkg,12564
8
- citrascope/logging/__init__.py,sha256=bXX2PX6MZelEX3fi_-lmT51uZCfN9WnLPZfx5_RswAA,101
9
- citrascope/logging/_citrascope_logger.py,sha256=-KZ3ufQc3VOSlP1I3KC1YFDU7o880-O0iu3URlzRGlM,1056
10
- citrascope/settings/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
- citrascope/settings/_citrascope_settings.py,sha256=JpuVFroZERPjbx58ZCw9BM9xr41qW6MNxm3sYGjYS14,1386
12
- citrascope/tasks/runner.py,sha256=pUyQlrQkSNbM_SKl6AUFY8QSV2NzZfGvybGlzV7Q-BU,7320
13
- citrascope/tasks/task.py,sha256=0u0oN56E6KaNz19ba_7WuY43Sk4CTXc8UPT7sdUpRXo,1287
14
- citrascope/tasks/scope/base_telescope_task.py,sha256=He8W9OSHDL2tp56sY5dPdtYDswzp5HDMMeWpSNYNcgY,9198
15
- citrascope/tasks/scope/static_telescope_task.py,sha256=DTrKZiOJ3ZPSDPvmMbyWkW50kS4I6Li6qC6SyrpWbaI,612
16
- citrascope/tasks/scope/tracking_telescope_task.py,sha256=k5LEmEi_xnFHNjqPNYb8_tqDdCFD3YGe25Wh_brJXHk,1130
17
- docs/index.md,sha256=YQDeVrN9AcbRzo88Jc4iRCO70gAh_4GSgImrJMwcSCo,1402
18
- citrascope-0.1.0.dist-info/METADATA,sha256=u7Uc7lN6PZz78TUNFqmYe3IWBgxPdfudIpg31kuuVX0,5817
19
- citrascope-0.1.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
20
- citrascope-0.1.0.dist-info/entry_points.txt,sha256=fP22Lt8bNZ_whBowDnOWSADf_FUrgAWnIhqqPf5Xo2g,55
21
- citrascope-0.1.0.dist-info/RECORD,,
docs/index.md DELETED
@@ -1,47 +0,0 @@
1
- # CitraScope Documentation
2
-
3
- Welcome to the CitraScope documentation.
4
-
5
- ## Overview
6
-
7
- CitraScope is a Python application for remote telescope control, task automation, and data collection.
8
- It connects to the Citra.space API and INDI hardware to execute observation tasks.
9
-
10
- ## Architecture
11
-
12
- - **CLI Entrypoint:** `citrascope/__main__.py`
13
- Handles configuration, authentication, and starts the task daemon.
14
- - **API Client:** `citrascope/api/client.py`
15
- Communicates with Citra.space for authentication, telescope, satellite, and ground station data.
16
- - **Task Management:** `citrascope/tasks/runner.py`
17
- Polls for tasks, schedules, and executes observations.
18
- - **Settings:** `citrascope/settings/_citrascope_settings.py`
19
- Loads configuration from environment variables.
20
-
21
- ## Configuration
22
-
23
- See [README.md](../README.md) for installation and environment setup.
24
- Environment variables are documented in `.env.example`.
25
-
26
- ## Usage
27
-
28
- Run the CLI:
29
- ```sh
30
- python -m citrascope start
31
- ```
32
- Or use VS Code launch configurations for development and debugging.
33
-
34
- ## Testing
35
-
36
- - **Unit tests** are written using [pytest](https://pytest.org/) and are located in the `tests/` directory.
37
- - To run tests manually, use:
38
-
39
- ```bash
40
- pytest
41
- ```
42
-
43
- ## Further Documentation
44
-
45
- - [API Reference](https://api.citra.space/docs)
46
- - [Contributing Guide](contributing.md) (coming soon)
47
- - [Troubleshooting](troubleshooting.md) (coming soon)