arcsecond 3.19.0__tar.gz → 3.20.0__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 (114) hide show
  1. {arcsecond-3.19.0 → arcsecond-3.20.0}/PKG-INFO +1 -1
  2. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/hosting/docker/docker-compose.yml +8 -11
  3. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/hosting/local.py +4 -3
  4. {arcsecond-3.19.0 → arcsecond-3.20.0}/pyproject.toml +1 -1
  5. {arcsecond-3.19.0 → arcsecond-3.20.0}/tests/test_imagesources_detection.py +1 -2
  6. {arcsecond-3.19.0 → arcsecond-3.20.0}/uv.lock +1 -1
  7. {arcsecond-3.19.0 → arcsecond-3.20.0}/.docker/Dockerfile_postgres +0 -0
  8. {arcsecond-3.19.0 → arcsecond-3.20.0}/.docker/Dockerfile_redis +0 -0
  9. {arcsecond-3.19.0 → arcsecond-3.20.0}/.flake8 +0 -0
  10. {arcsecond-3.19.0 → arcsecond-3.20.0}/.github/dependabot.yml +0 -0
  11. {arcsecond-3.19.0 → arcsecond-3.20.0}/.github/workflows/pythonpublish.yml +0 -0
  12. {arcsecond-3.19.0 → arcsecond-3.20.0}/.github/workflows/tests.yml +0 -0
  13. {arcsecond-3.19.0 → arcsecond-3.20.0}/.gitignore +0 -0
  14. {arcsecond-3.19.0 → arcsecond-3.20.0}/LICENSE +0 -0
  15. {arcsecond-3.19.0 → arcsecond-3.20.0}/Makefile +0 -0
  16. {arcsecond-3.19.0 → arcsecond-3.20.0}/README.md +0 -0
  17. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/__init__.py +0 -0
  18. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/__version__.py +0 -0
  19. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/alpaca/__init__.py +0 -0
  20. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/alpaca/commands.py +0 -0
  21. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/alpaca/dome_probe.py +0 -0
  22. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/api/__init__.py +0 -0
  23. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/api/config.py +0 -0
  24. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/api/constants.py +0 -0
  25. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/api/endpoint.py +0 -0
  26. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/api/main.py +0 -0
  27. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/api/resources.py +0 -0
  28. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/cli.py +0 -0
  29. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/cloud/__init__.py +0 -0
  30. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/cloud/auth.py +0 -0
  31. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/cloud/resources.py +0 -0
  32. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/cloud/uploader/__init__.py +0 -0
  33. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/cloud/uploader/constants.py +0 -0
  34. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/cloud/uploader/context.py +0 -0
  35. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/cloud/uploader/datafiles/__init__.py +0 -0
  36. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/cloud/uploader/datafiles/context.py +0 -0
  37. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/cloud/uploader/datafiles/errors.py +0 -0
  38. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/cloud/uploader/datafiles/uploader.py +0 -0
  39. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/cloud/uploader/datafiles/utils.py +0 -0
  40. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/cloud/uploader/errors.py +0 -0
  41. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/cloud/uploader/logger.py +0 -0
  42. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/cloud/uploader/uploader.py +0 -0
  43. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/cloud/uploader/utils.py +0 -0
  44. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/cloud/uploader/walker.py +0 -0
  45. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/cloud/uploads.py +0 -0
  46. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/errors.py +0 -0
  47. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/hosting/__init__.py +0 -0
  48. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/hosting/backups.py +0 -0
  49. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/hosting/checks.py +0 -0
  50. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/hosting/constants.py +0 -0
  51. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/hosting/database.py +0 -0
  52. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/hosting/docker/__init__.py +0 -0
  53. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/hosting/docker/constants.py +0 -0
  54. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/hosting/docker/containers.py +0 -0
  55. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/hosting/docker/images.py +0 -0
  56. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/hosting/docker/utils.py +0 -0
  57. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/hosting/keygen/__init__.py +0 -0
  58. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/hosting/keygen/client.py +0 -0
  59. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/hosting/keygen/utils.py +0 -0
  60. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/hosting/main.py +0 -0
  61. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/hosting/postgres/init-db.sh +0 -0
  62. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/hosting/setup.py +0 -0
  63. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/hosting/utils.py +0 -0
  64. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/hosting/validation.py +0 -0
  65. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/imagesources/__init__.py +0 -0
  66. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/imagesources/commands.py +0 -0
  67. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/imagesources/detection.py +0 -0
  68. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/imagesources/proxy.py +0 -0
  69. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/imagesources/registry.py +0 -0
  70. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/imagesources/runtime.py +0 -0
  71. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/imagesources/sources/__init__.py +0 -0
  72. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/imagesources/sources/base.py +0 -0
  73. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/imagesources/sources/filewatch.py +0 -0
  74. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/imagesources/sources/mdns.py +0 -0
  75. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/imagesources/sources/network.py +0 -0
  76. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/imagesources/sources/opencv.py +0 -0
  77. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/imagesources/store.py +0 -0
  78. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/options.py +0 -0
  79. {arcsecond-3.19.0 → arcsecond-3.20.0}/arcsecond/targets.py +0 -0
  80. {arcsecond-3.19.0 → arcsecond-3.20.0}/examples/example_upload_files.py +0 -0
  81. {arcsecond-3.19.0 → arcsecond-3.20.0}/requirements.txt +0 -0
  82. {arcsecond-3.19.0 → arcsecond-3.20.0}/setup.cfg +0 -0
  83. {arcsecond-3.19.0 → arcsecond-3.20.0}/setup.py +0 -0
  84. {arcsecond-3.19.0 → arcsecond-3.20.0}/sonar-project.properties +0 -0
  85. {arcsecond-3.19.0 → arcsecond-3.20.0}/tests/__init__.py +0 -0
  86. {arcsecond-3.19.0 → arcsecond-3.20.0}/tests/api/__init__.py +0 -0
  87. {arcsecond-3.19.0 → arcsecond-3.20.0}/tests/api/test_api.py +0 -0
  88. {arcsecond-3.19.0 → arcsecond-3.20.0}/tests/api/test_api_endpoint.py +0 -0
  89. {arcsecond-3.19.0 → arcsecond-3.20.0}/tests/api/test_config.py +0 -0
  90. {arcsecond-3.19.0 → arcsecond-3.20.0}/tests/api/test_targets.py +0 -0
  91. {arcsecond-3.19.0 → arcsecond-3.20.0}/tests/cloud/__init__.py +0 -0
  92. {arcsecond-3.19.0 → arcsecond-3.20.0}/tests/cloud/uploader/__init__.py +0 -0
  93. {arcsecond-3.19.0 → arcsecond-3.20.0}/tests/cloud/uploader/datafiles/__init__.py +0 -0
  94. {arcsecond-3.19.0 → arcsecond-3.20.0}/tests/cloud/uploader/datafiles/test_uploader_errors.py +0 -0
  95. {arcsecond-3.19.0 → arcsecond-3.20.0}/tests/cloud/uploader/datafiles/test_uploader_full_process.py +0 -0
  96. {arcsecond-3.19.0 → arcsecond-3.20.0}/tests/cloud/uploader/datafiles/test_uploader_init.py +0 -0
  97. {arcsecond-3.19.0 → arcsecond-3.20.0}/tests/cloud/uploader/datafiles/test_uploader_prepare.py +0 -0
  98. {arcsecond-3.19.0 → arcsecond-3.20.0}/tests/cloud/uploader/datafiles/test_uploader_upload.py +0 -0
  99. {arcsecond-3.19.0 → arcsecond-3.20.0}/tests/conftest.py +0 -0
  100. {arcsecond-3.19.0 → arcsecond-3.20.0}/tests/fixtures/file1.fits +0 -0
  101. {arcsecond-3.19.0 → arcsecond-3.20.0}/tests/test_alpaca_probe.py +0 -0
  102. {arcsecond-3.19.0 → arcsecond-3.20.0}/tests/test_cli.py +0 -0
  103. {arcsecond-3.19.0 → arcsecond-3.20.0}/tests/test_hosting_backups_restore.py +0 -0
  104. {arcsecond-3.19.0 → arcsecond-3.20.0}/tests/test_hosting_database.py +0 -0
  105. {arcsecond-3.19.0 → arcsecond-3.20.0}/tests/test_hosting_local.py +0 -0
  106. {arcsecond-3.19.0 → arcsecond-3.20.0}/tests/test_hosting_utils_secret_key.py +0 -0
  107. {arcsecond-3.19.0 → arcsecond-3.20.0}/tests/test_imagesources_commands.py +0 -0
  108. {arcsecond-3.19.0 → arcsecond-3.20.0}/tests/test_imagesources_mdns.py +0 -0
  109. {arcsecond-3.19.0 → arcsecond-3.20.0}/tests/test_imagesources_network.py +0 -0
  110. {arcsecond-3.19.0 → arcsecond-3.20.0}/tests/test_imagesources_proxy.py +0 -0
  111. {arcsecond-3.19.0 → arcsecond-3.20.0}/tests/test_imagesources_store.py +0 -0
  112. {arcsecond-3.19.0 → arcsecond-3.20.0}/tests/test_imagesources_webcam.py +0 -0
  113. {arcsecond-3.19.0 → arcsecond-3.20.0}/tests/test_targets_planning.py +0 -0
  114. {arcsecond-3.19.0 → arcsecond-3.20.0}/tests/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: arcsecond
3
- Version: 3.19.0
3
+ Version: 3.20.0
4
4
  Summary: CLI for arcsecond.io
5
5
  Project-URL: Homepage, https://github.com/arcsecond-io/cli
6
6
  Project-URL: Issues, https://github.com/arcsecond-io/cli/issues
@@ -1,6 +1,6 @@
1
1
  # === Arcsecond.local config. ===
2
2
  # *** DO NOT change any name or port number. ***
3
- # Version 6.3
3
+ # Version 6.4
4
4
 
5
5
  services:
6
6
  # Database (PostgresQL)
@@ -8,12 +8,11 @@ services:
8
8
  image: postgres:16
9
9
  container_name: arcsecond-db
10
10
  restart: unless-stopped
11
- # Bind to localhost only — the backend container reaches the DB over the
12
- # internal Docker network (hostname `arcsecond-db`), and operators can
13
- # still run `psql -h localhost` / `pg_dump` from the host. Anything on the
14
- # LAN is firewalled out.
15
- ports:
16
- - "127.0.0.1:5432:5432"
11
+ # No host port. The backend reaches the DB over the internal Docker
12
+ # network (hostname `arcsecond-db`), and every CLI command that needs
13
+ # the DB (backups, restore, password rotation) goes through `docker exec`
14
+ # into this container. Publishing 5432 on the host bought nothing and
15
+ # failed the whole stack whenever another Postgres already held it.
17
16
  volumes:
18
17
  - arcsecond_postgres_data:/var/lib/postgresql/data
19
18
  env_file:
@@ -25,10 +24,8 @@ services:
25
24
  image: redis:7.4
26
25
  container_name: arcsecond-broker
27
26
  restart: unless-stopped
28
- # Localhost-only as well — Redis with no auth on a LAN-exposed port is a
29
- # well-known foot-gun. Backend reaches it over the Docker network.
30
- ports:
31
- - "127.0.0.1:6379:6379"
27
+ # No host port either: Redis with no auth must never be reachable from
28
+ # outside the stack, and the backend reaches it over the Docker network.
32
29
 
33
30
  # Arcsecond backend (REST APIs). Can be used for API calls and external pipelines, scripts etc.
34
31
  backend:
@@ -16,9 +16,10 @@ from .utils import (
16
16
 
17
17
  ENV_FILENAME = ".env"
18
18
 
19
- # Stable across installs — operators connect with this username when running
20
- # manual psql / pg_dump commands. The actual security boundary is the password
21
- # (generated per-install) and the network exposure (localhost-only).
19
+ # Stable across installs — it is the username every `docker exec ... psql`
20
+ # in this package and in the docs uses. The actual security boundary is the
21
+ # password (generated per-install) and the fact that the database container
22
+ # publishes no host port at all.
22
23
  POSTGRES_USER = "arcsecond_docker"
23
24
  POSTGRES_DB = "arcsecond_docker"
24
25
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "arcsecond"
7
- version = "3.19.0"
7
+ version = "3.20.0"
8
8
  authors = [
9
9
  { name = "Cedric Foellmi", email = "cedric@arcsecond.io" },
10
10
  ]
@@ -6,6 +6,7 @@ buckets is asserted on its own, because the old command printed detection and
6
6
  registration one after the other with no way to tell which was which.
7
7
  """
8
8
 
9
+ from contextlib import nullcontext
9
10
  from unittest.mock import patch
10
11
 
11
12
  import pytest
@@ -139,8 +140,6 @@ def _unresolvable(monkeypatch, answering=()):
139
140
  """Make the machine's resolver fail, except for addresses in ``answering``."""
140
141
  import socket as socket_module
141
142
 
142
- from contextlib import nullcontext
143
-
144
143
  def connect(endpoint, timeout=None):
145
144
  host, _ = endpoint
146
145
  if host in answering:
@@ -155,7 +155,7 @@ wheels = [
155
155
 
156
156
  [[package]]
157
157
  name = "arcsecond"
158
- version = "3.19.0"
158
+ version = "3.20.0"
159
159
  source = { editable = "." }
160
160
  dependencies = [
161
161
  { name = "alpyca" },
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes