geovisio 2.1.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 (139) hide show
  1. geovisio-2.1.0/.dockerignore +11 -0
  2. geovisio-2.1.0/.flaskenv +1 -0
  3. geovisio-2.1.0/.gitignore +10 -0
  4. geovisio-2.1.0/.gitlab-ci.yml +231 -0
  5. geovisio-2.1.0/.pre-commit-config.yaml +5 -0
  6. geovisio-2.1.0/CHANGELOG.md +317 -0
  7. geovisio-2.1.0/CODE_OF_CONDUCT.md +134 -0
  8. geovisio-2.1.0/Dockerfile +36 -0
  9. geovisio-2.1.0/LICENSE +21 -0
  10. geovisio-2.1.0/Makefile +12 -0
  11. geovisio-2.1.0/PKG-INFO +111 -0
  12. geovisio-2.1.0/Procfile +1 -0
  13. geovisio-2.1.0/README.md +68 -0
  14. geovisio-2.1.0/bin/post_compile +4 -0
  15. geovisio-2.1.0/docker/docker-compose-auth.yml +80 -0
  16. geovisio-2.1.0/docker/docker-compose-blurring.yml +18 -0
  17. geovisio-2.1.0/docker/docker-compose-full.yml +130 -0
  18. geovisio-2.1.0/docker/docker-compose-keycloak.yml +22 -0
  19. geovisio-2.1.0/docker/docker-compose-minio.yml +35 -0
  20. geovisio-2.1.0/docker/docker-entrypoint.sh +50 -0
  21. geovisio-2.1.0/docker/keycloak-realm.json +2005 -0
  22. geovisio-2.1.0/docker-compose.yml +35 -0
  23. geovisio-2.1.0/docs/01_Start.md +28 -0
  24. geovisio-2.1.0/docs/07_Database_setup.md +53 -0
  25. geovisio-2.1.0/docs/10_Install_Classic.md +32 -0
  26. geovisio-2.1.0/docs/10_Install_Scalingo.md +9 -0
  27. geovisio-2.1.0/docs/11_Server_settings.md +108 -0
  28. geovisio-2.1.0/docs/12_External_Identity_Providers.md +82 -0
  29. geovisio-2.1.0/docs/13_Pictures_processing.md +52 -0
  30. geovisio-2.1.0/docs/14_Running_Classic.md +114 -0
  31. geovisio-2.1.0/docs/14_Running_Docker.md +118 -0
  32. geovisio-2.1.0/docs/15_Pictures_requirements.md +27 -0
  33. geovisio-2.1.0/docs/16_Using_API.md +205 -0
  34. geovisio-2.1.0/docs/17_Blur_API.md +25 -0
  35. geovisio-2.1.0/docs/19_Develop_server.md +131 -0
  36. geovisio-2.1.0/docs/90_Releases.md +26 -0
  37. geovisio-2.1.0/geovisio/__init__.py +276 -0
  38. geovisio-2.1.0/geovisio/auth.py +471 -0
  39. geovisio-2.1.0/geovisio/config_app.py +170 -0
  40. geovisio-2.1.0/geovisio/configuration.py +44 -0
  41. geovisio-2.1.0/geovisio/db_migrations.py +87 -0
  42. geovisio-2.1.0/geovisio/docs.py +323 -0
  43. geovisio-2.1.0/geovisio/errors.py +52 -0
  44. geovisio-2.1.0/geovisio/filesystems.py +122 -0
  45. geovisio-2.1.0/geovisio/map.py +196 -0
  46. geovisio-2.1.0/geovisio/pictures.py +687 -0
  47. geovisio-2.1.0/geovisio/runner_pictures.py +735 -0
  48. geovisio-2.1.0/geovisio/setup.cfg +34 -0
  49. geovisio-2.1.0/geovisio/stac.py +2190 -0
  50. geovisio-2.1.0/geovisio/tasks/__init__.py +1 -0
  51. geovisio-2.1.0/geovisio/tasks/reorder_sequences.py +94 -0
  52. geovisio-2.1.0/geovisio/templates/main.html +91 -0
  53. geovisio-2.1.0/geovisio/templates/viewer.html +32 -0
  54. geovisio-2.1.0/geovisio/tokens.py +377 -0
  55. geovisio-2.1.0/geovisio/users.py +46 -0
  56. geovisio-2.1.0/geovisio/utils.py +35 -0
  57. geovisio-2.1.0/images/big_picture.png +0 -0
  58. geovisio-2.1.0/images/big_picture.svg +436 -0
  59. geovisio-2.1.0/images/geovisio_authentication_flow.svg +16 -0
  60. geovisio-2.1.0/images/logo.png +0 -0
  61. geovisio-2.1.0/images/logo.svg +156 -0
  62. geovisio-2.1.0/images/logo_full.png +0 -0
  63. geovisio-2.1.0/images/logo_full.svg +191 -0
  64. geovisio-2.1.0/images/screenshot.jpg +0 -0
  65. geovisio-2.1.0/images/sponsors.png +0 -0
  66. geovisio-2.1.0/migrations/20221201_01_wpCGc-initial-schema.rollback.sql +9 -0
  67. geovisio-2.1.0/migrations/20221201_01_wpCGc-initial-schema.sql +71 -0
  68. geovisio-2.1.0/migrations/20221201_02_ZG8AR-camera-information.py +40 -0
  69. geovisio-2.1.0/migrations/20221222_01_fsB6f-add-account.rollback.sql +7 -0
  70. geovisio-2.1.0/migrations/20221222_01_fsB6f-add-account.sql +33 -0
  71. geovisio-2.1.0/migrations/20230113_01_0co97-rm-metadata-duplicates.rollback.sql +5 -0
  72. geovisio-2.1.0/migrations/20230113_01_0co97-rm-metadata-duplicates.sql +5 -0
  73. geovisio-2.1.0/migrations/20230116_01_9PkjZ-add-oauth-provider.rollback.sql +12 -0
  74. geovisio-2.1.0/migrations/20230116_01_9PkjZ-add-oauth-provider.sql +10 -0
  75. geovisio-2.1.0/migrations/20230117_01_K71Pd-pictures-ts-index.rollback.sql +4 -0
  76. geovisio-2.1.0/migrations/20230117_01_K71Pd-pictures-ts-index.sql +4 -0
  77. geovisio-2.1.0/migrations/20230130_01_VRIv2-sequences-account.rollback.sql +5 -0
  78. geovisio-2.1.0/migrations/20230130_01_VRIv2-sequences-account.sql +25 -0
  79. geovisio-2.1.0/migrations/20230324_01_ba9WA-status.rollback.sql +35 -0
  80. geovisio-2.1.0/migrations/20230324_01_ba9WA-status.sql +11 -0
  81. geovisio-2.1.0/migrations/20230324_02_efgI6-picture-process.rollback.sql +20 -0
  82. geovisio-2.1.0/migrations/20230324_02_efgI6-picture-process.sql +44 -0
  83. geovisio-2.1.0/migrations/20230407_01_wofh1-computed-headings.rollback.sql +6 -0
  84. geovisio-2.1.0/migrations/20230407_01_wofh1-computed-headings.sql +6 -0
  85. geovisio-2.1.0/migrations/20230417_01_ZgLMY-add-exif-metadata-column-for-pictures.rollback.sql +4 -0
  86. geovisio-2.1.0/migrations/20230417_01_ZgLMY-add-exif-metadata-column-for-pictures.sql +4 -0
  87. geovisio-2.1.0/migrations/20230420_01_elaN3-remove-picture-and-sequence-file-paths.rollback.sql +5 -0
  88. geovisio-2.1.0/migrations/20230420_01_elaN3-remove-picture-and-sequence-file-paths.sql +5 -0
  89. geovisio-2.1.0/migrations/20230425_01_gYP77-pictures-edits-triggers.rollback.sql +5 -0
  90. geovisio-2.1.0/migrations/20230425_01_gYP77-pictures-edits-triggers.sql +64 -0
  91. geovisio-2.1.0/migrations/20230427_01_k5e5w-timestamps.rollback.sql +10 -0
  92. geovisio-2.1.0/migrations/20230427_01_k5e5w-timestamps.sql +19 -0
  93. geovisio-2.1.0/migrations/20230511_01_TdpKo-tokens.rollback.sql +7 -0
  94. geovisio-2.1.0/migrations/20230511_01_TdpKo-tokens.sql +34 -0
  95. geovisio-2.1.0/migrations/20230615_01_u7aRf-pic-delete-cascade.rollback.sql +10 -0
  96. geovisio-2.1.0/migrations/20230615_01_u7aRf-pic-delete-cascade.sql +12 -0
  97. geovisio-2.1.0/migrations/20230623_01_y1SiQ-pic-deletion-task.rollback.sql +39 -0
  98. geovisio-2.1.0/migrations/20230623_01_y1SiQ-pic-deletion-task.sql +36 -0
  99. geovisio-2.1.0/migrations/20230629_01_ZdB3i-compute-heading-0.sql +27 -0
  100. geovisio-2.1.0/migrations/20230711_01_JGSPB-inserted-at-index.rollback.sql +4 -0
  101. geovisio-2.1.0/migrations/20230711_01_JGSPB-inserted-at-index.sql +4 -0
  102. geovisio-2.1.0/pyproject.toml +55 -0
  103. geovisio-2.1.0/pytest.ini +4 -0
  104. geovisio-2.1.0/runtime.txt +1 -0
  105. geovisio-2.1.0/tests/__init__.py +0 -0
  106. geovisio-2.1.0/tests/conftest.py +361 -0
  107. geovisio-2.1.0/tests/data/1.jpg +0 -0
  108. geovisio-2.1.0/tests/data/1_blurred.jpg +0 -0
  109. geovisio-2.1.0/tests/data/2.jpg +0 -0
  110. geovisio-2.1.0/tests/data/3.jpg +0 -0
  111. geovisio-2.1.0/tests/data/4.jpg +0 -0
  112. geovisio-2.1.0/tests/data/5.jpg +0 -0
  113. geovisio-2.1.0/tests/data/b1.jpg +0 -0
  114. geovisio-2.1.0/tests/data/b2.jpg +0 -0
  115. geovisio-2.1.0/tests/data/c1.jpg +0 -0
  116. geovisio-2.1.0/tests/data/d1.jpg +0 -0
  117. geovisio-2.1.0/tests/data/e1.jpg +0 -0
  118. geovisio-2.1.0/tests/data/e2.jpg +0 -0
  119. geovisio-2.1.0/tests/data/e3.jpg +0 -0
  120. geovisio-2.1.0/tests/data/e4.jpg +0 -0
  121. geovisio-2.1.0/tests/data/e5.jpg +0 -0
  122. geovisio-2.1.0/tests/data/invalid_exif.jpg +0 -0
  123. geovisio-2.1.0/tests/integration/__init__.py +0 -0
  124. geovisio-2.1.0/tests/integration/conftest.py +171 -0
  125. geovisio-2.1.0/tests/integration/docker-compose-auth-test.yml +6 -0
  126. geovisio-2.1.0/tests/integration/test_auth.py +313 -0
  127. geovisio-2.1.0/tests/integration/test_s3.py +357 -0
  128. geovisio-2.1.0/tests/integration/test_tokens.py +383 -0
  129. geovisio-2.1.0/tests/test_api_conformance.sh +110 -0
  130. geovisio-2.1.0/tests/test_configuration.py +10 -0
  131. geovisio-2.1.0/tests/test_db_migrations.py +108 -0
  132. geovisio-2.1.0/tests/test_factory.py +89 -0
  133. geovisio-2.1.0/tests/test_filesystems.py +63 -0
  134. geovisio-2.1.0/tests/test_map.py +148 -0
  135. geovisio-2.1.0/tests/test_pictures.py +485 -0
  136. geovisio-2.1.0/tests/test_runner_pictures.py +589 -0
  137. geovisio-2.1.0/tests/test_stac.py +2867 -0
  138. geovisio-2.1.0/tests/test_users.py +4 -0
  139. geovisio-2.1.0/yoyo.ini +5 -0
@@ -0,0 +1,11 @@
1
+ /**/__pycache__
2
+ /.pytest_cache
3
+ /env
4
+ /.env
5
+ /pictures
6
+ /docker/picfs
7
+ /.pytest_cache
8
+ /.git*
9
+ Dockerfile
10
+ /docs
11
+ /bin
@@ -0,0 +1 @@
1
+ FLASK_APP=geovisio
@@ -0,0 +1,10 @@
1
+ pictures
2
+ *.env
3
+ *.log
4
+ picfs
5
+ env
6
+ .pytest_cache
7
+ instance
8
+ __pycache__
9
+ config.py
10
+ docker/models/
@@ -0,0 +1,231 @@
1
+ variables:
2
+ DOCKER_BUILDKIT: 1 # use buildkit for better performance
3
+ DOCKER_DRIVER: overlay2 # better docker driver to avoid copying too many files on each run
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
7
+ DOCKER_TLS_CERTDIR: ""
8
+
9
+ # Pipelines will run only for MR, tag and develop/main commits
10
+ workflow:
11
+ rules:
12
+ - if: $CI_PIPELINE_SOURCE == "merge_request_event"
13
+ - if: $CI_COMMIT_TAG
14
+ - if: $CI_COMMIT_BRANCH == "develop"
15
+ - if: $CI_COMMIT_BRANCH == "main"
16
+
17
+ code-fmt:
18
+ stage: test
19
+ only:
20
+ - merge_requests
21
+ image: python:3.9-alpine
22
+ script:
23
+ - pip install black
24
+ - black --fast --check .
25
+
26
+ test-in-docker:
27
+ # run tests inside a docker only when the dockerfile changes since this test can be a bit slow
28
+ rules:
29
+ - if: $CI_DEPLOY_PASSWORD && $CI_DEPLOY_USER
30
+ changes:
31
+ - Dockerfile
32
+ - .dockerignore
33
+ stage: test
34
+ image: docker:latest
35
+ services:
36
+ - docker:dind
37
+ - postgis/postgis:latest
38
+ variables:
39
+ POSTGRES_DB: geovisio_test
40
+ POSTGRES_USER: geovisio
41
+ POSTGRES_PASSWORD: geovisiopass
42
+ POSTGRES_HOST_AUTH_METHOD: trust
43
+ TMP_CI_IMAGE: $GITLAB_REGISTRY/$IMAGE_NAME:$CI_COMMIT_SHORT_SHA
44
+ 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
+
47
+ before_script:
48
+ # login to the gitlab docker registry
49
+ - echo $CI_DEPLOY_PASSWORD | docker login -u $CI_DEPLOY_USER --password-stdin $GITLAB_REGISTRY
50
+ - docker buildx create --use --name "geovisio-image-builder" --driver=docker-container # use docker-container driver to be able to publish a full cache
51
+ script:
52
+ # create a docker image using the build_cache
53
+ # push the cache in the gitlab registry for the other steps
54
+ # Note: the cache mode is set to 'max' to cache the multi stage layers too
55
+ - docker buildx build
56
+ --cache-from "type=registry,ref=$CI_IMAGE_CACHE"
57
+ --cache-to "type=registry,mode=max,ref=$CI_IMAGE_CACHE"
58
+ --tag "$TMP_CI_IMAGE"
59
+ --load
60
+ --progress=plain
61
+ .
62
+ # run tests in docker container
63
+ - docker run --rm
64
+ --env DB_URL="postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgis-postgis/${POSTGRES_DB}"
65
+ --entrypoint "bash"
66
+ --network=host
67
+ $TMP_CI_IMAGE
68
+ -c 'pip install -e .[dev] && pytest -m "not skipci"'
69
+ after_script:
70
+ - docker rmi $TMP_CI_IMAGE || true # accept failure, as image creation can fail
71
+
72
+
73
+ test:
74
+ rules:
75
+ - if: $CI_COMMIT_TAG
76
+ when: never
77
+ - when: on_success
78
+
79
+ stage: test
80
+ image: python:3.9
81
+ services:
82
+ - postgis/postgis:latest
83
+ variables:
84
+ PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
85
+ POSTGRES_DB: geovisio_test
86
+ POSTGRES_USER: geovisio
87
+ POSTGRES_PASSWORD: geovisiopass
88
+ POSTGRES_HOST_AUTH_METHOD: trust
89
+ DB_URL: "postgres://$POSTGRES_USER:$POSTGRES_PASSWORD@postgis-postgis/$POSTGRES_DB"
90
+ FS_TMP_URL: "/tmp/geovisio_test/tmp/"
91
+ FS_PERMANENT_URL: "/tmp/geovisio_test/permanent/"
92
+ FS_DERIVATES_URL: "/tmp/geovisio_test/derivates/"
93
+ script:
94
+ - mkdir -p /tmp/geovisio_test/tmp /tmp/geovisio_test/derivates /tmp/geovisio_test/permanent
95
+ - pip install -e .
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
+ stage: test
107
+ image: python:3.10
108
+ services:
109
+ - postgis/postgis:latest
110
+ variables:
111
+ PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
112
+ POSTGRES_DB: geovisio_test
113
+ POSTGRES_USER: geovisio
114
+ POSTGRES_PASSWORD: geovisiopass
115
+ POSTGRES_HOST_AUTH_METHOD: trust
116
+ DB_URL: "postgres://$POSTGRES_USER:$POSTGRES_PASSWORD@postgis-postgis/$POSTGRES_DB"
117
+ FS_TMP_URL: "/tmp/geovisio_test/tmp/"
118
+ FS_PERMANENT_URL: "/tmp/geovisio_test/permanent/"
119
+ FS_DERIVATES_URL: "/tmp/geovisio_test/derivates/"
120
+ script:
121
+ - apt update && apt install -y wget jq
122
+ - mkdir -p /tmp/geovisio_test/tmp /tmp/geovisio_test/derivates /tmp/geovisio_test/permanent
123
+ - pip install -e .
124
+ - pip install -e .[dev]
125
+ - ./tests/test_api_conformance.sh
126
+
127
+
128
+ publish-develop:
129
+ rules:
130
+ # run job only for fork that have the credentials to pull images from the gitlab-registry
131
+ # and only for merge on 'develop' branch
132
+ - if: $CI_DEPLOY_PASSWORD == null || $CI_DEPLOY_USER == null
133
+ when: never
134
+ - if: $CI_COMMIT_REF_SLUG == "develop"
135
+ stage: deploy
136
+ image: docker:latest
137
+ services:
138
+ - docker:dind
139
+ - postgis/postgis:latest
140
+ variables:
141
+ POSTGRES_DB: geovisio_test
142
+ POSTGRES_USER: geovisio
143
+ POSTGRES_PASSWORD: geovisiopass
144
+ POSTGRES_HOST_AUTH_METHOD: trust
145
+ FF_NETWORK_PER_BUILD: 1 # we ask gitlab to create a custom docker network, to be able to use the services inside the docker
146
+ before_script:
147
+ # login to the gitlab docker registry to use the cache and to publish
148
+ - echo $CI_DEPLOY_PASSWORD | docker login -u $CI_DEPLOY_USER --password-stdin $GITLAB_REGISTRY
149
+ - docker buildx create --use --name "geovisio-image-builder" --driver=docker-container # use docker-container driver to be able to publish a full cache
150
+ # login to dockerhub
151
+ - echo $CI_REGISTRY_PASSWORD | docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY
152
+ script:
153
+ # build image using repository as cache
154
+ - docker buildx build
155
+ --cache-from "type=registry,ref=$CI_IMAGE_CACHE"
156
+ --cache-to "type=registry,mode=max,ref=$CI_IMAGE_CACHE"
157
+ --tag "$CI_REGISTRY_IMAGE:develop"
158
+ --label "org.opencontainers.image.title=$CI_PROJECT_TITLE"
159
+ --label "org.opencontainers.image.url=$CI_PROJECT_URL"
160
+ --label "org.opencontainers.image.created=$CI_JOB_STARTED_AT"
161
+ --label "org.opencontainers.image.revision=$CI_COMMIT_SHORT_SHA"
162
+ --load
163
+ --progress=plain
164
+ .
165
+ # run tests in docker container
166
+ - docker run --rm
167
+ --env DB_URL="postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgis-postgis/${POSTGRES_DB}"
168
+ --entrypoint "bash"
169
+ --network=host
170
+ "$CI_REGISTRY_IMAGE:develop"
171
+ -c 'pip install -e .[dev] && pytest -m "not skipci"'
172
+
173
+ # publish image to dockerhub with the develop tag
174
+ - docker push "$CI_REGISTRY_IMAGE:develop"
175
+
176
+ publish-tag-and-latest:
177
+ # we consider that tag always land on main
178
+ # and they always should publish a tagged image and the `latest` docker image
179
+ only:
180
+ - tags
181
+ stage: deploy
182
+ image: docker:latest
183
+ services:
184
+ - docker:dind
185
+ - postgis/postgis:latest
186
+ variables:
187
+ POSTGRES_DB: geovisio_test
188
+ POSTGRES_USER: geovisio
189
+ POSTGRES_PASSWORD: geovisiopass
190
+ POSTGRES_HOST_AUTH_METHOD: trust
191
+ FF_NETWORK_PER_BUILD: 1 # we ask gitlab to create a custom docker network, to be able to use the services inside the docker
192
+ before_script:
193
+ # login to the gitlab docker registry to use the cache and to publish
194
+ - echo $CI_DEPLOY_PASSWORD | docker login -u $CI_DEPLOY_USER --password-stdin $GITLAB_REGISTRY
195
+ - docker buildx create --use --name "geovisio-image-builder" --driver=docker-container # use docker-container driver to be able to publish a full cache
196
+ # login to dockerhub
197
+ - echo $CI_REGISTRY_PASSWORD | docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY
198
+ script:
199
+ # build image using repository as cache
200
+ - docker buildx build
201
+ --cache-from "type=registry,ref=$CI_IMAGE_CACHE"
202
+ --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"
209
+ --load
210
+ --progress=plain
211
+ .
212
+ # run tests in docker container
213
+ - docker run --rm
214
+ --env DB_URL="postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgis-postgis/${POSTGRES_DB}"
215
+ --entrypoint "bash"
216
+ --network=host
217
+ "$CI_REGISTRY_IMAGE:latest"
218
+ -c 'pip install -e .[dev] && pytest -m "not skipci"'
219
+
220
+ # publish image to dockerhub
221
+ - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME
222
+ - docker push $CI_REGISTRY_IMAGE:latest
223
+
224
+ publish-on-pypi:
225
+ only:
226
+ - tags
227
+ stage: deploy
228
+ image: python:3.9
229
+ script:
230
+ - pip install .[build]
231
+ - flit publish # use [flit](https://flit.pypa.io/) and FLIT_USERNAME/FLIT_PASSWORD env var
@@ -0,0 +1,5 @@
1
+ repos:
2
+ - repo: https://github.com/psf/black
3
+ rev: 23.3.0
4
+ hooks:
5
+ - id: black
@@ -0,0 +1,317 @@
1
+ # Changelog
2
+ All notable changes to this project will be documented in this file.
3
+
4
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
5
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
+
7
+ 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
+
9
+ ## [Unreleased]
10
+
11
+ ## [2.1.0] - 2023-07-20
12
+
13
+ ### Added
14
+ - A way to customize the picture's license. If none is set, the pictures's license is considered to be proprietary.
15
+ - A new route `PATCH /api/collections/:cid` is offered to change visibility of a sequence
16
+ - A way to call the vector tiles as an authenticated user. It is mainly used to be able to see objects only visible for this user.
17
+ - A `hidden` property in the vector tiles, to mark a sequence or picture as only visible for the owner of this sequence or picture. If the property is not set, the object is visible by all
18
+ - A new route `DELETE /api/collections/:cid` is offered to delete a collection. The deletion is done asynchronously.
19
+ - A new route `DELETE /api/collections/:cid/items/:id` is offered to delete a picture
20
+ - [OpenAPI](https://swagger.io/specification/) conformance tests are now automatically run through `tests/test_api_conformance.sh` script
21
+ - [Support of pagination](https://github.com/radiantearth/stac-api-spec/tree/main/ogcapi-features#item-pagination) for `GET /api/collections/:cid/items` API route (`first, last, prev, next` relation types)
22
+ * also support a `?withPicture=:picture_id` query paramater to ask for a page with a specific picture in it
23
+ - Add a `flask sequences reorder` subcommand to reorder all or some sequences using the picture's datetime.
24
+ - [Support of pagination](https://github.com/radiantearth/stac-api-spec/blob/master/ogcapi-features/README.md#collection-pagination) for `GET /api/collections` API route (`first, last, prev, next` relation types), with a default limit to 100 sequences retrieved per call
25
+ - Add 2 optional parameters to the `GET /api/collections` api: `created_after`/`created_before` used to filter the collection by their creation date.
26
+
27
+ ### Changed
28
+ - Docker compose files now use `latest` API image instead of `develop`
29
+ - In default pages (`/` and `/viewer.html`), web viewer version is now synced to current API version instead of develop
30
+ - Algorithm used for generating smaller versions of pictures changed from _NEAREST_ to _HAMMING_ for better results
31
+ - API documentation and specifications moved to `/api/docs/swagger` and `/api/docs/specs.json`, and with improved readability of their content
32
+ - Now heading are recomputed if set to 0 because some camera use this value by default
33
+ - Hidden pictures will now always be served through the API to be able to check permissions.
34
+
35
+ ### Fixed
36
+ - Raw picture bytes are sent to blurring API instead of Pillow-based version, avoiding various issues (too large files, missing EXIF)
37
+ - Docker-compose files are now compatible with MacOS (replaced `network_mode: host` to use a more classic approach)
38
+ - Some CORS HTTP headers were missing in API responses to allow client send credentials
39
+
40
+
41
+ ## [2.0.2] - 2023-06-08
42
+
43
+ ### Added
44
+ - [STAC extension "stats"](https://github.com/stac-extensions/stats) is used on routes `/collections` and `/collections/:id` to add number of items contained in given collection (property `stats:items.count`).
45
+ - A new route `PATCH /api/collections/:cid/items/:id` is offered to change visibility of a picture
46
+ - A new route `GET /api/collections/:cid/thumbnail.jpg` is offered to get the thumbnail of the first visible picture of a collection
47
+ - API landing page (`/api`) better advertises its capabilities:
48
+ - [Web Map Links](https://github.com/stac-extensions/web-map-links) STAC extension is used for vector tiles availability.
49
+ - Custom-defined links `item-preview` and `collection-preview` offer a template URL to have direct access to a thumbnail for either a sequence or a single picture.
50
+ - A `geovisio:status` field is added in various API responses (mainly in `/api/collections/:col_id/items` and `/api/collections/:col_id/items/:item_id`) to know if a picture is visible or not. This is mainly useful when retrieving your own sequences and pictures as an authenticated user.
51
+ - In vector tiles, in pictures layer, list of sequences associated to a picture is made available in its properties as `sequences` array.
52
+
53
+ ### Changed
54
+ - Improved deployment docs
55
+ - API route `/users/:userId/catalog/` changes:
56
+ - It sends different results according if you're looking for your own catalog as an authenticated user, or if you're looking to another user catalog. Your own catalog embeds all sequences, others catalogs only display publicly-available sequences.
57
+ - It embeds more properties in a link to child sequence: title, ID, items count, start/end date
58
+
59
+ ### Fixed
60
+ - Even if not necessary anymore (with the introduction of user tokens), API was checking if `OAUTH_PROVIDER` was set if you wanted to enable `API_FORCE_AUTH_ON_UPLOAD`.
61
+
62
+
63
+ ## [2.0.1] - 2023-05-24
64
+
65
+ ### Added
66
+ - Added a `/api/configuration` endpoint with the API configuration. This endpoint is meant to provided easy frontend configuration.
67
+ - 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).
68
+ - The HTTP response header `Access-Control-Expose-Headers` is added to STAC response to allow web browser using the `Location` header.
69
+ - 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.
70
+ - Add an API route to revoke a token, a `DELETE` on `/api/users/me/tokens/<uuid:token_id>`
71
+
72
+ ### Changed
73
+ - 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.
74
+ - [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.
75
+ - 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`.
76
+
77
+ ### Fixed
78
+ - Standard-definition pictures now embeds full EXIF tags from original picture
79
+ - Docker compose files were failing if some services were just a bit too long to start
80
+
81
+
82
+ ## [2.0.0] - 2023-04-28
83
+
84
+ ### Added
85
+ - Add [Providers](https://github.com/radiantearth/stac-api-spec/blob/main/stac-spec/item-spec/common-metadata.md#provider-object) to stac items and collections to have information about the account owning the collection/item
86
+ - Add the capability to require a login before creating a sequence and uploading pictures to it
87
+ - Add a `/api/users/me` route to get logged in user information, and a `/api/users/me/catalog` to get the catalog of the logged in user.
88
+ - Some background picture processes can be run using `flask picture-worker`. Those workers can run on a different server than the API
89
+ - Server settings to limit maximum threads: `PICTURE_PROCESS_THREADS_LIMIT`. Set to -1 to use all available threads, 0 to have no background threads at all (use this is you want another server running `flask picture-worker`)
90
+ - Added the collection's status in the `/geovisio_status` route.
91
+ - Use the python logger instead of print. The logging level can be changed with the `LOG_LEVEL` environment variable.
92
+ - The picture upload API route offers a `isBlurred=true` form parameter to skip blurring picture (if it is already blurred by author)
93
+ - All read EXIF metadata from pictures is stored in `pictures` tables in a `exif` column
94
+ - Filesystem storage can be also configured into 3 different variables for a more flexible storage: `FS_TMP_URL`, `FS_PERMANENT_URL`, `FS_DERIVATES_URL`
95
+ - STAC API responses gives `created` time for sequences and pictures (when it was imported), and `updated` time for sequences (last edit time)
96
+
97
+ ### Changed
98
+ - Move auth apis from `/auth` to `/api/auth`.
99
+ - Docker image moved to [`geovisio/api`](https://hub.docker.com/r/geovisio/api) (was previously `panieravide/geovisio`)
100
+ - After the OAuth process launched by `/api/auth/login`, we are redirected to the home page
101
+ - 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`.
102
+ - 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).
103
+ - 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
104
+ - Thumbnail image is always generated, no matter of `DERIVATES_STRATEGY` value, for better performance on viewer side
105
+ - When picture blurring is enabled, original uploaded image is not stored, only blurred version is kept
106
+ - Change several environement variables to ensure coherence (but the retrocompatibility has been maintained)
107
+ * `BLUR_URL` => `API_BLUR_URL`
108
+ * `VIEWER_PAGE` => `API_VIEWER_PAGE`
109
+ * `MAIN_PAGE` => `API_MAIN_PAGE`
110
+ * `LOG_LEVEL` => `API_LOG_LEVEL`
111
+ * `FORCE_AUTH_ON_UPLOAD` => `API_FORCE_AUTH_ON_UPLOAD`
112
+ * `DERIVATES_STRATEGY` => `PICTURE_PROCESS_DERIVATES_STRATEGY`
113
+ * `OIDC_URL` => `OAUTH_OIDC_URL`
114
+ * `CLIENT_ID` => `OAUTH_CLIENT_ID`
115
+ * `CLIENT_SECRET` => `OAUTH_CLIENT_SECRET`
116
+ * `NB_PROXIES` => `INFRA_NB_PROXIES`
117
+ - Commands `flask set-sequences-heading` and `flask cleanup` now takes in input sequences IDs instead of sequences folder names
118
+ - Command `flask cleanup` offers to delete original images, and can't delete blur masks anymore (as they are not used anymore)
119
+ - The python files are now directly in the working directory of the docker image, no longer in a `./server` sub directory. It should be transparent for most users though.
120
+
121
+ ### Fixed
122
+ - Tests were failing when using PySTAC 1.7.0 due to unavaible `extra_fields['id']` on links
123
+ - 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))
124
+ - Make sure picture EXIF orientation is always used and applied ([#71](https://gitlab.com/geovisio/api/-/issues/71))
125
+ - Updates on DB table `pictures` and deletes on DB table `sequences_pictures` now updates `sequences.geom` column automatically
126
+
127
+ ### Removed
128
+ - 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))
129
+ - 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.
130
+ - 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).
131
+ - Removed the `fill-with-mock-data` Flask command
132
+ - Pictures and sequences file paths are removed from database (all storage is based on picture ID)
133
+
134
+
135
+ ## [1.5.0] - 2023-02-10
136
+
137
+ ### Added
138
+ - Viewer sets [various hash URL parameters](./docs/22_Client_URL_settings.md) to save map position, picture ID, focused element and viewer position
139
+ - The pictures and sequences are now linked to an account. When importing the sequence, pictures and sequences are either associated to the instance's default account or to the provided `account-name` in the metadata.txt file (cf [documentation](./docs/12_Pictures_storage.md#metadatatxt-configuration-file))
140
+ - New index in database for pictures timestamps (to speed up temporal queries)
141
+ - API offers an `extent` property in its landing page (`/api/` route), defining spatio-temporal extent of available data (in the same format as [STAC Collection extent](https://github.com/radiantearth/stac-spec/blob/master/collection-spec/collection-spec.md#extent-object)). Note that this is __not STAC-standard__, it may evolve following [ongoing discussions](https://github.com/radiantearth/stac-spec/issues/1210).
142
+ - Documentation to [deploy GeoVisio API on Scalingo](./docs/10_Install_Scalingo.md)
143
+ - Authentication handling using an external OAuth2 provider. See the [external identity provider documentation](./docs/12_External_Identity_Providers.md) and [Api usage documentation](./docs/16_Using_API.md#authentication)
144
+ - Refactor docker-compose files. Removal of the docker-compose-dev.yaml (integrated in the main docker-compose.yml file), and add of several other docker-compose files in the [docker/](./docker/) directory.
145
+
146
+ ### Changed
147
+ - Viewer displays picture date when picture is focused instead of static text "GeoVisio"
148
+ - Conformance of API against STAC specifications is improved:
149
+ - List of conformance URLs is more complete
150
+ - Collection temporal extent is always returned in UTC timezone
151
+ - Summaries of some fields are provided in collections
152
+ - Links in collections have now titles
153
+ - Empty fields are now not returned at all, instead of returned with `null` values
154
+ - Content types for GeoJSON routes are now set precisely
155
+ - Providers list is set to an empty array for collections
156
+ - Listing of all users catalogs in main catalog (landing)
157
+ - `/search` route supports `POST` HTTP method
158
+
159
+ ### Fixed
160
+ - Some picture metadata fields were duplicated in database (existing both as standalone columns and in `metadata` field), now `metadata` only contains info not existing in other columns.
161
+ - More robust testing of `None` values for server settings
162
+
163
+ ### Removed
164
+ - The configuration cannot be stored in a `config.py` file anymore, either use environment variables, or install [python-dotenv](https://github.com/theskumar/python-dotenv) (it's in the requirements-dev.txt file) and persist the variables in either the default `.env` file or a custom `*.env` file (like `prod.env`) and pass this file to flask with the `--env-file` (or `-e`) option.
165
+
166
+ ```bash
167
+ flask --env-file prod.env run
168
+ ```
169
+ - The `TEST_DB_URL` environment variable is no longer available for the tests, replaced by the standard `DB_URL`
170
+
171
+
172
+ ## [1.4.1] - 2023-02-01
173
+
174
+ ### Fixed
175
+ - Improve checks to avoid failures due to invalid `WEBP_METHOD` parameter
176
+
177
+
178
+ ## [1.4.0] - 2023-01-04
179
+
180
+ __About upgrading from versions <= 1.3.1__ : many changes have been done on storage and settings during pictures import, to avoid issues you may do a full re-import of your pictures and sequences. This can be done with following command (to adapt according to your setup):
181
+
182
+ ```bash
183
+ cd server/
184
+ FLASK_APP="src" flask cleanup
185
+ FLASK_APP="src" flask process-sequences
186
+ ```
187
+
188
+ ### Added
189
+ - Home and viewer pages can be changed using `MAIN_PAGE` and `VIEWER_PAGE` settings (thanks to Nick Whitelegg)
190
+ - Docker compose file for local development (in complement of existing file which uses pre-built Docker image)
191
+ - Explicitly document that database should be in UTF-8 encoding (to avoid [binary string issues with Psycopg](https://www.psycopg.org/psycopg3/docs/basic/adapt.html#strings-adaptation))
192
+ - Server tests can be run through Docker
193
+ - API can serve pictures in both JPEG and WebP formats
194
+ - Viewer now supports WebP assets, and are searched for in priority
195
+ - Mock images and sequences can be generated for testing with `fill-mock-data` server command (thanks to Antoine Desbordes)
196
+ - Viewer map updates automatically URL hash part with a `map` string
197
+ - API map tiles offers a `sequences` layer for display sequences paths
198
+ - Database migrations are handled with the [Yoyo migrations framework](https://ollycope.com/software/yoyo/latest/)
199
+
200
+ ### Changed
201
+ - Derivates picture files are now by default generated on-demand on first API request. Pre-processing of derivates (old method) can be enabled using `DERIVATES_STRATEGY=PREPROCESS` setting when calling `process-sequences` command.
202
+ - Internal storage format for pictures is now WebP, offering same quality with reduce disk usage.
203
+ - If not set, `SERVER_NAME` defaults to `localhost.localdomain:5000`
204
+ - Reduced size of Docker image by limiting YOLOv6 repository download and removing unused torchaudio dependency
205
+ - Server dependencies are now separated in 3 pip requirements files for faster CI: `requirements.txt`, `requirements-dev.txt` and `requirements-blur.txt`
206
+ - During sequences processing, ready pictures can be shown and queried even if whole sequences is not ready yet
207
+ - Improved CLI commands documentation (which appears using `FLASK_APP="src" flask --help`)
208
+ - Heading in pictures metadata is now optional, and is set relatively to sequence movement path if missing
209
+ - New CLI command `set-sequences-heading` allows user to manually change heading values
210
+ - Viewer supports STAC items not having `view:azimuth` property defined
211
+ - All documentation files are now in `docs/` folder, with better readability and consistency
212
+
213
+ ### Fixed
214
+ - Some sequences names were bytestring instead of string, causing some STAC API calls to fail
215
+ - YOLOv6 release number is now fixed in code to avoid issues in downloaded models
216
+ - Docker-compose files explicitly wait for PostgreSQL database to be ready to prevent random failures
217
+ - With `COMPROMISE` blur strategies, image not needing blurring failed
218
+ - URL to API documentation written without trailing `/` was not correctly handled
219
+ - Pictures with partial camera metadata are now correctly handled
220
+
221
+ ### Removed
222
+ - No progressive JPEG is used anymore for classic (non-360°) HD pictures.
223
+
224
+
225
+ ## [1.3.1] - 2022-08-03
226
+
227
+ ### Added
228
+ - A cleaner progress bar (tqdm) is used for progress of sequences processing
229
+ - Picture heading is also read from `PoseHeadingDegrees` XMP EXIF tag
230
+
231
+ ### Changed
232
+ - Pictures derivates folder is renamed from `gvs_derivates` to `geovisio_derivates` for better readability
233
+ - Sequences folder can skip processing if their name starts with either `ignore_`, `gvs_` or `geovisio_`
234
+ - Status of pictures and sequences is now visible in real-time in database (instead of one transaction commited at the end of single sequence processing)
235
+
236
+ ### Fixed
237
+ - Add version in docker-compose file for better compatibility
238
+
239
+
240
+ ## [1.3.0] - 2022-07-20
241
+
242
+ ### Added
243
+ - Support of flat / non-360° pictures in viewer and server
244
+ - List of contributors and special thanks in readme
245
+ - Introduced changelog file (the one you're reading 😁)
246
+ - Allow direct access to MapLibre GL map object in viewer using `getMap`
247
+ - Allow passing all MapLibre GL map settings through viewer using `options.map` object
248
+
249
+ ### Changed
250
+ - Pictures blurring now offers several strategies (`BLUR_STRATEGY` setting) and better performance (many thanks to Albin Calais)
251
+ - Viewer has a wider zoom range
252
+ - Separate stages for building viewer and server in Dockerfile (thanks to Pascal Rhod)
253
+
254
+ ### Fixed
255
+ - Test pictures had some corrupted EXIF tags (related to [JOSM issue](https://josm.openstreetmap.de/ticket/22211))
256
+
257
+
258
+ ## [1.2.0] - 2022-06-07
259
+
260
+ ### Added
261
+ - A demonstration page is available, showing viewer and code examples
262
+ - A map is optionally available in viewer to find pictures more easily
263
+ - New API route for offering vector tiles (for map) : `/api/map/<z>/<x>/<y>.mvt`
264
+ - GeoVisio now has a logo
265
+
266
+ ### Changed
267
+ - Improved Dockerfile :
268
+ - Both server and viewer are embed
269
+ - Add list of available environment variables
270
+ - Remove need for a config file
271
+ - A Docker compose file is offered for a ready-to-use GeoVisio with database container
272
+ - Server processing for sequences pre-render all derivates versions of pictures to limit I/O with remote filesystems
273
+ - Viewer displays a default picture before a real picture is loaded
274
+ - Documentation is more complete
275
+
276
+ ### Fixed
277
+ - Reading of negative lat/lon coordinates from EXIF tags
278
+
279
+
280
+ ## [1.1.0] - 2022-05-09
281
+
282
+ ### Added
283
+ - Support of [STAC API scheme](https://github.com/radiantearth/stac-api-spec) for both server and viewer
284
+ - New environment variables for database to allow set separately hostname, port, username... : `DB_PORT`, `DB_HOST`, `DB_USERNAME`, `DB_PASSWORD`, `DB_NAME`
285
+
286
+ ### Changed
287
+ - All API routes are prefixed with `/api`
288
+
289
+ ### Removed
290
+ - `/sequences` API routes, as they are replaced by STAC compliant routes named `/collections`
291
+ - Some `/pictures` API routes, as they are replaced by STAC compliant routes named `/collections/<id>/items`
292
+
293
+
294
+ ## [1.0.0] - 2022-03-22
295
+
296
+ ### Added
297
+ - Server scripts for processing 360° pictures and loading into database
298
+ - Support of various filesystems (hard disk, FTP, S3 Bucket...) using PyFilesystem
299
+ - API offering sequences, pictures (original, thumbnail and tiled) and various metadata
300
+ - Blurring of people, cars, trucks, bus, bicycles on pictures
301
+ - Viewer based on Photo Sphere Viewer automatically calling API to search and retrieve pictures
302
+ - Dockerfile for easy server setup
303
+
304
+
305
+ [Unreleased]: https://gitlab.com/geovisio/api/-/compare/2.1.0...develop
306
+ [2.1.0]: https://gitlab.com/geovisio/api/-/compare/2.0.2...2.1.0
307
+ [2.0.2]: https://gitlab.com/geovisio/api/-/compare/2.0.1...2.0.2
308
+ [2.0.1]: https://gitlab.com/geovisio/api/-/compare/2.0.0...2.0.1
309
+ [2.0.0]: https://gitlab.com/geovisio/api/-/compare/1.5.0...2.0.0
310
+ [1.5.0]: https://gitlab.com/geovisio/api/-/compare/1.4.1...1.5.0
311
+ [1.4.1]: https://gitlab.com/geovisio/api/-/compare/1.4.0...1.4.1
312
+ [1.4.0]: https://gitlab.com/geovisio/api/-/compare/1.3.1...1.4.0
313
+ [1.3.1]: https://gitlab.com/geovisio/api/-/compare/1.3.0...1.3.1
314
+ [1.3.0]: https://gitlab.com/geovisio/api/-/compare/1.2.0...1.3.0
315
+ [1.2.0]: https://gitlab.com/geovisio/api/-/compare/1.1.0...1.2.0
316
+ [1.1.0]: https://gitlab.com/geovisio/api/-/compare/1.0.0...1.1.0
317
+ [1.0.0]: https://gitlab.com/geovisio/api/-/commits/1.0.0