Errors during Syncing with gramps_web_sync

Hello everyone,

I am currently facing issues trying to sync my local tree to Gramps Web.
I fill out my login credentials as usual:

After pressing next I get an error message. Log reads:

877483: WARNING: grampswebsync.py: line 83: Keyring is not installed, cannot retrieve password.
884931: ERROR: grampswebsync.py: line 483: Fehler 500 beim Herstellen der Verbindung zum Server.

Happy for any tips or a possibly identifing this as a bug. Can give more details/provide translation of german bits if needed!

Thanks so much in advance!

Here’s all my version Info:

gramps_web_sync
Version: 1.3.8

Gramps Web (using grampshub.com)
Gramps 6.0.7
Gramps Web API 3.9.0
Gramps Web Frontend 26.3.1
Gramps QL 0.4.0
Sifts 1.3.0
locale: en
multi-tree: true
task queue: true
OCR: true
chat: true

Gramps Desktop
AIO64-6.0.7–1
Python: 3.14.3
sqlite: 3.52.0
orjson: 3.11.7
LANG: de_DE.UTF-8
OS: Windows

and here comes the debug report for grampswebsync (username redacted)

7062: DEBUG: grampswebsync.py: line 103: Initializing Gramps Web Sync addon.
8380: DEBUG: grampswebsync.py: line 79: Retrieving password for user XX
8381: WARNING: grampswebsync.py: line 83: Keyring is not installed, cannot retrieve password.
9384: DEBUG: grampswebsync.py: line 222: Moving to next page from page 0.
9385: DEBUG: grampswebsync.py: line 222: Moving to next page from page 1.
12091: DEBUG: grampswebsync.py: line 222: Moving to next page from page 1.
13432: DEBUG: grampswebsync.py: line 222: Moving to next page from page 1.
13432: DEBUG: grampswebsync.py: line 222: Moving to next page from page 2.
13434: DEBUG: webapihandler.py: line 161: Fetching an access token from the server
13563: DEBUG: webapihandler.py: line 161: Fetching an access token from the server
13799: DEBUG: grampswebsync.py: line 222: Moving to next page from page 2.
13801: INFO: grampswebsync.py: line 502: Downloading Gramps XML file.
14840: ERROR: grampswebsync.py: line 483: Fehler 500 beim Herstellen der Verbindung zum Server.

This seems to be a regression in Web API 3.8.0 or 3.9.0, see Web sync issue · Issue #55 · DavidMStraub/gramps-web-sync · GitHub

Hey David, thanks so much for the quick response and looking into it!

will report back when v3.9.1 is out :slight_smile:

Hello, just tried again. not completing, but also no error message from gramps anymore. just displaying Error 500.

see my version info + debug report below :slight_smile:

let me know if can provide anything else for trying to tackle this :slight_smile:

Gramps Desktop
Python: 3.14.4
sqlite: 3.53.0
orjson: 3.11.8
LANG: de_DE.UTF-8
OS: Windows

Gramps Web (Grampshub)
Gramps 6.0.8
Gramps Web API 3.11.1
Gramps Web Frontend 26.4.1
Gramps QL 0.4.0
Sifts 1.3.0
locale: en
multi-tree: true
task queue: true
OCR: true
chat: true

Debug Log

2026-04-17 12:56:40.969: DEBUG: grampswebsync.py: line 103: Initializing Gramps Web Sync addon.
2026-04-17 12:56:42.089: DEBUG: grampswebsync.py: line 79: Retrieving password for user XX
2026-04-17 12:56:42.090: WARNING: grampswebsync.py: line 83: Keyring is not installed, cannot retrieve password.
2026-04-17 12:56:43.361: DEBUG: grampswebsync.py: line 222: Moving to next page from page 0.
2026-04-17 12:56:43.362: DEBUG: grampswebsync.py: line 222: Moving to next page from page 1.
2026-04-17 12:56:46.682: DEBUG: grampswebsync.py: line 222: Moving to next page from page 1.
2026-04-17 12:56:47.484: DEBUG: grampswebsync.py: line 222: Moving to next page from page 1.
2026-04-17 12:56:47.484: DEBUG: grampswebsync.py: line 222: Moving to next page from page 2.
2026-04-17 12:56:47.486: DEBUG: webapihandler.py: line 161: Fetching an access token from the server
2026-04-17 12:56:47.621: DEBUG: webapihandler.py: line 161: Fetching an access token from the server
2026-04-17 12:56:47.866: DEBUG: grampswebsync.py: line 222: Moving to next page from page 2.
2026-04-17 12:56:47.868: INFO: grampswebsync.py: line 502: Downloading Gramps XML file.
2026-04-17 12:56:48.976: WARNING: grampswebsync.py: line 483: Fehler 500 beim Herstellen der Verbindung zum Server.
2026-04-17 12:56:48.976: DEBUG: grampswebsync.py: line 222: Moving to next page from page 2.
2026-04-17 12:56:48.977: DEBUG: grampswebsync.py: line 224: Skipping to last page due to error.
2026-04-17 12:56:50.818: DEBUG: grampswebsync.py: line 214: Closing Gramps Web Sync addon.

Could maybe be related to another issue I’m facing?

might be a far stretch, as I have no real software/coding knowledge.

Hello,

reporting back from my attempts to overcome my current data lock-in :grimacing:

Even after some Gramps Web and API Updates, the same issues still occur as detailled in this thread as well as the one with exporting I wrote about here (also see last post).

→ So what are my options right now?
Is there any options to “manually” search for corrupted data?
Or might it be best to manually add Gramps Web Changes to my Gramps Desktop and start over?
(also haven’t tried exporting my data via other export options apart from Gramps XML - but as far as I know I’ll lose data when using them)

Thankful for any advice!

the problems persist :confused: … considering my options now:

Most export options are sucessful, but 2 produce errors: Gramps XML (can only concatenate str (not "NoneType") to str) and GEDCOM (HandleError()) are not working

Most likely i will have to make a plan on how to systematically see which changes were made compared to my desktop version and manually add them there. (Or even start completely from scratch to avoid carrying over corrupted data??)

@DavidMStraub Any clue you’ve got for this case, per chance? :crossed_fingers:t2:

If not, so be it! After all I should have synced much more frequently after doing changes on Gramps Web. But I didn’t know at that time..

Hi,

Can you provide the celery log? That’s where the exception traceback is.

Hey, I unfortunately can’t provide any logs as I don’t host Gramps Web myself - I use Grampshub :slightly_smiling_face:

Oh, that bloody service.

Then just provide me an exact sync time/date please :slight_smile:

:wink:

Alright, just gave it another shot: sync attempted @ ~23:23

thank you!

Really, 23:23 CEST? There is nothing in the log at all. Did the addon report an error 500?

Yes, yesterday I tried @ 23:23 CEST - addon reported error 500.

Confirmed reproducing error 500 by trying again around just before hitting send on this (around 22:12 CEST), just to be sure

Oh, I see the error now. It’s not in celery as it happens during export, so I was looking in the wrong place.

[2026-07-04 20:11:30 +0000] [16654] [ERROR] Error handling request GET /api/exporters/gramps/file
Traceback (most recent call last):
  File "/venv/lib/python3.13/site-packages/gunicorn/workers/sync.py", line 141, in handle
    self.handle_request(listener, req, client, addr)
    ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/venv/lib/python3.13/site-packages/gunicorn/workers/sync.py", line 184, in handle_request
    respiter = self.wsgi(environ, resp.start_response)
  File "/venv/lib/python3.13/site-packages/flask/app.py", line 1536, in __call__
    return self.wsgi_app(environ, start_response)
           ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/venv/lib/python3.13/site-packages/flask/app.py", line 1514, in wsgi_app
    response = self.handle_exception(e)
  File "/venv/lib/python3.13/site-packages/flask/app.py", line 1511, in wsgi_app
    response = self.full_dispatch_request()
  File "/venv/lib/python3.13/site-packages/flask/app.py", line 919, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/venv/lib/python3.13/site-packages/flask/app.py", line 917, in full_dispatch_request
    rv = self.dispatch_request()
  File "/venv/lib/python3.13/site-packages/flask/app.py", line 902, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)  # type: ignore[no-any-return]
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
  File "/venv/lib/python3.13/site-packages/gramps_webapi/api/auth.py", line 44, in wrapper
    return func(*args, **kwargs)
  File "/venv/lib/python3.13/site-packages/flask/views.py", line 110, in view
    return current_app.ensure_sync(self.dispatch_request)(**kwargs)  # type: ignore[no-any-return]
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^
  File "/venv/lib/python3.13/site-packages/gramps_webapi/api/resources/__init__.py", line 51, in dispatch_request
    return current_app.ensure_sync(meth)(*args, **kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
  File "/venv/lib/python3.13/site-packages/webargs/core.py", line 652, in wrapper
    return func(*args, **kwargs)
  File "/venv/lib/python3.13/site-packages/flask_smorest/arguments.py", line 85, in wrapper
    return current_app.ensure_sync(func)(*f_args, **f_kwargs)
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
  File "/venv/lib/python3.13/site-packages/gramps_webapi/api/resources/exporters.py", line 242, in get
    file_name, file_type = run_export(db_handle, extension, options)
                           ~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/venv/lib/python3.13/site-packages/gramps_webapi/api/export.py", line 288, in run_export
    result = export_function(db_handle, file_path, user, options)
  File "/venv/lib/python3.13/site-packages/gramps/plugins/export/exportxml.py", line 1467, in export_data
    return g.write(filename)
           ~~~~~~~^^^^^^^^^^
  File "/venv/lib/python3.13/site-packages/gramps/plugins/export/exportxml.py", line 1490, in write
    ret = GrampsXmlWriter.write(self, filename)
  File "/venv/lib/python3.13/site-packages/gramps/plugins/export/exportxml.py", line 200, in write
    self.write_xml_data()
    ~~~~~~~~~~~~~~~~~~~^^
  File "/venv/lib/python3.13/site-packages/gramps/plugins/export/exportxml.py", line 321, in write_xml_data
    self.write_person(person, 2)
    ~~~~~~~~~~~~~~~~~^^^^^^^^^^^
  File "/venv/lib/python3.13/site-packages/gramps/plugins/export/exportxml.py", line 579, in write_person
    self.write_media_list(person.get_media_list(), index + 1)
    ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/venv/lib/python3.13/site-packages/gramps/plugins/export/exportxml.py", line 1230, in write_media_list
    self.g.write('%s<objref hlink="%s"' % (sp, "_" + mobj_id))
                                               ~~~~^~~~~~~~~
TypeError: can only concatenate str (not "NoneType") to str

So you’re hitting this exact issue:

Can you please double-check your sync addon version?

And I assume you’ve already tried running check and repair in Gramps Web, right?