Geovisio_cli et windows

Bonjour,

Je souhaitais tester l’utilisation du client GeoVisio afin de publier des images 360.
Je n’arrive pas a faire fonctionner le client sous Windows avec un python.
J’installe bien les lib mais en suite… c’est le flou complet.

Avez vous déja eu des retours en ce sens ? Auriez vous des exemples d’utilisation du client via un python Windows ?

Merci

Bonjour, vous avez installer geovisio_cli ? Avez vous accès à un terminal ?

Si oui, il faut ouvrir un terminal windows et taper geovisio upload --api-url https://panoramax.ign.fr <chemin_vers_les_photos>

Je vais essayer de faire un tutoriel sur l’upload de photo via windows, mais en attendant je suis disponible par visio si vous voulez un coup de main, vous pouvez m’envoyer un message privé.

Pour le moment, j’ai soit une erreur car La commande n’est pas reconnu ou ce type d’erreur

NameError: name ‘geovisio’ is not defined

geovisio upload --api-url https://panoramax.ign.fr d:
File “”, line 1
geovisio upload --api-url https://panoramax.ign.fr d:
^
SyntaxError: invalid syntax
:thinking:

On a vu ensemble le soucis, mais pour les suivants, j’ai fait un tutoriel d’envoi de photo depuis windows, j’espère que ca pourra aider.

1 Like

J’ai eut le même problème mais j’ai fini par m’en sortir seul.
Je pensais être le seul à ne pas metriser Python donc je n’avais pas donné d’info sur le problème.
La prochaine fois je penserai à donner la solution pour une les autres ne cherchent pas

1 Like

Bonjour,
l’installation de geovisio_cli ne marche pas. Ci-joint le log d’installation

 <string>:45: RuntimeWarning: Pillow 9.4.0 does not support Python 3.12 and does not provide prebuilt Windows binaries. We do not recommend building from source on Windows.
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for Pillow
Failed to build Pillow
ERROR: Could not build wheels for Pillow, which is required to install pyproject.toml-based projects

OS : W11
Python : 3.12
Pip 23.3
Pipx 1.2.0

Le problème survient, car Pillow 9.4.0 ne supporte pas Python 3.12. L’instance panoramax indique néanmoins d’avoir “au moins Python 3.8”
Pillow 9.4.0 supporte Python de la version 3.7 à 3.11 d’après la documentation

Il serait pratique de mettre à jour soit les dépendances, soit la documentation (un nouveau comme moi installe la dernière version de python par défaut).

Cordialement

EDIT : j’ai bien réussi l’installation suite au changement de version de Python

1 Like

On construit maintenant des exécutables windows et linux à chaque nouvelle release GeoVisio.

Ces exécutables intègrent tout ce qu’il faut et ne nécessite pas l’installation de python, ca devrait simplifier les choses.
Sous Windows, il suffit de télécharger le fichier, et vous pouvez directement l’utiliser en ouvrant un prompt (le plus simple étant de taper cmd dans l’explorateur de fichier ouvert dans le dossier de téléchargement).

Vous pouvez trouver ces exécutables ici:

2 Likes

Super nouvelle !
Cela va simplifier le déploiement et l’utilisation

N’hésitez pas à nous dire si c’est plus facile d’utilisation et si vous voyez d’autres améliorations :+1:

Bonjour,

Aujourd’hui je n’arrive pas à uploader de photos avec le geovisio_cli sous Windows :
TooManyRedirects: Exceeded 30 redirects.
Par contre ça fonctionne très bien avec l’interface web, du coup j’ai fait comme ça !

Bonjour,

Même problème pour moi sur l’interface en ligne de commande via windows.
TooManyRedirects: Exceeded 30 redirects.

Les 950 photos ne passent pas non plus par l’interface web, c’est peut être un peu trop.

hum, étrange, vous passez par des proxy ?

J’ai toujours le même problème à l’heure actuelle. Je fais donc tous mes uploads par l’interface web. Et ça me fait pareil au boulot ou chez moi alors que ça marchait bien avant.

J’ai utilisé la version Windows “compilée” lundi, vers l’instance osm-fr, et ça a fonctionné correctement. Le volume de photos était faible.

Cela me fait penser que ce n’est pas du tout lié au nombre de photos qu’on veut envoyer.

Pour info moi j’envoie vers l’instance IGN. Vous voulez tout le message d’erreur ?

je veux bien oui, pour essayer de trouver d’ou vient le soucis

C:\Users\glacote>geovisio upload --api-url https://panoramax.ign.fr/ c:\temp\a
┌─────────────────────────────── Traceback (most recent call last) ────────────────────────────────┐
│ C:\Users\glacote\AppData\Local\Programs\Python\Python311\Lib\site-packages\geovisio_cli\main.py: │
│ 139 in upload │
│ │
│ 136 │ │ │ disableCertCheck=disable_cert_check, │
│ 137 │ │ ) │
│ 138 │ │
│ > 139 │ _run_command(cmd, “importing collection”) │
│ 140 │
│ 141 │
│ 142 @app.command() │
│ │
│ ┌─────────────────────────────────── locals ────────────────────────────────────┐ │
│ │ api_url = ‘https://panoramax.ign.fr/’ │ │
│ │ cmd = <function upload..cmd at 0x000001569DF593A0> │ │
│ │ disable_cert_check = False │ │
│ │ duplicate_distance = 1.0 │ │
│ │ duplicate_rotation = 30 │ │
│ │ isBlurred = False │ │
│ │ password = None │ │
│ │ path = WindowsPath(‘c:/temp/a’) │ │
│ │ picture_upload_timeout = 60.0 │ │
│ │ sort_method = <SortMethod.time_asc: ‘time-asc’> │ │
│ │ split_distance = 100 │ │
│ │ split_time = 60 │ │
│ │ title = None │ │
│ │ token = None │ │
│ │ user = None │ │
│ │ wait = False │ │
│ └───────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ C:\Users\glacote\AppData\Local\Programs\Python\Python311\Lib\site-packages\geovisio_cli\main.py: │
│ 268 in _run_command │
│ │
│ 265 def _run_command(command, command_name_for_error): │
│ 266 │ try: │
│ 267 │ │ utils.check_if_lastest_version() │
│ > 268 │ │ command() │
│ 269 │ except exception.CliException as e: │
│ 270 │ │ print( │
│ 271 │ │ │ Panel( │
│ │
│ ┌─────────────────────────────────── locals ────────────────────────────────────┐ │
│ │ command = <function upload..cmd at 0x000001569DF593A0> │ │
│ │ command_name_for_error = ‘importing collection’ │ │
│ └───────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ C:\Users\glacote\AppData\Local\Programs\Python\Python311\Lib\site-packages\geovisio_cli\main.py: │
│ 120 in cmd │
│ │
│ 117 │ │ │ │ “user/password authentication have been deprecated, use a token or geov │ │ 118 │ │ │ ) │ │ 119 │ │ geovisio = model.Geovisio(url=api_url, token=token) │ │ > 120 │ │ geovisio_cli.sequences.upload.upload( │ │ 121 │ │ │ path, │ │ 122 │ │ │ geovisio, │ │ 123 │ │ │ wait=wait, │ │ │ │ ┌──────────────────────────────────── locals ────────────────────────────────────┐ │ │ │ api_url = 'https://panoramax.ign.fr/' │ │ │ │ disable_cert_check = False │ │ │ │ duplicate_distance = 1.0 │ │ │ │ duplicate_rotation = 30 │ │ │ │ geovisio = Geovisio(url='https://panoramax.ign.fr/', token=None) │ │ │ │ isBlurred = False │ │ │ │ password = None │ │ │ │ path = WindowsPath('c:/temp/a') │ │ │ │ picture_upload_timeout = 60.0 │ │ │ │ sort_method = <SortMethod.time_asc: 'time-asc'> │ │ │ │ split_distance = 100 │ │ │ │ split_time = 60 │ │ │ │ title = None │ │ │ │ token = None │ │ │ │ user = None │ │ │ │ wait = False │ │ │ └────────────────────────────────────────────────────────────────────────────────┘ │ │ │ │ C:\Users\glacote\AppData\Local\Programs\Python\Python311\Lib\site-packages\geovisio_cli\sequence │ │ s\upload.py:309 in upload │ │ │ │ 306 │ │ │ s.verify = False │ │ 307 │ │ utils.test_geovisio_url(s, geovisio.url) │ │ 308 │ │ # early test login │ │ > 309 │ │ if not _login_if_needed(s, geovisio): │ │ 310 │ │ │ raise CliException( │ │ 311 │ │ │ │ "🔁 Computer not authenticated yet, impossible to upload pictures, but y │ │ 312 │ │ │ ) │ │ │ │ ┌──────────────────────────────────── locals ─────────────────────────────────────┐ │ │ │ alreadyBlurred = False │ │ │ │ disableCertCheck = False │ │ │ │ geovisio = Geovisio(url='https://panoramax.ign.fr/', token=None) │ │ │ │ mergeParams = MergeParams(maxDistance=1.0, maxRotationAngle=30) │ │ │ │ path = WindowsPath('c:/temp/a') │ │ │ │ pictureUploadTimeout = 60.0 │ │ │ │ s = <requests.sessions.Session object at 0x000001569DD40A90> │ │ │ │ sortMethod = <SortMethod.time_asc: 'time-asc'> │ │ │ │ splitParams = SplitParams(maxDistance=100, maxTime=60) │ │ │ │ title = None │ │ │ │ wait = False │ │ │ └─────────────────────────────────────────────────────────────────────────────────┘ │ │ │ │ C:\Users\glacote\AppData\Local\Programs\Python\Python311\Lib\site-packages\geovisio_cli\sequence │ │ s\upload.py:283 in _login_if_needed │ │ │ │ 280 │ │ 281 def _login_if_needed(session: requests.Session, geovisio: Geovisio) -> bool: │ │ 282 │ # Check if API needs login │ │ > 283 │ apiConf = session.get(f"{geovisio.url}/api/configuration") │ │ 284 │ if apiConf.json().get("auth", {}).get("enabled", False): │ │ 285 │ │ logged_in = login(session, geovisio) │ │ 286 │ │ if not logged_in: │ │ │ │ ┌────────────────────────────── locals ───────────────────────────────┐ │ │ │ geovisio = Geovisio(url='https://panoramax.ign.fr/', token=None) │ │ │ │ session = <requests.sessions.Session object at 0x000001569DD40A90> │ │ │ └─────────────────────────────────────────────────────────────────────┘ │ │ │ │ C:\Users\glacote\AppData\Local\Programs\Python\Python311\Lib\site-packages\requests\sessions.py: │ │ 600 in get │ │ │ │ 597 │ │ """ │ │ 598 │ │ │ │ 599 │ │ kwargs.setdefault("allow_redirects", True) │ │ > 600 │ │ return self.request("GET", url, **kwargs) │ │ 601 │ │ │ 602 │ def options(self, url, **kwargs): │ │ 603 │ │ r"""Sends a OPTIONS request. Returns :class:Response` object. │
│ │
│ ┌───────────────────────────── locals ──────────────────────────────┐ │
│ │ kwargs = {‘allow_redirects’: True} │ │
│ │ self = <requests.sessions.Session object at 0x000001569DD40A90> │ │
│ │ url = ‘https://panoramax.ign.fr//api/configuration’ │ │
│ └───────────────────────────────────────────────────────────────────┘ │
│ │
│ C:\Users\glacote\AppData\Local\Programs\Python\Python311\Lib\site-packages\requests\sessions.py: │
│ 587 in request │
│ │
│ 584 │ │ │ “allow_redirects”: allow_redirects, │
│ 585 │ │ } │
│ 586 │ │ send_kwargs.update(settings) │
│ > 587 │ │ resp = self.send(prep, **send_kwargs) │
│ 588 │ │ │
│ 589 │ │ return resp │
│ 590 │
│ │
│ ┌────────────────────────────────────────── locals ───────────────────────────────────────────┐ │
│ │ allow_redirects = True │ │
│ │ auth = None │ │
│ │ cert = None │ │
│ │ cookies = None │ │
│ │ data = None │ │
│ │ files = None │ │
│ │ headers = None │ │
│ │ hooks = None │ │
│ │ json = None │ │
│ │ method = ‘GET’ │ │
│ │ params = None │ │
│ │ prep = <PreparedRequest [GET]> │ │
│ │ proxies = {} │ │
│ │ req = <Request [GET]> │ │
│ │ self = <requests.sessions.Session object at 0x000001569DD40A90> │ │
│ │ send_kwargs = { │ │
│ │ │ ‘timeout’: None, │ │
│ │ │ ‘allow_redirects’: True, │ │
│ │ │ ‘proxies’: OrderedDict(), │ │
│ │ │ ‘stream’: False, │ │
│ │ │ ‘verify’: True, │ │
│ │ │ ‘cert’: None │ │
│ │ } │ │
│ │ settings = {‘proxies’: OrderedDict(), ‘stream’: False, ‘verify’: True, ‘cert’: None} │ │
│ │ stream = None │ │
│ │ timeout = None │ │
│ │ url = ‘https://panoramax.ign.fr//api/configuration’ │ │
│ │ verify = None │ │
│ └─────────────────────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ C:\Users\glacote\AppData\Local\Programs\Python\Python311\Lib\site-packages\requests\sessions.py: │
│ 723 in send │
│ │
│ 720 │ │ if allow_redirects: │
│ 721 │ │ │ # Redirect resolving generator. │
│ 722 │ │ │ gen = self.resolve_redirects(r, request, **kwargs) │
│ > 723 │ │ │ history = [resp for resp in gen] │
│ 724 │ │ else: │
│ 725 │ │ │ history =
│ 726 │
│ │
│ ┌─────────────────────────────────────────── locals ───────────────────────────────────────────┐ │
│ │ adapter = <requests.adapters.HTTPAdapter object at 0x000001568F9C13D0> │ │
│ │ allow_redirects = True │ │
│ │ elapsed = 0.04421179999189917 │ │
│ │ gen = <generator object SessionRedirectMixin.resolve_redirects at │ │
│ │ 0x000001569DE49700> │ │
│ │ hooks = {‘response’: } │ │
│ │ kwargs = { │ │
│ │ │ ‘timeout’: None, │ │
│ │ │ ‘proxies’: OrderedDict(), │ │
│ │ │ ‘stream’: False, │ │
│ │ │ ‘verify’: True, │ │
│ │ │ ‘cert’: None │ │
│ │ } │ │
│ │ r = <Response [308]> │ │
│ │ request = <PreparedRequest [GET]> │ │
│ │ self = <requests.sessions.Session object at 0x000001569DD40A90> │ │
│ │ start = 89122.5556319 │ │
│ │ stream = False │ │
│ └──────────────────────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ C:\Users\glacote\AppData\Local\Programs\Python\Python311\Lib\site-packages\requests\sessions.py: │
│ 723 in │
│ │
│ 720 │ │ if allow_redirects: │
│ 721 │ │ │ # Redirect resolving generator. │
│ 722 │ │ │ gen = self.resolve_redirects(r, request, **kwargs) │
│ > 723 │ │ │ history = [resp for resp in gen] │
│ 724 │ │ else: │
│ 725 │ │ │ history =
│ 726 │
│ │
│ ┌──────────────────────────────────────── locals ────────────────────────────────────────┐ │
│ │ .0 = <generator object SessionRedirectMixin.resolve_redirects at 0x000001569DE49700> │ │
│ │ resp = <Response [308]> │ │
│ └────────────────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ C:\Users\glacote\AppData\Local\Programs\Python\Python311\Lib\site-packages\requests\sessions.py: │
│ 191 in resolve_redirects │
│ │
│ 188 │ │ │ │ resp.raw.read(decode_content=False) │
│ 189 │ │ │ │
│ 190 │ │ │ if len(resp.history) >= self.max_redirects: │
│ > 191 │ │ │ │ raise TooManyRedirects( │
│ 192 │ │ │ │ │ f"Exceeded {self.max_redirects} redirects.”, response=resp │
│ 193 │ │ │ │ ) │
│ 194 │
│ │
│ ┌─────────────────────────────────────────── locals ───────────────────────────────────────────┐ │
│ │ adapter_kwargs = {} │ │
│ │ cert = None │ │
│ │ headers = {‘User-Agent’: ‘python-requests/2.28.2’, ‘Accept-Encoding’: ‘gzip, │ │
│ │ deflate’, ‘Accept’: ‘/’, ‘Connection’: ‘keep-alive’} │ │
│ │ hist = [ │ │
│ │ │ <Response [308]>, │ │
│ │ │ <Response [308]>, │ │
│ │ │ <Response [308]>, │ │
│ │ │ <Response [308]>, │ │
│ │ │ <Response [308]>, │ │
│ │ │ <Response [308]>, │ │
│ │ │ <Response [308]>, │ │
│ │ │ <Response [308]>, │ │
│ │ │ <Response [308]>, │ │
│ │ │ <Response [308]>, │ │
│ │ │ … +21 │ │
│ │ ] │ │
│ │ parsed = ParseResult( │ │
│ │ │ scheme=‘https’, │ │
│ │ │ netloc=‘panoramax.ign.fr’, │ │
│ │ │ path=‘/api/configuration’, │ │
│ │ │ params=‘’, │ │
│ │ │ query=‘’, │ │
│ │ │ fragment=‘’ │ │
│ │ ) │ │
│ │ prepared_request = <PreparedRequest [GET]> │ │
│ │ previous_fragment = ‘’ │ │
│ │ proxies = OrderedDict() │ │
│ │ req = <PreparedRequest [GET]> │ │
│ │ resp = <Response [308]> │ │
│ │ rewindable = False │ │
│ │ self = <requests.sessions.Session object at 0x000001569DD40A90> │ │
│ │ stream = False │ │
│ │ timeout = None │ │
│ │ url = ‘https://panoramax.ign.fr/api/configuration’ │ │
│ │ verify = True │ │
│ │ yield_requests = False │ │
│ └──────────────────────────────────────────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────────────────────────────────────────┘
TooManyRedirects: Exceeded 30 redirects.

Bonjour,

Je n’ai pas pris le temps d’essayer de comprendre mais j’ai également depuis quelques temps le message TooManyRedirects.
J’ai juste essayé de mettre à jour le client via pip upgrade mais ça n’a rien changé.

Cordialement,

Très étrange ces erreurs 308 en série, un code erreur pas courant du tout.

C’est une redirection permanente qui précise que la method (GET/POST) ne doit pas être changée.

Je ne pense pas que ce soit dans le code de geovisio… ni de la CLI.
Un problème lié à l’hébergeur (scalingo) ? cc @antoine-de