Ecmind_blue_client: Release Notes 1.0.0rc1

Gerne wollen wir euch informieren, dass wir die Version 1.0.0rc1 für eure Tests freigegeben haben. Wir würden uns sehr über Rückmeldungen wie Bug-Reports, Änderungswünsche und natürlich hauch Feature-Requests von euch freuen.

Installation

Um die neue Version zu verwenden, müsst ihr explizit die Pre-Release-Version anfordern:

pip

## pip

# Variante A: exakte Version festnageln (empfohlen, eindeutig)
pip install "ecmind_blue_client==1.0.0rc1"

# Variante B: neuestes Pre-Release dieser Bibliothek zulassen
pip install --pre ecmind_blue_client

Oder falls ihr uv verwendet

## uv

# In ein Projekt aufnehmen (exakte Version)
uv add "ecmind_blue_client==1.0.0rc1"

# Pre-Releases generell erlauben und neuesten RC ziehen
uv add --prerelease=allow ecmind_blue_client

Kompatibilität

Die Version 1.0.0rc1 sollte vollständig mit der aktuellen 0.9.2 kompatibel sein. Wir empfehlen aber, schrittweise vom bisherigen TCPClient bzw. TCPPoolClient auf die neue ECM-Abstraktion zu wechseln.

Die Mindestanforderung an Python ist von 3.11 auf 3.12 angehoben worden.

Dokumentation

Die neue API hat nun auch eine eigene Dokumentation unter https://ecmind-blue-client.docs.ecmind.ch wo ihr Details zur API finden könnt.

Änderungen in der 1.0.0 rc1

Mit der Version 1.0.0 (aktuell Release Candidate 1.0.0rc1) erhält der ecmind_blue_client eine grundlegend erweiterte, moderne API. Die bisherige Low-Level-Schnittstelle bleibt erhalten - neu hinzugekommen ist eine vollständige, typsichere Abstraktionsschicht.

Zentrale Neuerungen

  • Neue High-Level-API ecm.* - eine moderne, typsichere Abstraktion über das enaio®-Protokoll, gegliedert in fachliche Namespaces: ecm.dms, ecm.system, ecm.security, ecm.db und ecm.workflow.
  • Synchron und asynchron - sämtliche Operationen stehen wahlweise als synchrone oder asynchrone Variante zur Verfügung (SyncPoolClient / AsyncPoolClient), inklusive Verbindungs-Pooling mit Statistiken.
  • Typisiertes Modell-System (ORM-ähnlich) - Ordner, Register und Dokumente lassen sich als typisierte Modellklassen anlegen, lesen, aktualisieren und löschen (insert / update / upsert), inkl. Pflichtfeld-Prüfung, Tabellenfeldern, schreibgeschützten Feldern und Dokumentvarianten.
  • DMS-Abfragen - komfortabler Query-Builder und -Parser für DMS-Suchen, kombinierte Abfragen, LOL-/HOL-Unterstützung sowie Volltextsuche direkt am typisierten Modell.
  • Workflow-Funktionen - Organisationen, Vertretungen und Abwesenheiten verwalten, Vorgangslisten je Benutzer abrufen sowie Workflows per API starten (start_process) inkl. typisierter Workflow-Variablen-Modelle.
  • Weitere Operationen - Dokument-Historie, Check-out/Check-in, Berechtigungsprüfung, Lizenz- und Modulinformationen, Benutzer-/Gruppen-/Rollenverwaltung, Export des Sicherheitssystems und freie SQL-Ausführung.
  • Code-Generatoren - ecm-generate-models erzeugt typisierte Modellklassen aus der enaio®-Objektdefinition; ecm-generate-workflow-models erzeugt typisierte Workflow-Variablen-Modelle.
1 „Gefällt mir“

Wir haben gerade die Version 1.0.0rc2 hinzugefügt.

Änderungen

  • Explizite Funktion replace_table_fields() für die Methoden ecm.dms.update und ecm.dms.upsert um die Option REPLACE_TABLE_FIELDS explizit setzen zu können.
  • in der Methode ecm.dms.upsert Tag Reihenfolge im XML der Tags <Fields> und <Search> explizit festgelegt, da Search niemals nach Fields kommen darf.
  • Unterstützung von PageControls ohne interne Namen. In diesem Fall werden nun die page_ids (GUID des PageControls) verwendet.

Installation

Um die neue Version zu verwenden, müsst ihr explizit die Pre-Release-Version anfordern:

pip

## pip

# Variante A: exakte Version festnageln (empfohlen, eindeutig)
pip install "ecmind_blue_client==1.0.0rc2"

# Variante B: neuestes Pre-Release dieser Bibliothek zulassen
pip install --pre ecmind_blue_client

Oder falls ihr uv verwendet

## uv

# In ein Projekt aufnehmen (exakte Version)
uv add "ecmind_blue_client==1.0.0rc2"

# Pre-Releases generell erlauben und neuesten RC ziehen
uv add --prerelease=allow ecmind_blue_client
1 „Gefällt mir“

Wir haben gerade die Version 1.0.0rc3 hinzugefügt.

Änderungen

  • ecm.dms.search unterstützt nun auch die Suche anhand der Tabellen Felder. Optional mit Zeilenbezug.
  • Enum Felder sind jetzt in Where Clauses angenehmer zu verwenden. Bisher musste jeweils MeinFeld == MeinEnum.Wert1.value geschrieben werden. Nun ist auch einfach MeinFeld == MeinEnum.Wert1 möglich.
  • Einige Bugfixes in der Generierung von Workflow Modellen sind nun behoben

Dokumenation

1 „Gefällt mir“

ecmind_blue_client 1.0.0rc4 & 1.0.0rc5

Zwei neue Release Candidates der 1.0.0-Reihe (für RC4 gab es hier noch keinen Eintrag). Die öffentliche API bleibt gegenüber 1.0.0rc3 unverändert, abgesehen von den neuen Funktionen unten.

Änderungen

1.0.0rc4

  • Neu: Model.system.<Feld> auf Klassenebene als abfragbares Feld, z. B. select(Doc).where(Folder.system.id == folder.system.id).
  • Neu: Gruppenverwaltung auf ecm.security: create_group(), update_group(), delete_group(), empty_group().
  • Fix: Lizenz-Jobs (check_license(), module_info()) funktionieren wieder auf enaio 12+; ein unbekanntes Modul liefert sauber ECMNotFoundException.
  • Fix (#15434): Felder lassen sich per update() wieder leeren. Ein auf None gesetztes Feld wird jetzt als field_function="NULL" an den Server gesendet.
  • Fix (#15431): ecm.db.select() brach bei führendem Zeilenumbruch im SQL mit IndexError ab; das Statement wird nun links getrimmt.

1.0.0rc5

  • Fix: ecm-generate-models ließ datentragende Felder mit GROUP-Control aus (z. B. PostDoc: hash, group, user). Diese werden jetzt als ECMField erzeugt; rein visuelle Gruppen bleiben ausgeschlossen. Modelldateien bitte neu generieren.

Installation

pip:

# A) genaue Version
pip install -U ecmind_blue_client==1.0.0rc5
# B) neueste Version inkl. Pre-Releases
pip install -U --pre ecmind_blue_client

uv:

# A) genaue Version
uv add ecmind_blue_client==1.0.0rc5
# B) Pre-Releases erlauben
uv add --prerelease=allow ecmind_blue_client

ecmind_blue_client 1.0.0rc6 bis 1.0.0rc9

Hallo zusammen, hier die nachträglichen Infos zu den vier neuen Release Candidates der 1.0.0-Reihe. 1.0.0rc9 ist soeben veröffentlicht und wird gerade auf PyPI bereitgestellt. Die öffentliche API bleibt gegenüber 1.0.0rc5 unverändert, abgesehen von den neuen Funktionen unten.

Änderungen

1.0.0rc6

  • Neu (#14491): Dokumente lassen sich nach OBJECT_SEARCHFLAGS-Status abfragen. Dokumentmodelle bieten dafür boolesche Flag-Properties im system-Namespace (Model.system.in_register, .signed_current, .without_pages, .archivable, …), direkt nutzbar in where(), z. B. ecm.dms.select(Document).where(Document.system.in_register == True).execute(). Mehrere Flag-Bedingungen werden zu einer korrekten FieldCondition mit system="1" zusammengefasst.
  • Neu (#14491): Archiv- und Sperrstatus auf geladenen Dokumentinstanzen. OBJECT_FLAGS und OBJECT_LOCKUSER gehören jetzt zu den Standard-Systemfeldern, dadurch stehen ohne zusätzliche Abfrage-Flags dekodierte Properties bereit: obj.system.archived, .archivable, .not_archivable, .page_error, .without_pages, .reference, .external_archived, .locked sowie das rohe .flags.
  • Neu: ecm.system.get_icons() lädt Objekt- bzw. Typ-Icons per ID (Wrapper um cnv.GetIcons) und liefert ein dict[int, bytes] mit den GIF-Daten. Mehrere IDs werden in einem einzigen Roundtrip geholt.
  • Neu (#15467): ecm.check_connections() prüft jeden konfigurierten Pool-Server einzeln (TCP/TLS, Login, Serverinfo). Probe-Verbindungen landen nie im Pool; ein nicht erreichbarer Server bricht die übrigen Prüfungen nicht ab.
  • Neu: ecm.system.jobs() listet alle Server-Jobs gruppiert nach Namespace als dict[str, list[str]] (sync und async).

1.0.0rc7

  • Neu (#15486): ecm.dms.files_streaming() für gechunkten Attachment-Download ohne lokale Pufferung.
  • Neu (#15561): Modernes AES-Login-Passwortschema, das 62-Zeichen-Limit für Passwörter entfällt.
  • Neu: OsEvent-Verwaltung auf ecm.system: get_os_events(), create_os_event(), update_os_event(), delete_os_event() sowie refresh_server_events() zum Neuladen des OsEvent-Caches (#15555).
  • Neu: execute_and_get() auf dem Upsert-Builder.
  • Fix (#15561): password_encrypt() lief bei Passwörtern über 62 Zeichen in einen RecursionError.
  • Fix (#15486): document_stream() begrenzt Offset/Length nicht mehr auf 2 GiB.
  • Fix: ecm-generate-models entfernt Flat-List-Anzeigetexte aus Enum-Werten.

1.0.0rc8

  • Neu: ecm.notification-Namespace für typisierte Server-Push-Benachrichtigungen (job_calls, messages, listen, send_message).
  • Neu: Notification-Callback-Kanal im Low-Level-RPC-Layer (sync/async open_callback + callback_next, Protokoll v50 mit SHA-1-Digest).
  • Neu: Konsolenskript ecm-callback-listen, um den Push-Stream des Servers direkt aus der Shell mitzulesen.
  • Neu: connection_for(hostname, port) auf den Pool-Clients, um gezielt eine Verbindung zu einem bestimmten Server auszuleihen.
  • Geändert: Der Connection-Pool hält jetzt eine gemeinsame Session pro Server (Attach statt wiederholtem Login).
  • Geändert: create_os_event() / update_os_event() senden den Skriptcode als UTF-8 mit BOM statt cp1252.
  • Fix: ecm-generate-models schreibt den gespeicherten Schlüssel (statt des Anzeigetexts) in Flat-List-Katalog-Enums.
  • Fix: ecm-generate-models bereinigt Listeneintrag-Schlüssel zu gültigen Python-Bezeichnern. Modelldateien bitte neu generieren.

1.0.0rc9

  • Fix (#15650): Ergebnisfeldlisten setzen system="1" für Systemfeldnamen, die als einfache Strings übergeben werden. Damit funktionieren order_by(Model.system.id.DESC) und fields(Model.system.id) auf HOL- und LOL-Buildern (sync und async), statt mit Serverfehler -1031 abzubrechen. Das ermöglicht z. B. Keyset-Pagination über die Objekt-ID.
  • Fix (#15650): DmsQueryFields.field() fasst wiederholte Aufrufe für dasselbe Feld zu einem einzigen Field-Element zusammen, statt Duplikate zu erzeugen (z. B. wenn ein Feld gleichzeitig selektiert und sortiert wird).

Installation

pip:

# A) genaue Version
pip install -U ecmind_blue_client==1.0.0rc9
# B) neueste Version inkl. Pre-Releases
pip install -U --pre ecmind_blue_client

uv:

# A) genaue Version
uv add ecmind_blue_client==1.0.0rc9
# B) Pre-Releases erlauben
uv add --prerelease=allow ecmind_blue_client