API Reference
DownloadOZG
Source code in src/form_download_helper/__init__.py
111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 | |
download_wizard_steps(js_schema, form_dir_path)
Download all wizard steps
Source code in src/form_download_helper/__init__.py
derive_name_from_uri(uri)
Derive a form name from the URI slug when the server returns 'unknown_form'.
Takes the last path segment of the URI and converts hyphens to underscores to produce a valid Python-friendly directory/identifier name.
Example
https://example.de/community/guvh/anfrage-zahnarzt -> anfrage_zahnarzt
Source code in src/form_download_helper/__init__.py
derive_package_name(path)
Derive package name from path, using project root detection.
Resolves the path to absolute, finds the project root by looking for pyproject.toml, setup.py, or setup.cfg, then derives the package name from the relative path.
Examples:
/project/src/myapp/forms -> myapp.forms (if src/ exists) /project/myapp/forms -> myapp.forms (relative to project root)
Source code in src/form_download_helper/__init__.py
download(path, username, password, version, uri, package=None)
Download form schemas from OZG server.
Source code in src/form_download_helper/__init__.py
ensure_valid_identifier(name)
Prefix names that start with a digit so they are valid Python identifiers.
find_project_root(start_path)
Find project root by looking for pyproject.toml, setup.py, or setup.cfg.
Source code in src/form_download_helper/__init__.py
resolve_form_name(js_schema, uri)
Return a usable form name, falling back to the URI slug if the server returned 'unknown_form'.
Source code in src/form_download_helper/__init__.py
Klassen
DownloadOZG
Die Hauptklasse für das Herunterladen von OZG-Formularen.
class DownloadOZG:
def __init__(self, path, uri, username, password, version, package=None):
"""
Initialisiert den OZG Downloader.
Args:
path (str): Zielverzeichnis für Downloads
uri (str): URI des Formulars
username (str): Benutzername für Authentication
password (str): Passwort für Authentication
version (int): Versionsnummer des Formulars
package (str, optional): Python-Paketname. Wird automatisch
aus dem Pfad abgeleitet, wenn nicht angegeben.
"""
Methoden
get()
def get(self):
"""
Lädt alle Formular-Dateien herunter und erstellt die Verzeichnisstruktur.
Downloads:
- JSON Schema (@@meta-schema)
- UI Schema (@@simple-ui-schema-view)
- Page Template (@@cpt-generator) – nur für Nicht-Wizard-Formulare
Generiert:
- Python Formularklassen (form.py)
- Test-Dateien (test_<formname>.py, test_acceptance.py)
- Package-Struktur (__init__.py)
Bei Wizard-Formularen werden zusätzlich die einzelnen
Wizard-Steps heruntergeladen.
"""
download_wizard_steps()
def download_wizard_steps(self, js_schema, form_dir_path):
"""
Lädt alle Wizard-Steps herunter.
Für jeden Step werden schema.json, ui_schema.json und
template.pt in ein eigenes Unterverzeichnis geschrieben.
Args:
js_schema (dict): Das geparste JSON-Schema des Wizards
form_dir_path (Path): Pfad zum Versions-Verzeichnis
"""
Funktionen
download()
def download(
path: Path,
username: str,
password: str,
version: int,
uri: str,
package: Optional[str] = None,
):
"""
Hauptfunktion für den Download-Prozess.
Args:
path (Path): Zielverzeichnis
username (str): Benutzername
password (str): Passwort
version (int): Formular-Version
uri (str): Formular-URI
package (str, optional): Python-Paketname
Example:
>>> download(Path("/tmp"), "user", "pass", 2, "https://example.com/form")
"""
resolve_form_name()
def resolve_form_name(js_schema: dict, uri: str) -> str:
"""
Ermittelt einen verwendbaren Formularnamen.
Fällt auf den URI-Slug zurück, wenn der Server
'unknown_form' als Namen liefert.
Args:
js_schema (dict): Das geparste JSON-Schema
uri (str): Die Formular-URI
Returns:
str: Ein gültiger Formularname
"""
derive_name_from_uri()
def derive_name_from_uri(uri: str) -> str:
"""
Leitet einen Formularnamen aus dem URI-Slug ab.
Nimmt das letzte Pfad-Segment der URI und ersetzt
Bindestriche durch Unterstriche.
Example:
>>> derive_name_from_uri("https://example.de/community/guvh/anfrage-zahnarzt")
"anfrage_zahnarzt"
"""
ensure_valid_identifier()
def ensure_valid_identifier(name: str) -> str:
"""
Stellt sicher, dass der Name ein gültiger Python-Identifier ist.
Präfixiert Namen, die mit einer Ziffer beginnen, mit 'F_'.
Example:
>>> ensure_valid_identifier("90_form")
"F_90_form"
"""
find_project_root()
def find_project_root(start_path: Path) -> Optional[Path]:
"""
Findet das Projekt-Root anhand von Marker-Dateien
(pyproject.toml, setup.py, setup.cfg).
Args:
start_path (Path): Startverzeichnis für die Suche
Returns:
Optional[Path]: Pfad zum Projekt-Root oder None
"""
derive_package_name()
def derive_package_name(path: Path) -> str:
"""
Leitet den Python-Paketnamen aus dem Pfad ab.
Erkennt automatisch src/-Layouts und berechnet den
relativen Pfad zum Projekt-Root.
Examples:
/project/src/myapp/forms -> myapp.forms
/project/myapp/forms -> myapp.forms
"""
format_version()
def format_version(version):
"""
Formatiert Versionsnummer für Verzeichnisnamen.
Args:
version (int|float): Versionsnummer
Returns:
str: Formatierte Version (z.B. "v2_0")
Example:
>>> format_version(2)
"v2_0"
>>> format_version(2.5)
"v2_5"
"""
main()
Templates
FORM_TEMPLATE
Template für generierte Python-Formularklassen (Standard-Formulare):
FORM_TEMPLATE = """from ritter.browser import TemplateLoader
from uv.ozg.forms import DefaultDocumentEditForm as BaseOZGEditForm
from uvcreha.endpoints.browser.document import (
DefaultDocumentEditForm as BaseREHAEditForm,
)
from uv.dynforms import dyn_form
from reha.prototypes.views.document import views
# ... Template-Inhalt
"""
WIZARD_TEMPLATE
Template für Wizard-Formulare.
WIZARD_TEMPLATE_PT / WIZARD_MODE_TEMPLATE_PT
Page-Templates für Wizard-Formulare (template.pt und wizard_template.pt).
FORM_TEST_TEMPLATE
Template für generierte Test-Dateien:
FORM_TEST_TEMPLATE = """def test_base(loaded_app):
assert "%s" in loaded_app.document_stores["ozg"].keys()
"""
ACCEPTANCE_TEST_TEMPLATE
Template für Akzeptanz-Tests.
Konstanten
URI
Standard-URI für Schema-Abfragen:
PROJECT_ROOT_MARKERS
Marker-Dateien zur Erkennung des Projekt-Roots:
HTTP Endpoints
Das Tool greift auf folgende Endpoints zu:
| Endpoint | Beschreibung | Parameter |
|---|---|---|
@@meta-schema |
JSON Schema des Formulars | version |
@@simple-ui-schema-view |
UI Schema des Formulars | version |
@@cpt-generator |
Page Template (Deform) | version |
Beispiel-Requests
# Schema abrufen
response = requests.get(
f"{uri}/@@meta-schema?version={version}",
auth=HTTPBasicAuth(username, password)
)
# UI Schema abrufen
response = requests.get(
f"{uri}/@@simple-ui-schema-view?version={version}",
auth=HTTPBasicAuth(username, password)
)
# Page Template abrufen
response = requests.get(
f"{uri}/@@cpt-generator?version={version}",
auth=HTTPBasicAuth(username, password)
)