geovisio 2.10.0__tar.gz → 2.12.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 (466) hide show
  1. {geovisio-2.10.0 → geovisio-2.12.0}/.dockerignore +3 -3
  2. {geovisio-2.10.0 → geovisio-2.12.0}/.gitignore +1 -1
  3. {geovisio-2.10.0 → geovisio-2.12.0}/.gitlab-ci.yml +16 -9
  4. geovisio-2.12.0/.pre-commit-config.yaml +12 -0
  5. geovisio-2.12.0/.python-version +1 -0
  6. {geovisio-2.10.0 → geovisio-2.12.0}/CHANGELOG.md +55 -5
  7. {geovisio-2.10.0 → geovisio-2.12.0}/Dockerfile +3 -3
  8. {geovisio-2.10.0 → geovisio-2.12.0}/PKG-INFO +8 -27
  9. geovisio-2.12.0/bin/run_production_api.sh +5 -0
  10. {geovisio-2.10.0 → geovisio-2.12.0}/docker/docker-compose-full.yml +1 -1
  11. {geovisio-2.10.0 → geovisio-2.12.0}/docker/docker-entrypoint.sh +3 -3
  12. {geovisio-2.10.0 → geovisio-2.12.0}/docker/full-keycloak-auth/docker-compose.yml +1 -1
  13. {geovisio-2.10.0 → geovisio-2.12.0}/docker/full-keycloak-auth/nginx.conf +1 -1
  14. {geovisio-2.10.0 → geovisio-2.12.0}/docker/full-osm-auth/docker-compose.yml +1 -1
  15. {geovisio-2.10.0 → geovisio-2.12.0}/docker/full-osm-auth/nginx.conf +1 -0
  16. {geovisio-2.10.0 → geovisio-2.12.0}/docs/api/api.md +50 -1
  17. {geovisio-2.10.0 → geovisio-2.12.0}/docs/api/open_api.json +676 -58
  18. {geovisio-2.10.0 → geovisio-2.12.0}/docs/dev/STAC_compatibility.md +34 -2
  19. {geovisio-2.10.0 → geovisio-2.12.0}/docs/dev/develop_server.md +42 -21
  20. {geovisio-2.10.0 → geovisio-2.12.0}/docs/install/cli.md +85 -31
  21. {geovisio-2.10.0 → geovisio-2.12.0}/docs/install/database_setup.md +16 -12
  22. {geovisio-2.10.0 → geovisio-2.12.0}/docs/install/deep_dive/external_Identity_Providers.md +1 -1
  23. {geovisio-2.10.0 → geovisio-2.12.0}/docs/install/deep_dive/pictures_processing.md +8 -0
  24. geovisio-2.12.0/docs/install/deep_dive/semantics.md +166 -0
  25. geovisio-2.12.0/docs/install/deep_dive/visibility.md +27 -0
  26. geovisio-2.12.0/docs/install/index.md +13 -0
  27. {geovisio-2.10.0 → geovisio-2.12.0}/docs/install/install.md +28 -7
  28. {geovisio-2.10.0 → geovisio-2.12.0}/docs/install/running.md +46 -20
  29. {geovisio-2.10.0 → geovisio-2.12.0}/docs/install/settings.md +61 -11
  30. {geovisio-2.10.0 → geovisio-2.12.0}/docs/install/tutorials/running_docker_keycloak.md +17 -8
  31. {geovisio-2.10.0 → geovisio-2.12.0}/docs/install/tutorials/running_docker_osm_auth.md +16 -3
  32. geovisio-2.12.0/docs/install/update.md +8 -0
  33. geovisio-2.12.0/example.env +107 -0
  34. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/__init__.py +32 -2
  35. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/admin_cli/db.py +1 -1
  36. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/admin_cli/user.py +7 -2
  37. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/config_app.py +21 -7
  38. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/db_migrations.py +2 -2
  39. geovisio-2.12.0/geovisio/migrations/20221201_02_ZG8AR-camera-information.rollback.sql +5 -0
  40. geovisio-2.12.0/geovisio/migrations/20221201_02_ZG8AR-camera-information.sql +10 -0
  41. geovisio-2.12.0/geovisio/migrations/20250902_01_k5UTq-visibility-status.rollback.sql +11 -0
  42. geovisio-2.12.0/geovisio/migrations/20250902_01_k5UTq-visibility-status.sql +19 -0
  43. geovisio-2.12.0/geovisio/migrations/20250904_01_3uVKX-visibility-functions.rollback.sql +20 -0
  44. geovisio-2.12.0/geovisio/migrations/20250904_01_3uVKX-visibility-functions.sql +43 -0
  45. geovisio-2.12.0/geovisio/migrations/20251110_01_bWEXo-report-visibility.rollback.sql +30 -0
  46. geovisio-2.12.0/geovisio/migrations/20251110_01_bWEXo-report-visibility.sql +30 -0
  47. geovisio-2.12.0/geovisio/migrations/20251124_01_0xdqi-page-updates.rollback.sql +6 -0
  48. geovisio-2.12.0/geovisio/migrations/20251124_01_0xdqi-page-updates.sql +8 -0
  49. geovisio-2.12.0/geovisio/migrations/20251127_01_S6Ci8-pictures-grid-visibility.rollback.sql +24 -0
  50. geovisio-2.12.0/geovisio/migrations/20251127_01_S6Ci8-pictures-grid-visibility.sql +36 -0
  51. geovisio-2.12.0/geovisio/migrations/20251202_01_Q3g59-pictures-grid-logged-only.rollback.sql +32 -0
  52. geovisio-2.12.0/geovisio/migrations/20251202_01_Q3g59-pictures-grid-logged-only.sql +34 -0
  53. geovisio-2.12.0/geovisio/templates/main.html +42 -0
  54. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/templates/viewer.html +8 -15
  55. geovisio-2.12.0/geovisio/translations/be/LC_MESSAGES/messages.mo +0 -0
  56. geovisio-2.12.0/geovisio/translations/be/LC_MESSAGES/messages.po +886 -0
  57. {geovisio-2.10.0/geovisio/translations/oc → geovisio-2.12.0/geovisio/translations/cy}/LC_MESSAGES/messages.mo +0 -0
  58. geovisio-2.10.0/geovisio/translations/messages.pot → geovisio-2.12.0/geovisio/translations/cy/LC_MESSAGES/messages.po +162 -142
  59. geovisio-2.12.0/geovisio/translations/da/LC_MESSAGES/messages.mo +0 -0
  60. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/translations/da/LC_MESSAGES/messages.po +96 -5
  61. geovisio-2.12.0/geovisio/translations/de/LC_MESSAGES/messages.mo +0 -0
  62. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/translations/de/LC_MESSAGES/messages.po +171 -132
  63. geovisio-2.12.0/geovisio/translations/en/LC_MESSAGES/messages.mo +0 -0
  64. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/translations/en/LC_MESSAGES/messages.po +211 -182
  65. geovisio-2.12.0/geovisio/translations/eo/LC_MESSAGES/messages.mo +0 -0
  66. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/translations/eo/LC_MESSAGES/messages.po +3 -2
  67. geovisio-2.12.0/geovisio/translations/fr/LC_MESSAGES/messages.mo +0 -0
  68. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/translations/fr/LC_MESSAGES/messages.po +3 -2
  69. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/translations/it/LC_MESSAGES/messages.mo +0 -0
  70. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/translations/it/LC_MESSAGES/messages.po +1 -1
  71. geovisio-2.12.0/geovisio/translations/messages.pot +821 -0
  72. geovisio-2.12.0/geovisio/translations/nl/LC_MESSAGES/messages.mo +0 -0
  73. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/translations/nl/LC_MESSAGES/messages.po +44 -2
  74. geovisio-2.12.0/geovisio/translations/oc/LC_MESSAGES/messages.mo +0 -0
  75. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/translations/oc/LC_MESSAGES/messages.po +9 -6
  76. geovisio-2.12.0/geovisio/translations/pt/LC_MESSAGES/messages.mo +0 -0
  77. geovisio-2.12.0/geovisio/translations/pt/LC_MESSAGES/messages.po +944 -0
  78. geovisio-2.12.0/geovisio/translations/pt_BR/LC_MESSAGES/messages.mo +0 -0
  79. geovisio-2.12.0/geovisio/translations/pt_BR/LC_MESSAGES/messages.po +942 -0
  80. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/translations/sv/LC_MESSAGES/messages.mo +0 -0
  81. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/translations/sv/LC_MESSAGES/messages.po +1 -1
  82. geovisio-2.12.0/geovisio/translations/tr/LC_MESSAGES/messages.mo +0 -0
  83. geovisio-2.12.0/geovisio/translations/tr/LC_MESSAGES/messages.po +927 -0
  84. geovisio-2.12.0/geovisio/translations/uk/LC_MESSAGES/messages.mo +0 -0
  85. geovisio-2.12.0/geovisio/translations/uk/LC_MESSAGES/messages.po +920 -0
  86. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/utils/annotations.py +7 -4
  87. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/utils/auth.py +33 -0
  88. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/utils/cql2.py +42 -20
  89. geovisio-2.12.0/geovisio/utils/link.py +25 -0
  90. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/utils/pictures.py +16 -18
  91. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/utils/sequences.py +104 -75
  92. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/utils/upload_set.py +62 -12
  93. geovisio-2.12.0/geovisio/utils/users.py +18 -0
  94. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/web/annotations.py +96 -3
  95. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/web/collections.py +249 -116
  96. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/web/configuration.py +12 -0
  97. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/web/docs.py +18 -4
  98. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/web/items.py +183 -76
  99. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/web/map.py +92 -54
  100. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/web/pages.py +48 -4
  101. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/web/params.py +56 -11
  102. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/web/pictures.py +3 -3
  103. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/web/prepare.py +4 -2
  104. geovisio-2.12.0/geovisio/web/queryables.py +57 -0
  105. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/web/stac.py +8 -2
  106. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/web/upload_set.py +82 -26
  107. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/web/users.py +86 -5
  108. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/web/utils.py +24 -6
  109. geovisio-2.12.0/images/favicon.ico +0 -0
  110. geovisio-2.12.0/images/favicon.svg +199 -0
  111. geovisio-2.12.0/images/logo.png +0 -0
  112. geovisio-2.12.0/images/logo.svg +187 -0
  113. {geovisio-2.10.0 → geovisio-2.12.0}/mkdocs.yml +15 -11
  114. {geovisio-2.10.0 → geovisio-2.12.0}/pyproject.toml +18 -15
  115. {geovisio-2.10.0 → geovisio-2.12.0}/tests/conftest.py +111 -68
  116. {geovisio-2.10.0 → geovisio-2.12.0}/tests/fixed_data/test_many_semantics.py +9 -8
  117. {geovisio-2.10.0 → geovisio-2.12.0}/tests/fixed_data/test_many_sequences.py +3 -3
  118. geovisio-2.12.0/tests/fixed_data/test_visibility.py +474 -0
  119. {geovisio-2.10.0 → geovisio-2.12.0}/tests/fixed_data/test_web_collections_one_collection.py +15 -11
  120. {geovisio-2.10.0 → geovisio-2.12.0}/tests/integration/test_auth.py +12 -2
  121. {geovisio-2.10.0 → geovisio-2.12.0}/tests/test_utils_annotations.py +5 -5
  122. geovisio-2.12.0/tests/test_utils_users.py +99 -0
  123. {geovisio-2.10.0 → geovisio-2.12.0}/tests/test_web_annotation.py +113 -3
  124. {geovisio-2.10.0 → geovisio-2.12.0}/tests/test_web_collections.py +261 -81
  125. {geovisio-2.10.0 → geovisio-2.12.0}/tests/test_web_configuration.py +16 -0
  126. {geovisio-2.10.0 → geovisio-2.12.0}/tests/test_web_items.py +257 -69
  127. {geovisio-2.10.0 → geovisio-2.12.0}/tests/test_web_map.py +348 -39
  128. {geovisio-2.10.0 → geovisio-2.12.0}/tests/test_web_pages.py +20 -0
  129. {geovisio-2.10.0 → geovisio-2.12.0}/tests/test_web_prepare.py +15 -14
  130. geovisio-2.12.0/tests/test_web_queryables.py +44 -0
  131. {geovisio-2.10.0 → geovisio-2.12.0}/tests/test_web_reports.py +52 -6
  132. {geovisio-2.10.0 → geovisio-2.12.0}/tests/test_web_upload_set.py +297 -25
  133. {geovisio-2.10.0 → geovisio-2.12.0}/tests/test_web_users.py +188 -8
  134. geovisio-2.12.0/uv.lock +3065 -0
  135. {geovisio-2.10.0 → geovisio-2.12.0}/yoyo.ini +1 -1
  136. geovisio-2.10.0/.pre-commit-config.yaml +0 -5
  137. geovisio-2.10.0/bin/post_compile +0 -5
  138. geovisio-2.10.0/bin/run_production_api.sh +0 -11
  139. geovisio-2.10.0/docs/install/update.md +0 -8
  140. geovisio-2.10.0/geovisio/templates/main.html +0 -93
  141. geovisio-2.10.0/geovisio/translations/da/LC_MESSAGES/messages.mo +0 -0
  142. geovisio-2.10.0/geovisio/translations/de/LC_MESSAGES/messages.mo +0 -0
  143. geovisio-2.10.0/geovisio/translations/en/LC_MESSAGES/messages.mo +0 -0
  144. geovisio-2.10.0/geovisio/translations/eo/LC_MESSAGES/messages.mo +0 -0
  145. geovisio-2.10.0/geovisio/translations/fr/LC_MESSAGES/messages.mo +0 -0
  146. geovisio-2.10.0/geovisio/translations/nl/LC_MESSAGES/messages.mo +0 -0
  147. geovisio-2.10.0/geovisio/utils/link.py +0 -15
  148. geovisio-2.10.0/images/big_picture.png +0 -0
  149. geovisio-2.10.0/images/big_picture.svg +0 -436
  150. geovisio-2.10.0/images/favicon.ico +0 -0
  151. geovisio-2.10.0/images/favicon.svg +0 -82
  152. geovisio-2.10.0/images/logo.png +0 -0
  153. geovisio-2.10.0/images/logo.svg +0 -156
  154. geovisio-2.10.0/images/logo_full.png +0 -0
  155. geovisio-2.10.0/images/logo_full.svg +0 -191
  156. geovisio-2.10.0/migrations/20221201_02_ZG8AR-camera-information.py +0 -49
  157. geovisio-2.10.0/migrations/data/readme.md +0 -7
  158. geovisio-2.10.0/migrations/data/sensor_data.json +0 -3711
  159. geovisio-2.10.0/runtime.txt +0 -1
  160. {geovisio-2.10.0 → geovisio-2.12.0}/.flaskenv +0 -0
  161. {geovisio-2.10.0 → geovisio-2.12.0}/CODE_OF_CONDUCT.md +0 -0
  162. {geovisio-2.10.0 → geovisio-2.12.0}/LICENSE +0 -0
  163. {geovisio-2.10.0 → geovisio-2.12.0}/Makefile +0 -0
  164. {geovisio-2.10.0 → geovisio-2.12.0}/Procfile +0 -0
  165. {geovisio-2.10.0 → geovisio-2.12.0}/README.md +0 -0
  166. {geovisio-2.10.0 → geovisio-2.12.0}/babel.cfg +0 -0
  167. {geovisio-2.10.0 → geovisio-2.12.0}/docker/docker-compose-blurring.yml +0 -0
  168. {geovisio-2.10.0 → geovisio-2.12.0}/docker/docker-compose-full-linux.yml +0 -0
  169. {geovisio-2.10.0 → geovisio-2.12.0}/docker/docker-compose-keycloak.yml +0 -0
  170. {geovisio-2.10.0 → geovisio-2.12.0}/docker/docker-compose-minio.yml +0 -0
  171. {geovisio-2.10.0 → geovisio-2.12.0}/docker/full-keycloak-auth/1-init-keycloak-db.sh +0 -0
  172. {geovisio-2.10.0 → geovisio-2.12.0}/docker/full-keycloak-auth/Dockerfile.keycloak +0 -0
  173. {geovisio-2.10.0 → geovisio-2.12.0}/docker/full-keycloak-auth/env.example +0 -0
  174. {geovisio-2.10.0 → geovisio-2.12.0}/docker/full-keycloak-auth/keycloak-realm.json +0 -0
  175. {geovisio-2.10.0 → geovisio-2.12.0}/docker/full-keycloak-auth/pictures_storage/.gitkeep +0 -0
  176. {geovisio-2.10.0 → geovisio-2.12.0}/docker/full-keycloak-auth/robots.txt +0 -0
  177. {geovisio-2.10.0 → geovisio-2.12.0}/docker/full-osm-auth/env.example +0 -0
  178. {geovisio-2.10.0 → geovisio-2.12.0}/docker/full-osm-auth/pictures_storage/.gitkeep +0 -0
  179. {geovisio-2.10.0 → geovisio-2.12.0}/docker/full-osm-auth/robots.txt +0 -0
  180. {geovisio-2.10.0 → geovisio-2.12.0}/docker/keycloak-realm.json +0 -0
  181. {geovisio-2.10.0 → geovisio-2.12.0}/docker-compose.yml +0 -0
  182. {geovisio-2.10.0 → geovisio-2.12.0}/docs/api/openapi.md +0 -0
  183. {geovisio-2.10.0 → geovisio-2.12.0}/docs/dev/releases.md +0 -0
  184. {geovisio-2.10.0 → geovisio-2.12.0}/docs/images/geovisio-architecture-simple.excalidraw +0 -0
  185. {geovisio-2.10.0 → geovisio-2.12.0}/docs/images/geovisio-architecture-simple.png +0 -0
  186. {geovisio-2.10.0 → geovisio-2.12.0}/docs/images/geovisio_authentication_flow.svg +0 -0
  187. {geovisio-2.10.0 → geovisio-2.12.0}/docs/index.md +0 -0
  188. {geovisio-2.10.0 → geovisio-2.12.0}/docs/install/deep_dive/blur_api.md +0 -0
  189. {geovisio-2.10.0 → geovisio-2.12.0}/docs/install/deep_dive/excluded_areas.md +0 -0
  190. {geovisio-2.10.0 → geovisio-2.12.0}/docs/install/tutorials/osm_oauth_client.png +0 -0
  191. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/admin_cli/__init__.py +0 -0
  192. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/admin_cli/cleanup.py +0 -0
  193. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/admin_cli/default_account_tokens.py +0 -0
  194. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/admin_cli/reorder_sequences.py +0 -0
  195. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/admin_cli/sequence_heading.py +0 -0
  196. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/errors.py +0 -0
  197. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20221201_01_wpCGc-initial-schema.rollback.sql +0 -0
  198. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20221201_01_wpCGc-initial-schema.sql +0 -0
  199. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20221222_01_fsB6f-add-account.rollback.sql +0 -0
  200. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20221222_01_fsB6f-add-account.sql +0 -0
  201. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20230113_01_0co97-rm-metadata-duplicates.rollback.sql +0 -0
  202. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20230113_01_0co97-rm-metadata-duplicates.sql +0 -0
  203. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20230116_01_9PkjZ-add-oauth-provider.rollback.sql +0 -0
  204. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20230116_01_9PkjZ-add-oauth-provider.sql +0 -0
  205. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20230117_01_K71Pd-pictures-ts-index.rollback.sql +0 -0
  206. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20230117_01_K71Pd-pictures-ts-index.sql +0 -0
  207. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20230130_01_VRIv2-sequences-account.rollback.sql +0 -0
  208. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20230130_01_VRIv2-sequences-account.sql +0 -0
  209. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20230324_01_ba9WA-status.rollback.sql +0 -0
  210. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20230324_01_ba9WA-status.sql +0 -0
  211. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20230324_02_efgI6-picture-process.rollback.sql +0 -0
  212. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20230324_02_efgI6-picture-process.sql +0 -0
  213. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20230407_01_wofh1-computed-headings.rollback.sql +0 -0
  214. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20230407_01_wofh1-computed-headings.sql +0 -0
  215. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20230417_01_ZgLMY-add-exif-metadata-column-for-pictures.rollback.sql +0 -0
  216. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20230417_01_ZgLMY-add-exif-metadata-column-for-pictures.sql +0 -0
  217. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20230420_01_elaN3-remove-picture-and-sequence-file-paths.rollback.sql +0 -0
  218. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20230420_01_elaN3-remove-picture-and-sequence-file-paths.sql +0 -0
  219. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20230425_01_gYP77-pictures-edits-triggers.rollback.sql +0 -0
  220. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20230425_01_gYP77-pictures-edits-triggers.sql +0 -0
  221. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20230427_01_k5e5w-timestamps.rollback.sql +0 -0
  222. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20230427_01_k5e5w-timestamps.sql +0 -0
  223. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20230511_01_TdpKo-tokens.rollback.sql +0 -0
  224. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20230511_01_TdpKo-tokens.sql +0 -0
  225. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20230615_01_u7aRf-pic-delete-cascade.rollback.sql +0 -0
  226. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20230615_01_u7aRf-pic-delete-cascade.sql +0 -0
  227. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20230623_01_y1SiQ-pic-deletion-task.rollback.sql +0 -0
  228. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20230623_01_y1SiQ-pic-deletion-task.sql +0 -0
  229. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20230629_01_ZdB3i-compute-heading-0.sql +0 -0
  230. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20230711_01_JGSPB-inserted-at-index.rollback.sql +0 -0
  231. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20230711_01_JGSPB-inserted-at-index.sql +0 -0
  232. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20230720_01_EyQ0e-sequences-summary.rollback.sql +0 -0
  233. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20230720_01_EyQ0e-sequences-summary.sql +0 -0
  234. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20230803_01_aXusm-fix-sequence-computed.rollback.sql +0 -0
  235. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20230803_01_aXusm-fix-sequence-computed.sql +0 -0
  236. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20231018_01_4G3YE-pictures-exiv2.rollback.sql +0 -0
  237. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20231018_01_4G3YE-pictures-exiv2.sql +0 -0
  238. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20231103_01_ZVKEm-update-seq-on-pic-change.rollback.sql +0 -0
  239. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20231103_01_ZVKEm-update-seq-on-pic-change.sql +0 -0
  240. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20231110_01_3p070-jobs-error.rollback.sql +0 -0
  241. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20231110_01_3p070-jobs-error.sql +0 -0
  242. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20231121_01_v6oBF-more-specific-triggers.rollback.sql +0 -0
  243. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20231121_01_v6oBF-more-specific-triggers.sql +0 -0
  244. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20231121_02_1uZXT-deleted-tag.rollback.sql +0 -0
  245. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20231121_02_1uZXT-deleted-tag.sql +0 -0
  246. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240115_01_FatLR-token-delete-cascade.rollback.sql +0 -0
  247. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240115_01_FatLR-token-delete-cascade.sql +0 -0
  248. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240220_01_9wZs0-sequence-current-sort.rollback.sql +0 -0
  249. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240220_01_9wZs0-sequence-current-sort.sql +0 -0
  250. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240223_01_LsMHB-remove-binary-fields.sql +0 -0
  251. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240226_01_8iXl1-track-changes.rollback.sql +0 -0
  252. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240226_01_8iXl1-track-changes.sql +0 -0
  253. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240229_01_SgfQY-sequence-geom-multi-linestring.rollback.sql +0 -0
  254. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240229_01_SgfQY-sequence-geom-multi-linestring.sql +0 -0
  255. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240308_01_aF0Jb-migrate-sequence-geom-multi-linestring.sql +0 -0
  256. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240409_01_jnhra-pictures-grid.rollback.sql +0 -0
  257. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240409_01_jnhra-pictures-grid.sql +0 -0
  258. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240416_01_FpyGs-pictures-stats-on-sequences.rollback.sql +0 -0
  259. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240416_01_FpyGs-pictures-stats-on-sequences.sql +0 -0
  260. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240416_02_A5KzC-fill-pictures-stats-on-sequences.rollback.sql +0 -0
  261. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240416_02_A5KzC-fill-pictures-stats-on-sequences.sql +0 -0
  262. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240507_01_eBfqZ-refresh-table.rollback.sql +0 -0
  263. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240507_01_eBfqZ-refresh-table.sql +0 -0
  264. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240507_02_dzVET-picture-grid-public.rollback.sql +0 -0
  265. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240507_02_dzVET-picture-grid-public.sql +0 -0
  266. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240514_01_IT7DD-picture-delete-cascade.rollback.sql +0 -0
  267. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240514_01_IT7DD-picture-delete-cascade.sql +0 -0
  268. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240611_01_jftHn-content-md5.rollback.sql +0 -0
  269. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240611_01_jftHn-content-md5.sql +0 -0
  270. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240612_01_yNcuE-upload-set.rollback.sql +0 -0
  271. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240612_01_yNcuE-upload-set.sql +0 -0
  272. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240617_01_tKtlx-md5-concurrent-index.rollback.sql +0 -0
  273. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240617_01_tKtlx-md5-concurrent-index.sql +0 -0
  274. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240625_01_XMZ24-fix-sequence-stat-on-pic-insertion.rollback.sql +0 -0
  275. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240625_01_XMZ24-fix-sequence-stat-on-pic-insertion.sql +0 -0
  276. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240708_01_Xn7IH-job-queue.rollback.sql +0 -0
  277. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240708_01_Xn7IH-job-queue.sql +0 -0
  278. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240715_01_Hca9V-upload-set-metadata.rollback.sql +0 -0
  279. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240715_01_Hca9V-upload-set-metadata.sql +0 -0
  280. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240723_01_ePGFe-upload-set-files.rollback.sql +0 -0
  281. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240723_01_ePGFe-upload-set-files.sql +0 -0
  282. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240729_01_HALjj-upload-set-sort.rollback.sql +0 -0
  283. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240729_01_HALjj-upload-set-sort.sql +0 -0
  284. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240730_01_2BaCy-improve-deletion-triggers.rollback.sql +0 -0
  285. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240730_01_2BaCy-improve-deletion-triggers.sql +0 -0
  286. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240730_02_aRymN-rejection-status.rollback.sql +0 -0
  287. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240730_02_aRymN-rejection-status.sql +0 -0
  288. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240801_01_DOqmf-reports.rollback.sql +0 -0
  289. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240801_01_DOqmf-reports.sql +0 -0
  290. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240801_01_uKqPo-remove-files-delete-cascade.rollback.sql +0 -0
  291. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240801_01_uKqPo-remove-files-delete-cascade.sql +0 -0
  292. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240813_01_T1XkO-sequences-geom-splits.rollback.sql +0 -0
  293. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240813_01_T1XkO-sequences-geom-splits.sql +0 -0
  294. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240820_01_aB2ZK-exclusion-zones.rollback.sql +0 -0
  295. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240820_01_aB2ZK-exclusion-zones.sql +0 -0
  296. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240902_01_MDqSj-user-agent.rollback.sql +0 -0
  297. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240902_01_MDqSj-user-agent.sql +0 -0
  298. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240904_01_gFjlV-files-rejection-msg.rollback.sql +0 -0
  299. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240904_01_gFjlV-files-rejection-msg.sql +0 -0
  300. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240905_01_C8F6U-conflicts.rollback.sql +0 -0
  301. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240905_01_C8F6U-conflicts.sql +0 -0
  302. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240905_01_E5Ki0-upload-set-delete.rollback.sql +0 -0
  303. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240905_01_E5Ki0-upload-set-delete.sql +0 -0
  304. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240909_01_Muc22-unique-grid-index.rollback.sql +0 -0
  305. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240909_01_Muc22-unique-grid-index.sql +0 -0
  306. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240912_01_dAALm-account-index.rollback.sql +0 -0
  307. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20240912_01_dAALm-account-index.sql +0 -0
  308. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20241004_01_d1zfe-pictures-grid-360.rollback.sql +0 -0
  309. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20241004_01_d1zfe-pictures-grid-360.sql +0 -0
  310. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20241011_01_e1j5C-pic-quality.rollback.sql +0 -0
  311. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20241011_01_e1j5C-pic-quality.sql +0 -0
  312. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20241017_01_GuOjF-pic-quality-update.rollback.sql +0 -0
  313. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20241017_01_GuOjF-pic-quality-update.sql +0 -0
  314. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20241017_01_RiFlm-pictures-to-delete.rollback.sql +0 -0
  315. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20241017_01_RiFlm-pictures-to-delete.sql +0 -0
  316. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20241104_01_yhRVu-rejection-details.rollback.sql +0 -0
  317. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20241104_01_yhRVu-rejection-details.sql +0 -0
  318. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20241128_01_ugthx-job-queue-args.rollback.sql +0 -0
  319. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20241128_01_ugthx-job-queue-args.sql +0 -0
  320. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20241224_01_xuN6n-delete-upload-set-on-last-picture-trg-statement.rollback.sql +0 -0
  321. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20241224_01_xuN6n-delete-upload-set-on-last-picture-trg-statement.sql +0 -0
  322. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250102_01_EElhA-rm-cameras.rollback.sql +0 -0
  323. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250102_01_EElhA-rm-cameras.sql +0 -0
  324. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250107_01_EQN9v-tags-tables.rollback.sql +0 -0
  325. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250107_01_EQN9v-tags-tables.sql +0 -0
  326. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250109_01_4OOP4-pages.rollback.sql +0 -0
  327. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250109_01_4OOP4-pages.sql +0 -0
  328. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250114_01_ABaaL-collaborative-metadata-editing.rollback.sql +0 -0
  329. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250114_01_ABaaL-collaborative-metadata-editing.sql +0 -0
  330. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250123_01_Ececu-tos-acceptance.rollback.sql +0 -0
  331. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250123_01_Ececu-tos-acceptance.sql +0 -0
  332. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250206_01_PjrEL-annotation-semantics.rollback.sql +0 -0
  333. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250206_01_PjrEL-annotation-semantics.sql +0 -0
  334. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250306_01_58oju-semantics-views.rollback.sql +0 -0
  335. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250306_01_58oju-semantics-views.sql +0 -0
  336. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250318_01_pANl1-semantics-functions.rollback.sql +0 -0
  337. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250318_01_pANl1-semantics-functions.sql +0 -0
  338. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250331_01_kRKjo-store-detections-id.rollback.sql +0 -0
  339. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250331_01_kRKjo-store-detections-id.sql +0 -0
  340. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250424_01_RBGXC-semantics-indexes.rollback.sql +0 -0
  341. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250424_01_RBGXC-semantics-indexes.sql +0 -0
  342. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250502_01_ZNmkU-job-task-read-metadata.rollback.sql +0 -0
  343. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250502_01_ZNmkU-job-task-read-metadata.sql +0 -0
  344. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250509_01_kMatW-deactivate-upload-set-split-dedup.rollback.sql +0 -0
  345. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250509_01_kMatW-deactivate-upload-set-split-dedup.sql +0 -0
  346. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250509_01_s3hYk-semantic-delete-cascade.rollback.sql +0 -0
  347. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250509_01_s3hYk-semantic-delete-cascade.sql +0 -0
  348. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250513_01_8WkZC-upload-sets-default-config.rollback.sql +0 -0
  349. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250513_01_8WkZC-upload-sets-default-config.sql +0 -0
  350. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250523_01_b11eW-picture-update-index.rollback.sql +0 -0
  351. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250523_01_b11eW-picture-update-index.sql +0 -0
  352. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250523_02_5ZXXh-update-picture-updated-at.rollback.sql +0 -0
  353. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250523_02_5ZXXh-update-picture-updated-at.sql +0 -0
  354. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250624_01_SETp6-job-warnings.rollback.sql +0 -0
  355. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250624_01_SETp6-job-warnings.sql +0 -0
  356. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250701_01_kr371-upload-set-semantics.rollback.sql +0 -0
  357. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250701_01_kr371-upload-set-semantics.sql +0 -0
  358. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250703_01_p2WVV-sequence-upload-set-link.rollback.sql +0 -0
  359. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250703_01_p2WVV-sequence-upload-set-link.sql +0 -0
  360. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250703_02_q0s3D-sequence-upload-set-fill.rollback.sql +0 -0
  361. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250703_02_q0s3D-sequence-upload-set-fill.sql +0 -0
  362. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250716_01_f8tcJ-check-empty-annotation-late.rollback.sql +0 -0
  363. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250716_01_f8tcJ-check-empty-annotation-late.sql +0 -0
  364. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250728_01_2zgur-upload-set-relative-heading.rollback.sql +0 -0
  365. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250728_01_2zgur-upload-set-relative-heading.sql +0 -0
  366. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250825_01_nCgkN-file-deletion-after-delete-no-dup.rollback.sql +0 -0
  367. {geovisio-2.10.0 → geovisio-2.12.0/geovisio}/migrations/20250825_01_nCgkN-file-deletion-after-delete-no-dup.sql +0 -0
  368. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/translations/ar/LC_MESSAGES/messages.mo +0 -0
  369. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/translations/ar/LC_MESSAGES/messages.po +0 -0
  370. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/translations/br/LC_MESSAGES/messages.mo +0 -0
  371. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/translations/br/LC_MESSAGES/messages.po +0 -0
  372. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/translations/el/LC_MESSAGES/messages.mo +0 -0
  373. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/translations/el/LC_MESSAGES/messages.po +0 -0
  374. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/translations/es/LC_MESSAGES/messages.mo +0 -0
  375. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/translations/es/LC_MESSAGES/messages.po +0 -0
  376. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/translations/fi/LC_MESSAGES/messages.mo +0 -0
  377. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/translations/fi/LC_MESSAGES/messages.po +0 -0
  378. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/translations/hu/LC_MESSAGES/messages.mo +0 -0
  379. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/translations/hu/LC_MESSAGES/messages.po +0 -0
  380. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/translations/ja/LC_MESSAGES/messages.mo +0 -0
  381. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/translations/ja/LC_MESSAGES/messages.po +0 -0
  382. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/translations/ko/LC_MESSAGES/messages.mo +0 -0
  383. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/translations/ko/LC_MESSAGES/messages.po +0 -0
  384. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/translations/pl/LC_MESSAGES/messages.mo +0 -0
  385. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/translations/pl/LC_MESSAGES/messages.po +0 -0
  386. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/translations/ti/LC_MESSAGES/messages.mo +0 -0
  387. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/translations/ti/LC_MESSAGES/messages.po +0 -0
  388. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/translations/zh_Hant/LC_MESSAGES/messages.mo +0 -0
  389. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/translations/zh_Hant/LC_MESSAGES/messages.po +0 -0
  390. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/utils/__init__.py +0 -0
  391. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/utils/db.py +0 -0
  392. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/utils/excluded_areas.py +0 -0
  393. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/utils/extent.py +0 -0
  394. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/utils/fields.py +0 -0
  395. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/utils/filesystems.py +0 -0
  396. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/utils/items.py +0 -0
  397. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/utils/loggers.py +0 -0
  398. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/utils/model_query.py +0 -0
  399. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/utils/params.py +0 -0
  400. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/utils/pic_shape.py +0 -0
  401. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/utils/reports.py +0 -0
  402. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/utils/semantics.py +0 -0
  403. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/utils/sentry.py +0 -0
  404. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/utils/tags.py +0 -0
  405. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/utils/time.py +0 -0
  406. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/utils/tokens.py +0 -0
  407. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/utils/website.py +0 -0
  408. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/web/__init__.py +0 -0
  409. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/web/auth.py +0 -0
  410. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/web/excluded_areas.py +0 -0
  411. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/web/reports.py +0 -0
  412. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/web/rss.py +0 -0
  413. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/web/tokens.py +0 -0
  414. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/workers/__init__.py +0 -0
  415. {geovisio-2.10.0 → geovisio-2.12.0}/geovisio/workers/runner_pictures.py +0 -0
  416. {geovisio-2.10.0 → geovisio-2.12.0}/images/sponsors.png +0 -0
  417. {geovisio-2.10.0 → geovisio-2.12.0}/tests/__init__.py +0 -0
  418. {geovisio-2.10.0 → geovisio-2.12.0}/tests/data/1.jpg +0 -0
  419. {geovisio-2.10.0 → geovisio-2.12.0}/tests/data/1_blurred.jpg +0 -0
  420. {geovisio-2.10.0 → geovisio-2.12.0}/tests/data/2.jpg +0 -0
  421. {geovisio-2.10.0 → geovisio-2.12.0}/tests/data/3.jpg +0 -0
  422. {geovisio-2.10.0 → geovisio-2.12.0}/tests/data/4.jpg +0 -0
  423. {geovisio-2.10.0 → geovisio-2.12.0}/tests/data/5.jpg +0 -0
  424. {geovisio-2.10.0 → geovisio-2.12.0}/tests/data/b1.jpg +0 -0
  425. {geovisio-2.10.0 → geovisio-2.12.0}/tests/data/b2.jpg +0 -0
  426. {geovisio-2.10.0 → geovisio-2.12.0}/tests/data/c1.jpg +0 -0
  427. {geovisio-2.10.0 → geovisio-2.12.0}/tests/data/crop.jpg +0 -0
  428. {geovisio-2.10.0 → geovisio-2.12.0}/tests/data/d1.jpg +0 -0
  429. {geovisio-2.10.0 → geovisio-2.12.0}/tests/data/e1.jpg +0 -0
  430. {geovisio-2.10.0 → geovisio-2.12.0}/tests/data/e1_artist.jpg +0 -0
  431. {geovisio-2.10.0 → geovisio-2.12.0}/tests/data/e1_without_exif.jpg +0 -0
  432. {geovisio-2.10.0 → geovisio-2.12.0}/tests/data/e2.jpg +0 -0
  433. {geovisio-2.10.0 → geovisio-2.12.0}/tests/data/e3.jpg +0 -0
  434. {geovisio-2.10.0 → geovisio-2.12.0}/tests/data/e4.jpg +0 -0
  435. {geovisio-2.10.0 → geovisio-2.12.0}/tests/data/e5.jpg +0 -0
  436. {geovisio-2.10.0 → geovisio-2.12.0}/tests/data/focal_zero.jpg +0 -0
  437. {geovisio-2.10.0 → geovisio-2.12.0}/tests/data/invalid_exif.jpg +0 -0
  438. {geovisio-2.10.0 → geovisio-2.12.0}/tests/data/xpcomment.jpg +0 -0
  439. {geovisio-2.10.0 → geovisio-2.12.0}/tests/fixed_data/__init__.py +0 -0
  440. {geovisio-2.10.0 → geovisio-2.12.0}/tests/fixed_data/conftest.py +0 -0
  441. {geovisio-2.10.0 → geovisio-2.12.0}/tests/fixed_data/test_api_conformance.py +0 -0
  442. {geovisio-2.10.0 → geovisio-2.12.0}/tests/fixed_data/test_many_sequences_different_insertion_date.py +0 -0
  443. {geovisio-2.10.0 → geovisio-2.12.0}/tests/integration/__init__.py +0 -0
  444. {geovisio-2.10.0 → geovisio-2.12.0}/tests/integration/conftest.py +0 -0
  445. {geovisio-2.10.0 → geovisio-2.12.0}/tests/integration/docker-compose-auth-test.yml +0 -0
  446. {geovisio-2.10.0 → geovisio-2.12.0}/tests/integration/test_s3.py +0 -0
  447. {geovisio-2.10.0 → geovisio-2.12.0}/tests/integration/test_tokens.py +0 -0
  448. {geovisio-2.10.0 → geovisio-2.12.0}/tests/test_admin_cli_cleanup.py +0 -0
  449. {geovisio-2.10.0 → geovisio-2.12.0}/tests/test_db_migrations.py +0 -0
  450. {geovisio-2.10.0 → geovisio-2.12.0}/tests/test_factory.py +0 -0
  451. {geovisio-2.10.0 → geovisio-2.12.0}/tests/test_model_query.py +0 -0
  452. {geovisio-2.10.0 → geovisio-2.12.0}/tests/test_utils_auth.py +0 -0
  453. {geovisio-2.10.0 → geovisio-2.12.0}/tests/test_utils_cql2.py +0 -0
  454. {geovisio-2.10.0 → geovisio-2.12.0}/tests/test_utils_filesystems.py +0 -0
  455. {geovisio-2.10.0 → geovisio-2.12.0}/tests/test_utils_items.py +0 -0
  456. {geovisio-2.10.0 → geovisio-2.12.0}/tests/test_utils_pictures.py +0 -0
  457. {geovisio-2.10.0 → geovisio-2.12.0}/tests/test_utils_reports.py +0 -0
  458. {geovisio-2.10.0 → geovisio-2.12.0}/tests/test_utils_semantics.py +0 -0
  459. {geovisio-2.10.0 → geovisio-2.12.0}/tests/test_utils_sequences.py +0 -0
  460. {geovisio-2.10.0 → geovisio-2.12.0}/tests/test_utils_tags.py +0 -0
  461. {geovisio-2.10.0 → geovisio-2.12.0}/tests/test_utils_upload_set.py +0 -0
  462. {geovisio-2.10.0 → geovisio-2.12.0}/tests/test_web_excluded_areas.py +0 -0
  463. {geovisio-2.10.0 → geovisio-2.12.0}/tests/test_web_params.py +0 -0
  464. {geovisio-2.10.0 → geovisio-2.12.0}/tests/test_web_pictures.py +0 -0
  465. {geovisio-2.10.0 → geovisio-2.12.0}/tests/test_web_stac.py +0 -0
  466. {geovisio-2.10.0 → geovisio-2.12.0}/tests/test_workers_runner_pictures.py +0 -0
@@ -11,8 +11,8 @@
11
11
  !/geovisio/**/*.pot
12
12
  !/docker/docker-entrypoint.sh
13
13
  !/images/*
14
- !/migrations/*.sql
15
- !/migrations/*.py
16
- !/migrations/data/*.json
14
+ !/geovisio/migrations/*.sql
15
+ !/geovisio/migrations/*.py
16
+ !/geovisio/migrations/data/*.json
17
17
 
18
18
  /**/__pycache__
@@ -1,5 +1,6 @@
1
1
  pictures
2
2
  *.env
3
+ !example.env
3
4
  *.log
4
5
  picfs
5
6
  env
@@ -7,7 +8,6 @@ env
7
8
  instance
8
9
  __pycache__
9
10
  config.py
10
- docker/models/
11
11
  .vscode/
12
12
  site/
13
13
  *.mo
@@ -19,9 +19,9 @@ code-fmt:
19
19
  stage: test
20
20
  only:
21
21
  - merge_requests
22
- image: python:3.10-alpine
22
+ image: python:3.13-alpine
23
23
  script:
24
- - pip install black
24
+ - pip install --group format
25
25
  - black --fast --check .
26
26
 
27
27
  test-in-docker:
@@ -67,7 +67,7 @@ test-in-docker:
67
67
  --network=host
68
68
  --volume ./tests:/opt/geovisio/tests
69
69
  $TMP_CI_IMAGE
70
- -c 'pip install -e .[dev] && /home/geovisio/.local/bin/pytest -m "not skipci"'
70
+ -c 'pip install --upgrade pip && pip install -e . --group dev && /home/geovisio/.local/bin/pytest -m "not skipci"'
71
71
  after_script:
72
72
  - docker rmi $TMP_CI_IMAGE || true # accept failure, as image creation can fail
73
73
 
@@ -79,7 +79,7 @@ test:
79
79
  - when: on_success
80
80
 
81
81
  stage: test
82
- image: python:3.10
82
+ image: python:3.13
83
83
  services:
84
84
  - postgis/postgis:15-3.4
85
85
  variables:
@@ -95,10 +95,17 @@ test:
95
95
  script:
96
96
  - apt update && apt install -y gettext
97
97
  - mkdir -p /tmp/geovisio_test/tmp /tmp/geovisio_test/derivates /tmp/geovisio_test/permanent
98
- - pip install -e .[dev]
98
+ - pip install -e . --group dev
99
99
  - make i18n-po2code
100
100
  - pytest -vv -m "not skipci"
101
101
 
102
+ dependencies-lock:
103
+ stage: test
104
+ image: ghcr.io/astral-sh/uv:0.9.2-python3.11-bookworm-slim
105
+ script:
106
+ # enforce that the lock file is up to date.
107
+ # Updating this lock file is important to ensure the production servers will use the right versions
108
+ - uv lock --check
102
109
 
103
110
  publish-develop:
104
111
  rules:
@@ -142,7 +149,7 @@ publish-develop:
142
149
  --network=host
143
150
  --volume ./tests:/opt/geovisio/tests
144
151
  "$DOCKER_IMAGE_NAME:develop"
145
- -c 'pip install -e .[dev] && /home/geovisio/.local/bin/pytest -vv -m "not skipci"'
152
+ -c 'pip install --upgrade pip && pip install -e . --group dev && /home/geovisio/.local/bin/pytest -vv -m "not skipci"'
146
153
 
147
154
  # publish image to dockerhub with the develop tag
148
155
  - docker push "$DOCKER_IMAGE_NAME:develop"
@@ -188,7 +195,7 @@ publish-tag-and-latest:
188
195
  --network=host
189
196
  --volume ./tests:/opt/geovisio/tests
190
197
  "$DOCKER_IMAGE_NAME:latest"
191
- -c 'pip install -e .[dev] && ~/.local/bin/pytest -vv -m "not skipci"'
198
+ -c 'pip install --upgrade pip && pip install -e . --group dev && ~/.local/bin/pytest -vv -m "not skipci"'
192
199
 
193
200
  # publish image to dockerhub
194
201
  - docker push $DOCKER_IMAGE_NAME:$CI_COMMIT_REF_NAME
@@ -198,9 +205,9 @@ publish-on-pypi:
198
205
  only:
199
206
  - tags
200
207
  stage: deploy
201
- image: python:3.10
208
+ image: python:3.13
202
209
  script:
203
210
  - apt update && apt install -y gettext
204
- - pip install .[build]
211
+ - pip install --group build
205
212
  - make i18n-po2code
206
213
  - flit publish # use [flit](https://flit.pypa.io/) and FLIT_USERNAME/FLIT_PASSWORD env var
@@ -0,0 +1,12 @@
1
+ repos:
2
+ - repo: https://github.com/psf/black
3
+ rev: 25.1.0
4
+ hooks:
5
+ - id: black
6
+
7
+ - repo: https://github.com/astral-sh/uv-pre-commit
8
+ # ensure the uv.lock file is up to date, it's important to update it when a dependency is updated
9
+ # by running `uv lock`
10
+ rev: 0.9.2
11
+ hooks:
12
+ - id: uv-lock
@@ -0,0 +1 @@
1
+ 3.13
@@ -9,6 +9,53 @@ Before _1.6.0_, [Viewer](https://gitlab.com/panoramax/clients/web-viewer) was em
9
9
 
10
10
  ## [Unreleased]
11
11
 
12
+ ## [2.12.0] - 2025-02-04
13
+
14
+ ⚠️ Breaking change to install development dependencies ⚠️
15
+
16
+ To install development dependencies, you need to run `pip install -e . --group dev` instead of `pip install -e .[dev]`.
17
+
18
+ ### Added
19
+
20
+ - Add HATEOAS links to show permissions on collections/items/upload_sets. See https://docs.panoramax.fr/backend/api/api/#permissions for more details.
21
+ - Add a `panoramax_backend` command to the Python package, as an alias to the `flask --app geovisio` command.
22
+
23
+ ### Fixed
24
+
25
+ - Fix bug on python3.13 where running a command could hang with logs like "couldn't stop thread 'pool-1-worker-0' within 5.0 seconds"
26
+ - Nearby picture (`related` link type) was not returned if picture heading was greater than current picture one.
27
+
28
+ ### Changed
29
+
30
+ - The `migrations` folder has now been moved to the root of the package, so it is available when installing the package using pypi.
31
+ - The default web pages are more up-to-date (viewer v4, Panoramax logos, links to docs.panoramax.fr)
32
+ - The python dependencies are now managed using [dependency groups](https://flit.pypa.io/en/latest/pyproject_toml.html#dependency-groups) instead of the `[project.optional-dependencies]` section. So you need to install the dependencies using `pip install -e . --group dev` instead of `pip install -e .[dev]`, and the `dev`/`format`/`docs`/`build` groups are available, but not part of the released package. This also means that `pip` minimal version is now `25.1` (only for development). Run `pip install --upgrade pip` to upgrade your pip version.
33
+ - Update dependencies to support Python 3.14 🥧
34
+
35
+ ## [2.11.0] - 2025-12-12
36
+
37
+ ### Added
38
+
39
+ - A way to delete an annotation (via `DELETE /api/annotations/<uuid:annotationId>` or `DELETE /api/collections/<uuid:collectionId>/items/<uuid:itemId>/annotations/<uuid:annotationId>`). Anyone authenticated can delete an annotation (and the changes are tracked in the history).
40
+ - Added a new way to restrict who can view a sequence/picture, instead of the old `hidden` mechanism, we can now set a `visibility` field at the sequence/picture/upload_set level. This parameter can have (for the moment) the values:
41
+ - `anyone`: the sequence is visible to anyone
42
+ - `owner-only`: the sequence is visible to the owner and administrator only
43
+ - `logged-only`: the sequence is visible to logged users only
44
+ A default `visibility` can also be set at the `account` or instance level.
45
+ - Change the permissions, now an instance administrator (and account that has the `admin` role), can see, edit and delete all sequences and pictures.
46
+ - Display the collection semantics in the `/api/collections/<uuid:collectionId>/items` endpoint, to make it easier to be crawled by the metacatalog.
47
+ - Add a new search capability with the query `/api/search?filter=semantics IS NOT NULL` to search for all items with some semantics (be it linked to the picture, its sequence or an annotation in the picture).
48
+ - Add a way to know that the terms of service have been updated, and the users have read the latest changes.
49
+ - Add an admin cli command to delete all the pictures of a user (`user <ACCOUNT_ID_OR_NAME> --delete-data`).
50
+
51
+ ### Changed
52
+
53
+ - ⚠️ API breaking change ⚠️: we do not support anymore the `status` filter (and especially the `status='deleted'` filter) when querying the sequences, since it could leak information about some sequences with restricted visibility (since we treated those sequences as `deleted` to tell potential crawlers not to consider them anymore). This parameter is now replaced by a new `show_deleted` boolean parameter that makes the API return collections with only an `id` and a `deleted` status, without additional fields. Note that thus, when using this parameter, the response does no longer follow the STAC format for deleted collections.
54
+
55
+ ### Fixed
56
+
57
+ - Use fully qualified path for the pictures_grid materialized view to avoid the `relation "pictures" does not exist` issue on some server.
58
+
12
59
  ## [2.10.0] - 2025-08-27
13
60
 
14
61
  ### Added
@@ -17,12 +64,13 @@ Before _1.6.0_, [Viewer](https://gitlab.com/panoramax/clients/web-viewer) was em
17
64
  - Add an `updated` field in all the items's responses.
18
65
  - Add an `sortby` parameter in search to sort the results (and it can use the new `updated` field).
19
66
  - Add a way to generate a new token for the current user (via `POST /api/users/me/tokens`).
20
- - Added route aliases to get annotations.
21
- * The route `/api/annotations/<uuid:annotationId>` is now an alias of `/api/collections/<uuid:collectionId>/items/<uuid:itemId>/annotations/<uuid:annotationId>`
22
- * The route `/api/picture/<uuid:pictureId>` is now an alias of `/api/collections/<uuid:collectionId>/items/<uuid:itemId>`
23
- * The route to create an annotation `/api/picture/<uuid:pictureId>/annotations` is now an alias of `/api/collections/<uuid:collectionId>/items/<uuid:itemId>/annotations`
67
+ - Added route aliases to get annotations.
68
+ - The route `/api/annotations/<uuid:annotationId>` is now an alias of `/api/collections/<uuid:collectionId>/items/<uuid:itemId>/annotations/<uuid:annotationId>`
69
+ - The route `/api/picture/<uuid:pictureId>` is now an alias of `/api/collections/<uuid:collectionId>/items/<uuid:itemId>`
70
+ - The route to create an annotation `/api/picture/<uuid:pictureId>/annotations` is now an alias of `/api/collections/<uuid:collectionId>/items/<uuid:itemId>/annotations`
24
71
  - Add a way to attach semantic tags to upload sets. Those tags will be transferred to all the collections associated to the upload set. This makes it possible to add semantic tags directly at the upload, without waiting for all the associated collections to be created.
25
72
  - Add a `relative_heading` parameter to the `/api/upload_sets/:id` route (for `POST` and `PATCH`), to update the relative heading of the upload set. If a `relative_heading` is set on the upload set, it will be applied when computeing the heading of all the associated collections.
73
+ - Add a `/api/queryables` route to list the queryables for search and `/api/collections/queryables` to list the queryables for collection search.
26
74
 
27
75
  ### Changed
28
76
 
@@ -678,7 +726,9 @@ FLASK_APP="src" flask process-sequences
678
726
  - Viewer based on Photo Sphere Viewer automatically calling API to search and retrieve pictures
679
727
  - Dockerfile for easy server setup
680
728
 
681
- [Unreleased]: https://gitlab.com/panoramax/server/api/-/compare/2.10.0...develop
729
+ [Unreleased]: https://gitlab.com/panoramax/server/api/-/compare/2.12.0...develop
730
+ [2.12.0]: https://gitlab.com/panoramax/server/api/-/compare/2.11.0...2.12.0
731
+ [2.11.0]: https://gitlab.com/panoramax/server/api/-/compare/2.10.0...2.11.0
682
732
  [2.10.0]: https://gitlab.com/panoramax/server/api/-/compare/2.9.0...2.10.0
683
733
  [2.9.0]: https://gitlab.com/panoramax/server/api/-/compare/2.8.1...2.9.0
684
734
  [2.8.1]: https://gitlab.com/panoramax/server/api/-/compare/2.8.0...2.8.1
@@ -5,7 +5,7 @@ LABEL org.opencontainers.image.title="GeoVisio API"
5
5
  LABEL org.opencontainers.image.description="Panoramax is a digital resource for sharing and using field photos. GeoVisio API is the backend part of the ecosystem."
6
6
  LABEL org.opencontainers.image.authors="Adrien PAVIE <panieravide@riseup.net>"
7
7
  LABEL org.opencontainers.image.source="https://gitlab.com/panoramax/server/api.git"
8
- LABEL org.opencontainers.image.documentation="https://docs.panoramax.fr/api/"
8
+ LABEL org.opencontainers.image.documentation="https://docs.panoramax.fr/backend/"
9
9
  LABEL org.opencontainers.image.vendor="Panoramax"
10
10
  LABEL org.opencontainers.image.licenses="MIT"
11
11
  LABEL org.opencontainers.image.url="https://panoramax.fr/"
@@ -14,7 +14,7 @@ LABEL org.opencontainers.image.url="https://panoramax.fr/"
14
14
  # and create a `geovisio` user, to run the app as non root user
15
15
  RUN apt update \
16
16
  && apt install -y git gettext make \
17
- && pip install waitress gunicorn Babel \
17
+ && pip install waitress Babel \
18
18
  && rm -rf /var/lib/apt/lists/* \
19
19
  && mkdir -p /opt/geovisio /data/geovisio \
20
20
  && groupadd --gid 1000 geovisio \
@@ -33,7 +33,6 @@ RUN pip install -e . --user
33
33
  COPY ./images ./images/
34
34
  COPY ./docker/docker-entrypoint.sh ./
35
35
  COPY ./geovisio ./geovisio
36
- COPY ./migrations ./migrations
37
36
  COPY ./Makefile ./
38
37
 
39
38
  # Generate i18n compiled files
@@ -46,6 +45,7 @@ ARG GIT_DESCRIBE
46
45
  LABEL org.opencontainers.image.revision=$GIT_DESCRIBE
47
46
 
48
47
  # Environment variables
48
+ ENV PATH="~/.local/bin/:$PATH"
49
49
  ENV FLASK_APP=geovisio
50
50
  ENV FS_URL="/data/geovisio"
51
51
  ENV API_GIT_VERSION=$GIT_DESCRIBE
@@ -1,14 +1,14 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: geovisio
3
- Version: 2.10.0
3
+ Version: 2.12.0
4
4
  Summary: GeoVisio API - Main
5
5
  Author-email: Adrien PAVIE <panieravide@riseup.net>, Antoine Desbordes <antoine.desbordes@gmail.com>
6
6
  Requires-Python: >=3.10
7
7
  Description-Content-Type: text/markdown
8
8
  Classifier: License :: OSI Approved :: MIT License
9
9
  License-File: LICENSE
10
- Requires-Dist: Flask ~= 3.1
11
- Requires-Dist: psycopg[pool] ~= 3.2
10
+ Requires-Dist: Flask ~= 3.1.2
11
+ Requires-Dist: psycopg[pool] ~= 3.3
12
12
  Requires-Dist: flasgger ~= 0.9.7
13
13
  Requires-Dist: Pillow ~= 11.1
14
14
  Requires-Dist: Flask-Cors ~= 6.0
@@ -17,45 +17,26 @@ Requires-Dist: fs-s3fs-forked ~= 1.1.4
17
17
  Requires-Dist: flask-compress ~= 1.14
18
18
  Requires-Dist: requests ~= 2.31
19
19
  Requires-Dist: yoyo-migrations ~= 9.0
20
- Requires-Dist: psycopg-binary ~= 3.2
21
- Requires-Dist: python-dotenv ~= 1.1
20
+ Requires-Dist: psycopg-binary ~= 3.3
21
+ Requires-Dist: python-dotenv ~= 1.2
22
22
  Requires-Dist: authlib ~= 1.6
23
23
  Requires-Dist: Flask-Executor ~= 1.0
24
- Requires-Dist: geopic-tag-reader[write-exif] ~= 1.8.0
24
+ Requires-Dist: geopic-tag-reader[write-exif] ~= 1.8.2
25
25
  Requires-Dist: rfeed ~= 1.1.1
26
26
  Requires-Dist: sentry-sdk[flask] ~= 2.24
27
27
  Requires-Dist: pygeofilter[backend-native] ~= 0.3.1
28
28
  Requires-Dist: python-dateutil ~= 2.9.0
29
29
  Requires-Dist: tzdata ~= 2025.2
30
30
  Requires-Dist: croniter ~= 6.0.0
31
- Requires-Dist: pydantic ~= 2.11
31
+ Requires-Dist: pydantic ~= 2.12
32
32
  Requires-Dist: pydantic-extra-types ~= 2.7
33
33
  Requires-Dist: flask-babel ~= 4.0.0
34
34
  Requires-Dist: geojson-pydantic ~= 2.0.0
35
35
  Requires-Dist: email-validator ~= 2.2.0
36
36
  Requires-Dist: multipart>=1.2.1
37
- Requires-Dist: flit ~= 3.9.0 ; extra == "build"
38
- Requires-Dist: coverage ~= 7.9 ; extra == "dev"
39
- Requires-Dist: protobuf ~= 5.26 ; extra == "dev"
40
- Requires-Dist: mapbox-vector-tile ~= 2.1 ; extra == "dev"
41
- Requires-Dist: pystac ~= 1.9 ; extra == "dev"
42
- Requires-Dist: pytest ~= 8.4 ; extra == "dev"
43
- Requires-Dist: pytest-datafiles ~= 3.0 ; extra == "dev"
44
- Requires-Dist: pyexiv2 ~= 2.15 ; extra == "dev"
45
- Requires-Dist: testcontainers ~= 4.10 ; extra == "dev"
46
- Requires-Dist: requests-mock ~= 1.11 ; extra == "dev"
47
- Requires-Dist: black ~= 25.1 ; extra == "dev"
48
- Requires-Dist: pre-commit ~= 4.2 ; extra == "dev"
49
- Requires-Dist: pyyaml ~= 6.0 ; extra == "dev"
50
- Requires-Dist: openapi-spec-validator ~= 0.7 ; extra == "dev"
51
- Requires-Dist: stac-api-validator ~= 0.6.4 ; extra == "dev"
52
- Requires-Dist: mkdocs-material ~= 9.6.14 ; extra == "docs"
53
- Requires-Dist: mkdocs-swagger-ui-tag ~= 0.7.1 ; extra == "docs"
37
+ Requires-Dist: gunicorn ~= 23.0.0
54
38
  Project-URL: Home, https://gitlab.com/panoramax/server/api
55
39
  Project-URL: Source Code, https://gitlab.com/panoramax/server/api
56
- Provides-Extra: build
57
- Provides-Extra: dev
58
- Provides-Extra: docs
59
40
 
60
41
  # ![Panoramax](https://upload.wikimedia.org/wikipedia/commons/thumb/a/a9/Panoramax.svg/40px-Panoramax.svg.png) Panoramax
61
42
 
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env bash
2
+
3
+ # script called by the Scalingo Procfile
4
+
5
+ DB_CHECK_SCHEMA=false gunicorn --workers "${NB_API_WORKERS:-5}" --threads "${NB_API_THREADS:-4}" -b ":$PORT" 'geovisio:create_app()'
@@ -57,7 +57,7 @@ services:
57
57
  - /bin/bash
58
58
  - -c
59
59
  - |
60
- python3 -m flask user elysee --set-role admin --create
60
+ panoramax_backend user elysee --set-role admin --create
61
61
  depends_on:
62
62
  migrations:
63
63
  condition: service_completed_successfully
@@ -2,12 +2,12 @@
2
2
 
3
3
  usage() {
4
4
  echo "./docker-entrypoint.sh <COMMAND>: "
5
- echo -e "\tThis script simplifies running GeoVisio backend in a certain mode"
5
+ echo -e "\tThis script simplifies running Panoramax backend in a certain mode"
6
6
  echo "Commands: "
7
7
  echo -e "\tapi (default): Starts web API for production on port 5000 by default"
8
8
  echo -e "\tdev-api: Starts web API for development on port 5000 by default"
9
9
  echo -e "\tpicture-worker: Starts an independant background worker to process pictures"
10
- echo -e "\tcleanup: Cleans database and remove Geovisio derivated files (it doesn't delete your original pictures)"
10
+ echo -e "\tcleanup: Cleans database and remove Panoramax derivated files (it doesn't delete your original pictures)"
11
11
  echo -e "\tdb-upgrade: Upgrade the database schema"
12
12
  echo -e "\tdb-refresh: Refresh all materialized views in the database"
13
13
  }
@@ -23,7 +23,7 @@ case $command in
23
23
  python3 -m waitress --port 5000 --threads=${NB_API_THREADS:-4} --call 'geovisio:create_app'
24
24
  ;;
25
25
  "gunicorn-api")
26
- gunicorn --workers ${NB_API_WORKERS:-5} --threads ${NB_API_THREADS:-4} -b :5000 'geovisio:create_app()'
26
+ python3 -m gunicorn --workers ${NB_API_WORKERS:-5} --threads ${NB_API_THREADS:-4} -b :5000 'geovisio:create_app()'
27
27
  ;;
28
28
  "ssl-api")
29
29
  python3 -m waitress --port 5000 --threads=${NB_API_THREADS:-4} --url-scheme=https --trusted-proxy '*' --trusted-proxy-headers 'X-Forwarded-For X-Forwarded-Host X-Forwarded-Port X-Forwarded-Proto' --log-untrusted-proxy-headers --clear-untrusted-proxy-headers --call 'geovisio:create_app'
@@ -109,7 +109,7 @@ services:
109
109
  NB_API_THREADS: 10
110
110
  INFRA_NB_PROXIES: ${INFRA_NB_PROXIES:-1}
111
111
  # API SUMMARY regroup many metadata about the instance
112
- # check the documentation on how translations are handled: https://docs.panoramax.fr/api/install/settings/#metadata
112
+ # check the documentation on how translations are handled: https://docs.panoramax.fr/backend/install/settings/#metadata
113
113
  API_SUMMARY: >-
114
114
  {
115
115
  "color": "#abcdef",
@@ -25,6 +25,7 @@ http {
25
25
  # We need to set X-Forwarded headers, so the API can use them to make nice internal links
26
26
  proxy_set_header X-Real-IP $remote_addr;
27
27
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
28
+ proxy_set_header X-Forwarded-Host $host;
28
29
 
29
30
  # Limit the files that can be sent to 100M
30
31
  client_max_body_size 100M;
@@ -53,7 +54,6 @@ http {
53
54
  # add X-forward- headers for keycloak to know it's canonical host
54
55
  # force https
55
56
  proxy_set_header X-Forwarded-Proto https;
56
- proxy_set_header X-Forwarded-Host $host;
57
57
 
58
58
  proxy_redirect default;
59
59
  }
@@ -53,7 +53,7 @@ services:
53
53
  NB_API_THREADS: 10
54
54
  INFRA_NB_PROXIES: ${INFRA_NB_PROXIES:-1}
55
55
  # API SUMMARY regroup many metadata about the instance
56
- # check the documentation on how translations are handled: https://docs.panoramax.fr/api/install/settings/#metadata
56
+ # check the documentation on how translations are handled: https://docs.panoramax.fr/backend/install/settings/#metadata
57
57
  API_SUMMARY: >-
58
58
  {
59
59
  "color": "#abcdef",
@@ -21,6 +21,7 @@ http {
21
21
  # We need to set X-Forwarded headers, so the API can use them to make nice internal links
22
22
  proxy_set_header X-Real-IP $remote_addr;
23
23
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
24
+ proxy_set_header X-Forwarded-Host $host;
24
25
 
25
26
  # Limit the files that can be sent to 100M
26
27
  client_max_body_size 100M;
@@ -179,6 +179,55 @@ This calls needs to be logged, another token (or even the same one) can be used.
179
179
  http -A bearer -a eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnZW92aXNpbyIsInN1YiI6ImVlNjQ5MjM1LWJmMTAtNGIwNC1hMDlhLTY0YjE2NjN DELETE https://my-panoramax.fr/api/users/me/tokens/ee649235-bf10-4b04-a09a-64b1663af6f8
180
180
  ```
181
181
 
182
+ ### ⚖️ Permissions
183
+
184
+ The API checks permissions on each route, and returns a:
185
+
186
+ * 401 if authentication is required
187
+ * 403 error if the user is not allowed to access the route
188
+
189
+ The API also adds HATEAOS links to show the permissions of the current user on the queried object. It might be handy for client to use those links to show what actions are allowed. It might, for example, be used to disable a delete button if the user cannot delete the object.
190
+
191
+ This only works for access by ID (eg, in endpoints like `/api/collections/:id` and not `/api/collections` or `/api/search`) and only for authenticated calls (since no edit is possible without authentication).
192
+
193
+ The links have a `method` attribute to define the HTTP method to use for this permission, and might have an `attributes` attribute for the `edit` links,to tell which fields can be patched by the user.
194
+
195
+ Example:
196
+
197
+ ```js
198
+ "links": [
199
+ ...
200
+ {
201
+ "rel": "edit",
202
+ "type": "application/json",
203
+ "method": "PATCH", // <-- HTTP verb to use to call the endpoint
204
+ "href": "https://my_panoramax.org/api/collections/some_id", // <-- api endpoint
205
+ "attributes": ["relative_heading", "semantics", "sortby", "title", "visibility"], // <-- the user can patch those fields
206
+ },
207
+ ]
208
+ ```
209
+
210
+ The `rel` attribute should be used to identify the permission.
211
+
212
+ #### Links on sequences (collections)
213
+
214
+ The available `rel` links are:
215
+
216
+ * `edit` to patch the collection. An additional field `attributes` is provided to tell which fields can be patched by the user.
217
+ * `delete` to delete the collection
218
+
219
+ #### Links on upload_sets
220
+
221
+ * `edit` to patch the upload_set. An additional field `attributes` is provided to tell which fields can be patched by the user.
222
+ * `delete` to delete the upload_set
223
+ * `add_files` to add files to the upload_set
224
+ * `complete` to complete the upload_set
225
+
226
+ #### Links on pictures (items)
227
+
228
+ * `edit` to patch the picture. An additional field `attributes` is provided to tell which fields can be patched by the user.
229
+ * `delete` to delete the picture
230
+ * `add_annotation` to add an annotation on the picture
182
231
 
183
232
  ## :octicons-upload-16: Upload
184
233
 
@@ -322,4 +371,4 @@ Enjoy your brand-new uploaded pictures by browsing the map or querying the assoc
322
371
 
323
372
  ```bash
324
373
  http https://my-panoramax.fr/api/upload_sets/60d94628-8098-42cc-b684-ffb9aa9d35a7
325
- ```
374
+ ```