citrascope 0.6.1__py3-none-any.whl → 0.8.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.
- citrascope/api/abstract_api_client.py +14 -0
- citrascope/api/citra_api_client.py +41 -0
- citrascope/citra_scope_daemon.py +97 -38
- citrascope/hardware/abstract_astro_hardware_adapter.py +144 -8
- citrascope/hardware/adapter_registry.py +10 -3
- citrascope/hardware/devices/__init__.py +17 -0
- citrascope/hardware/devices/abstract_hardware_device.py +79 -0
- citrascope/hardware/devices/camera/__init__.py +13 -0
- citrascope/hardware/devices/camera/abstract_camera.py +102 -0
- citrascope/hardware/devices/camera/rpi_hq_camera.py +353 -0
- citrascope/hardware/devices/camera/usb_camera.py +402 -0
- citrascope/hardware/devices/camera/ximea_camera.py +744 -0
- citrascope/hardware/devices/device_registry.py +273 -0
- citrascope/hardware/devices/filter_wheel/__init__.py +7 -0
- citrascope/hardware/devices/filter_wheel/abstract_filter_wheel.py +73 -0
- citrascope/hardware/devices/focuser/__init__.py +7 -0
- citrascope/hardware/devices/focuser/abstract_focuser.py +78 -0
- citrascope/hardware/devices/mount/__init__.py +7 -0
- citrascope/hardware/devices/mount/abstract_mount.py +115 -0
- citrascope/hardware/direct_hardware_adapter.py +787 -0
- citrascope/hardware/filter_sync.py +94 -0
- citrascope/hardware/indi_adapter.py +6 -2
- citrascope/hardware/kstars_dbus_adapter.py +67 -96
- citrascope/hardware/nina_adv_http_adapter.py +81 -64
- citrascope/hardware/nina_adv_http_survey_template.json +4 -4
- citrascope/settings/citrascope_settings.py +25 -0
- citrascope/tasks/runner.py +105 -0
- citrascope/tasks/scope/static_telescope_task.py +17 -12
- citrascope/tasks/task.py +3 -0
- citrascope/time/__init__.py +13 -0
- citrascope/time/time_health.py +96 -0
- citrascope/time/time_monitor.py +164 -0
- citrascope/time/time_sources.py +62 -0
- citrascope/web/app.py +274 -51
- citrascope/web/static/app.js +379 -36
- citrascope/web/static/config.js +448 -108
- citrascope/web/static/filters.js +55 -0
- citrascope/web/static/style.css +39 -0
- citrascope/web/templates/dashboard.html +176 -36
- {citrascope-0.6.1.dist-info → citrascope-0.8.0.dist-info}/METADATA +17 -1
- citrascope-0.8.0.dist-info/RECORD +62 -0
- citrascope-0.6.1.dist-info/RECORD +0 -41
- {citrascope-0.6.1.dist-info → citrascope-0.8.0.dist-info}/WHEEL +0 -0
- {citrascope-0.6.1.dist-info → citrascope-0.8.0.dist-info}/entry_points.txt +0 -0
- {citrascope-0.6.1.dist-info → citrascope-0.8.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filter color utilities for visual wavelength representation.
|
|
3
|
+
*
|
|
4
|
+
* Maps standard astronomical filters to their representative colors
|
|
5
|
+
* based on spectral wavelength. Colors are darker variants suitable
|
|
6
|
+
* for badge backgrounds with white text.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Standard filter name to color mappings.
|
|
11
|
+
* Colors chosen to be dark enough for white text readability.
|
|
12
|
+
*/
|
|
13
|
+
export const FILTER_COLORS = {
|
|
14
|
+
// Johnson-Cousins UBVRI
|
|
15
|
+
'U': '#33005D', // Ultraviolet (365nm)
|
|
16
|
+
'B': '#002A6E', // Blue (445nm)
|
|
17
|
+
'V': '#005500', // Visual/Green (551nm)
|
|
18
|
+
'R': '#6E0000', // Red (658nm)
|
|
19
|
+
'I': '#550000', // Near-infrared (806nm)
|
|
20
|
+
|
|
21
|
+
// Sloan ugriz
|
|
22
|
+
'u': '#3B0066', // Ultraviolet (354nm)
|
|
23
|
+
'g': '#00442A', // Green (477nm)
|
|
24
|
+
'r': '#6E2200', // Orange-Red (623nm)
|
|
25
|
+
'i': '#5D0000', // Near-infrared (763nm)
|
|
26
|
+
'z': '#440000', // Infrared (913nm)
|
|
27
|
+
|
|
28
|
+
// RGB filters
|
|
29
|
+
'Red': '#770000',
|
|
30
|
+
'Green': '#006600',
|
|
31
|
+
'Blue': '#003380',
|
|
32
|
+
'Clear': '#4C4C4C', // Gray for broadband clear
|
|
33
|
+
'Luminance': '#4C4C4C', // Gray for luminance
|
|
34
|
+
|
|
35
|
+
// Narrowband emission line filters
|
|
36
|
+
'Ha': '#6E002A', // H-alpha (656.3nm) - characteristic deep red
|
|
37
|
+
'Hb': '#004C66', // H-beta (486.1nm) - cyan
|
|
38
|
+
'OIII': '#005D44', // OIII (500.7nm) - teal
|
|
39
|
+
'SII': '#6E112A', // SII (672.4nm) - pink-red
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Get color for a filter based on name.
|
|
44
|
+
*
|
|
45
|
+
* @param {string} name - Filter name (e.g., "Ha", "Red", "V")
|
|
46
|
+
* @returns {string} Hex color string suitable for dark badge backgrounds
|
|
47
|
+
*/
|
|
48
|
+
export function getFilterColor(name) {
|
|
49
|
+
// Check known filters first
|
|
50
|
+
if (FILTER_COLORS[name]) {
|
|
51
|
+
return FILTER_COLORS[name];
|
|
52
|
+
}
|
|
53
|
+
// Default to gray if no match
|
|
54
|
+
return '#777777';
|
|
55
|
+
}
|
citrascope/web/static/style.css
CHANGED
|
@@ -49,6 +49,45 @@ body {
|
|
|
49
49
|
gap: 0.5em;
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
+
#automatedSchedulingStatus {
|
|
53
|
+
display: inline-block;
|
|
54
|
+
min-width: 70px;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
#toggleAutomatedSchedulingSwitch {
|
|
58
|
+
margin-top: 6px;
|
|
59
|
+
cursor: pointer;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
#toggleAutomatedSchedulingSwitch:checked {
|
|
63
|
+
background-color: #198754;
|
|
64
|
+
border-color: #198754;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
#toggleAutomatedSchedulingSwitch:focus {
|
|
68
|
+
box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
#processingStatus {
|
|
72
|
+
display: inline-block;
|
|
73
|
+
min-width: 70px;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/* Task processing switch alignment */
|
|
77
|
+
#toggleProcessingSwitch {
|
|
78
|
+
margin-top: 6px;
|
|
79
|
+
cursor: pointer;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
#toggleProcessingSwitch:checked {
|
|
83
|
+
background-color: #198754;
|
|
84
|
+
border-color: #198754;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
#toggleProcessingSwitch:focus {
|
|
88
|
+
box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25);
|
|
89
|
+
}
|
|
90
|
+
|
|
52
91
|
/* Clickable elements */
|
|
53
92
|
#headerVersion, #updateIndicator {
|
|
54
93
|
cursor: pointer;
|
|
@@ -67,17 +67,51 @@
|
|
|
67
67
|
</div>
|
|
68
68
|
<div class="row mb-2">
|
|
69
69
|
<div class="col-6 fw-semibold">Camera</div>
|
|
70
|
-
<div class="col-6" id="cameraConnected"><span class="badge rounded-pill bg-secondary">Unknown</span></div>
|
|
70
|
+
<div class="col-6 d-flex align-items-center gap-2" id="cameraConnected"><span class="badge rounded-pill bg-secondary">Unknown</span></div>
|
|
71
|
+
</div>
|
|
72
|
+
<div class="row mb-2">
|
|
73
|
+
<div class="col-6 fw-semibold">
|
|
74
|
+
<span data-bs-toggle="tooltip" data-bs-theme="dark" data-bs-placement="top" title="Controls whether the Citra.space server will automatically assign new observation tasks to this telescope">
|
|
75
|
+
Automated Scheduling
|
|
76
|
+
</span>
|
|
77
|
+
</div>
|
|
78
|
+
<div class="col-6 d-flex align-items-center gap-2">
|
|
79
|
+
<span id="automatedSchedulingStatus"><span class="badge rounded-pill bg-secondary">Unknown</span></span>
|
|
80
|
+
<div class="form-check form-switch">
|
|
81
|
+
<input class="form-check-input" type="checkbox" id="toggleAutomatedSchedulingSwitch" title="Toggle automated scheduling">
|
|
82
|
+
<label class="form-check-label visually-hidden" for="toggleAutomatedSchedulingSwitch">Automated Scheduling</label>
|
|
83
|
+
</div>
|
|
84
|
+
</div>
|
|
71
85
|
</div>
|
|
72
86
|
<div class="row">
|
|
73
|
-
<div class="col-6 fw-semibold">
|
|
87
|
+
<div class="col-6 fw-semibold">
|
|
88
|
+
<span data-bs-toggle="tooltip" data-bs-theme="dark" data-bs-placement="top" title="Controls whether this local daemon will execute tasks from its queue. Pause to safely stop observations without canceling scheduled tasks">
|
|
89
|
+
Task Processing
|
|
90
|
+
</span>
|
|
91
|
+
</div>
|
|
74
92
|
<div class="col-6 d-flex align-items-center gap-2">
|
|
75
93
|
<span id="processingStatus"><span class="badge rounded-pill bg-success">Active</span></span>
|
|
76
|
-
<
|
|
77
|
-
<
|
|
78
|
-
|
|
94
|
+
<div class="form-check form-switch">
|
|
95
|
+
<input class="form-check-input" type="checkbox" id="toggleProcessingSwitch" checked title="Toggle task processing">
|
|
96
|
+
<label class="form-check-label visually-hidden" for="toggleProcessingSwitch">Task Processing</label>
|
|
97
|
+
</div>
|
|
79
98
|
</div>
|
|
80
99
|
</div>
|
|
100
|
+
<div class="row">
|
|
101
|
+
<div class="col-6 fw-semibold">
|
|
102
|
+
<span data-bs-toggle="tooltip" data-bs-theme="dark" data-bs-placement="top" title="System clock synchronization status. Accurate time is critical for astronomical observations">
|
|
103
|
+
Time Sync
|
|
104
|
+
</span>
|
|
105
|
+
</div>
|
|
106
|
+
<div class="col-6 d-flex align-items-center gap-2">
|
|
107
|
+
<span id="timeSyncStatus"><span class="badge rounded-pill bg-secondary">Unknown</span></span>
|
|
108
|
+
<small class="text-muted" id="timeOffsetDisplay">-</small>
|
|
109
|
+
</div>
|
|
110
|
+
</div>
|
|
111
|
+
<!-- Missing Dependencies Alert -->
|
|
112
|
+
<div id="missingDependenciesAlert" class="alert alert-warning mt-3 mb-0" role="alert" style="display: none;">
|
|
113
|
+
<!-- Populated by JavaScript -->
|
|
114
|
+
</div>
|
|
81
115
|
</div>
|
|
82
116
|
</div>
|
|
83
117
|
</div>
|
|
@@ -92,12 +126,12 @@
|
|
|
92
126
|
<div class="col-6" id="hardwareAdapter">-</div>
|
|
93
127
|
</div>
|
|
94
128
|
<div class="row mb-2">
|
|
95
|
-
<div class="col-6 fw-semibold">
|
|
96
|
-
<div class="col-6" id="
|
|
129
|
+
<div class="col-6 fw-semibold">RA / DEC</div>
|
|
130
|
+
<div class="col-6" id="telescopeCoords">-</div>
|
|
97
131
|
</div>
|
|
98
132
|
<div class="row mb-2">
|
|
99
|
-
<div class="col-6 fw-semibold">
|
|
100
|
-
<div class="col-6" id="
|
|
133
|
+
<div class="col-6 fw-semibold">Enabled Filters</div>
|
|
134
|
+
<div class="col-6" id="enabledFilters">-</div>
|
|
101
135
|
</div>
|
|
102
136
|
<div class="row">
|
|
103
137
|
<div class="col-6 fw-semibold">Ground Station</div>
|
|
@@ -166,9 +200,6 @@
|
|
|
166
200
|
</div>
|
|
167
201
|
|
|
168
202
|
<div class="container my-4" id="configSection" style="display: none;">
|
|
169
|
-
<div id="configError" class="alert alert-danger" style="display: none;" role="alert"></div>
|
|
170
|
-
<div id="configSuccess" class="alert alert-success" style="display: none;" role="alert"></div>
|
|
171
|
-
|
|
172
203
|
<form id="configForm">
|
|
173
204
|
<div class="row g-3 mb-3">
|
|
174
205
|
<!-- API Configuration Card -->
|
|
@@ -239,34 +270,74 @@
|
|
|
239
270
|
<!-- Dynamic Adapter Settings Container -->
|
|
240
271
|
<div id="adapter-settings-container"></div>
|
|
241
272
|
|
|
273
|
+
<!-- Missing Dependencies Alert (Config Page) -->
|
|
274
|
+
<div id="configMissingDependenciesAlert" class="alert alert-warning mt-3" role="alert" style="display: none;">
|
|
275
|
+
<!-- Populated by JavaScript -->
|
|
276
|
+
</div>
|
|
277
|
+
|
|
242
278
|
<!-- Filter Configuration Section (shown when adapter supports filters) -->
|
|
243
279
|
<div id="filterConfigSection" style="display: none; margin-top: 1.5rem;">
|
|
244
280
|
<hr class="border-secondary">
|
|
245
|
-
<
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
<
|
|
281
|
+
<h5 class="mb-3">Filter Configuration</h5>
|
|
282
|
+
<p id="filterAdapterChangeMessage" class="text-muted mb-3" style="display: none;">
|
|
283
|
+
Save configuration to edit filter settings for this adapter
|
|
284
|
+
</p>
|
|
285
|
+
<div class="row">
|
|
286
|
+
<!-- Filter List Column -->
|
|
287
|
+
<div class="col-12 col-md-6">
|
|
288
|
+
<h6 class="mb-2">Filters</h6>
|
|
289
|
+
<div id="filterTableContainer">
|
|
290
|
+
<table class="table table-dark table-sm">
|
|
291
|
+
<thead>
|
|
292
|
+
<tr>
|
|
293
|
+
<th>Enabled</th>
|
|
294
|
+
<th>Name</th>
|
|
295
|
+
<th>Focus Position</th>
|
|
296
|
+
</tr>
|
|
297
|
+
</thead>
|
|
298
|
+
<tbody id="filterTableBody">
|
|
299
|
+
<!-- Filter rows will be populated by JavaScript -->
|
|
300
|
+
</tbody>
|
|
301
|
+
</table>
|
|
302
|
+
<div id="noFiltersMessage" class="text-muted small" style="display: none;">
|
|
303
|
+
No filters configured. Connect to hardware to discover filters.
|
|
304
|
+
</div>
|
|
305
|
+
</div>
|
|
253
306
|
</div>
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
<
|
|
257
|
-
<
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
<
|
|
261
|
-
<
|
|
262
|
-
</
|
|
263
|
-
</
|
|
264
|
-
<
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
307
|
+
|
|
308
|
+
<!-- Autofocus Column -->
|
|
309
|
+
<div class="col-12 col-md-6">
|
|
310
|
+
<h6 class="mb-2">Autofocus</h6>
|
|
311
|
+
<div class="mb-3">
|
|
312
|
+
<button type="button" class="btn btn-sm btn-outline-primary w-100" id="runAutofocusButton">
|
|
313
|
+
<span id="autofocusButtonText">Run Autofocus</span>
|
|
314
|
+
<span id="autofocusButtonSpinner" class="spinner-border spinner-border-sm ms-2" style="display: none;" role="status"></span>
|
|
315
|
+
</button>
|
|
316
|
+
</div>
|
|
317
|
+
<div class="mb-3">
|
|
318
|
+
<label class="form-label small text-muted">Last Autofocus</label>
|
|
319
|
+
<div id="lastAutofocusDisplay" class="text-light">Never</div>
|
|
320
|
+
</div>
|
|
321
|
+
<div class="mb-3">
|
|
322
|
+
<div class="form-check">
|
|
323
|
+
<input class="form-check-input" type="checkbox" id="scheduled_autofocus_enabled">
|
|
324
|
+
<label class="form-check-label" for="scheduled_autofocus_enabled">
|
|
325
|
+
Enable Scheduled Autofocus
|
|
326
|
+
</label>
|
|
327
|
+
</div>
|
|
328
|
+
</div>
|
|
329
|
+
<div class="mb-3">
|
|
330
|
+
<label for="autofocus_interval_minutes" class="form-label small">Autofocus Interval</label>
|
|
331
|
+
<select id="autofocus_interval_minutes" class="form-select form-select-sm">
|
|
332
|
+
<option value="30">30 minutes</option>
|
|
333
|
+
<option value="60" selected>60 minutes</option>
|
|
334
|
+
<option value="120">120 minutes (2 hours)</option>
|
|
335
|
+
<option value="180">180 minutes (3 hours)</option>
|
|
336
|
+
</select>
|
|
337
|
+
</div>
|
|
338
|
+
<div id="nextAutofocusDisplay" class="small text-muted" style="display: none;">
|
|
339
|
+
Next autofocus in: <span id="nextAutofocusTime">--</span>
|
|
340
|
+
</div>
|
|
270
341
|
</div>
|
|
271
342
|
</div>
|
|
272
343
|
</div>
|
|
@@ -274,6 +345,24 @@
|
|
|
274
345
|
</div>
|
|
275
346
|
</div>
|
|
276
347
|
|
|
348
|
+
<!-- Time Synchronization Settings Card -->
|
|
349
|
+
<div class="col-12">
|
|
350
|
+
<div class="card bg-dark text-light border-secondary">
|
|
351
|
+
<div class="card-header">
|
|
352
|
+
<h5 class="mb-0">Time Synchronization</h5>
|
|
353
|
+
</div>
|
|
354
|
+
<div class="card-body">
|
|
355
|
+
<div class="row g-3">
|
|
356
|
+
<div class="col-12 col-md-6">
|
|
357
|
+
<label for="time_offset_pause_ms" class="form-label">Pause Threshold (ms)</label>
|
|
358
|
+
<input type="number" class="form-control form-control-sm" id="time_offset_pause_ms" min="1" max="10000" step="1" value="500">
|
|
359
|
+
<small class="text-muted">Clock drift that triggers task pause (NTP-based monitoring)</small>
|
|
360
|
+
</div>
|
|
361
|
+
</div>
|
|
362
|
+
</div>
|
|
363
|
+
</div>
|
|
364
|
+
</div>
|
|
365
|
+
|
|
277
366
|
<!-- Logging Settings Card -->
|
|
278
367
|
<div class="col-12">
|
|
279
368
|
<div class="card bg-dark text-light border-secondary">
|
|
@@ -482,6 +571,57 @@
|
|
|
482
571
|
</div>
|
|
483
572
|
</div>
|
|
484
573
|
|
|
574
|
+
<!-- Camera Control Modal -->
|
|
575
|
+
<div class="modal fade" id="cameraControlModal" tabindex="-1" aria-labelledby="cameraControlModalLabel" aria-hidden="true">
|
|
576
|
+
<div class="modal-dialog modal-lg modal-dialog-centered">
|
|
577
|
+
<div class="modal-content bg-dark text-light border-secondary">
|
|
578
|
+
<div class="modal-header border-secondary">
|
|
579
|
+
<h5 class="modal-title" id="cameraControlModalLabel"><i class="bi bi-camera"></i> Camera Control</h5>
|
|
580
|
+
<button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
581
|
+
</div>
|
|
582
|
+
<div class="modal-body">
|
|
583
|
+
<div class="row g-3">
|
|
584
|
+
<div class="col-12">
|
|
585
|
+
<label for="exposureDuration" class="form-label">Exposure Duration (seconds)</label>
|
|
586
|
+
<input type="number" id="exposureDuration" class="form-control" value="0.1" min="0.001" max="300" step="0.001">
|
|
587
|
+
<small class="text-muted">Range: 0.001 to 300 seconds</small>
|
|
588
|
+
</div>
|
|
589
|
+
</div>
|
|
590
|
+
|
|
591
|
+
<!-- Capture Result Area -->
|
|
592
|
+
<div id="captureResult" class="mt-3" style="display: none;">
|
|
593
|
+
<hr class="border-secondary">
|
|
594
|
+
<h6>Latest Capture</h6>
|
|
595
|
+
<div class="alert alert-success mb-2">
|
|
596
|
+
<strong>Filename:</strong> <span id="captureFilename"></span><br>
|
|
597
|
+
<strong>Format:</strong> <span id="captureFormat"></span>
|
|
598
|
+
</div>
|
|
599
|
+
</div>
|
|
600
|
+
|
|
601
|
+
<!-- Images Directory -->
|
|
602
|
+
<div class="mt-3">
|
|
603
|
+
<hr class="border-secondary">
|
|
604
|
+
<h6>Images Directory</h6>
|
|
605
|
+
<p class="text-muted small mb-1">All captured images are saved to:</p>
|
|
606
|
+
<p><a href="#" id="imagesDirLink" class="text-break"></a></p>
|
|
607
|
+
</div>
|
|
608
|
+
</div>
|
|
609
|
+
<div class="modal-footer border-secondary">
|
|
610
|
+
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
|
|
611
|
+
<button type="button" class="btn btn-primary" id="captureButton" onclick="captureImage()">
|
|
612
|
+
<span id="captureButtonText">Capture</span>
|
|
613
|
+
<span id="captureButtonSpinner" class="spinner-border spinner-border-sm ms-2" role="status" style="display: none;">
|
|
614
|
+
<span class="visually-hidden">Capturing...</span>
|
|
615
|
+
</span>
|
|
616
|
+
</button>
|
|
617
|
+
</div>
|
|
618
|
+
</div>
|
|
619
|
+
</div>
|
|
620
|
+
</div>
|
|
621
|
+
|
|
622
|
+
<!-- Toast Container for Notifications -->
|
|
623
|
+
<div class="toast-container position-fixed top-0 end-0 p-3" style="z-index: 9999;" id="toastContainer"></div>
|
|
624
|
+
|
|
485
625
|
<script type="module" src="/static/app.js"></script>
|
|
486
626
|
|
|
487
627
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: citrascope
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.8.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
5
|
Project-URL: Homepage, https://citra.space
|
|
6
6
|
Project-URL: Documentation, https://docs.citra.space/citrascope/
|
|
@@ -25,6 +25,7 @@ Requires-Python: <3.13,>=3.10
|
|
|
25
25
|
Requires-Dist: click
|
|
26
26
|
Requires-Dist: fastapi>=0.104.0
|
|
27
27
|
Requires-Dist: httpx
|
|
28
|
+
Requires-Dist: ntplib>=0.4.0
|
|
28
29
|
Requires-Dist: platformdirs>=4.0.0
|
|
29
30
|
Requires-Dist: python-dateutil
|
|
30
31
|
Requires-Dist: requests
|
|
@@ -36,6 +37,14 @@ Requires-Dist: dbus-python; extra == 'all'
|
|
|
36
37
|
Requires-Dist: pixelemon; extra == 'all'
|
|
37
38
|
Requires-Dist: plotly; extra == 'all'
|
|
38
39
|
Requires-Dist: pyindi-client; extra == 'all'
|
|
40
|
+
Provides-Extra: all-hardware
|
|
41
|
+
Requires-Dist: cv2-enumerate-cameras>=1.0.0; extra == 'all-hardware'
|
|
42
|
+
Requires-Dist: opencv-python>=4.8.0; extra == 'all-hardware'
|
|
43
|
+
Requires-Dist: picamera2>=0.3.12; extra == 'all-hardware'
|
|
44
|
+
Requires-Dist: pixelemon; extra == 'all-hardware'
|
|
45
|
+
Requires-Dist: plotly; extra == 'all-hardware'
|
|
46
|
+
Requires-Dist: pyindi-client; extra == 'all-hardware'
|
|
47
|
+
Requires-Dist: ximea-api>=1.0.0; extra == 'all-hardware'
|
|
39
48
|
Provides-Extra: build
|
|
40
49
|
Requires-Dist: build; extra == 'build'
|
|
41
50
|
Provides-Extra: deploy
|
|
@@ -58,10 +67,17 @@ Requires-Dist: plotly; extra == 'indi'
|
|
|
58
67
|
Requires-Dist: pyindi-client; extra == 'indi'
|
|
59
68
|
Provides-Extra: kstars
|
|
60
69
|
Requires-Dist: dbus-python; extra == 'kstars'
|
|
70
|
+
Provides-Extra: rpi
|
|
71
|
+
Requires-Dist: picamera2>=0.3.12; extra == 'rpi'
|
|
61
72
|
Provides-Extra: test
|
|
62
73
|
Requires-Dist: mockito; extra == 'test'
|
|
63
74
|
Requires-Dist: pytest; extra == 'test'
|
|
64
75
|
Requires-Dist: pytest-cov; extra == 'test'
|
|
76
|
+
Provides-Extra: usb-camera
|
|
77
|
+
Requires-Dist: cv2-enumerate-cameras>=1.0.0; extra == 'usb-camera'
|
|
78
|
+
Requires-Dist: opencv-python>=4.8.0; extra == 'usb-camera'
|
|
79
|
+
Provides-Extra: ximea
|
|
80
|
+
Requires-Dist: ximea-api>=1.0.0; extra == 'ximea'
|
|
65
81
|
Description-Content-Type: text/markdown
|
|
66
82
|
|
|
67
83
|
# CitraScope
|
|
@@ -0,0 +1,62 @@
|
|
|
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=VIvRnvrsx1spfefHwTzkaxO7lAiNi0aau1EiDyYI8S4,16050
|
|
4
|
+
citrascope/constants.py,sha256=Mc7SLzCelUMDV96BIwP684fFLGANCOEO_mM3GCeRDVY,968
|
|
5
|
+
citrascope/api/abstract_api_client.py,sha256=GJXpHTQEsE3QRbRjLCj3LkQsxvtPxHggXieQLomAO1o,1012
|
|
6
|
+
citrascope/api/citra_api_client.py,sha256=JOu5uNuBYXizmQZWUo77YNjOdMA_uSc7RA8qzw_4e7M,7570
|
|
7
|
+
citrascope/hardware/abstract_astro_hardware_adapter.py,sha256=vRlBFvGlzgb8AQIEojwGC68KFkhq5sELjZ9XWoOtf5k,14381
|
|
8
|
+
citrascope/hardware/adapter_registry.py,sha256=7Vi6RRxb5ygIJeHXd6objp9h0w96_JKaz2TnADkbv8Y,3597
|
|
9
|
+
citrascope/hardware/direct_hardware_adapter.py,sha256=eKYXQ2fx_RZ3A_b0Zh1SsawFnGHHXiVHTiUjWTPOkmo,29031
|
|
10
|
+
citrascope/hardware/filter_sync.py,sha256=jOo_P78TJC_FYhvm2SHvCAvQoBkVQNBiBx7jUSBdqhg,3463
|
|
11
|
+
citrascope/hardware/indi_adapter.py,sha256=VvlB13-9hk0ytfUjdNTGsLHfUz2q062KPDesBS8qxUQ,30060
|
|
12
|
+
citrascope/hardware/kstars_dbus_adapter.py,sha256=kpP8wC_HDHvPNMkynBiT7KGVGmi5F5_4uCQ7BJrOZHY,43439
|
|
13
|
+
citrascope/hardware/kstars_scheduler_template.esl,sha256=uHbS3Zs1S9_hz8kiMkrkZj5ye0z1T1zsy_8MO4N0D4Y,836
|
|
14
|
+
citrascope/hardware/kstars_sequence_template.esq,sha256=u1fzSGtyq7ybKvZcNRjDtQK7QnrQim-E6qiZyG9P7H0,626
|
|
15
|
+
citrascope/hardware/nina_adv_http_adapter.py,sha256=NZNF-_BMZVNhlOsx4k39v2hrTQWSJ1RTrEIe30rrCOg,28619
|
|
16
|
+
citrascope/hardware/nina_adv_http_survey_template.json,sha256=5y0l0h0rWZK6i6GxfAn-9rx7wA7aN5deAVe7op9RKPo,14480
|
|
17
|
+
citrascope/hardware/devices/__init__.py,sha256=6G9wIiSXDsKxAqW1goP6lWePbYfHpoW8j39OEeDsHqs,576
|
|
18
|
+
citrascope/hardware/devices/abstract_hardware_device.py,sha256=CYaLaOQ7TMjuZMfiYZnnERTuvCl-hSHv45qwDhxhPoo,2118
|
|
19
|
+
citrascope/hardware/devices/device_registry.py,sha256=1_ools6WQrbCtvb-9x6xStyeRnMXRtQ9P3BrhTFG2P4,8818
|
|
20
|
+
citrascope/hardware/devices/camera/__init__.py,sha256=ItA7cymHoMy-vnyk562XOcibLovCI5w4t1jixfzU0Ro,456
|
|
21
|
+
citrascope/hardware/devices/camera/abstract_camera.py,sha256=0s16dl8Pc8b4xYQH-KMJ-zHEwAofrDjk9cbm9ZNQcbQ,2857
|
|
22
|
+
citrascope/hardware/devices/camera/rpi_hq_camera.py,sha256=6mMU2l-GbdYhta6vP2HzF2OYdw2YW0UWqRDlhQtBn3k,11658
|
|
23
|
+
citrascope/hardware/devices/camera/usb_camera.py,sha256=JkyYyZS2esgSkksu56Ro6yDsZi_dP1TWWWd1jy0tvpg,14096
|
|
24
|
+
citrascope/hardware/devices/camera/ximea_camera.py,sha256=TpmQZeNBp4MM7R4icOghdg00IwVh7YTyZGpZ3fdDiBA,30715
|
|
25
|
+
citrascope/hardware/devices/filter_wheel/__init__.py,sha256=CukW3VbU3ttrTcKvVwvGiOrWhIe3fhjhVnMK7DVChK8,174
|
|
26
|
+
citrascope/hardware/devices/filter_wheel/abstract_filter_wheel.py,sha256=iMwZDOmZbjsfjQNSBTaAZCAmY_iO-siIB1o5078h8X4,1822
|
|
27
|
+
citrascope/hardware/devices/focuser/__init__.py,sha256=lPbSW43_gjYU9Q6E1pEHw-dMorA6F4vHms2JbdIZOnA,151
|
|
28
|
+
citrascope/hardware/devices/focuser/abstract_focuser.py,sha256=NfNzSVsqQEWwXVTmUFeTfCzV16jE66s_2TcQECME7lE,1959
|
|
29
|
+
citrascope/hardware/devices/mount/__init__.py,sha256=swyX-IXdZ_4gZa3MMLWgHdu2hTDjjgOkEOdrMdv1-fI,141
|
|
30
|
+
citrascope/hardware/devices/mount/abstract_mount.py,sha256=QKneKhK_YFyIFiEEld2w1O80U9IqjtHMggX30nLEUGw,2790
|
|
31
|
+
citrascope/logging/__init__.py,sha256=YU38HLMWfbXh_H-s7W7Zx2pbCR4f_tRk7z0G8xqz4_o,179
|
|
32
|
+
citrascope/logging/_citrascope_logger.py,sha256=GkqNpFJWiatqrBr8t4o2nHt7V9bBDJ8mysM0F4AXMa8,3479
|
|
33
|
+
citrascope/logging/web_log_handler.py,sha256=d0XQzHJZ5M1v3H351tdkBYg7EOwFzXpp7PA9nYejIV0,2659
|
|
34
|
+
citrascope/settings/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
35
|
+
citrascope/settings/citrascope_settings.py,sha256=iClMV57Qd3_fTlC6nagAJg7M635x_Fu1kmhn3FH_o2k,7090
|
|
36
|
+
citrascope/settings/settings_file_manager.py,sha256=Yijb-I9hbbVJ2thkr7OrfkNknSPt1RDpsE7VvqAs0a8,4193
|
|
37
|
+
citrascope/tasks/runner.py,sha256=uEXMP_FSpi3zCqekvWWx4w6vRG-k3LdbfKwT77EsUrA,18292
|
|
38
|
+
citrascope/tasks/task.py,sha256=wK6t5iWhxxB0SC9k2nT_FS0ohBLnimwgBoWdAQQtrgI,1429
|
|
39
|
+
citrascope/tasks/scope/base_telescope_task.py,sha256=wIdyUxplFNhf_YMdCXOK6pG7HF7tZn_id59TvYyWZAY,9674
|
|
40
|
+
citrascope/tasks/scope/static_telescope_task.py,sha256=WYoqCPool2_Sel5VvjEAWWg_ZvytW9Y9wUxLPc6-Ojw,1627
|
|
41
|
+
citrascope/tasks/scope/tracking_telescope_task.py,sha256=k5LEmEi_xnFHNjqPNYb8_tqDdCFD3YGe25Wh_brJXHk,1130
|
|
42
|
+
citrascope/time/__init__.py,sha256=sN81g6VT2qiyEF6e1RAPba2m0PRdcaSCwNUyx1mMnzQ,363
|
|
43
|
+
citrascope/time/time_health.py,sha256=jRrERYbzqNRzjJejW1Zp04Ka85P3EYZGMOd15bH5KIU,2598
|
|
44
|
+
citrascope/time/time_monitor.py,sha256=GAb6Otc3iwMd_HR7mV6Gxsne3y08wgIu1a5lzc_3KYs,5828
|
|
45
|
+
citrascope/time/time_sources.py,sha256=3oPKV6s44DsVmyRyxyPhRmyr8YTAErMzrmFHe_BT5_U,1739
|
|
46
|
+
citrascope/web/__init__.py,sha256=CgU36fyNSxGXjUy3hsHwx7UxF8UO4Qsb7PjC9-6tRmY,38
|
|
47
|
+
citrascope/web/app.py,sha256=hu2IErgjOAcRyFnIMhFIF50fe-S4eQMzrPJXE8dlqDg,37109
|
|
48
|
+
citrascope/web/server.py,sha256=IJJk4HgEwcsjHercL-Q5z39NmJRbkNk_51HIUKKhtRE,5242
|
|
49
|
+
citrascope/web/static/api.js,sha256=s-b1FIw-pTo3A8kLlLINVqHhIvfHwTWA7cEvz4N8Gqc,1924
|
|
50
|
+
citrascope/web/static/app.js,sha256=kXrPGeO2UqEc2RVTdVw7XTYzIOlSWSasPcvEhuSbo9I,39169
|
|
51
|
+
citrascope/web/static/config.js,sha256=MynZZMoF61UstDZbQ5ctDMmuCugPE7R5WP80IcUmgF0,35730
|
|
52
|
+
citrascope/web/static/filters.js,sha256=a_Ug4potNvcNu1Q-d7eodUdixZuXOIQYVdBOEdqhmn8,1768
|
|
53
|
+
citrascope/web/static/style.css,sha256=AMmdJ3aR7aAst71j7HP41_KiwyjjeqNLu5DsDJ_mahk,3690
|
|
54
|
+
citrascope/web/static/websocket.js,sha256=UITw1DDfehOKpjlltn5MXhewZYGKzPFmaTtMFtC0-Ps,3931
|
|
55
|
+
citrascope/web/static/img/citra.png,sha256=Bq8dPWB6fNz7a_H0FuEtNmZWcPHH2iV2OC-fMg4REbQ,205570
|
|
56
|
+
citrascope/web/static/img/favicon.png,sha256=zrbUlpFXDB_zmsIdhhn8_klnc2Ma3N6Q8ouBMAxFjbM,24873
|
|
57
|
+
citrascope/web/templates/dashboard.html,sha256=Sci5M57E9px-Pquokw5xXvhipBOhaQ2iVo5hb9jgvAw,39877
|
|
58
|
+
citrascope-0.8.0.dist-info/METADATA,sha256=kQPmtCYhE_dYgd3HvEd-51owPjUYBqoyk5HZ81eKGQw,8693
|
|
59
|
+
citrascope-0.8.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
60
|
+
citrascope-0.8.0.dist-info/entry_points.txt,sha256=fP22Lt8bNZ_whBowDnOWSADf_FUrgAWnIhqqPf5Xo2g,55
|
|
61
|
+
citrascope-0.8.0.dist-info/licenses/LICENSE,sha256=4B_Ug8tnhTwde7QywOV3HhQcweHJeI0QaGdZfJLxsV8,1068
|
|
62
|
+
citrascope-0.8.0.dist-info/RECORD,,
|
|
@@ -1,41 +0,0 @@
|
|
|
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=XPskPbtenx-WNenlnbb5QhvvH_amK4vST-Uw6Pg2cts,13567
|
|
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=Xc1zNuvlyYapWto37dzFfaKM62pKDN7VC8r4oGF8Up4,8140
|
|
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=Rvv_skURngGIfNhtpVzykq1Bs1vIyIXAb4sBlBwd4YI,44643
|
|
11
|
-
citrascope/hardware/kstars_scheduler_template.esl,sha256=uHbS3Zs1S9_hz8kiMkrkZj5ye0z1T1zsy_8MO4N0D4Y,836
|
|
12
|
-
citrascope/hardware/kstars_sequence_template.esq,sha256=u1fzSGtyq7ybKvZcNRjDtQK7QnrQim-E6qiZyG9P7H0,626
|
|
13
|
-
citrascope/hardware/nina_adv_http_adapter.py,sha256=Jzg9j74bEFdY77XX-O-UE-e3Q3Y8PQ-xL7-igXMqbwg,27637
|
|
14
|
-
citrascope/hardware/nina_adv_http_survey_template.json,sha256=beg4H6Bzby-0x5uDc_eRJQ_rKs8VT64sDJyAzS_q1l4,14424
|
|
15
|
-
citrascope/logging/__init__.py,sha256=YU38HLMWfbXh_H-s7W7Zx2pbCR4f_tRk7z0G8xqz4_o,179
|
|
16
|
-
citrascope/logging/_citrascope_logger.py,sha256=GkqNpFJWiatqrBr8t4o2nHt7V9bBDJ8mysM0F4AXMa8,3479
|
|
17
|
-
citrascope/logging/web_log_handler.py,sha256=d0XQzHJZ5M1v3H351tdkBYg7EOwFzXpp7PA9nYejIV0,2659
|
|
18
|
-
citrascope/settings/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
19
|
-
citrascope/settings/citrascope_settings.py,sha256=Env0L8sM0e9v7Os9CIqeRX3Nq0-DrgxmGLeNzbOm1To,5671
|
|
20
|
-
citrascope/settings/settings_file_manager.py,sha256=Yijb-I9hbbVJ2thkr7OrfkNknSPt1RDpsE7VvqAs0a8,4193
|
|
21
|
-
citrascope/tasks/runner.py,sha256=77rn8ML7Fpay7B0YbXag6rn70IbEYYVMNNFLLDaHA50,13903
|
|
22
|
-
citrascope/tasks/task.py,sha256=0u0oN56E6KaNz19ba_7WuY43Sk4CTXc8UPT7sdUpRXo,1287
|
|
23
|
-
citrascope/tasks/scope/base_telescope_task.py,sha256=wIdyUxplFNhf_YMdCXOK6pG7HF7tZn_id59TvYyWZAY,9674
|
|
24
|
-
citrascope/tasks/scope/static_telescope_task.py,sha256=nrRV2M2bUfIwTtZacAmidwj1dlTxyZgTbFEVkpxzL7c,1389
|
|
25
|
-
citrascope/tasks/scope/tracking_telescope_task.py,sha256=k5LEmEi_xnFHNjqPNYb8_tqDdCFD3YGe25Wh_brJXHk,1130
|
|
26
|
-
citrascope/web/__init__.py,sha256=CgU36fyNSxGXjUy3hsHwx7UxF8UO4Qsb7PjC9-6tRmY,38
|
|
27
|
-
citrascope/web/app.py,sha256=LGimBCHWmaPrLkh6JDpJ7IoC__423lhO7NldQGTFzKI,26181
|
|
28
|
-
citrascope/web/server.py,sha256=IJJk4HgEwcsjHercL-Q5z39NmJRbkNk_51HIUKKhtRE,5242
|
|
29
|
-
citrascope/web/static/api.js,sha256=s-b1FIw-pTo3A8kLlLINVqHhIvfHwTWA7cEvz4N8Gqc,1924
|
|
30
|
-
citrascope/web/static/app.js,sha256=BtryRqh1ujXXRmAMWLdEhFQtdr_XaxXohagD2HVJMSE,26457
|
|
31
|
-
citrascope/web/static/config.js,sha256=l0brTgkQ4UW-C9a2wabkvVGwb-wPnJSmM4lb63s0KbY,21500
|
|
32
|
-
citrascope/web/static/style.css,sha256=z5D4FHWm-JBb0Cu0HWPD_4V7qnXNBuOllrPJD9nHI38,2961
|
|
33
|
-
citrascope/web/static/websocket.js,sha256=UITw1DDfehOKpjlltn5MXhewZYGKzPFmaTtMFtC0-Ps,3931
|
|
34
|
-
citrascope/web/static/img/citra.png,sha256=Bq8dPWB6fNz7a_H0FuEtNmZWcPHH2iV2OC-fMg4REbQ,205570
|
|
35
|
-
citrascope/web/static/img/favicon.png,sha256=zrbUlpFXDB_zmsIdhhn8_klnc2Ma3N6Q8ouBMAxFjbM,24873
|
|
36
|
-
citrascope/web/templates/dashboard.html,sha256=7N5JPlihK3WNDe8fnFMfIRfCgp4ZZJLbl2TVc_nY0SU,30119
|
|
37
|
-
citrascope-0.6.1.dist-info/METADATA,sha256=41ckB6zCtSPkVOBDayoKVIfF3boDtsGLkvvLvYc8Teg,7945
|
|
38
|
-
citrascope-0.6.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
39
|
-
citrascope-0.6.1.dist-info/entry_points.txt,sha256=fP22Lt8bNZ_whBowDnOWSADf_FUrgAWnIhqqPf5Xo2g,55
|
|
40
|
-
citrascope-0.6.1.dist-info/licenses/LICENSE,sha256=4B_Ug8tnhTwde7QywOV3HhQcweHJeI0QaGdZfJLxsV8,1068
|
|
41
|
-
citrascope-0.6.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|