geovisio 2.9.0__py3-none-any.whl → 2.10.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- geovisio/__init__.py +6 -1
- geovisio/config_app.py +5 -5
- geovisio/translations/ar/LC_MESSAGES/messages.mo +0 -0
- geovisio/translations/ar/LC_MESSAGES/messages.po +818 -0
- geovisio/translations/br/LC_MESSAGES/messages.po +1 -1
- geovisio/translations/da/LC_MESSAGES/messages.mo +0 -0
- geovisio/translations/da/LC_MESSAGES/messages.po +4 -3
- geovisio/translations/de/LC_MESSAGES/messages.mo +0 -0
- geovisio/translations/de/LC_MESSAGES/messages.po +55 -2
- geovisio/translations/el/LC_MESSAGES/messages.po +1 -1
- geovisio/translations/en/LC_MESSAGES/messages.mo +0 -0
- geovisio/translations/en/LC_MESSAGES/messages.po +193 -139
- geovisio/translations/eo/LC_MESSAGES/messages.mo +0 -0
- geovisio/translations/eo/LC_MESSAGES/messages.po +53 -4
- geovisio/translations/es/LC_MESSAGES/messages.po +1 -1
- geovisio/translations/fi/LC_MESSAGES/messages.po +1 -1
- geovisio/translations/fr/LC_MESSAGES/messages.mo +0 -0
- geovisio/translations/fr/LC_MESSAGES/messages.po +91 -3
- geovisio/translations/hu/LC_MESSAGES/messages.po +1 -1
- geovisio/translations/it/LC_MESSAGES/messages.mo +0 -0
- geovisio/translations/it/LC_MESSAGES/messages.po +63 -3
- geovisio/translations/ja/LC_MESSAGES/messages.po +1 -1
- geovisio/translations/ko/LC_MESSAGES/messages.po +1 -1
- geovisio/translations/messages.pot +185 -129
- geovisio/translations/nl/LC_MESSAGES/messages.mo +0 -0
- geovisio/translations/nl/LC_MESSAGES/messages.po +292 -63
- geovisio/translations/oc/LC_MESSAGES/messages.mo +0 -0
- geovisio/translations/oc/LC_MESSAGES/messages.po +818 -0
- geovisio/translations/pl/LC_MESSAGES/messages.po +1 -1
- geovisio/translations/sv/LC_MESSAGES/messages.mo +0 -0
- geovisio/translations/sv/LC_MESSAGES/messages.po +4 -3
- geovisio/translations/ti/LC_MESSAGES/messages.mo +0 -0
- geovisio/translations/ti/LC_MESSAGES/messages.po +762 -0
- geovisio/translations/zh_Hant/LC_MESSAGES/messages.po +1 -1
- geovisio/utils/annotations.py +14 -17
- geovisio/utils/auth.py +14 -13
- geovisio/utils/cql2.py +2 -2
- geovisio/utils/fields.py +14 -2
- geovisio/utils/items.py +44 -0
- geovisio/utils/model_query.py +2 -2
- geovisio/utils/pic_shape.py +1 -1
- geovisio/utils/pictures.py +111 -18
- geovisio/utils/semantics.py +32 -3
- geovisio/utils/sentry.py +1 -1
- geovisio/utils/sequences.py +51 -34
- geovisio/utils/upload_set.py +285 -198
- geovisio/utils/website.py +1 -1
- geovisio/web/annotations.py +209 -68
- geovisio/web/auth.py +1 -1
- geovisio/web/collections.py +26 -22
- geovisio/web/configuration.py +24 -4
- geovisio/web/docs.py +93 -11
- geovisio/web/items.py +197 -121
- geovisio/web/params.py +44 -31
- geovisio/web/pictures.py +34 -0
- geovisio/web/tokens.py +49 -1
- geovisio/web/upload_set.py +150 -32
- geovisio/web/users.py +4 -4
- geovisio/web/utils.py +2 -2
- geovisio/workers/runner_pictures.py +128 -23
- {geovisio-2.9.0.dist-info → geovisio-2.10.0.dist-info}/METADATA +13 -13
- geovisio-2.10.0.dist-info/RECORD +105 -0
- geovisio-2.9.0.dist-info/RECORD +0 -98
- {geovisio-2.9.0.dist-info → geovisio-2.10.0.dist-info}/WHEEL +0 -0
- {geovisio-2.9.0.dist-info → geovisio-2.10.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -17,7 +17,7 @@ from typing import Any, Dict, Optional
|
|
|
17
17
|
import threading
|
|
18
18
|
from uuid import UUID
|
|
19
19
|
from croniter import croniter
|
|
20
|
-
from datetime import datetime, timezone
|
|
20
|
+
from datetime import datetime, timezone, timedelta
|
|
21
21
|
import geovisio.utils.filesystems
|
|
22
22
|
|
|
23
23
|
log = logging.getLogger("geovisio.runner_pictures")
|
|
@@ -58,6 +58,7 @@ class ProcessTask(str, Enum):
|
|
|
58
58
|
delete = "delete"
|
|
59
59
|
dispatch = "dispatch"
|
|
60
60
|
finalize = "finalize"
|
|
61
|
+
read_metadata = "read_metadata"
|
|
61
62
|
|
|
62
63
|
|
|
63
64
|
@dataclass
|
|
@@ -65,6 +66,7 @@ class DbPicture:
|
|
|
65
66
|
id: UUID
|
|
66
67
|
metadata: dict
|
|
67
68
|
skip_blurring: bool
|
|
69
|
+
orientation: str
|
|
68
70
|
|
|
69
71
|
def blurred_by_author(self):
|
|
70
72
|
return self.metadata.get("blurredByAuthor", False)
|
|
@@ -90,6 +92,8 @@ class DbJob:
|
|
|
90
92
|
seq: Optional[DbSequence]
|
|
91
93
|
|
|
92
94
|
task: ProcessTask
|
|
95
|
+
args: Optional[Dict[Any, Any]] = None
|
|
96
|
+
warning: Optional[str] = None
|
|
93
97
|
|
|
94
98
|
def label(self):
|
|
95
99
|
impacted_object = ""
|
|
@@ -105,7 +109,7 @@ class DbJob:
|
|
|
105
109
|
return f"{self.task} for {impacted_object}"
|
|
106
110
|
|
|
107
111
|
|
|
108
|
-
def store_detection_semantics(
|
|
112
|
+
def store_detection_semantics(job: DbJob, metadata: Dict[str, Any], store_id: bool):
|
|
109
113
|
"""store the detection returned by the blurring API in the database.
|
|
110
114
|
|
|
111
115
|
The semantics part is stored as annotations, linked to the default account.
|
|
@@ -120,13 +124,13 @@ def store_detection_semantics(pic: DbPicture, metadata: Dict[str, Any], store_id
|
|
|
120
124
|
|
|
121
125
|
tags = metadata.pop("annotations", [])
|
|
122
126
|
|
|
123
|
-
with
|
|
127
|
+
with job.reporting_conn.cursor() as cursor:
|
|
124
128
|
blurring_id = metadata.get("blurring_id")
|
|
125
129
|
if blurring_id and store_id:
|
|
126
130
|
# we store the blurring id to be able to unblur the picture later
|
|
127
131
|
cursor.execute(
|
|
128
132
|
"UPDATE pictures SET blurring_id = %(blurring_id)s WHERE id = %(id)s",
|
|
129
|
-
{"blurring_id": blurring_id, "id": pic.id},
|
|
133
|
+
{"blurring_id": blurring_id, "id": job.pic.id},
|
|
130
134
|
)
|
|
131
135
|
|
|
132
136
|
if not tags:
|
|
@@ -140,21 +144,48 @@ def store_detection_semantics(pic: DbPicture, metadata: Dict[str, Any], store_id
|
|
|
140
144
|
# we want to remove all the tags added by the same bluring api previously
|
|
141
145
|
# it's especially usefull when a picture is blurred multiple times
|
|
142
146
|
# and if the detection model has been updated between the blurrings
|
|
143
|
-
semantics.delete_annotation_tags_from_service(
|
|
147
|
+
semantics.delete_annotation_tags_from_service(job.reporting_conn, job.pic.id, service_name="SGBlur", account=default_account_id)
|
|
144
148
|
try:
|
|
145
149
|
annotations_to_create = [
|
|
146
|
-
annotations.AnnotationCreationParameter(**t, account_id=default_account_id, picture_id=pic.id) for t in tags
|
|
150
|
+
annotations.AnnotationCreationParameter(**t, account_id=default_account_id, picture_id=job.pic.id) for t in tags
|
|
147
151
|
]
|
|
152
|
+
for a in annotations_to_create:
|
|
153
|
+
annotations.creation_annotation(a, job.reporting_conn)
|
|
148
154
|
except Exception as e:
|
|
149
155
|
# if the detections are not in the correct format, we skip them
|
|
150
156
|
msg = errors.getMessageFromException(e)
|
|
151
|
-
|
|
157
|
+
if hasattr(e, "payload"):
|
|
158
|
+
msg += f": {e.payload}"
|
|
159
|
+
log.error(f"impossible to save blurring detections, skipping it for picture {job.pic.id}: {msg}")
|
|
160
|
+
job.warning = msg
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
def update_picture_orientation(conn: psycopg.Connection, db_pic: DbPicture, picturePillow: Image):
|
|
164
|
+
"""if the picture is side oriented, we need to check if the blurring API has rotated the picture, and update its size"""
|
|
165
|
+
if db_pic.orientation not in ("6", "8"):
|
|
152
166
|
return
|
|
153
|
-
|
|
154
|
-
|
|
167
|
+
|
|
168
|
+
new_size = utils.pictures.getPictureSizing(picturePillow)
|
|
169
|
+
if new_size["width"] != db_pic.metadata["width"] or new_size["height"] != db_pic.metadata["height"]:
|
|
170
|
+
with conn.cursor() as cursor:
|
|
171
|
+
# update the new X/Y dimensions and reset the orientation, to tell that it's no longer side oriented
|
|
172
|
+
cursor.execute(
|
|
173
|
+
"""UPDATE pictures SET
|
|
174
|
+
exif = exif - 'Exif.Image.Orientation' || jsonb_build_object('Exif.Photo.PixelXDimension', %(width)s, 'Exif.Photo.PixelYDimension', %(height)s),
|
|
175
|
+
metadata = metadata || jsonb_build_object('width', %(width)s, 'height', %(height)s, 'cols', %(cols)s, 'rows', %(rows)s)
|
|
176
|
+
WHERE id = %(id)s
|
|
177
|
+
""",
|
|
178
|
+
{
|
|
179
|
+
"width": new_size["width"],
|
|
180
|
+
"height": new_size["height"],
|
|
181
|
+
"id": db_pic.id,
|
|
182
|
+
"cols": new_size["cols"],
|
|
183
|
+
"rows": new_size["rows"],
|
|
184
|
+
},
|
|
185
|
+
)
|
|
155
186
|
|
|
156
187
|
|
|
157
|
-
def processPictureFiles(
|
|
188
|
+
def processPictureFiles(job: DbJob, config):
|
|
158
189
|
"""Generates the files associated with a sequence picture.
|
|
159
190
|
|
|
160
191
|
If needed the image is blurred before the tiles and thumbnail are generated.
|
|
@@ -168,6 +199,7 @@ def processPictureFiles(pic: DbPicture, config):
|
|
|
168
199
|
config : dict
|
|
169
200
|
Flask app.config (passed as param to allow using ThreadPoolExecutor)
|
|
170
201
|
"""
|
|
202
|
+
pic = job.pic
|
|
171
203
|
skipBlur = pic.skip_blurring or config.get("API_BLUR_URL") is None
|
|
172
204
|
fses = config["FILESYSTEMS"]
|
|
173
205
|
fs = fses.permanent if skipBlur else fses.tmp
|
|
@@ -206,8 +238,12 @@ def processPictureFiles(pic: DbPicture, config):
|
|
|
206
238
|
picture = None
|
|
207
239
|
else:
|
|
208
240
|
picture = res.image
|
|
241
|
+
|
|
242
|
+
if pic.orientation in ("6", "8"):
|
|
243
|
+
update_picture_orientation(job.reporting_conn, pic, picture)
|
|
244
|
+
|
|
209
245
|
if res.metadata:
|
|
210
|
-
store_detection_semantics(
|
|
246
|
+
store_detection_semantics(job, res.metadata, store_id=config["PICTURE_PROCESS_KEEP_UNBLURRED_PARTS"])
|
|
211
247
|
|
|
212
248
|
# Delete original unblurred file
|
|
213
249
|
geovisio.utils.filesystems.removeFsEvenNotFound(fses.tmp, picHdPath)
|
|
@@ -287,7 +323,9 @@ class PictureProcessor:
|
|
|
287
323
|
if self.app.pool.closed and self.stop:
|
|
288
324
|
# in some tests, the pool is closed before the worker is stopped, we check this here
|
|
289
325
|
return
|
|
290
|
-
self.
|
|
326
|
+
if not self.stop:
|
|
327
|
+
# periodic tasks are only checked by permanent workers
|
|
328
|
+
self.check_periodic_tasks()
|
|
291
329
|
r = process_next_job(self.app)
|
|
292
330
|
if not r:
|
|
293
331
|
if self.stop:
|
|
@@ -308,7 +346,7 @@ class PictureProcessor:
|
|
|
308
346
|
signal.signal(signal.SIGTERM, self._graceful_shutdown)
|
|
309
347
|
|
|
310
348
|
def _graceful_shutdown(self, *args):
|
|
311
|
-
log.info("
|
|
349
|
+
log.info("Stopping worker, waiting for last picture processing to finish...")
|
|
312
350
|
self.stop = True
|
|
313
351
|
|
|
314
352
|
def check_periodic_tasks(self):
|
|
@@ -364,16 +402,19 @@ def process_next_job(app):
|
|
|
364
402
|
span.set_data("pic_id", job.pic.id)
|
|
365
403
|
with utils.time.log_elapsed(f"Processing picture {job.pic.id}"):
|
|
366
404
|
# open another connection for reporting and queries
|
|
367
|
-
processPictureFiles(job
|
|
405
|
+
processPictureFiles(job, app.config)
|
|
368
406
|
elif job.task == ProcessTask.delete and job.pic:
|
|
369
407
|
with sentry_sdk.start_span(description="Deleting picture") as span:
|
|
370
408
|
span.set_data("pic_id", job.pic.id)
|
|
371
409
|
with utils.time.log_elapsed(f"Deleting picture {job.pic.id}"):
|
|
372
|
-
_delete_picture(job.pic)
|
|
410
|
+
_delete_picture(job.reporting_conn, job.pic)
|
|
411
|
+
elif job.task == ProcessTask.read_metadata and job.pic:
|
|
412
|
+
with utils.time.log_elapsed(f"Reading metadata of picture {job.pic.id}"):
|
|
413
|
+
_read_picture_metadata(job.pic, **(job.args or {}))
|
|
373
414
|
elif job.task == ProcessTask.dispatch and job.upload_set:
|
|
374
415
|
with utils.time.log_elapsed(f"Dispatching upload set {job.upload_set.id}"):
|
|
375
416
|
try:
|
|
376
|
-
upload_set.dispatch(job.upload_set.id)
|
|
417
|
+
upload_set.dispatch(job.reporting_conn, job.upload_set.id)
|
|
377
418
|
except Exception as e:
|
|
378
419
|
log.exception(f"impossible to dispatch upload set {job.upload_set.id}")
|
|
379
420
|
raise RecoverableProcessException("Upload set dispatch error: " + errors.getMessageFromException(e)) from e
|
|
@@ -399,7 +440,7 @@ def _get_next_job(app):
|
|
|
399
440
|
with app.pool.connection() as locking_transaction:
|
|
400
441
|
with locking_transaction.transaction(), locking_transaction.cursor(row_factory=dict_row) as cursor:
|
|
401
442
|
r = cursor.execute(
|
|
402
|
-
"""SELECT j.id, j.picture_id, j.upload_set_id, j.sequence_id, j.task, j.picture_to_delete_id, p.metadata, j.args
|
|
443
|
+
"""SELECT j.id, j.picture_id, j.upload_set_id, j.sequence_id, j.task, j.picture_to_delete_id, p.metadata, j.args, p.exif->'Exif.Image.Orientation' as orientation
|
|
403
444
|
FROM job_queue j
|
|
404
445
|
LEFT JOIN pictures p ON p.id = j.picture_id
|
|
405
446
|
ORDER by
|
|
@@ -418,7 +459,12 @@ def _get_next_job(app):
|
|
|
418
459
|
# (and it will not a foreign key since the picture's row will already have been deleted from the db)
|
|
419
460
|
pic_id = r["picture_id"] or r["picture_to_delete_id"]
|
|
420
461
|
db_pic = (
|
|
421
|
-
DbPicture(
|
|
462
|
+
DbPicture(
|
|
463
|
+
id=pic_id,
|
|
464
|
+
metadata=r["metadata"],
|
|
465
|
+
skip_blurring=(r["args"] or {}).get("skip_blurring", False),
|
|
466
|
+
orientation=r["orientation"],
|
|
467
|
+
)
|
|
422
468
|
if pic_id is not None
|
|
423
469
|
else None
|
|
424
470
|
)
|
|
@@ -466,7 +512,7 @@ def _get_next_job(app):
|
|
|
466
512
|
_finalize_sequence(job)
|
|
467
513
|
error = e
|
|
468
514
|
|
|
469
|
-
# we raise an error after the transaction has been
|
|
515
|
+
# we raise an error after the transaction has been committed to be sure to have the state persisted in the database
|
|
470
516
|
if error:
|
|
471
517
|
raise error
|
|
472
518
|
|
|
@@ -507,9 +553,16 @@ def _finalize_job(conn, job: DbJob):
|
|
|
507
553
|
f"The job {job.job_history_id} ({job.label()}) has likely been deleted during the process (it can happen if the picture/upload_set/sequence has been deleted by another process), we don't need to finalize it"
|
|
508
554
|
)
|
|
509
555
|
return
|
|
556
|
+
|
|
557
|
+
params = {"id": job.job_history_id}
|
|
558
|
+
fields = [SQL("finished_at = CURRENT_TIMESTAMP")]
|
|
559
|
+
if job.warning:
|
|
560
|
+
fields.append(SQL("warning = %(warn)s"))
|
|
561
|
+
params["warn"] = job.warning
|
|
562
|
+
|
|
510
563
|
job.reporting_conn.execute(
|
|
511
|
-
"UPDATE job_history SET
|
|
512
|
-
|
|
564
|
+
SQL("UPDATE job_history SET {fields} WHERE id = %(id)s").format(fields=SQL(", ").join(fields)),
|
|
565
|
+
params,
|
|
513
566
|
)
|
|
514
567
|
if job.task == ProcessTask.prepare and job.pic:
|
|
515
568
|
# Note: the status is slowly been deprecated by replacing it with more precise status, and in the end it will be removed
|
|
@@ -544,7 +597,7 @@ def _initialize_job(
|
|
|
544
597
|
"pic_to_delete": db_pic.id if db_pic and task == ProcessTask.delete else None,
|
|
545
598
|
"us_id": db_upload_set.id if db_upload_set else None,
|
|
546
599
|
"task": task.value,
|
|
547
|
-
"args": Jsonb(args),
|
|
600
|
+
"args": Jsonb(args) if args else None,
|
|
548
601
|
},
|
|
549
602
|
).fetchone()
|
|
550
603
|
|
|
@@ -559,6 +612,7 @@ def _initialize_job(
|
|
|
559
612
|
upload_set=db_upload_set,
|
|
560
613
|
task=task,
|
|
561
614
|
job_history_id=r[0],
|
|
615
|
+
args=args,
|
|
562
616
|
)
|
|
563
617
|
|
|
564
618
|
|
|
@@ -608,7 +662,58 @@ def _mark_process_as_error(
|
|
|
608
662
|
conn.execute("DELETE FROM job_queue WHERE id = %(id)s", {"id": job.job_queue_id})
|
|
609
663
|
|
|
610
664
|
|
|
611
|
-
def _delete_picture(pic: DbPicture):
|
|
665
|
+
def _delete_picture(conn: psycopg.Connection, pic: DbPicture):
|
|
612
666
|
"""Delete a picture from the filesystem"""
|
|
613
667
|
log.debug(f"Deleting picture files {pic.id}")
|
|
668
|
+
|
|
669
|
+
def check_if_no_workers_preparing():
|
|
670
|
+
try:
|
|
671
|
+
# We try to check if there at some workers preparing this picture, if it's the case, we wait a bit and retry.
|
|
672
|
+
# after some time, if the lock is still not released, we raise a RetryLaterProcessException, to reschedule the whole job later
|
|
673
|
+
conn.execute(
|
|
674
|
+
"SELECT id FROM job_queue WHERE picture_id = %(id)s and task = 'prepare' FOR UPDATE NOWAIT",
|
|
675
|
+
{"id": pic.id},
|
|
676
|
+
)
|
|
677
|
+
return True
|
|
678
|
+
except psycopg.errors.LockNotAvailable:
|
|
679
|
+
logging.debug(f"The picture {pic.id} is being processed, we'll retry later")
|
|
680
|
+
return False
|
|
681
|
+
|
|
682
|
+
_retry_for(check_if_no_workers_preparing, error=f"Picture {pic.id} is being processed")
|
|
683
|
+
|
|
684
|
+
# Delete the row if needed (note that it can have already been deleted (for example if a whole upload_set has been deleted, the `ON DELETE CASCADE` deletes all the pictures's row (but the files still need to be deleted)))
|
|
685
|
+
conn.execute("DELETE FROM pictures WHERE id = %(id)s", {"id": pic.id})
|
|
686
|
+
|
|
614
687
|
utils.pictures.removeAllFiles(pic.id)
|
|
688
|
+
|
|
689
|
+
|
|
690
|
+
def _retry_for(func, error, timeout=timedelta(minutes=1), sleep=timedelta(seconds=5)):
|
|
691
|
+
import time
|
|
692
|
+
|
|
693
|
+
cur_duration = timedelta(seconds=0)
|
|
694
|
+
while cur_duration < timeout:
|
|
695
|
+
r = func()
|
|
696
|
+
if r:
|
|
697
|
+
return
|
|
698
|
+
cur_duration += sleep
|
|
699
|
+
time.sleep(sleep.total_seconds())
|
|
700
|
+
|
|
701
|
+
raise RetryLaterProcessException(error)
|
|
702
|
+
|
|
703
|
+
|
|
704
|
+
def _read_picture_metadata(picture: DbPicture, read_file=False):
|
|
705
|
+
"""Reread the picture metadata.
|
|
706
|
+
|
|
707
|
+
Normally the picture's metadata are read during upload, but sometimes (mainly when the geopic-tag-reader library has been updated),
|
|
708
|
+
we need to read the metadata again.
|
|
709
|
+
|
|
710
|
+
Parameters
|
|
711
|
+
----------
|
|
712
|
+
picture_id : UUID
|
|
713
|
+
The ID of the picture to read the metadata from
|
|
714
|
+
read_file : bool
|
|
715
|
+
If True, the picture's raw metadata will be read again, else the Exif tools stored in the database will be used (way faster).
|
|
716
|
+
"""
|
|
717
|
+
|
|
718
|
+
with db.conn(current_app) as conn:
|
|
719
|
+
utils.pictures.update_picture_metadata(conn, picture.id, read_file)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: geovisio
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.10.0
|
|
4
4
|
Summary: GeoVisio API - Main
|
|
5
5
|
Author-email: Adrien PAVIE <panieravide@riseup.net>, Antoine Desbordes <antoine.desbordes@gmail.com>
|
|
6
6
|
Requires-Python: >=3.10
|
|
@@ -11,7 +11,7 @@ Requires-Dist: Flask ~= 3.1
|
|
|
11
11
|
Requires-Dist: psycopg[pool] ~= 3.2
|
|
12
12
|
Requires-Dist: flasgger ~= 0.9.7
|
|
13
13
|
Requires-Dist: Pillow ~= 11.1
|
|
14
|
-
Requires-Dist: Flask-Cors ~=
|
|
14
|
+
Requires-Dist: Flask-Cors ~= 6.0
|
|
15
15
|
Requires-Dist: fs ~= 2.4
|
|
16
16
|
Requires-Dist: fs-s3fs-forked ~= 1.1.4
|
|
17
17
|
Requires-Dist: flask-compress ~= 1.14
|
|
@@ -19,9 +19,9 @@ Requires-Dist: requests ~= 2.31
|
|
|
19
19
|
Requires-Dist: yoyo-migrations ~= 9.0
|
|
20
20
|
Requires-Dist: psycopg-binary ~= 3.2
|
|
21
21
|
Requires-Dist: python-dotenv ~= 1.1
|
|
22
|
-
Requires-Dist: authlib ~= 1.
|
|
22
|
+
Requires-Dist: authlib ~= 1.6
|
|
23
23
|
Requires-Dist: Flask-Executor ~= 1.0
|
|
24
|
-
Requires-Dist: geopic-tag-reader[write-exif]
|
|
24
|
+
Requires-Dist: geopic-tag-reader[write-exif] ~= 1.8.0
|
|
25
25
|
Requires-Dist: rfeed ~= 1.1.1
|
|
26
26
|
Requires-Dist: sentry-sdk[flask] ~= 2.24
|
|
27
27
|
Requires-Dist: pygeofilter[backend-native] ~= 0.3.1
|
|
@@ -31,26 +31,26 @@ Requires-Dist: croniter ~= 6.0.0
|
|
|
31
31
|
Requires-Dist: pydantic ~= 2.11
|
|
32
32
|
Requires-Dist: pydantic-extra-types ~= 2.7
|
|
33
33
|
Requires-Dist: flask-babel ~= 4.0.0
|
|
34
|
-
Requires-Dist: geojson-pydantic ~=
|
|
34
|
+
Requires-Dist: geojson-pydantic ~= 2.0.0
|
|
35
35
|
Requires-Dist: email-validator ~= 2.2.0
|
|
36
36
|
Requires-Dist: multipart>=1.2.1
|
|
37
37
|
Requires-Dist: flit ~= 3.9.0 ; extra == "build"
|
|
38
|
-
Requires-Dist: coverage ~= 7.
|
|
39
|
-
Requires-Dist: protobuf ~=
|
|
40
|
-
Requires-Dist: mapbox-vector-tile ~= 2.
|
|
38
|
+
Requires-Dist: coverage ~= 7.9 ; extra == "dev"
|
|
39
|
+
Requires-Dist: protobuf ~= 5.26 ; extra == "dev"
|
|
40
|
+
Requires-Dist: mapbox-vector-tile ~= 2.1 ; extra == "dev"
|
|
41
41
|
Requires-Dist: pystac ~= 1.9 ; extra == "dev"
|
|
42
|
-
Requires-Dist: pytest ~= 8.
|
|
43
|
-
Requires-Dist: pytest-datafiles ~=
|
|
42
|
+
Requires-Dist: pytest ~= 8.4 ; extra == "dev"
|
|
43
|
+
Requires-Dist: pytest-datafiles ~= 3.0 ; extra == "dev"
|
|
44
44
|
Requires-Dist: pyexiv2 ~= 2.15 ; extra == "dev"
|
|
45
|
-
Requires-Dist: testcontainers ~= 4.
|
|
45
|
+
Requires-Dist: testcontainers ~= 4.10 ; extra == "dev"
|
|
46
46
|
Requires-Dist: requests-mock ~= 1.11 ; extra == "dev"
|
|
47
47
|
Requires-Dist: black ~= 25.1 ; extra == "dev"
|
|
48
48
|
Requires-Dist: pre-commit ~= 4.2 ; extra == "dev"
|
|
49
49
|
Requires-Dist: pyyaml ~= 6.0 ; extra == "dev"
|
|
50
50
|
Requires-Dist: openapi-spec-validator ~= 0.7 ; extra == "dev"
|
|
51
51
|
Requires-Dist: stac-api-validator ~= 0.6.4 ; extra == "dev"
|
|
52
|
-
Requires-Dist: mkdocs-material ~= 9.6.
|
|
53
|
-
Requires-Dist: mkdocs-swagger-ui-tag ~= 0.
|
|
52
|
+
Requires-Dist: mkdocs-material ~= 9.6.14 ; extra == "docs"
|
|
53
|
+
Requires-Dist: mkdocs-swagger-ui-tag ~= 0.7.1 ; extra == "docs"
|
|
54
54
|
Project-URL: Home, https://gitlab.com/panoramax/server/api
|
|
55
55
|
Project-URL: Source Code, https://gitlab.com/panoramax/server/api
|
|
56
56
|
Provides-Extra: build
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
geovisio/__init__.py,sha256=LcHU6JLcjjGDdaFgc83jbxUV_Zc8YXUkD_dIBA7u-nQ,7952
|
|
2
|
+
geovisio/config_app.py,sha256=cS4TtW7ESy5jeaHi_9neJYWwA21VBNNrh4IDgf2iMmI,14848
|
|
3
|
+
geovisio/db_migrations.py,sha256=9lHkyG_RiCWzrFkfwhkslScUsbCZScN-KVhkXrtnPDo,4560
|
|
4
|
+
geovisio/errors.py,sha256=uTn-kI7SUl5OPB8Mv3Qqu7Ucp5JvcqWPQFfgLCqsEpI,1376
|
|
5
|
+
geovisio/admin_cli/__init__.py,sha256=1e0hX771-3iG8eBcNmVvUYyg8qXnpng-9YWvi3MI3Kg,3248
|
|
6
|
+
geovisio/admin_cli/cleanup.py,sha256=G85I7rrfPJwaArL6MQAnC04Ye9wWciA-Yqu5iv23uJ0,4862
|
|
7
|
+
geovisio/admin_cli/db.py,sha256=mJ-cGuOAAsg-ovbP9L1kyL4xE0C4bYRuozzqQkaFyw8,897
|
|
8
|
+
geovisio/admin_cli/default_account_tokens.py,sha256=W-v5uPjCBvAujjAUx1HrfgjPj-tEyncb-EUMLpsWc9w,469
|
|
9
|
+
geovisio/admin_cli/reorder_sequences.py,sha256=LKKzdO2w4N-cQmi6rqKHKYG5YGzPxYRTbnfcPKakuYM,2826
|
|
10
|
+
geovisio/admin_cli/sequence_heading.py,sha256=BEPuRfCDXXpqSSzK2ysrxHf0OD4THzrMI_YK2uXQlGk,633
|
|
11
|
+
geovisio/admin_cli/user.py,sha256=4ml2E_aphz3I3NcuUPB2dwe_jXhcE7AGa0R5VTm3_ik,2753
|
|
12
|
+
geovisio/templates/main.html,sha256=VDVQwCZ1mNjH7sH4VOIdn8gM09R9LJZX49SPtA2VEzM,2963
|
|
13
|
+
geovisio/templates/viewer.html,sha256=JErXdU2ujj4LdMHgQbYNCTfKuYGEXbJTQwBE-K_MNXQ,892
|
|
14
|
+
geovisio/translations/messages.pot,sha256=zSzcuOQtONiGQrZE2hRkrB7thd5UGyC41dox867kV88,20827
|
|
15
|
+
geovisio/translations/ar/LC_MESSAGES/messages.mo,sha256=2OvIx-hvvhBbjXvVhc5MaQ-0QnzTWISmNeb4vPthffM,516
|
|
16
|
+
geovisio/translations/ar/LC_MESSAGES/messages.po,sha256=WcdpU3LH1Qf39WiIXQ8UMy1SyL7DHiWCbv0BVG_crW4,20816
|
|
17
|
+
geovisio/translations/br/LC_MESSAGES/messages.mo,sha256=FjvUouzaLCBxvVH51A4PVwGGFk6mAepYasnI4v8LcnQ,719
|
|
18
|
+
geovisio/translations/br/LC_MESSAGES/messages.po,sha256=tGJK1DoeKM-fRHuGa716xHkYtprVoKSNcB4oIqL0JtY,19433
|
|
19
|
+
geovisio/translations/da/LC_MESSAGES/messages.mo,sha256=ketqWtB3ymB0tUaHEp2_nnqFrRX25pwuE2AcCno9W-Q,21197
|
|
20
|
+
geovisio/translations/da/LC_MESSAGES/messages.po,sha256=af7uax57NEw_JFNO11lFKGPGYJ05bOQCGryw15wP8Ms,29397
|
|
21
|
+
geovisio/translations/de/LC_MESSAGES/messages.mo,sha256=4YJijXlC1Dix39oX6CxNYd0J6k-I4AFx5jXyZq7Jib4,24359
|
|
22
|
+
geovisio/translations/de/LC_MESSAGES/messages.po,sha256=6S7rJpu7qfq78_YwZ9M5ueF4-TpvlZmF14b13g_aF8Y,33121
|
|
23
|
+
geovisio/translations/el/LC_MESSAGES/messages.mo,sha256=vy1jtEG6mLS5sYWPfQIr5U4XsZ21ZzSbsHAJHGQXZSY,433
|
|
24
|
+
geovisio/translations/el/LC_MESSAGES/messages.po,sha256=kIz9QJr_GPk_Eh7bJ2vxjsFbIGyvt_-hwra0zVlupyM,17404
|
|
25
|
+
geovisio/translations/en/LC_MESSAGES/messages.mo,sha256=i7HmGj2_mAgGDV9b5dZwSNawx7WNlVBqV5T5uXVl8ok,21397
|
|
26
|
+
geovisio/translations/en/LC_MESSAGES/messages.po,sha256=KD-Fq-gCywKcQnBw7B-Rhfk0s2-xAraXiBqUEPmNjNo,29920
|
|
27
|
+
geovisio/translations/eo/LC_MESSAGES/messages.mo,sha256=AdSbZMS6Fj10_w5dQVpgLgjfs32EHw5m87eTp0IaFmo,22387
|
|
28
|
+
geovisio/translations/eo/LC_MESSAGES/messages.po,sha256=0vgsW6aWR0xUZptAym4HyO8pQh1yEShbojurjZvp0nU,30954
|
|
29
|
+
geovisio/translations/es/LC_MESSAGES/messages.mo,sha256=R5JmcfauTrQxIynQNT7asjdLEJC9-VEMXYrcugfBbsY,18950
|
|
30
|
+
geovisio/translations/es/LC_MESSAGES/messages.po,sha256=sn3UQXBk6pg7ny4ndaPxbvZzTBzNFQBsmJY2lJxTXFQ,26779
|
|
31
|
+
geovisio/translations/fi/LC_MESSAGES/messages.mo,sha256=6-WCesFiV00MkNM_Wpi7-D51DOZRNg_QOM2sL7-UPhA,626
|
|
32
|
+
geovisio/translations/fi/LC_MESSAGES/messages.po,sha256=AS-VBD2kM0lXQXCvMu_CqaPxGtZj1uzkJJV8ex7coVU,14684
|
|
33
|
+
geovisio/translations/fr/LC_MESSAGES/messages.mo,sha256=i1RnE28Jom-bzN6lzf6qO8AuXpJ5bTNLjerwU2P1y34,25063
|
|
34
|
+
geovisio/translations/fr/LC_MESSAGES/messages.po,sha256=Q_VNX6EdCjwilbptnB4PaWJToPMZ0NkxtXXYfCESpzY,33759
|
|
35
|
+
geovisio/translations/hu/LC_MESSAGES/messages.mo,sha256=0Hb7mv7p1BVM8QqZIYUtF3LRym8Sl9HFWfZAa00TobU,20013
|
|
36
|
+
geovisio/translations/hu/LC_MESSAGES/messages.po,sha256=HudkPHKwEdCoY-vwCtSilSqPe88jcDIn8_hF6U6CThg,27493
|
|
37
|
+
geovisio/translations/it/LC_MESSAGES/messages.mo,sha256=8vLUUFP157568oUM25eft0UJtA6AcTTUykRNZ-WiQpc,24087
|
|
38
|
+
geovisio/translations/it/LC_MESSAGES/messages.po,sha256=uMme7kN5KJobxs2J611WG-jEuxVCt9G6IjCRzmRyJZo,32828
|
|
39
|
+
geovisio/translations/ja/LC_MESSAGES/messages.mo,sha256=ZPHJrNdf4bgiNFjxP8W41fkZ2OTJ7Swrqt-Hkh5LfO8,24194
|
|
40
|
+
geovisio/translations/ja/LC_MESSAGES/messages.po,sha256=JWjqZnlmM_decqpVrFAc79sV3yIxAF9nkGSiB5ocZtU,32626
|
|
41
|
+
geovisio/translations/ko/LC_MESSAGES/messages.mo,sha256=eKuQS9zLcJ9s-DzbfR-QK2INBJL10jTIQ1kuSTdJ9Rg,426
|
|
42
|
+
geovisio/translations/ko/LC_MESSAGES/messages.po,sha256=Bdj_LmU69MWZCmajgCm_QNxlKETmN8jzaJnmemuftHg,17404
|
|
43
|
+
geovisio/translations/nl/LC_MESSAGES/messages.mo,sha256=ZSjPgkgVdFD1EU39I9MvbS0WmCz_GiZb-gS-GbbiEWg,22878
|
|
44
|
+
geovisio/translations/nl/LC_MESSAGES/messages.po,sha256=dUg-xm7cr6yL1eKITjNJQBLPxgkQYE_34H1EgNrOQ6c,32005
|
|
45
|
+
geovisio/translations/oc/LC_MESSAGES/messages.mo,sha256=zaKy9mleHCTWd7rLFV2Ced4KvdD-rZhxVafQEIBuQnY,433
|
|
46
|
+
geovisio/translations/oc/LC_MESSAGES/messages.po,sha256=-sLU4ULuSarTqt26XCq5xU6pwTTr_xGpcogmYnb7xqI,20816
|
|
47
|
+
geovisio/translations/pl/LC_MESSAGES/messages.mo,sha256=0iFTAhma7jjyl13DCLr2Xr0hgDSN-_fOqcKoYcdDwGE,9912
|
|
48
|
+
geovisio/translations/pl/LC_MESSAGES/messages.po,sha256=p2SV3x0LvOJFT41eaJ0_p1COHt78N2AiZoQhbwJS98k,22186
|
|
49
|
+
geovisio/translations/sv/LC_MESSAGES/messages.mo,sha256=k7Ssr8tax43wmVy_wVsL5oM03qykV0WeG8-ClxkSZoE,20659
|
|
50
|
+
geovisio/translations/sv/LC_MESSAGES/messages.po,sha256=yglWtKCyLiivuMfKI-ret2GLs98aRYaAOvk6YTCBkO4,28760
|
|
51
|
+
geovisio/translations/ti/LC_MESSAGES/messages.mo,sha256=YeCBuScoL_qi-ZSA4v2O-h0PxKWjRWDgh_de3sJaUas,433
|
|
52
|
+
geovisio/translations/ti/LC_MESSAGES/messages.po,sha256=4Oju5eWJkD3DxjKoOseSr4geWPnZ8iOUIZR8ApvYyPc,19433
|
|
53
|
+
geovisio/translations/zh_Hant/LC_MESSAGES/messages.mo,sha256=TmRUyfTGoBpU-2BE-nKjhwdr9r0ikDioVQU-JQ_ih90,431
|
|
54
|
+
geovisio/translations/zh_Hant/LC_MESSAGES/messages.po,sha256=HcorbHk7OpRWL6v3oEiWxeifaentdF5xgcY_oFAOGEI,18356
|
|
55
|
+
geovisio/utils/__init__.py,sha256=g4SWVoV73cSXjf5-5D9-HmyB5xKmHSuxxOGWnx7W3V0,71
|
|
56
|
+
geovisio/utils/annotations.py,sha256=vLP6YRJgqFUfGHvX9qQabBduMaHGLWiivEk8YH9fdEA,6884
|
|
57
|
+
geovisio/utils/auth.py,sha256=WDwllPHp7WI38SilT2mf29IinRsPR5nnbBVxGjYKkQQ,13934
|
|
58
|
+
geovisio/utils/cql2.py,sha256=42igfsnpTAW8Ee70uvq7wAeTrDZ9JwDyIOWJuV_hkDI,4720
|
|
59
|
+
geovisio/utils/db.py,sha256=cxetPL-URdeOxmDMPwxKovB93yQYLNlOL8UHvP4DHg0,2856
|
|
60
|
+
geovisio/utils/excluded_areas.py,sha256=6f3wwsgNpJKxAXnHH8RKlktgHpsG-0QVNTWDDTFqPZ8,2585
|
|
61
|
+
geovisio/utils/extent.py,sha256=vzOHvbG6lpSNt7KrsaonBOx7Tz46S1J603gLbZvs36g,557
|
|
62
|
+
geovisio/utils/fields.py,sha256=Q1o3_eSo66UAyFdmhK2kz-drVWnHA2cbvWCZ5eP0fPk,3475
|
|
63
|
+
geovisio/utils/filesystems.py,sha256=W_wH7TlvdEux_q4FP0XInxruxlbepFSEpJbPLO9Cnr4,4133
|
|
64
|
+
geovisio/utils/items.py,sha256=8-F9zYmcFzrXCtQyWqZhXvojV34RC-aw1d9d9MbxXkc,1557
|
|
65
|
+
geovisio/utils/link.py,sha256=u9x4xJa57L1448neD7uPJuAA76_sFXVE0-9_zPW-bJM,490
|
|
66
|
+
geovisio/utils/loggers.py,sha256=_OrGXME4o5qQz8VBaLxYopHVK0DY0QgzXu6O2W0WBjo,477
|
|
67
|
+
geovisio/utils/model_query.py,sha256=Rdd0_mWJp5nmABVNzzVapaai413PxjgMzmo9NjjUrmI,2074
|
|
68
|
+
geovisio/utils/params.py,sha256=Yj9-PwC8jxb9LjQZ5K8TERimSsWKwJBHPhUxlzDVMhg,714
|
|
69
|
+
geovisio/utils/pic_shape.py,sha256=1HVlhgxNDtGpSFumL_GUc7JOsYWOi1wjtAtkhCijxGo,2271
|
|
70
|
+
geovisio/utils/pictures.py,sha256=Xv3eOIPp4fycGRNAs3VJRt3kArOajQ4t3QtjF8A83M8,28889
|
|
71
|
+
geovisio/utils/reports.py,sha256=3simWHf6t_OuLw2hh2HPYj8vsji00Pz9iRnJOqbTnPs,5227
|
|
72
|
+
geovisio/utils/semantics.py,sha256=MCJtxFSIsuDez8807hGHdlkOuVey6ThCFvUfJvva9f0,9832
|
|
73
|
+
geovisio/utils/sentry.py,sha256=lGDhm0ROW2Z-Ugtzq_M9R8yTKalYN4Etq19Uz63c6Tk,3737
|
|
74
|
+
geovisio/utils/sequences.py,sha256=1rPkUjOrat6jl1Ev3As_idhRMAmPQ6fTJpjfl5ql9-s,30735
|
|
75
|
+
geovisio/utils/tags.py,sha256=GyihW-TgQk1ZCpqYPMoN64qOZ6PCFCvCLK9HQnZhtY8,868
|
|
76
|
+
geovisio/utils/time.py,sha256=-hOs7FSx-8eiGmMQtTOrCoF8d_yMlj2306vfxJftEr8,642
|
|
77
|
+
geovisio/utils/tokens.py,sha256=tkihnnXqgQeIME_d12tC8PVrPN90A0i9k6UPEbgZ9TQ,3047
|
|
78
|
+
geovisio/utils/upload_set.py,sha256=Aym0K93PlNe8JzHPpdTEvKOPOdQ3mDOAGemc0fDTFQI,31038
|
|
79
|
+
geovisio/utils/website.py,sha256=3U9-WL0WGLKPDQHU8N08QCmUL6rKp54yRatpQ64kQhM,1958
|
|
80
|
+
geovisio/web/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
81
|
+
geovisio/web/annotations.py,sha256=Sz-n6eYyiWtwFUo0wjQE-CDepsJtWkmtzAXGXE0P6sw,12178
|
|
82
|
+
geovisio/web/auth.py,sha256=coY35MzOXJQ8QocmAopWztecBUTVT4YBPTovXQhxEpw,7142
|
|
83
|
+
geovisio/web/collections.py,sha256=ABFOhrUqqIERBTi-hr1dexWFw1LFEf42SijmVgsC9lg,48054
|
|
84
|
+
geovisio/web/configuration.py,sha256=uRSfRQIBZqAfH09QFZP_8ofu-bajJUvrhToev1DgzJE,3143
|
|
85
|
+
geovisio/web/docs.py,sha256=b-tBrKRrtF7UsblOhKaL247c9pmM9MDavzdg1YILJLc,62741
|
|
86
|
+
geovisio/web/excluded_areas.py,sha256=5BNSZ0UqgFMtgvgrJ73eYGJXPJRnV-mGEs36WDRRxTk,13024
|
|
87
|
+
geovisio/web/items.py,sha256=cFEJevQWP0a-9rrXBPK5ogWSfIGpy564HkPPylvT9pk,65090
|
|
88
|
+
geovisio/web/map.py,sha256=hzVC0vS-71mFEvRmfCxAprums2Zz5baP6EFTL0uW02M,26136
|
|
89
|
+
geovisio/web/pages.py,sha256=Hkc3KJFE6D38vGnkCK5WUBJ8KQemI1f1wGXpxeiOiNo,6632
|
|
90
|
+
geovisio/web/params.py,sha256=W1wLGFjSztAx9Xl-zzqQSNPtD28trsxqr_qc5fzL6Dw,21523
|
|
91
|
+
geovisio/web/pictures.py,sha256=dr-oSl2_k-sl1ZmfrwyW2HZPxPsSzxOHtY5a0-9u_Gk,7471
|
|
92
|
+
geovisio/web/prepare.py,sha256=R10_xf6O9dmAAwOMC-vsaxgNTdc9BkDJLATqH6MKtCw,5620
|
|
93
|
+
geovisio/web/reports.py,sha256=8v9a4PMM9RsvSGadZEN2o5PTKG_TohjyMMEBfFeY13E,14123
|
|
94
|
+
geovisio/web/rss.py,sha256=NLUd2Or92tcKRaGUHAze6QMLWczHyzag9ybOzrA8djE,2962
|
|
95
|
+
geovisio/web/stac.py,sha256=PQqbUHBDi0xqVmYjH1oC16qtuaZbU8P0SufM0gdiG9w,14853
|
|
96
|
+
geovisio/web/tokens.py,sha256=natYQT1kdmlT2h0t3R1y0B6W4qhGfFmQR3UER9_KvkQ,11215
|
|
97
|
+
geovisio/web/upload_set.py,sha256=64Hr5Kv3Ixp57CMZavOCf1XL11kO7KiQ6L89j2cXSMM,41231
|
|
98
|
+
geovisio/web/users.py,sha256=DNbg7fKqoP__TKTD-xSIb250rYEBftyi17kclGlBXeg,14056
|
|
99
|
+
geovisio/web/utils.py,sha256=43zf8qAnRn6L_tEvf4h14mLQXKQHmuAW4EN3yYGKP7o,3638
|
|
100
|
+
geovisio/workers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
101
|
+
geovisio/workers/runner_pictures.py,sha256=0EMTR1N_3VhpLA66nrQcRkKONl7Ojf8SyT8BXlF5pOw,30359
|
|
102
|
+
geovisio-2.10.0.dist-info/licenses/LICENSE,sha256=iRFSz7MJ7_j4hh3hvIgzNbS2buy5NMva8lulaixd3IE,1069
|
|
103
|
+
geovisio-2.10.0.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
|
|
104
|
+
geovisio-2.10.0.dist-info/METADATA,sha256=yUEAR-PkyLi9ZhTnZJmzJ5bR5cdTiqo_Bq9U7TARFUs,4355
|
|
105
|
+
geovisio-2.10.0.dist-info/RECORD,,
|
geovisio-2.9.0.dist-info/RECORD
DELETED
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
geovisio/__init__.py,sha256=SvZzsivuPLnCTK00mHY3F_HCW9e-xAQtcaAReDi85fI,7754
|
|
2
|
-
geovisio/config_app.py,sha256=Ct2YduFY3rWRAKM8Qic7yTN63m2jWzTPGwkQ7AHKfLs,14853
|
|
3
|
-
geovisio/db_migrations.py,sha256=9lHkyG_RiCWzrFkfwhkslScUsbCZScN-KVhkXrtnPDo,4560
|
|
4
|
-
geovisio/errors.py,sha256=uTn-kI7SUl5OPB8Mv3Qqu7Ucp5JvcqWPQFfgLCqsEpI,1376
|
|
5
|
-
geovisio/admin_cli/__init__.py,sha256=1e0hX771-3iG8eBcNmVvUYyg8qXnpng-9YWvi3MI3Kg,3248
|
|
6
|
-
geovisio/admin_cli/cleanup.py,sha256=G85I7rrfPJwaArL6MQAnC04Ye9wWciA-Yqu5iv23uJ0,4862
|
|
7
|
-
geovisio/admin_cli/db.py,sha256=mJ-cGuOAAsg-ovbP9L1kyL4xE0C4bYRuozzqQkaFyw8,897
|
|
8
|
-
geovisio/admin_cli/default_account_tokens.py,sha256=W-v5uPjCBvAujjAUx1HrfgjPj-tEyncb-EUMLpsWc9w,469
|
|
9
|
-
geovisio/admin_cli/reorder_sequences.py,sha256=LKKzdO2w4N-cQmi6rqKHKYG5YGzPxYRTbnfcPKakuYM,2826
|
|
10
|
-
geovisio/admin_cli/sequence_heading.py,sha256=BEPuRfCDXXpqSSzK2ysrxHf0OD4THzrMI_YK2uXQlGk,633
|
|
11
|
-
geovisio/admin_cli/user.py,sha256=4ml2E_aphz3I3NcuUPB2dwe_jXhcE7AGa0R5VTm3_ik,2753
|
|
12
|
-
geovisio/templates/main.html,sha256=VDVQwCZ1mNjH7sH4VOIdn8gM09R9LJZX49SPtA2VEzM,2963
|
|
13
|
-
geovisio/templates/viewer.html,sha256=JErXdU2ujj4LdMHgQbYNCTfKuYGEXbJTQwBE-K_MNXQ,892
|
|
14
|
-
geovisio/translations/messages.pot,sha256=SUPAgov3RzwVw0LNOMn2NkTthXfirbBDIQK_2BaZ2FI,19445
|
|
15
|
-
geovisio/translations/br/LC_MESSAGES/messages.mo,sha256=FjvUouzaLCBxvVH51A4PVwGGFk6mAepYasnI4v8LcnQ,719
|
|
16
|
-
geovisio/translations/br/LC_MESSAGES/messages.po,sha256=rHkbb3QTngCJxz0WmoBqMl4H-x2bXKYKxdZCEZv2P9w,19434
|
|
17
|
-
geovisio/translations/da/LC_MESSAGES/messages.mo,sha256=46hqJP4gsM3ZK2DG3L47GeC9Q-xFWrY36_OkAJCkuIg,21262
|
|
18
|
-
geovisio/translations/da/LC_MESSAGES/messages.po,sha256=MRmMNc6oQL9R8rvDewHCUhZMSH2TbsfskspCFQzKk2s,29393
|
|
19
|
-
geovisio/translations/de/LC_MESSAGES/messages.mo,sha256=hWb_yaHUHan3tFTyTbnDKJgfnD4wuaeO2nhc24V2ARM,22831
|
|
20
|
-
geovisio/translations/de/LC_MESSAGES/messages.po,sha256=nmlWG_BmcvksfDW9H8d3bTTgIgd-8ucF9lcLg3WB6us,31078
|
|
21
|
-
geovisio/translations/el/LC_MESSAGES/messages.mo,sha256=vy1jtEG6mLS5sYWPfQIr5U4XsZ21ZzSbsHAJHGQXZSY,433
|
|
22
|
-
geovisio/translations/el/LC_MESSAGES/messages.po,sha256=gDr-pDCsQGrCXBMBcDwlfsxcGWF1NIEqGrqPcZy65-4,17405
|
|
23
|
-
geovisio/translations/en/LC_MESSAGES/messages.mo,sha256=KzPxb2olWNvZrUZE9hY0ComHM6t1B2kV5bWvQQ9GUMo,20018
|
|
24
|
-
geovisio/translations/en/LC_MESSAGES/messages.po,sha256=RRfEZ2nZFNWhrbZOPzigy63TVK8cbp8vRikXIj0ibT4,28041
|
|
25
|
-
geovisio/translations/eo/LC_MESSAGES/messages.mo,sha256=67UES-hJwqciW0AiJ2fwcN0K34dBkYNRG2SqVQn3va8,21029
|
|
26
|
-
geovisio/translations/eo/LC_MESSAGES/messages.po,sha256=rzlHUGUoaRkYZY431Y3d7GaAbEcvo9NUL1wSn9Gzapw,29177
|
|
27
|
-
geovisio/translations/es/LC_MESSAGES/messages.mo,sha256=R5JmcfauTrQxIynQNT7asjdLEJC9-VEMXYrcugfBbsY,18950
|
|
28
|
-
geovisio/translations/es/LC_MESSAGES/messages.po,sha256=XzVBY4dISzRcZWw7jMmbGsnDrJvyhzX2L_o9k5B14Hw,26780
|
|
29
|
-
geovisio/translations/fi/LC_MESSAGES/messages.mo,sha256=6-WCesFiV00MkNM_Wpi7-D51DOZRNg_QOM2sL7-UPhA,626
|
|
30
|
-
geovisio/translations/fi/LC_MESSAGES/messages.po,sha256=UFT4YCfEazxLij8Ovk2vZqx55e2Yctbf_3xM5KDrXhw,14685
|
|
31
|
-
geovisio/translations/fr/LC_MESSAGES/messages.mo,sha256=_sJ-9pPfsyW7ivL1hra7A0zZHmqFr_dvsHLPDJ0H2-E,22687
|
|
32
|
-
geovisio/translations/fr/LC_MESSAGES/messages.po,sha256=qndor7UXtyRwyefPaWXMR5xJqyk062InAnuR-ynxMRA,30562
|
|
33
|
-
geovisio/translations/hu/LC_MESSAGES/messages.mo,sha256=0Hb7mv7p1BVM8QqZIYUtF3LRym8Sl9HFWfZAa00TobU,20013
|
|
34
|
-
geovisio/translations/hu/LC_MESSAGES/messages.po,sha256=0nLbjStLDrj7U9mqdIf5gnQ_XzSnhnGQeJ1wLK8l8GM,27494
|
|
35
|
-
geovisio/translations/it/LC_MESSAGES/messages.mo,sha256=a9vR4JuHQY0kwET-OUAD51FgUcCGf68_Cg-P-UOpxRc,22533
|
|
36
|
-
geovisio/translations/it/LC_MESSAGES/messages.po,sha256=kKMX_OabFjzMfYwKA4Gu_n1kND1OKokYwAGs9SSXcj0,30669
|
|
37
|
-
geovisio/translations/ja/LC_MESSAGES/messages.mo,sha256=ZPHJrNdf4bgiNFjxP8W41fkZ2OTJ7Swrqt-Hkh5LfO8,24194
|
|
38
|
-
geovisio/translations/ja/LC_MESSAGES/messages.po,sha256=hE6WOQPaLPjury-bFO3xUJin7bWlcwv0ewSsCpScDdY,32627
|
|
39
|
-
geovisio/translations/ko/LC_MESSAGES/messages.mo,sha256=eKuQS9zLcJ9s-DzbfR-QK2INBJL10jTIQ1kuSTdJ9Rg,426
|
|
40
|
-
geovisio/translations/ko/LC_MESSAGES/messages.po,sha256=uq19EZaeRB-obmE1hYnckA8T12JuuU3nXYyKaMR4tiU,17405
|
|
41
|
-
geovisio/translations/nl/LC_MESSAGES/messages.mo,sha256=HP-evCZLxS_rKlzmIthYOM-ueJShTpqRhq2DpHe_xmM,7896
|
|
42
|
-
geovisio/translations/nl/LC_MESSAGES/messages.po,sha256=v22VpXyXKwYDcwjBJ6r-DAfGwAwxUmUBQHW7nZMQVxY,20576
|
|
43
|
-
geovisio/translations/pl/LC_MESSAGES/messages.mo,sha256=0iFTAhma7jjyl13DCLr2Xr0hgDSN-_fOqcKoYcdDwGE,9912
|
|
44
|
-
geovisio/translations/pl/LC_MESSAGES/messages.po,sha256=e8HW1RKsdkR-aL7peBMuqRUQoqKvzr6Eq0sC1in5XY0,22187
|
|
45
|
-
geovisio/translations/sv/LC_MESSAGES/messages.mo,sha256=HZOV2wRp6rKhd86033u022LWU9TlPPvK3Z1ihdKg638,20719
|
|
46
|
-
geovisio/translations/sv/LC_MESSAGES/messages.po,sha256=OMj2ABVytPbHEa_Fz8Qb3Nof7MjaUl_y8K28KXAaJEg,28748
|
|
47
|
-
geovisio/translations/zh_Hant/LC_MESSAGES/messages.mo,sha256=TmRUyfTGoBpU-2BE-nKjhwdr9r0ikDioVQU-JQ_ih90,431
|
|
48
|
-
geovisio/translations/zh_Hant/LC_MESSAGES/messages.po,sha256=LnnKlHy8t_54nNsLDBqC1eEPwPx49h1Um9mQj6l9hv0,18357
|
|
49
|
-
geovisio/utils/__init__.py,sha256=g4SWVoV73cSXjf5-5D9-HmyB5xKmHSuxxOGWnx7W3V0,71
|
|
50
|
-
geovisio/utils/annotations.py,sha256=9Opfzogx1Pqn6mhbJvaoL2Q2RGPWdFhpHXCA7M7kXQc,6896
|
|
51
|
-
geovisio/utils/auth.py,sha256=_vvkBTvjRXYlnyaHziNWJjiGKulomMqex-CDbv1dbKQ,13845
|
|
52
|
-
geovisio/utils/cql2.py,sha256=hGFRWAMYu4-PPKZWS3wJKNqDdu-XEwnl5zhCIu986A0,4719
|
|
53
|
-
geovisio/utils/db.py,sha256=cxetPL-URdeOxmDMPwxKovB93yQYLNlOL8UHvP4DHg0,2856
|
|
54
|
-
geovisio/utils/excluded_areas.py,sha256=6f3wwsgNpJKxAXnHH8RKlktgHpsG-0QVNTWDDTFqPZ8,2585
|
|
55
|
-
geovisio/utils/extent.py,sha256=vzOHvbG6lpSNt7KrsaonBOx7Tz46S1J603gLbZvs36g,557
|
|
56
|
-
geovisio/utils/fields.py,sha256=oII5uv_n-DXTSYiDBGMM3XDYAuBbYVakKIVTQfFcSLI,3015
|
|
57
|
-
geovisio/utils/filesystems.py,sha256=W_wH7TlvdEux_q4FP0XInxruxlbepFSEpJbPLO9Cnr4,4133
|
|
58
|
-
geovisio/utils/link.py,sha256=u9x4xJa57L1448neD7uPJuAA76_sFXVE0-9_zPW-bJM,490
|
|
59
|
-
geovisio/utils/loggers.py,sha256=_OrGXME4o5qQz8VBaLxYopHVK0DY0QgzXu6O2W0WBjo,477
|
|
60
|
-
geovisio/utils/model_query.py,sha256=027Um4NqkRS6dUjhjHcVbmZjA-_jsy24bN5W6dRPg5Q,2072
|
|
61
|
-
geovisio/utils/params.py,sha256=Yj9-PwC8jxb9LjQZ5K8TERimSsWKwJBHPhUxlzDVMhg,714
|
|
62
|
-
geovisio/utils/pic_shape.py,sha256=di49MT2djHI7zm13Q5DhhB70wji2lCuB7UAYjEWi7Yo,2270
|
|
63
|
-
geovisio/utils/pictures.py,sha256=rrKgkUhFU9pEPLp1jXLc2iUZKlIfPafD_UK1LLNmVUA,24765
|
|
64
|
-
geovisio/utils/reports.py,sha256=3simWHf6t_OuLw2hh2HPYj8vsji00Pz9iRnJOqbTnPs,5227
|
|
65
|
-
geovisio/utils/semantics.py,sha256=7HOCgG57yexOOhBRtAN7bvsTb6v8tscC0ZhOqzKJB1s,8627
|
|
66
|
-
geovisio/utils/sentry.py,sha256=kl1NVir8fr2w1ZUPNAkdFsZzA4xpTlD9eS_TGQMyK9k,3738
|
|
67
|
-
geovisio/utils/sequences.py,sha256=z8lhSEgEMGGWM3y0PafuFU1vkrRhrDGcEhfeuoSGRqI,29329
|
|
68
|
-
geovisio/utils/tags.py,sha256=GyihW-TgQk1ZCpqYPMoN64qOZ6PCFCvCLK9HQnZhtY8,868
|
|
69
|
-
geovisio/utils/time.py,sha256=-hOs7FSx-8eiGmMQtTOrCoF8d_yMlj2306vfxJftEr8,642
|
|
70
|
-
geovisio/utils/tokens.py,sha256=tkihnnXqgQeIME_d12tC8PVrPN90A0i9k6UPEbgZ9TQ,3047
|
|
71
|
-
geovisio/utils/upload_set.py,sha256=k3xeMMFxYFuX8SXaOAayRqwY8mxqLOVG1aVr4UhVyqU,26843
|
|
72
|
-
geovisio/utils/website.py,sha256=812_leydUaI_gPZAnkVizGH1ZJqJkoAE1usFCrRNHCI,1959
|
|
73
|
-
geovisio/web/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
74
|
-
geovisio/web/annotations.py,sha256=VqBYWHmWDFV8XJesUIf7YsQFvaaZYUNDX_VpWMAXlmI,7476
|
|
75
|
-
geovisio/web/auth.py,sha256=d0g3EweC74_OOvD9fxb71M-VuQLD_BdlOcKtpwH4t5o,7143
|
|
76
|
-
geovisio/web/collections.py,sha256=Y8Jvsg0sJ9Bd89T3e5tTSEB9nbHD-Y7rq_lYxleUesw,47524
|
|
77
|
-
geovisio/web/configuration.py,sha256=udvBqdkmzL0ycgy8wbHQbp7vrXxYbjXdBKXZ7MqiMm8,2272
|
|
78
|
-
geovisio/web/docs.py,sha256=dVpTK46EsOqqGhYhwE49niRW6ss21w9b4pFVFx1Ijo8,58237
|
|
79
|
-
geovisio/web/excluded_areas.py,sha256=5BNSZ0UqgFMtgvgrJ73eYGJXPJRnV-mGEs36WDRRxTk,13024
|
|
80
|
-
geovisio/web/items.py,sha256=nJ0qWgP-oY121Z2h0tE33ULNpPPbowhVna_d_5kEHoU,61571
|
|
81
|
-
geovisio/web/map.py,sha256=hzVC0vS-71mFEvRmfCxAprums2Zz5baP6EFTL0uW02M,26136
|
|
82
|
-
geovisio/web/pages.py,sha256=Hkc3KJFE6D38vGnkCK5WUBJ8KQemI1f1wGXpxeiOiNo,6632
|
|
83
|
-
geovisio/web/params.py,sha256=O48U-G0uVY2Ee7RgyX_BQ4WBtw8dPEIQ__Na7_bJPpE,20752
|
|
84
|
-
geovisio/web/pictures.py,sha256=qbhgLsI6YtpFxXn1a3dzO66nnVrWglRZSXWmlfJr1tU,6394
|
|
85
|
-
geovisio/web/prepare.py,sha256=R10_xf6O9dmAAwOMC-vsaxgNTdc9BkDJLATqH6MKtCw,5620
|
|
86
|
-
geovisio/web/reports.py,sha256=8v9a4PMM9RsvSGadZEN2o5PTKG_TohjyMMEBfFeY13E,14123
|
|
87
|
-
geovisio/web/rss.py,sha256=NLUd2Or92tcKRaGUHAze6QMLWczHyzag9ybOzrA8djE,2962
|
|
88
|
-
geovisio/web/stac.py,sha256=PQqbUHBDi0xqVmYjH1oC16qtuaZbU8P0SufM0gdiG9w,14853
|
|
89
|
-
geovisio/web/tokens.py,sha256=l7CAM0FQ6qAcoUhtIRysKc9Gndlji_wOMpkXLsPP1pI,9599
|
|
90
|
-
geovisio/web/upload_set.py,sha256=g49FuOYABhAz1UJcT0AwO5V4z3rue0ppZzemEZiyG6o,33922
|
|
91
|
-
geovisio/web/users.py,sha256=PeB2hcyyLvNDi98iNl8P4wr3X4r3Yz6FVP8Yx_U6Nac,14054
|
|
92
|
-
geovisio/web/utils.py,sha256=kudTbV4Tgtkbd4oUWFTFpyWNINpxAa-VQNbxYEiR6pM,3640
|
|
93
|
-
geovisio/workers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
94
|
-
geovisio/workers/runner_pictures.py,sha256=Mls2iOJKygJ1f7M1q3MTWljB38mJ6U88OtwT7lLGYMU,25754
|
|
95
|
-
geovisio-2.9.0.dist-info/licenses/LICENSE,sha256=iRFSz7MJ7_j4hh3hvIgzNbS2buy5NMva8lulaixd3IE,1069
|
|
96
|
-
geovisio-2.9.0.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
|
|
97
|
-
geovisio-2.9.0.dist-info/METADATA,sha256=M5h-xEUTKpvD7IkISMRcTp-pm5N35n542Weus4Ep8YU,4353
|
|
98
|
-
geovisio-2.9.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|