Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

update() crashes with 'Object of type datetime is not JSON serializable' after load_from_abraflexi()

Open
#4 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
3/5
Estimated time
1-2 days
Newbie friendliness
72/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Active
Tech stack
python
Domain
api, backend

Research direction

Reproduce the failure through load_from_abraflexi() followed by update(), then inspect read_only.py around lines 694–709 and read_write.py::_get_jsonized_data() around line 320. Check both json.dumps() calls and the existing update path; done means a loaded record can be updated without a serialization error and date/datetime values are sent in an API-compatible form.

Written by the indexing model from the issue text.

Description

Popis

FlexiBeeRW.update() (přes MCP evidence_update v mcp-server-abraflexi) spadne s

Object of type datetime is not JSON serializable

na jakémkoliv update payloadu, jakmile záznam byl předtím načten přes load_from_abraflexi().

Root cause

  • read_only.py (~řádky 694–709) v load_from_abraflexi() konvertuje datumová/datetime pole
    ze stringů na skutečné Python datetime/date objekty.
  • read_write.py::update()_get_jsonized_data() (řádek ~320) volá
    json.dumps(payload, ensure_ascii=False) bez default= handleru pro neserializovatelné typy.
  • Typický flow (přesně to, co dělá evidence_update v mcp-server-abraflexi/server.py):
    client.load_from_abraflexi(identifier)   # naplní self.data, vč. datetime/date objektů
    client.set_data_value(key, value)         # jen nastaví nová pole
    client.update()                            # get_data() vrátí VŠECHNA pole vč. datetime → json.dumps() spadne
    

Reprodukce

  1. load_from_abraflexi() na libovolný záznam s datumovým polem (např. faktura-prijata, které má
    datVyst, datSplat, lastUpdate apod.).
  2. Zavolat update() (bez ohledu na to, jaká pole se mění) → 100% pád na json.dumps.

Obejití, které funguje: batch update (mass_update/batch_update v MCP vrstvě) — ten zjevně
nejde přes load_from_abraflexi() + get_data(), ale posílá jen čistý dict polí zadaných voláním,
takže žádné datetime objekty v payloadu nejsou.

Návrh opravy

V _get_jsonized_data() přidat default=str (nebo vlastní serializer, který datetime/date
formátuje zpět do formátu, co AbraFlexi REST API očekává, např. YYYY-MM-DD /
YYYY-MM-DD+HH:MM) do obou json.dumps() volání:

def _json_default(obj):
    if isinstance(obj, (datetime, date)):
        return obj.isoformat()
    raise TypeError(f"Object of type {type(obj).__name__} is not JSON serializable")

...
return json.dumps(payload, ensure_ascii=False, default=_json_default)

Alternativně (nebo navíc): load_from_abraflexi() by měl při ukládání do self.data držet
zpět serializovatelnou reprezentaci (string) a poskytovat parsované datetime/date jen přes
samostatný accessor, ne přímo v self.data, které se pak recyklovaně posílá zpátky na update.

Dopad

Zasahuje mcp-server-abraflexi nástroj evidence_update (a pravděpodobně i save()/insert_to_abraflexi() cesty, pokud se používá načtený záznam) — v praxi znemožňuje jakoukoliv jednotlivou úpravu záznamu (např. faktury) přes tento tool, dokud se needitne obejít přes batch update.

Prostředí

  • python-abraflexi 1.1.2
  • volání přišlo přes mcp-server-abraflexi (evidence_update tool), server abraflexi-vitexsoftware (company vitex_software, evidence faktura-prijata)
Dominant language
Python
Stars
1
Forks
1
PR merge metrics
No merged PRs in 30d

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.