geovisio 2.5.0__tar.gz → 2.7.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 (334) hide show
  1. {geovisio-2.5.0 → geovisio-2.7.0}/.dockerignore +3 -0
  2. {geovisio-2.5.0 → geovisio-2.7.0}/.gitignore +2 -0
  3. {geovisio-2.5.0 → geovisio-2.7.0}/.gitlab-ci.yml +30 -56
  4. {geovisio-2.5.0 → geovisio-2.7.0}/CHANGELOG.md +121 -31
  5. geovisio-2.7.0/Dockerfile +55 -0
  6. geovisio-2.7.0/Makefile +35 -0
  7. geovisio-2.7.0/PKG-INFO +95 -0
  8. geovisio-2.7.0/Procfile +7 -0
  9. geovisio-2.7.0/README.md +38 -0
  10. geovisio-2.7.0/babel.cfg +2 -0
  11. geovisio-2.7.0/bin/post_compile +5 -0
  12. geovisio-2.7.0/bin/run_production_api.sh +11 -0
  13. {geovisio-2.5.0 → geovisio-2.7.0}/docker/docker-compose-blurring.yml +1 -1
  14. {geovisio-2.5.0 → geovisio-2.7.0}/docker/docker-compose-full.yml +13 -11
  15. {geovisio-2.5.0 → geovisio-2.7.0}/docker/docker-compose-keycloak.yml +1 -1
  16. {geovisio-2.5.0 → geovisio-2.7.0}/docker/docker-compose-minio.yml +3 -4
  17. {geovisio-2.5.0 → geovisio-2.7.0}/docker/docker-entrypoint.sh +8 -1
  18. geovisio-2.7.0/docker/full-keycloak-auth/1-init-keycloak-db.sh +10 -0
  19. geovisio-2.7.0/docker/full-keycloak-auth/Dockerfile.keycloak +21 -0
  20. geovisio-2.7.0/docker/full-keycloak-auth/docker-compose.yml +213 -0
  21. geovisio-2.7.0/docker/full-keycloak-auth/env.example +34 -0
  22. geovisio-2.7.0/docker/full-keycloak-auth/keycloak-realm.json +2218 -0
  23. geovisio-2.7.0/docker/full-keycloak-auth/nginx.conf +94 -0
  24. geovisio-2.7.0/docker/full-osm-auth/docker-compose.yml +153 -0
  25. geovisio-2.7.0/docker/full-osm-auth/env.example +30 -0
  26. geovisio-2.7.0/docker/full-osm-auth/nginx.conf +75 -0
  27. geovisio-2.7.0/docker-compose.yml +113 -0
  28. geovisio-2.7.0/docs/api/api.md +325 -0
  29. geovisio-2.7.0/docs/api/open_api.json +6855 -0
  30. geovisio-2.7.0/docs/api/openapi.md +3 -0
  31. geovisio-2.5.0/docs/80_STAC_Compatibility.md → geovisio-2.7.0/docs/dev/STAC_compatibility.md +30 -4
  32. geovisio-2.7.0/docs/dev/develop_server.md +316 -0
  33. geovisio-2.7.0/docs/dev/releases.md +21 -0
  34. geovisio-2.7.0/docs/images/geovisio-architecture-simple.excalidraw +2961 -0
  35. geovisio-2.7.0/docs/images/geovisio-architecture-simple.png +0 -0
  36. geovisio-2.7.0/docs/index.md +70 -0
  37. geovisio-2.7.0/docs/install/cli.md +241 -0
  38. geovisio-2.7.0/docs/install/database_setup.md +69 -0
  39. geovisio-2.5.0/docs/17_Blur_API.md → geovisio-2.7.0/docs/install/deep_dive/blur_api.md +3 -8
  40. geovisio-2.7.0/docs/install/deep_dive/excluded_areas.md +97 -0
  41. geovisio-2.7.0/docs/install/deep_dive/external_Identity_Providers.md +73 -0
  42. geovisio-2.5.0/docs/13_Pictures_processing.md → geovisio-2.7.0/docs/install/deep_dive/pictures_processing.md +24 -23
  43. geovisio-2.7.0/docs/install/install.md +99 -0
  44. geovisio-2.7.0/docs/install/running.md +126 -0
  45. geovisio-2.7.0/docs/install/settings.md +231 -0
  46. geovisio-2.7.0/docs/install/tutorials/osm_oauth_client.png +0 -0
  47. geovisio-2.7.0/docs/install/tutorials/running_docker_keycloak.md +150 -0
  48. geovisio-2.7.0/docs/install/tutorials/running_docker_osm_auth.md +129 -0
  49. geovisio-2.7.0/docs/install/update.md +8 -0
  50. {geovisio-2.5.0 → geovisio-2.7.0}/geovisio/__init__.py +38 -8
  51. {geovisio-2.5.0 → geovisio-2.7.0}/geovisio/admin_cli/__init__.py +2 -2
  52. {geovisio-2.5.0 → geovisio-2.7.0}/geovisio/admin_cli/db.py +8 -0
  53. {geovisio-2.5.0 → geovisio-2.7.0}/geovisio/config_app.py +64 -0
  54. {geovisio-2.5.0 → geovisio-2.7.0}/geovisio/db_migrations.py +24 -3
  55. {geovisio-2.5.0 → geovisio-2.7.0}/geovisio/templates/main.html +14 -14
  56. {geovisio-2.5.0 → geovisio-2.7.0}/geovisio/templates/viewer.html +3 -3
  57. geovisio-2.7.0/geovisio/translations/de/LC_MESSAGES/messages.mo +0 -0
  58. geovisio-2.7.0/geovisio/translations/de/LC_MESSAGES/messages.po +667 -0
  59. geovisio-2.7.0/geovisio/translations/en/LC_MESSAGES/messages.mo +0 -0
  60. geovisio-2.7.0/geovisio/translations/en/LC_MESSAGES/messages.po +730 -0
  61. geovisio-2.7.0/geovisio/translations/es/LC_MESSAGES/messages.mo +0 -0
  62. geovisio-2.7.0/geovisio/translations/es/LC_MESSAGES/messages.po +778 -0
  63. geovisio-2.7.0/geovisio/translations/fi/LC_MESSAGES/messages.mo +0 -0
  64. geovisio-2.7.0/geovisio/translations/fi/LC_MESSAGES/messages.po +589 -0
  65. geovisio-2.7.0/geovisio/translations/fr/LC_MESSAGES/messages.mo +0 -0
  66. geovisio-2.7.0/geovisio/translations/fr/LC_MESSAGES/messages.po +814 -0
  67. geovisio-2.7.0/geovisio/translations/ko/LC_MESSAGES/messages.mo +0 -0
  68. geovisio-2.7.0/geovisio/translations/ko/LC_MESSAGES/messages.po +685 -0
  69. geovisio-2.7.0/geovisio/translations/messages.pot +686 -0
  70. geovisio-2.7.0/geovisio/translations/nl/LC_MESSAGES/messages.mo +0 -0
  71. geovisio-2.7.0/geovisio/translations/nl/LC_MESSAGES/messages.po +594 -0
  72. geovisio-2.7.0/geovisio/utils/__init__.py +1 -0
  73. {geovisio-2.5.0 → geovisio-2.7.0}/geovisio/utils/auth.py +50 -11
  74. geovisio-2.7.0/geovisio/utils/db.py +65 -0
  75. geovisio-2.7.0/geovisio/utils/excluded_areas.py +83 -0
  76. geovisio-2.7.0/geovisio/utils/extent.py +30 -0
  77. {geovisio-2.5.0 → geovisio-2.7.0}/geovisio/utils/fields.py +1 -1
  78. {geovisio-2.5.0 → geovisio-2.7.0}/geovisio/utils/filesystems.py +0 -1
  79. geovisio-2.7.0/geovisio/utils/link.py +14 -0
  80. geovisio-2.7.0/geovisio/utils/params.py +20 -0
  81. {geovisio-2.5.0 → geovisio-2.7.0}/geovisio/utils/pictures.py +94 -69
  82. geovisio-2.7.0/geovisio/utils/reports.py +171 -0
  83. geovisio-2.7.0/geovisio/utils/sequences.py +644 -0
  84. geovisio-2.7.0/geovisio/utils/tokens.py +92 -0
  85. geovisio-2.7.0/geovisio/utils/upload_set.py +654 -0
  86. {geovisio-2.5.0 → geovisio-2.7.0}/geovisio/web/auth.py +50 -37
  87. {geovisio-2.5.0 → geovisio-2.7.0}/geovisio/web/collections.py +305 -319
  88. {geovisio-2.5.0 → geovisio-2.7.0}/geovisio/web/configuration.py +14 -0
  89. {geovisio-2.5.0 → geovisio-2.7.0}/geovisio/web/docs.py +288 -12
  90. geovisio-2.7.0/geovisio/web/excluded_areas.py +377 -0
  91. {geovisio-2.5.0 → geovisio-2.7.0}/geovisio/web/items.py +203 -151
  92. geovisio-2.7.0/geovisio/web/map.py +594 -0
  93. {geovisio-2.5.0 → geovisio-2.7.0}/geovisio/web/params.py +69 -26
  94. {geovisio-2.5.0 → geovisio-2.7.0}/geovisio/web/pictures.py +14 -31
  95. geovisio-2.7.0/geovisio/web/reports.py +399 -0
  96. {geovisio-2.5.0 → geovisio-2.7.0}/geovisio/web/rss.py +13 -7
  97. {geovisio-2.5.0 → geovisio-2.7.0}/geovisio/web/stac.py +129 -121
  98. geovisio-2.7.0/geovisio/web/tokens.py +287 -0
  99. geovisio-2.7.0/geovisio/web/upload_set.py +768 -0
  100. {geovisio-2.5.0 → geovisio-2.7.0}/geovisio/web/users.py +100 -73
  101. {geovisio-2.5.0 → geovisio-2.7.0}/geovisio/web/utils.py +38 -9
  102. geovisio-2.7.0/geovisio/workers/__init__.py +0 -0
  103. geovisio-2.7.0/geovisio/workers/runner_pictures.py +528 -0
  104. geovisio-2.7.0/images/sponsors.png +0 -0
  105. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20221201_02_ZG8AR-camera-information.py +0 -1
  106. geovisio-2.7.0/migrations/20240223_01_LsMHB-remove-binary-fields.sql +80 -0
  107. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20240229_01_SgfQY-sequence-geom-multi-linestring.sql +1 -1
  108. geovisio-2.7.0/migrations/20240308_01_aF0Jb-migrate-sequence-geom-multi-linestring.sql +52 -0
  109. geovisio-2.7.0/migrations/20240409_01_jnhra-pictures-grid.rollback.sql +4 -0
  110. geovisio-2.7.0/migrations/20240409_01_jnhra-pictures-grid.sql +18 -0
  111. geovisio-2.7.0/migrations/20240416_01_FpyGs-pictures-stats-on-sequences.rollback.sql +7 -0
  112. geovisio-2.7.0/migrations/20240416_01_FpyGs-pictures-stats-on-sequences.sql +9 -0
  113. geovisio-2.7.0/migrations/20240416_02_A5KzC-fill-pictures-stats-on-sequences.rollback.sql +5 -0
  114. geovisio-2.7.0/migrations/20240416_02_A5KzC-fill-pictures-stats-on-sequences.sql +84 -0
  115. geovisio-2.7.0/migrations/20240507_01_eBfqZ-refresh-table.rollback.sql +5 -0
  116. geovisio-2.7.0/migrations/20240507_01_eBfqZ-refresh-table.sql +9 -0
  117. geovisio-2.7.0/migrations/20240507_02_dzVET-picture-grid-public.rollback.sql +17 -0
  118. geovisio-2.7.0/migrations/20240507_02_dzVET-picture-grid-public.sql +21 -0
  119. geovisio-2.7.0/migrations/20240514_01_IT7DD-picture-delete-cascade.rollback.sql +41 -0
  120. geovisio-2.7.0/migrations/20240514_01_IT7DD-picture-delete-cascade.sql +42 -0
  121. geovisio-2.7.0/migrations/20240611_01_jftHn-content-md5.rollback.sql +5 -0
  122. geovisio-2.7.0/migrations/20240611_01_jftHn-content-md5.sql +7 -0
  123. geovisio-2.7.0/migrations/20240612_01_yNcuE-upload-set.rollback.sql +6 -0
  124. geovisio-2.7.0/migrations/20240612_01_yNcuE-upload-set.sql +46 -0
  125. geovisio-2.7.0/migrations/20240617_01_tKtlx-md5-concurrent-index.rollback.sql +4 -0
  126. geovisio-2.7.0/migrations/20240617_01_tKtlx-md5-concurrent-index.sql +8 -0
  127. geovisio-2.7.0/migrations/20240625_01_XMZ24-fix-sequence-stat-on-pic-insertion.rollback.sql +30 -0
  128. geovisio-2.7.0/migrations/20240625_01_XMZ24-fix-sequence-stat-on-pic-insertion.sql +31 -0
  129. geovisio-2.7.0/migrations/20240708_01_Xn7IH-job-queue.rollback.sql +31 -0
  130. geovisio-2.7.0/migrations/20240708_01_Xn7IH-job-queue.sql +104 -0
  131. geovisio-2.7.0/migrations/20240715_01_Hca9V-upload-set-metadata.rollback.sql +4 -0
  132. geovisio-2.7.0/migrations/20240715_01_Hca9V-upload-set-metadata.sql +5 -0
  133. geovisio-2.7.0/migrations/20240723_01_ePGFe-upload-set-files.rollback.sql +7 -0
  134. geovisio-2.7.0/migrations/20240723_01_ePGFe-upload-set-files.sql +29 -0
  135. geovisio-2.7.0/migrations/20240729_01_HALjj-upload-set-sort.rollback.sql +18 -0
  136. geovisio-2.7.0/migrations/20240729_01_HALjj-upload-set-sort.sql +18 -0
  137. geovisio-2.7.0/migrations/20240730_01_2BaCy-improve-deletion-triggers.rollback.sql +34 -0
  138. geovisio-2.7.0/migrations/20240730_01_2BaCy-improve-deletion-triggers.sql +53 -0
  139. geovisio-2.7.0/migrations/20240730_02_aRymN-rejection-status.rollback.sql +10 -0
  140. geovisio-2.7.0/migrations/20240730_02_aRymN-rejection-status.sql +16 -0
  141. geovisio-2.7.0/migrations/20240801_01_DOqmf-reports.rollback.sql +11 -0
  142. geovisio-2.7.0/migrations/20240801_01_DOqmf-reports.sql +100 -0
  143. geovisio-2.7.0/migrations/20240801_01_uKqPo-remove-files-delete-cascade.rollback.sql +13 -0
  144. geovisio-2.7.0/migrations/20240801_01_uKqPo-remove-files-delete-cascade.sql +13 -0
  145. geovisio-2.7.0/migrations/20240813_01_T1XkO-sequences-geom-splits.rollback.sql +42 -0
  146. geovisio-2.7.0/migrations/20240813_01_T1XkO-sequences-geom-splits.sql +56 -0
  147. geovisio-2.7.0/migrations/20240820_01_aB2ZK-exclusion-zones.rollback.sql +6 -0
  148. geovisio-2.7.0/migrations/20240820_01_aB2ZK-exclusion-zones.sql +49 -0
  149. geovisio-2.7.0/migrations/20240902_01_MDqSj-user-agent.rollback.sql +5 -0
  150. geovisio-2.7.0/migrations/20240902_01_MDqSj-user-agent.sql +10 -0
  151. geovisio-2.7.0/migrations/20240904_01_gFjlV-files-rejection-msg.rollback.sql +4 -0
  152. geovisio-2.7.0/migrations/20240904_01_gFjlV-files-rejection-msg.sql +4 -0
  153. geovisio-2.7.0/migrations/20240905_01_C8F6U-conflicts.rollback.sql +13 -0
  154. geovisio-2.7.0/migrations/20240905_01_C8F6U-conflicts.sql +6 -0
  155. geovisio-2.7.0/migrations/20240905_01_E5Ki0-upload-set-delete.rollback.sql +5 -0
  156. geovisio-2.7.0/migrations/20240905_01_E5Ki0-upload-set-delete.sql +30 -0
  157. geovisio-2.7.0/migrations/20240909_01_Muc22-unique-grid-index.rollback.sql +4 -0
  158. geovisio-2.7.0/migrations/20240909_01_Muc22-unique-grid-index.sql +5 -0
  159. geovisio-2.7.0/migrations/20240912_01_dAALm-account-index.rollback.sql +4 -0
  160. geovisio-2.7.0/migrations/20240912_01_dAALm-account-index.sql +4 -0
  161. geovisio-2.7.0/mkdocs.yml +73 -0
  162. {geovisio-2.5.0 → geovisio-2.7.0}/pyproject.toml +29 -13
  163. geovisio-2.7.0/runtime.txt +1 -0
  164. geovisio-2.7.0/tests/__init__.py +0 -0
  165. {geovisio-2.5.0 → geovisio-2.7.0}/tests/conftest.py +171 -68
  166. geovisio-2.7.0/tests/data/crop.jpg +0 -0
  167. geovisio-2.7.0/tests/fixed_data/__init__.py +0 -0
  168. {geovisio-2.5.0 → geovisio-2.7.0}/tests/fixed_data/conftest.py +1 -1
  169. geovisio-2.7.0/tests/fixed_data/test_api_conformance.py +121 -0
  170. {geovisio-2.5.0 → geovisio-2.7.0}/tests/fixed_data/test_many_sequences.py +78 -54
  171. geovisio-2.7.0/tests/fixed_data/test_web_collections_one_collection.py +489 -0
  172. geovisio-2.7.0/tests/integration/__init__.py +0 -0
  173. {geovisio-2.5.0 → geovisio-2.7.0}/tests/integration/conftest.py +8 -22
  174. {geovisio-2.5.0 → geovisio-2.7.0}/tests/integration/docker-compose-auth-test.yml +0 -1
  175. {geovisio-2.5.0 → geovisio-2.7.0}/tests/integration/test_auth.py +53 -2
  176. {geovisio-2.5.0 → geovisio-2.7.0}/tests/integration/test_s3.py +30 -38
  177. {geovisio-2.5.0 → geovisio-2.7.0}/tests/integration/test_tokens.py +5 -6
  178. {geovisio-2.5.0 → geovisio-2.7.0}/tests/test_admin_cli_cleanup.py +7 -13
  179. {geovisio-2.5.0 → geovisio-2.7.0}/tests/test_db_migrations.py +42 -18
  180. {geovisio-2.5.0 → geovisio-2.7.0}/tests/test_factory.py +64 -12
  181. geovisio-2.7.0/tests/test_utils_auth.py +31 -0
  182. {geovisio-2.5.0 → geovisio-2.7.0}/tests/test_utils_pictures.py +25 -24
  183. geovisio-2.7.0/tests/test_utils_reports.py +34 -0
  184. geovisio-2.7.0/tests/test_utils_upload_set.py +210 -0
  185. geovisio-2.7.0/tests/test_web_collections.py +1851 -0
  186. geovisio-2.7.0/tests/test_web_configuration.py +73 -0
  187. geovisio-2.7.0/tests/test_web_excluded_areas.py +409 -0
  188. geovisio-2.7.0/tests/test_web_items.py +2448 -0
  189. geovisio-2.7.0/tests/test_web_map.py +527 -0
  190. {geovisio-2.5.0 → geovisio-2.7.0}/tests/test_web_pictures.py +33 -50
  191. geovisio-2.7.0/tests/test_web_reports.py +485 -0
  192. geovisio-2.7.0/tests/test_web_stac.py +151 -0
  193. geovisio-2.7.0/tests/test_web_upload_set.py +2743 -0
  194. {geovisio-2.5.0 → geovisio-2.7.0}/tests/test_web_users.py +56 -10
  195. {geovisio-2.5.0 → geovisio-2.7.0}/tests/test_workers_runner_pictures.py +254 -212
  196. geovisio-2.5.0/Dockerfile +0 -35
  197. geovisio-2.5.0/Makefile +0 -12
  198. geovisio-2.5.0/PKG-INFO +0 -115
  199. geovisio-2.5.0/Procfile +0 -2
  200. geovisio-2.5.0/README.md +0 -68
  201. geovisio-2.5.0/bin/post_compile +0 -4
  202. geovisio-2.5.0/docker-compose.yml +0 -38
  203. geovisio-2.5.0/docs/01_Start.md +0 -29
  204. geovisio-2.5.0/docs/07_Database_setup.md +0 -53
  205. geovisio-2.5.0/docs/10_Install_Classic.md +0 -32
  206. geovisio-2.5.0/docs/10_Install_Scalingo.md +0 -9
  207. geovisio-2.5.0/docs/11_Server_settings.md +0 -135
  208. geovisio-2.5.0/docs/12_External_Identity_Providers.md +0 -82
  209. geovisio-2.5.0/docs/14_Running_Classic.md +0 -114
  210. geovisio-2.5.0/docs/14_Running_Docker.md +0 -123
  211. geovisio-2.5.0/docs/15_Pictures_requirements.md +0 -27
  212. geovisio-2.5.0/docs/16_Using_API.md +0 -206
  213. geovisio-2.5.0/docs/19_Develop_server.md +0 -196
  214. geovisio-2.5.0/docs/90_Releases.md +0 -25
  215. geovisio-2.5.0/geovisio/utils/__init__.py +0 -1
  216. geovisio-2.5.0/geovisio/utils/sequences.py +0 -482
  217. geovisio-2.5.0/geovisio/utils/tokens.py +0 -97
  218. geovisio-2.5.0/geovisio/web/map.py +0 -378
  219. geovisio-2.5.0/geovisio/web/tokens.py +0 -294
  220. geovisio-2.5.0/geovisio/workers/runner_pictures.py +0 -433
  221. geovisio-2.5.0/images/screenshot.jpg +0 -0
  222. geovisio-2.5.0/images/sponsors.png +0 -0
  223. geovisio-2.5.0/runtime.txt +0 -1
  224. geovisio-2.5.0/tests/test_api_conformance.sh +0 -112
  225. geovisio-2.5.0/tests/test_web_collections.py +0 -2054
  226. geovisio-2.5.0/tests/test_web_configuration.py +0 -28
  227. geovisio-2.5.0/tests/test_web_items.py +0 -2357
  228. geovisio-2.5.0/tests/test_web_map.py +0 -363
  229. geovisio-2.5.0/tests/test_web_stac.py +0 -146
  230. {geovisio-2.5.0 → geovisio-2.7.0}/.flaskenv +0 -0
  231. {geovisio-2.5.0 → geovisio-2.7.0}/.pre-commit-config.yaml +0 -0
  232. {geovisio-2.5.0 → geovisio-2.7.0}/CODE_OF_CONDUCT.md +0 -0
  233. {geovisio-2.5.0 → geovisio-2.7.0}/LICENSE +0 -0
  234. /geovisio-2.5.0/geovisio/web/__init__.py → /geovisio-2.7.0/docker/full-keycloak-auth/pictures_storage/.gitkeep +0 -0
  235. /geovisio-2.5.0/geovisio/workers/__init__.py → /geovisio-2.7.0/docker/full-keycloak-auth/robots.txt +0 -0
  236. /geovisio-2.5.0/tests/__init__.py → /geovisio-2.7.0/docker/full-osm-auth/pictures_storage/.gitkeep +0 -0
  237. /geovisio-2.5.0/tests/fixed_data/__init__.py → /geovisio-2.7.0/docker/full-osm-auth/robots.txt +0 -0
  238. {geovisio-2.5.0 → geovisio-2.7.0}/docker/keycloak-realm.json +0 -0
  239. {geovisio-2.5.0 → geovisio-2.7.0/docs}/images/geovisio_authentication_flow.svg +0 -0
  240. {geovisio-2.5.0 → geovisio-2.7.0}/geovisio/admin_cli/cleanup.py +0 -0
  241. {geovisio-2.5.0 → geovisio-2.7.0}/geovisio/admin_cli/default_account_tokens.py +0 -0
  242. {geovisio-2.5.0 → geovisio-2.7.0}/geovisio/admin_cli/reorder_sequences.py +0 -0
  243. {geovisio-2.5.0 → geovisio-2.7.0}/geovisio/admin_cli/sequence_heading.py +0 -0
  244. {geovisio-2.5.0 → geovisio-2.7.0}/geovisio/errors.py +0 -0
  245. {geovisio-2.5.0 → geovisio-2.7.0}/geovisio/utils/sentry.py +0 -0
  246. {geovisio-2.5.0 → geovisio-2.7.0}/geovisio/utils/time.py +0 -0
  247. {geovisio-2.5.0/tests/integration → geovisio-2.7.0/geovisio/web}/__init__.py +0 -0
  248. {geovisio-2.5.0 → geovisio-2.7.0}/images/big_picture.png +0 -0
  249. {geovisio-2.5.0 → geovisio-2.7.0}/images/big_picture.svg +0 -0
  250. {geovisio-2.5.0 → geovisio-2.7.0}/images/favicon.ico +0 -0
  251. {geovisio-2.5.0 → geovisio-2.7.0}/images/favicon.svg +0 -0
  252. {geovisio-2.5.0 → geovisio-2.7.0}/images/logo.png +0 -0
  253. {geovisio-2.5.0 → geovisio-2.7.0}/images/logo.svg +0 -0
  254. {geovisio-2.5.0 → geovisio-2.7.0}/images/logo_full.png +0 -0
  255. {geovisio-2.5.0 → geovisio-2.7.0}/images/logo_full.svg +0 -0
  256. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20221201_01_wpCGc-initial-schema.rollback.sql +0 -0
  257. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20221201_01_wpCGc-initial-schema.sql +0 -0
  258. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20221222_01_fsB6f-add-account.rollback.sql +0 -0
  259. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20221222_01_fsB6f-add-account.sql +0 -0
  260. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20230113_01_0co97-rm-metadata-duplicates.rollback.sql +0 -0
  261. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20230113_01_0co97-rm-metadata-duplicates.sql +0 -0
  262. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20230116_01_9PkjZ-add-oauth-provider.rollback.sql +0 -0
  263. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20230116_01_9PkjZ-add-oauth-provider.sql +0 -0
  264. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20230117_01_K71Pd-pictures-ts-index.rollback.sql +0 -0
  265. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20230117_01_K71Pd-pictures-ts-index.sql +0 -0
  266. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20230130_01_VRIv2-sequences-account.rollback.sql +0 -0
  267. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20230130_01_VRIv2-sequences-account.sql +0 -0
  268. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20230324_01_ba9WA-status.rollback.sql +0 -0
  269. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20230324_01_ba9WA-status.sql +0 -0
  270. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20230324_02_efgI6-picture-process.rollback.sql +0 -0
  271. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20230324_02_efgI6-picture-process.sql +0 -0
  272. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20230407_01_wofh1-computed-headings.rollback.sql +0 -0
  273. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20230407_01_wofh1-computed-headings.sql +0 -0
  274. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20230417_01_ZgLMY-add-exif-metadata-column-for-pictures.rollback.sql +0 -0
  275. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20230417_01_ZgLMY-add-exif-metadata-column-for-pictures.sql +0 -0
  276. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20230420_01_elaN3-remove-picture-and-sequence-file-paths.rollback.sql +0 -0
  277. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20230420_01_elaN3-remove-picture-and-sequence-file-paths.sql +0 -0
  278. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20230425_01_gYP77-pictures-edits-triggers.rollback.sql +0 -0
  279. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20230425_01_gYP77-pictures-edits-triggers.sql +0 -0
  280. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20230427_01_k5e5w-timestamps.rollback.sql +0 -0
  281. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20230427_01_k5e5w-timestamps.sql +0 -0
  282. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20230511_01_TdpKo-tokens.rollback.sql +0 -0
  283. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20230511_01_TdpKo-tokens.sql +0 -0
  284. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20230615_01_u7aRf-pic-delete-cascade.rollback.sql +0 -0
  285. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20230615_01_u7aRf-pic-delete-cascade.sql +0 -0
  286. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20230623_01_y1SiQ-pic-deletion-task.rollback.sql +0 -0
  287. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20230623_01_y1SiQ-pic-deletion-task.sql +0 -0
  288. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20230629_01_ZdB3i-compute-heading-0.sql +0 -0
  289. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20230711_01_JGSPB-inserted-at-index.rollback.sql +0 -0
  290. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20230711_01_JGSPB-inserted-at-index.sql +0 -0
  291. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20230720_01_EyQ0e-sequences-summary.rollback.sql +0 -0
  292. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20230720_01_EyQ0e-sequences-summary.sql +0 -0
  293. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20230803_01_aXusm-fix-sequence-computed.rollback.sql +0 -0
  294. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20230803_01_aXusm-fix-sequence-computed.sql +0 -0
  295. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20231018_01_4G3YE-pictures-exiv2.rollback.sql +0 -0
  296. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20231018_01_4G3YE-pictures-exiv2.sql +0 -0
  297. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20231103_01_ZVKEm-update-seq-on-pic-change.rollback.sql +0 -0
  298. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20231103_01_ZVKEm-update-seq-on-pic-change.sql +0 -0
  299. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20231110_01_3p070-jobs-error.rollback.sql +0 -0
  300. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20231110_01_3p070-jobs-error.sql +0 -0
  301. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20231121_01_v6oBF-more-specific-triggers.rollback.sql +0 -0
  302. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20231121_01_v6oBF-more-specific-triggers.sql +0 -0
  303. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20231121_02_1uZXT-deleted-tag.rollback.sql +0 -0
  304. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20231121_02_1uZXT-deleted-tag.sql +0 -0
  305. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20240115_01_FatLR-token-delete-cascade.rollback.sql +0 -0
  306. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20240115_01_FatLR-token-delete-cascade.sql +0 -0
  307. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20240220_01_9wZs0-sequence-current-sort.rollback.sql +0 -0
  308. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20240220_01_9wZs0-sequence-current-sort.sql +0 -0
  309. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20240226_01_8iXl1-track-changes.rollback.sql +0 -0
  310. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20240226_01_8iXl1-track-changes.sql +0 -0
  311. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/20240229_01_SgfQY-sequence-geom-multi-linestring.rollback.sql +0 -0
  312. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/data/readme.md +0 -0
  313. {geovisio-2.5.0 → geovisio-2.7.0}/migrations/data/sensor_data.json +0 -0
  314. {geovisio-2.5.0 → geovisio-2.7.0}/tests/data/1.jpg +0 -0
  315. {geovisio-2.5.0 → geovisio-2.7.0}/tests/data/1_blurred.jpg +0 -0
  316. {geovisio-2.5.0 → geovisio-2.7.0}/tests/data/2.jpg +0 -0
  317. {geovisio-2.5.0 → geovisio-2.7.0}/tests/data/3.jpg +0 -0
  318. {geovisio-2.5.0 → geovisio-2.7.0}/tests/data/4.jpg +0 -0
  319. {geovisio-2.5.0 → geovisio-2.7.0}/tests/data/5.jpg +0 -0
  320. {geovisio-2.5.0 → geovisio-2.7.0}/tests/data/b1.jpg +0 -0
  321. {geovisio-2.5.0 → geovisio-2.7.0}/tests/data/b2.jpg +0 -0
  322. {geovisio-2.5.0 → geovisio-2.7.0}/tests/data/c1.jpg +0 -0
  323. {geovisio-2.5.0 → geovisio-2.7.0}/tests/data/d1.jpg +0 -0
  324. {geovisio-2.5.0 → geovisio-2.7.0}/tests/data/e1.jpg +0 -0
  325. {geovisio-2.5.0 → geovisio-2.7.0}/tests/data/e1_artist.jpg +0 -0
  326. {geovisio-2.5.0 → geovisio-2.7.0}/tests/data/e1_without_exif.jpg +0 -0
  327. {geovisio-2.5.0 → geovisio-2.7.0}/tests/data/e2.jpg +0 -0
  328. {geovisio-2.5.0 → geovisio-2.7.0}/tests/data/e3.jpg +0 -0
  329. {geovisio-2.5.0 → geovisio-2.7.0}/tests/data/e4.jpg +0 -0
  330. {geovisio-2.5.0 → geovisio-2.7.0}/tests/data/e5.jpg +0 -0
  331. {geovisio-2.5.0 → geovisio-2.7.0}/tests/data/invalid_exif.jpg +0 -0
  332. {geovisio-2.5.0 → geovisio-2.7.0}/tests/test_utils_filesystems.py +0 -0
  333. {geovisio-2.5.0 → geovisio-2.7.0}/tests/test_web_params.py +0 -0
  334. {geovisio-2.5.0 → geovisio-2.7.0}/yoyo.ini +0 -0
@@ -4,8 +4,11 @@
4
4
  !/pyproject.toml
5
5
  !/README.md
6
6
  !/LICENSE
7
+ !/Makefile
7
8
  !/geovisio/**/*.py
8
9
  !/geovisio/**/*.html
10
+ !/geovisio/**/*.po
11
+ !/geovisio/**/*.pot
9
12
  !/docker/docker-entrypoint.sh
10
13
  !/images/*
11
14
  !/migrations/*.sql
@@ -9,3 +9,5 @@ __pycache__
9
9
  config.py
10
10
  docker/models/
11
11
  .vscode/
12
+ site/
13
+ *.mo
@@ -2,8 +2,9 @@ variables:
2
2
  DOCKER_BUILDKIT: 1 # use buildkit for better performance
3
3
  DOCKER_DRIVER: overlay2 # better docker driver to avoid copying too many files on each run
4
4
  GITLAB_REGISTRY: registry.gitlab.com # We use docker.io for official images and gitlab's registry to store temporary images
5
- IMAGE_NAME: geovisio/api
6
- CI_IMAGE_CACHE: $GITLAB_REGISTRY/$IMAGE_NAME:build_cache
5
+ DOCKER_IMAGE_NAME: panoramax/api
6
+ REPO_NAME: panoramax/server/api
7
+ CI_IMAGE_CACHE: $GITLAB_REGISTRY/$REPO_NAME:build_cache
7
8
  DOCKER_TLS_CERTDIR: ""
8
9
 
9
10
  # Pipelines will run only for MR, tag and develop/main commits
@@ -18,7 +19,7 @@ code-fmt:
18
19
  stage: test
19
20
  only:
20
21
  - merge_requests
21
- image: python:3.9-alpine
22
+ image: python:3.10-alpine
22
23
  script:
23
24
  - pip install black
24
25
  - black --fast --check .
@@ -34,13 +35,13 @@ test-in-docker:
34
35
  image: docker:latest
35
36
  services:
36
37
  - docker:dind
37
- - postgis/postgis:latest
38
+ - postgis/postgis:15-3.4
38
39
  variables:
39
40
  POSTGRES_DB: geovisio_test
40
41
  POSTGRES_USER: geovisio
41
42
  POSTGRES_PASSWORD: geovisiopass
42
43
  POSTGRES_HOST_AUTH_METHOD: trust
43
- TMP_CI_IMAGE: $GITLAB_REGISTRY/$IMAGE_NAME:$CI_COMMIT_SHORT_SHA
44
+ TMP_CI_IMAGE: $GITLAB_REGISTRY/$REPO_NAME:$CI_COMMIT_SHORT_SHA
44
45
  FF_NETWORK_PER_BUILD: 1 # we ask gitlab to create a custom docker network, to be able to use the services inside the docker
45
46
 
46
47
 
@@ -77,36 +78,10 @@ test:
77
78
  when: never
78
79
  - when: on_success
79
80
 
80
- stage: test
81
- image: python:3.9
82
- services:
83
- - postgis/postgis:latest
84
- variables:
85
- PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
86
- POSTGRES_DB: geovisio_test
87
- POSTGRES_USER: geovisio
88
- POSTGRES_PASSWORD: geovisiopass
89
- POSTGRES_HOST_AUTH_METHOD: trust
90
- DB_URL: "postgres://$POSTGRES_USER:$POSTGRES_PASSWORD@postgis-postgis/$POSTGRES_DB"
91
- FS_TMP_URL: "/tmp/geovisio_test/tmp/"
92
- FS_PERMANENT_URL: "/tmp/geovisio_test/permanent/"
93
- FS_DERIVATES_URL: "/tmp/geovisio_test/derivates/"
94
- script:
95
- - mkdir -p /tmp/geovisio_test/tmp /tmp/geovisio_test/derivates /tmp/geovisio_test/permanent
96
- - pip install -e .[dev]
97
- - pytest -m "not skipci"
98
-
99
-
100
- test-api-conformance:
101
- rules:
102
- - if: $CI_COMMIT_TAG
103
- when: never
104
- - when: on_success
105
-
106
81
  stage: test
107
82
  image: python:3.10
108
83
  services:
109
- - postgis/postgis:latest
84
+ - postgis/postgis:15-3.4
110
85
  variables:
111
86
  PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
112
87
  POSTGRES_DB: geovisio_test
@@ -118,10 +93,11 @@ test-api-conformance:
118
93
  FS_PERMANENT_URL: "/tmp/geovisio_test/permanent/"
119
94
  FS_DERIVATES_URL: "/tmp/geovisio_test/derivates/"
120
95
  script:
121
- - apt update && apt install -y wget jq
96
+ - apt update && apt install -y gettext
122
97
  - mkdir -p /tmp/geovisio_test/tmp /tmp/geovisio_test/derivates /tmp/geovisio_test/permanent
123
- - pip install .[dev]
124
- - ./tests/test_api_conformance.sh
98
+ - pip install -e .[dev]
99
+ - make i18n-po2code
100
+ - pytest -vv -m "not skipci"
125
101
 
126
102
 
127
103
  publish-develop:
@@ -135,7 +111,7 @@ publish-develop:
135
111
  image: docker:latest
136
112
  services:
137
113
  - docker:dind
138
- - postgis/postgis:latest
114
+ - postgis/postgis:15-3.4
139
115
  variables:
140
116
  POSTGRES_DB: geovisio_test
141
117
  POSTGRES_USER: geovisio
@@ -153,11 +129,9 @@ publish-develop:
153
129
  - docker buildx build
154
130
  --cache-from "type=registry,ref=$CI_IMAGE_CACHE"
155
131
  --cache-to "type=registry,mode=max,ref=$CI_IMAGE_CACHE"
156
- --tag "$CI_REGISTRY_IMAGE:develop"
157
- --label "org.opencontainers.image.title=$CI_PROJECT_TITLE"
158
- --label "org.opencontainers.image.url=$CI_PROJECT_URL"
159
- --label "org.opencontainers.image.created=$CI_JOB_STARTED_AT"
160
- --label "org.opencontainers.image.revision=$CI_COMMIT_SHORT_SHA"
132
+ --tag "$DOCKER_IMAGE_NAME:develop"
133
+ --build-arg GIT_DESCRIBE=$GIT_DESCRIBE
134
+ --build-arg BUILD_DATE=$CI_JOB_STARTED_AT
161
135
  --load
162
136
  --progress=plain
163
137
  .
@@ -167,11 +141,11 @@ publish-develop:
167
141
  --entrypoint "bash"
168
142
  --network=host
169
143
  --volume ./tests:/opt/geovisio/tests
170
- "$CI_REGISTRY_IMAGE:develop"
171
- -c 'pip install -e .[dev] && /home/geovisio/.local/bin/pytest -m "not skipci"'
144
+ "$DOCKER_IMAGE_NAME:develop"
145
+ -c 'pip install -e .[dev] && /home/geovisio/.local/bin/pytest -vv -m "not skipci"'
172
146
 
173
147
  # publish image to dockerhub with the develop tag
174
- - docker push "$CI_REGISTRY_IMAGE:develop"
148
+ - docker push "$DOCKER_IMAGE_NAME:develop"
175
149
 
176
150
  publish-tag-and-latest:
177
151
  # we consider that tag always land on main
@@ -182,7 +156,7 @@ publish-tag-and-latest:
182
156
  image: docker:latest
183
157
  services:
184
158
  - docker:dind
185
- - postgis/postgis:latest
159
+ - postgis/postgis:15-3.4
186
160
  variables:
187
161
  POSTGRES_DB: geovisio_test
188
162
  POSTGRES_USER: geovisio
@@ -200,12 +174,10 @@ publish-tag-and-latest:
200
174
  - docker buildx build
201
175
  --cache-from "type=registry,ref=$CI_IMAGE_CACHE"
202
176
  --cache-to "type=registry,mode=max,ref=$CI_IMAGE_CACHE"
203
- --tag "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME"
204
- --tag "$CI_REGISTRY_IMAGE:latest"
205
- --label "org.opencontainers.image.title=$CI_PROJECT_TITLE"
206
- --label "org.opencontainers.image.url=$CI_PROJECT_URL"
207
- --label "org.opencontainers.image.created=$CI_JOB_STARTED_AT"
208
- --label "org.opencontainers.image.revision=$GIT_DESCRIBE"
177
+ --tag "$DOCKER_IMAGE_NAME:$CI_COMMIT_REF_NAME"
178
+ --tag "$DOCKER_IMAGE_NAME:latest"
179
+ --build-arg GIT_DESCRIBE=$GIT_DESCRIBE
180
+ --build-arg BUILD_DATE=$CI_JOB_STARTED_AT
209
181
  --load
210
182
  --progress=plain
211
183
  .
@@ -215,18 +187,20 @@ publish-tag-and-latest:
215
187
  --entrypoint "bash"
216
188
  --network=host
217
189
  --volume ./tests:/opt/geovisio/tests
218
- "$CI_REGISTRY_IMAGE:latest"
219
- -c 'pip install -e .[dev] && ~/.local/bin/pytest -m "not skipci"'
190
+ "$DOCKER_IMAGE_NAME:latest"
191
+ -c 'pip install -e .[dev] && ~/.local/bin/pytest -vv -m "not skipci"'
220
192
 
221
193
  # publish image to dockerhub
222
- - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME
223
- - docker push $CI_REGISTRY_IMAGE:latest
194
+ - docker push $DOCKER_IMAGE_NAME:$CI_COMMIT_REF_NAME
195
+ - docker push $DOCKER_IMAGE_NAME:latest
224
196
 
225
197
  publish-on-pypi:
226
198
  only:
227
199
  - tags
228
200
  stage: deploy
229
- image: python:3.9
201
+ image: python:3.10
230
202
  script:
203
+ - apt update && apt install -y gettext
231
204
  - pip install .[build]
205
+ - make i18n-po2code
232
206
  - flit publish # use [flit](https://flit.pypa.io/) and FLIT_USERNAME/FLIT_PASSWORD env var
@@ -5,10 +5,98 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
- Before _1.6.0_, [Viewer](https://gitlab.com/geovisio/web-viewer) was embed in this repository, so this changelog also includes Viewer features until the split.
8
+ Before _1.6.0_, [Viewer](https://gitlab.com/panoramax/clients/web-viewer) was embed in this repository, so this changelog also includes Viewer features until the split.
9
9
 
10
10
  ## [Unreleased]
11
11
 
12
+ ## [2.7.0] - 2024-10-10
13
+
14
+ ⚠️ The minimal supported Python version is now 3.10. Note that you can run it with newer python versions as some might bring better performance. ⚠
15
+
16
+ ### Added
17
+
18
+ - The API and picture workers now use connection pool to reduce the load on the database and improve the performances. The connection pool can be configured using `DB_MIN_CNX`/`DB_MAX_CNX`.
19
+ - Add a way to use Gunicorn instead of waitress as WSGI server. Gunicorn can use processes instead of threads, which can result in better performance for high load usage.
20
+ - The ID of the associated accounts are now returned in the STAC response in an `id` field in the `providers` field.
21
+ - Add a whole new way of uploading pictures, using the new `/api/upload_sets` APIs. The pictures added to the uploaded will be dispatched to one or more collection on completion.
22
+ - You can create and manage _Reports_ (issues with pictures or sequences) through `/api/reports` routes. Reports can be created anonymously or by authenticated users, can automatically hide faulty pictures or sequences, and be tracked over time for statistics. **Note** that reports management (beyond creation, which can be done through _web viewer_) is only available through HTTP API as now, no CLI or front-end is offered as now.
23
+ - You can create and manage _Excluded areas_ (areas where people should not upload pictures) through `/api/configuration/excluded_areas` and `/api/users/me/excluded_areas` routes. Excluded areas can be defined for everyone, or by user, for fine management. **Note** that this is only manageable through HTTP API, no CLI or front-end is offered as now.
24
+ - An user account can be marked with an `admin` role in database to enable some features (access to all reports, edit excluded areas).
25
+ - Support of cropped panorama, with new values in `pers:interior_orientation` in picture properties: `visible_area`, `sensor_array_dimensions` following [proposed definition in STAC](https://github.com/stac-extensions/perspective-imagery/issues/10).
26
+ - Routes `/api` and `/api/configuration` return API version in a `geovisio_version` attribute (example: `2.6.0-12-ab12cd34`).
27
+ - Routes returning collections display a `geovisio:upload-software` property showing which client has been used to create the collection (for meta-catalog statistics).
28
+ - handle user agent `GeoVisioCli` and `PanoramaxCli` as the same `cli` software.
29
+
30
+ ### Changed
31
+
32
+ - Flask session has been set to `permanent`, thus the session cookie will have the lifetime defined by `FLASK_PERMANENT_SESSION_LIFETIME` (default to 7 days).
33
+ - Reject duplicates pictures (same md5). A configuration `API_ACCEPT_DUPLICATE` can make the instance accepts duplicates as before.
34
+ - The background jobs have been changed, it should be transparent for the administrator, but they now rely on the new `job_queue` table, and can handle more types of async jobs.
35
+ - More metadata can be set on API (name, description, logo and main color) in `API_SUMMARY` setting. This is served through `/api/configuration` and `/api` routes for client-side display.
36
+ - Maximum authorized distance between two consecutive pictures in a same segment of a sequence is now 75 meters (distance at 135km/h during two seconds). This only changes map rendering, to avoid sequences cuts over motorways.
37
+ - Sequences and Upload Sets creation now stores `User-Agent` HTTP requests headers.
38
+ - Minimal required PostGIS version is now 3.4 with PostgreSQL 12.
39
+ - Almost all database queries now have a statement timeout (default to 5mn).
40
+ - Updated Geopic Tag Reader to 1.3.0 to solve various issues related to pictures timestamps.
41
+ - In vector tiles style, `interpolate-hcl` expression for grid colouring has been replaced into `interpolate` for broader compatibility with QGIS versions.
42
+ - A new `geovisio:length_km` property is available on `/api/collections/:id`, `/api/users/:id/collection` and `/api/users/me/collection` route, giving the length of sequence in kilometers.
43
+ - ⚠️ The docker images are now `panoramax/api` instead of `geovisio/api`.
44
+
45
+ ### Fixed
46
+
47
+ - RSS feed was producing invalid viewer links (missing coordinates) since sequences are represented as MultiLineString in database.
48
+ - Fix a bug where we could add pictures to an already deleted sequence.
49
+ - Fix a bug where the `pictures_grid` view was refreshed too frequently (and the computation can be expensive for the database).
50
+
51
+ ### Removed
52
+
53
+ - The `test-api-conformance.sh` are now regular python tests
54
+ - Removed on-the-fly JPEG to WebP conversion (too slow). WebP might do an unexpected come-back in the future 😉
55
+ - The list of users has been removed from the API entrypoint (`/`) as the list is ever growning, but it can still be accessed through the `/users` endpoint.
56
+
57
+ ## [2.6.0] - 2024-05-17
58
+
59
+ ⚠️ Important Note: This version add several quite long migrations. After the migration are run, you should run as a database administrator:
60
+
61
+ ```sql
62
+ VACUUM FULL pictures, sequences;
63
+ ```
64
+
65
+ or use a tool like [pg_repack](https://github.com/reorg/pg_repack) to remove dead tuples and save lot's of space.
66
+
67
+ Note that the vacuum will hold an exclusive lock whereas pg_repack will not.
68
+
69
+ ⚠️ Important Note ⚠️ : This new versions uses postgres [`session_replication_role`](https://www.postgresql.org/docs/current/runtime-config-client.html) for non blocking migrations. This means that the users used to connect to the database must either have superuser privilege, or if postgres version is >= 15, you can grant the permission to the user with:
70
+
71
+ ```psql
72
+ GRANT SET ON PARAMETER session_replication_role TO you_user;
73
+ ```
74
+
75
+ ### Added
76
+
77
+ - API routes returning items embed original datetime with timezone information in a new property `datetimetz`.
78
+ - New routes offering [MapLibre Style JSON files](https://maplibre.org/maplibre-style-spec/) for each vector tile endpoint (`/api/map/style.json`, `/api/users/me/map/style.json` and `/api/users/:userId/map/style.json`). This will allow more flexibility in offered vector tiles zoom levels and features against clients. These routes are advertised in API landing page with `xyz-style` and `user-xyz-style` links.
79
+ - A new configuration `DB_CHECK_SCHEMA` to tell GeoVisio not to check the database schema on startup, use only if you know you'll not use GeoVisio before updating its schema.
80
+ - Pictures metadata now embed pitch & roll information (`pers:pitch` and `pers:roll` fields).
81
+ - A new configuration `PICTURE_PROCESS_REFRESH_CRON` tell the background workers when to refresh the database stats (they execute the `flask db refresh` command).
82
+
83
+ ### Changed
84
+
85
+ - All sequences geometries have been updated to be split if pictures were too far apart (linked to change done in [this MR](https://gitlab.com/panoramax/server/api/-/merge_requests/244)).
86
+ - Vector tiles from zoom 0 to 5 now offers a grid of available pictures (instead of simplified sequences). They are computed on-demand, so you may want to run `flask db refresh` once a day to keep them up-to-date.
87
+ - Doc and links to match the Gitlab organization rename from GeoVisio to Panoramax.
88
+
89
+ ### Fixed
90
+
91
+ - Migration to change LineString sequence geometry into MultiLinestring was not compatible with older PostGIS version, making Docker image not able to migrate populated sequences tables from 2.4 to 2.5.
92
+ - Route `/api/collections/:cid/geovisio_status` was returning non-empty list of items when no pictures was yet associated to the sequence.
93
+ - Improve `/api/collections/:cid/geovisio_status` performance for big sequences.
94
+ - Improve performance of big sequences deletion in database.
95
+
96
+ ### Removed
97
+
98
+ - All binary exif fields are removed from the database. This should save quite a lot of database storage.
99
+
12
100
  ## [2.5.0] - 2024-03-07
13
101
 
14
102
  ### Added
@@ -69,7 +157,7 @@ Before _1.6.0_, [Viewer](https://gitlab.com/geovisio/web-viewer) was embed in th
69
157
 
70
158
  - Docker container work directory is now `/opt/geovisio`.
71
159
  - Docker compose file with blurring is lighter, to for easier maintenance.
72
- - Update [geo-picture-tag-reader](https://gitlab.com/geovisio/geo-picture-tag-reader) to [1.0.3 version](https://gitlab.com/geovisio/geo-picture-tag-reader/-/tags/1.0.3).
160
+ - Update [geo-picture-tag-reader](https://gitlab.com/panoramax/server/geo-picture-tag-reader) to [1.0.3 version](https://gitlab.com/panoramax/server/geo-picture-tag-reader/-/tags/1.0.3).
73
161
 
74
162
  ### Removed
75
163
 
@@ -111,7 +199,7 @@ Before _1.6.0_, [Viewer](https://gitlab.com/geovisio/web-viewer) was embed in th
111
199
 
112
200
  ### Changed
113
201
 
114
- - [GeoPic Tag Reader](https://gitlab.com/geovisio/geo-picture-tag-reader) updated to 0.4.1 to embed stronger checks on picture coordinates.
202
+ - [GeoPic Tag Reader](https://gitlab.com/panoramax/server/geo-picture-tag-reader) updated to 0.4.1 to embed stronger checks on picture coordinates.
115
203
 
116
204
  ### Fixed
117
205
 
@@ -133,7 +221,7 @@ Before _1.6.0_, [Viewer](https://gitlab.com/geovisio/web-viewer) was embed in th
133
221
 
134
222
  ### Changed
135
223
 
136
- - The Docker compose file `docker-compose-full.yml` now embeds [GeoVisio Website](https://gitlab.com/geovisio/website), available on `localhost:3000`.
224
+ - The Docker compose file `docker-compose-full.yml` now embeds [GeoVisio Website](https://gitlab.com/panoramax/server/website), available on `localhost:3000`.
137
225
 
138
226
  ### Fixed
139
227
 
@@ -202,7 +290,7 @@ Before _1.6.0_, [Viewer](https://gitlab.com/geovisio/web-viewer) was embed in th
202
290
  ### Added
203
291
 
204
292
  - Added a `/api/configuration` endpoint with the API configuration. This endpoint is meant to provided easy frontend configuration.
205
- - Support of Bearer token authorization. This should improve API authentication when a browser is not available, for example in usage with the [CLI](https://gitlab.com/geovisio/cli).
293
+ - Support of Bearer token authorization. This should improve API authentication when a browser is not available, for example in usage with the [CLI](https://gitlab.com/panoramax/clients/cli).
206
294
  - The HTTP response header `Access-Control-Expose-Headers` is added to STAC response to allow web browser using the `Location` header.
207
295
  - Add API routes to generate a claimable token. By default, it's not associated to any account (created by a `POST` on `/api/auth/tokens/generate`). To be usable, this token needs to be associated to an account via a authenticated call on `/api/auth/tokens/<uuid:token_id>/claim`. This offers a nicer authentication flow on the CLI.
208
296
  - Add an API route to revoke a token, a `DELETE` on `/api/users/me/tokens/<uuid:token_id>`
@@ -210,7 +298,7 @@ Before _1.6.0_, [Viewer](https://gitlab.com/geovisio/web-viewer) was embed in th
210
298
  ### Changed
211
299
 
212
300
  - Blur picture is called with a `keep=1` URL query parameter (for a coming migration to [SGBlur](https://github.com/cquest/sgblur)) to keep original unblurred parts on blur API side.
213
- - [GeoPic Tag Reader](https://gitlab.com/geovisio/geo-picture-tag-reader) updated to 0.1.0 : more EXIF tags are supported for date, heading, GPS coordinates. Also, warnings issued by reader are stored in GeoVisio API database.
301
+ - [GeoPic Tag Reader](https://gitlab.com/panoramax/server/geo-picture-tag-reader) updated to 0.1.0 : more EXIF tags are supported for date, heading, GPS coordinates. Also, warnings issued by reader are stored in GeoVisio API database.
214
302
  - All sources have been moved from `./server/src` to `./geovisio` (thanks to [Nick Whitelegg](https://gitlab.com/nickw1)). Thus, sources are now imported as `import geovisio` instead of `import src`.
215
303
 
216
304
  ### Fixed
@@ -239,8 +327,8 @@ Before _1.6.0_, [Viewer](https://gitlab.com/geovisio/web-viewer) was embed in th
239
327
  - Move auth apis from `/auth` to `/api/auth`.
240
328
  - Docker image moved to [`geovisio/api`](https://hub.docker.com/r/geovisio/api) (was previously `panieravide/geovisio`)
241
329
  - After the OAuth process launched by `/api/auth/login`, we are redirected to the home page
242
- - Pictures blurring is now **externalized** : GeoVisio API calls a third-party _blurring API_ (which is [available as a part of the whole GeoVisio stack](https://gitlab.com/geovisio/blurring)) instead of relying on internal scripts. This allows more flexible deployments. This changes settings like `BLUR_STRATEGY` which becomes `BLUR_URL`.
243
- - Reading of EXIF tags from pictures is now done by a separated library called [Geopic Tag Reader](https://gitlab.com/geovisio/geo-picture-tag-reader).
330
+ - Pictures blurring is now **externalized** : GeoVisio API calls a third-party _blurring API_ (which is [available as a part of the whole GeoVisio stack](https://gitlab.com/panoramax/server/blurring)) instead of relying on internal scripts. This allows more flexible deployments. This changes settings like `BLUR_STRATEGY` which becomes `BLUR_URL`.
331
+ - Reading of EXIF tags from pictures is now done by a separated library called [Geopic Tag Reader](https://gitlab.com/panoramax/server/geo-picture-tag-reader).
244
332
  - Pictures derivates are now (again) stored in JPEG format. API still can serve images in both JPEG or WebP formats, but with improved performance if using JPEG
245
333
  - Thumbnail image is always generated, no matter of `DERIVATES_STRATEGY` value, for better performance on viewer side
246
334
  - When picture blurring is enabled, original uploaded image is not stored, only blurred version is kept
@@ -262,15 +350,15 @@ Before _1.6.0_, [Viewer](https://gitlab.com/geovisio/web-viewer) was embed in th
262
350
  ### Fixed
263
351
 
264
352
  - Tests were failing when using PySTAC 1.7.0 due to unavaible `extra_fields['id']` on links
265
- - EXIF tags filled with blank spaces or similar characters were not handled as null, causing unnecessary errors on pictures processing (issues [#65](https://gitlab.com/geovisio/api/-/issues/65) and [#66](https://gitlab.com/geovisio/api/-/issues/66))
266
- - Make sure picture EXIF orientation is always used and applied ([#71](https://gitlab.com/geovisio/api/-/issues/71))
353
+ - EXIF tags filled with blank spaces or similar characters were not handled as null, causing unnecessary errors on pictures processing (issues [#65](https://gitlab.com/panoramax/server/api/-/issues/65) and [#66](https://gitlab.com/panoramax/server/api/-/issues/66))
354
+ - Make sure picture EXIF orientation is always used and applied ([#71](https://gitlab.com/panoramax/server/api/-/issues/71))
267
355
  - Updates on DB table `pictures` and deletes on DB table `sequences_pictures` now updates `sequences.geom` column automatically
268
356
 
269
357
  ### Removed
270
358
 
271
- - Removed `SERVER_NAME` from configuration. This parameter was used for url generation, but was causing problems in some cases (cf. [related issue](https://gitlab.com/geovisio/geovisio/-/issues/48))
359
+ - Removed `SERVER_NAME` from configuration. This parameter was used for url generation, but was causing problems in some cases (cf. [related issue](https://gitlab.com/panoramax/server/api/-/issues/48))
272
360
  - Removed `BACKEND_MODE` from configuration. This parameter was only used in docker/kubernetes context and can be changed from a environment variable to an argument.
273
- - Removed the `process-sequences` and `redo-sequences` flask's targets. All pictures upload now pass through the API, and the easiest way to do this is to use [geovisio cli](https://gitlab.com/geovisio/cli).
361
+ - Removed the `process-sequences` and `redo-sequences` flask's targets. All pictures upload now pass through the API, and the easiest way to do this is to use [geovisio cli](https://gitlab.com/panoramax/clients/cli).
274
362
  - Removed the `fill-with-mock-data` Flask command
275
363
  - Pictures and sequences file paths are removed from database (all storage is based on picture ID)
276
364
 
@@ -459,22 +547,24 @@ FLASK_APP="src" flask process-sequences
459
547
  - Viewer based on Photo Sphere Viewer automatically calling API to search and retrieve pictures
460
548
  - Dockerfile for easy server setup
461
549
 
462
- [Unreleased]: https://gitlab.com/geovisio/api/-/compare/2.5.0...develop
463
- [2.5.0]: https://gitlab.com/geovisio/api/-/compare/2.4.0...2.5.0
464
- [2.4.0]: https://gitlab.com/geovisio/api/-/compare/2.3.1...2.4.0
465
- [2.3.1]: https://gitlab.com/geovisio/api/-/compare/2.3.0...2.3.1
466
- [2.3.0]: https://gitlab.com/geovisio/api/-/compare/2.2.0...2.3.0
467
- [2.2.0]: https://gitlab.com/geovisio/api/-/compare/2.1.1...2.2.0
468
- [2.1.1]: https://gitlab.com/geovisio/api/-/compare/2.1.0...2.1.1
469
- [2.1.0]: https://gitlab.com/geovisio/api/-/compare/2.0.2...2.1.0
470
- [2.0.2]: https://gitlab.com/geovisio/api/-/compare/2.0.1...2.0.2
471
- [2.0.1]: https://gitlab.com/geovisio/api/-/compare/2.0.0...2.0.1
472
- [2.0.0]: https://gitlab.com/geovisio/api/-/compare/1.5.0...2.0.0
473
- [1.5.0]: https://gitlab.com/geovisio/api/-/compare/1.4.1...1.5.0
474
- [1.4.1]: https://gitlab.com/geovisio/api/-/compare/1.4.0...1.4.1
475
- [1.4.0]: https://gitlab.com/geovisio/api/-/compare/1.3.1...1.4.0
476
- [1.3.1]: https://gitlab.com/geovisio/api/-/compare/1.3.0...1.3.1
477
- [1.3.0]: https://gitlab.com/geovisio/api/-/compare/1.2.0...1.3.0
478
- [1.2.0]: https://gitlab.com/geovisio/api/-/compare/1.1.0...1.2.0
479
- [1.1.0]: https://gitlab.com/geovisio/api/-/compare/1.0.0...1.1.0
480
- [1.0.0]: https://gitlab.com/geovisio/api/-/commits/1.0.0
550
+ [Unreleased]: https://gitlab.com/panoramax/server/api/-/compare/2.7.0...develop
551
+ [2.7.0]: https://gitlab.com/panoramax/server/api/-/compare/2.6.0...2.7.0
552
+ [2.6.0]: https://gitlab.com/panoramax/server/api/-/compare/2.5.0...2.6.0
553
+ [2.5.0]: https://gitlab.com/panoramax/server/api/-/compare/2.4.0...2.5.0
554
+ [2.4.0]: https://gitlab.com/panoramax/server/api/-/compare/2.3.1...2.4.0
555
+ [2.3.1]: https://gitlab.com/panoramax/server/api/-/compare/2.3.0...2.3.1
556
+ [2.3.0]: https://gitlab.com/panoramax/server/api/-/compare/2.2.0...2.3.0
557
+ [2.2.0]: https://gitlab.com/panoramax/server/api/-/compare/2.1.1...2.2.0
558
+ [2.1.1]: https://gitlab.com/panoramax/server/api/-/compare/2.1.0...2.1.1
559
+ [2.1.0]: https://gitlab.com/panoramax/server/api/-/compare/2.0.2...2.1.0
560
+ [2.0.2]: https://gitlab.com/panoramax/server/api/-/compare/2.0.1...2.0.2
561
+ [2.0.1]: https://gitlab.com/panoramax/server/api/-/compare/2.0.0...2.0.1
562
+ [2.0.0]: https://gitlab.com/panoramax/server/api/-/compare/1.5.0...2.0.0
563
+ [1.5.0]: https://gitlab.com/panoramax/server/api/-/compare/1.4.1...1.5.0
564
+ [1.4.1]: https://gitlab.com/panoramax/server/api/-/compare/1.4.0...1.4.1
565
+ [1.4.0]: https://gitlab.com/panoramax/server/api/-/compare/1.3.1...1.4.0
566
+ [1.3.1]: https://gitlab.com/panoramax/server/api/-/compare/1.3.0...1.3.1
567
+ [1.3.0]: https://gitlab.com/panoramax/server/api/-/compare/1.2.0...1.3.0
568
+ [1.2.0]: https://gitlab.com/panoramax/server/api/-/compare/1.1.0...1.2.0
569
+ [1.1.0]: https://gitlab.com/panoramax/server/api/-/compare/1.0.0...1.1.0
570
+ [1.0.0]: https://gitlab.com/panoramax/server/api/-/commits/1.0.0
@@ -0,0 +1,55 @@
1
+ FROM python:3.11-slim
2
+
3
+ # Stable metadata
4
+ LABEL org.opencontainers.image.title="GeoVisio API"
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
+ LABEL org.opencontainers.image.authors="Adrien PAVIE <panieravide@riseup.net>"
7
+ LABEL org.opencontainers.image.source="https://gitlab.com/panoramax/server/api.git"
8
+ LABEL org.opencontainers.image.documentation="https://docs.panoramax.fr/api/"
9
+ LABEL org.opencontainers.image.vendor="Panoramax"
10
+ LABEL org.opencontainers.image.licenses="MIT"
11
+ LABEL org.opencontainers.image.url="https://panoramax.fr/"
12
+
13
+ # Install system dependencies
14
+ # and create a `geovisio` user, to run the app as non root user
15
+ RUN apt update \
16
+ && apt install -y git gettext make \
17
+ && pip install waitress gunicorn Babel \
18
+ && rm -rf /var/lib/apt/lists/* \
19
+ && mkdir -p /opt/geovisio /data/geovisio \
20
+ && groupadd --gid 1000 geovisio \
21
+ && useradd --uid 1000 --gid 1000 -m geovisio \
22
+ && chown -R geovisio:geovisio /opt/geovisio /data/geovisio
23
+
24
+ WORKDIR /opt/geovisio
25
+ USER geovisio
26
+
27
+ # Install Python dependencies
28
+ COPY ./README.md ./LICENSE ./pyproject.toml ./
29
+ COPY ./geovisio/__init__.py ./geovisio/
30
+ RUN pip install -e . --user
31
+
32
+ # Add source files
33
+ COPY ./images ./images/
34
+ COPY ./docker/docker-entrypoint.sh ./
35
+ COPY ./geovisio ./geovisio
36
+ COPY ./migrations ./migrations
37
+ COPY ./Makefile ./
38
+
39
+ # Generate i18n compiled files
40
+ USER root
41
+ RUN make i18n-po2code
42
+ USER geovisio
43
+
44
+ # Retrieve build metadata
45
+ ARG GIT_DESCRIBE
46
+ LABEL org.opencontainers.image.revision=$GIT_DESCRIBE
47
+
48
+ # Environment variables
49
+ ENV FLASK_APP=geovisio
50
+ ENV FS_URL="/data/geovisio"
51
+ ENV API_GIT_VERSION=$GIT_DESCRIBE
52
+
53
+ # Expose service
54
+ EXPOSE 5000
55
+ ENTRYPOINT ["./docker-entrypoint.sh"]
@@ -0,0 +1,35 @@
1
+ .DEFAULT_GOAL := help
2
+
3
+ .PHONY: run-all-compose
4
+
5
+ run-all-compose: ## Run all services with docker compose
6
+ docker-compose -f docker/docker-compose-full.yml up
7
+
8
+ fmt: ## Run code formatting
9
+ black .
10
+
11
+ generate-swagger: ## Generate swagger documentation
12
+ FS_URL=/tmp flask -e test.env generate-api-schema > docs/api/open_api.json
13
+
14
+ generate-doc: generate-swagger ## Generate mkdocs documentation
15
+ mkdocs build --strict
16
+
17
+ serve-doc: generate-swagger ## Serve mkdocs documentation
18
+ mkdocs serve
19
+
20
+ help: ## Print this help message
21
+ @grep -E '^[a-zA-Z_-]+:.*## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
22
+
23
+ i18n-code2pot:
24
+ pybabel extract -F babel.cfg -o geovisio/translations/messages.pot geovisio/
25
+ msginit --locale=en --no-translator --input=geovisio/translations/messages.pot --output=geovisio/translations/en/LC_MESSAGES/messages.po
26
+
27
+ i18n-po2code:
28
+ pybabel compile -d geovisio/translations/
29
+
30
+ build-docker:
31
+ docker buildx build \
32
+ --build-arg GIT_DESCRIBE=`git describe` \
33
+ --label=org.opencontainers.image.created=`date -u +'%Y-%m-%dT%H:%M:%SZ'` \
34
+ --label=org.opencontainers.image.version=`cat geovisio/__init__.py | grep -e '^__version__' | cut -d \" -f 2` \
35
+ -t panoramax/api:develop .
@@ -0,0 +1,95 @@
1
+ Metadata-Version: 2.1
2
+ Name: geovisio
3
+ Version: 2.7.0
4
+ Summary: GeoVisio API - Main
5
+ Author-email: Adrien PAVIE <panieravide@riseup.net>, Antoine Desbordes <antoine.desbordes@gmail.com>
6
+ Requires-Python: >=3.10
7
+ Description-Content-Type: text/markdown
8
+ Classifier: License :: OSI Approved :: MIT License
9
+ Requires-Dist: Flask ~= 2.3
10
+ Requires-Dist: psycopg[pool] ~= 3.1
11
+ Requires-Dist: flasgger ~= 0.9.7
12
+ Requires-Dist: Pillow ~= 9.4
13
+ Requires-Dist: Flask-Cors ~= 4.0
14
+ Requires-Dist: fs ~= 2.4
15
+ Requires-Dist: fs-s3fs-forked ~= 1.1.3
16
+ Requires-Dist: flask-compress ~= 1.14
17
+ Requires-Dist: requests ~= 2.31
18
+ Requires-Dist: yoyo-migrations ~= 8.2
19
+ Requires-Dist: psycopg-binary ~= 3.1
20
+ Requires-Dist: python-dotenv ~= 0.21
21
+ Requires-Dist: authlib ~= 1.2
22
+ Requires-Dist: Flask-Executor ~= 1.0
23
+ Requires-Dist: geopic-tag-reader[write-exif] == 1.3.1
24
+ Requires-Dist: rfeed ~= 1.1.1
25
+ Requires-Dist: sentry-sdk[flask] ~= 1.31
26
+ Requires-Dist: pygeofilter[backend-native] ~= 0.2.4
27
+ Requires-Dist: python-dateutil ~= 2.8.2
28
+ Requires-Dist: tzdata ~= 2024.1
29
+ Requires-Dist: croniter ~= 2.0.5
30
+ Requires-Dist: pydantic ~= 2.7
31
+ Requires-Dist: pydantic-extra-types ~= 2.7
32
+ Requires-Dist: flask-babel ~= 4.0.0
33
+ Requires-Dist: geojson-pydantic ~= 1.1.0
34
+ Requires-Dist: flit ~= 3.9.0 ; extra == "build"
35
+ Requires-Dist: coverage ~= 6.5 ; extra == "dev"
36
+ Requires-Dist: protobuf ~= 4.21 ; extra == "dev"
37
+ Requires-Dist: mapbox-vector-tile ~= 2.0 ; extra == "dev"
38
+ Requires-Dist: pystac ~= 1.9 ; extra == "dev"
39
+ Requires-Dist: pytest ~= 8.3 ; extra == "dev"
40
+ Requires-Dist: pytest-datafiles ~= 2.0 ; extra == "dev"
41
+ Requires-Dist: pyexiv2 ~= 2.15 ; extra == "dev"
42
+ Requires-Dist: testcontainers ~= 4.1 ; extra == "dev"
43
+ Requires-Dist: requests-mock ~= 1.11 ; extra == "dev"
44
+ Requires-Dist: black ~= 24.1 ; extra == "dev"
45
+ Requires-Dist: pre-commit ~= 3.3 ; extra == "dev"
46
+ Requires-Dist: pyyaml ~= 6.0 ; extra == "dev"
47
+ Requires-Dist: openapi-spec-validator ~= 0.7 ; extra == "dev"
48
+ Requires-Dist: stac-api-validator ~= 0.6.3 ; extra == "dev"
49
+ Requires-Dist: mkdocs-material ~= 9.5.21 ; extra == "docs"
50
+ Requires-Dist: mkdocs-swagger-ui-tag ~= 0.6.10 ; extra == "docs"
51
+ Project-URL: Home, https://gitlab.com/panoramax/server/api
52
+ Project-URL: Source Code, https://gitlab.com/panoramax/server/api
53
+ Provides-Extra: build
54
+ Provides-Extra: dev
55
+ Provides-Extra: docs
56
+
57
+ # ![Panoramax](https://upload.wikimedia.org/wikipedia/commons/thumb/a/a9/Panoramax.svg/40px-Panoramax.svg.png) Panoramax
58
+
59
+ __Panoramax__ is a digital resource for sharing and using 📍📷 field photos. Anyone can take photographs of places visible from the public streets and contribute them to the Panoramax database. This data is then freely accessible and reusable by all. More information available at [gitlab.com/panoramax](https://gitlab.com/panoramax) and [panoramax.fr](https://panoramax.fr/).
60
+
61
+
62
+ # 🌐 Panoramax API
63
+
64
+ This repository only contains __the backend and web API__ of a Panoramax instance.
65
+
66
+ ## Features
67
+
68
+ * A __web API__ to search and upload pictures collections
69
+ * Search pictures by ID, date, location
70
+ * Compatible with [SpatioTemporal Asset Catalog](https://stacspec.org/) and [OGC WFS 3](https://github.com/opengeospatial/WFS_FES) specifications
71
+ * Upload your pictures and sequences
72
+ * An easy-to-use __backend__
73
+ * Generates automatically thumbnail, small and tiled versions of your pictures
74
+ * Compatible with various filesystems (classic, S3, FTP...)
75
+ * Authentication and blurring API can be plugged-in for production-ready use
76
+
77
+
78
+ ## Install & run
79
+
80
+ Our [documentation](https://gitlab.com/panoramax/server/api/-/tree/develop/docs) will help you install, configure and run a Panoramax instance.
81
+
82
+ If at some point you're lost or need help, you can contact us through [issues](https://gitlab.com/panoramax/server/api/-/issues) or by [email](mailto:panieravide@riseup.net).
83
+
84
+
85
+ ## Contributing
86
+
87
+ Pull requests are welcome. For major changes, please open an [issue](https://gitlab.com/panoramax/server/api/-/issues) first to discuss what you would like to change.
88
+
89
+ More information about developing is available in [documentation](https://gitlab.com/panoramax/server/api/-/tree/develop/docs).
90
+
91
+
92
+ ## ⚖️ License
93
+
94
+ Copyright (c) Panoramax team 2022-2024, [released under MIT license](https://gitlab.com/panoramax/server/api/-/blob/develop/LICENSE).
95
+
@@ -0,0 +1,7 @@
1
+ web: bin/run_production_api.sh
2
+
3
+ # After having poped the API, we upgrade the database schema
4
+ # If the postdeploy fails, scalingo will not expose the new app, and will keep the old one
5
+ # Note that we added DB_CHECK_SCHEMA=false on the `web` to ensure that it starts without checking the schema (since it will be updated after)
6
+ # Note2: scalingo has a 20mn timeout for this, so migration longer will need to be applied manually
7
+ postdeploy: flask db upgrade