From 28dfcf877dd9d358579a1412248b8b55c97973aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Claus=20Pr=C3=BCfer?= Date: Sun, 25 Jan 2026 09:07:32 +0100 Subject: [PATCH 1/6] Add first proposal (untested) --- .../service_call_metadata.py | 3 ++ .../02-pki-management/service_properties.py | 3 -- src/microesb.py | 39 +++++++++++++------ 3 files changed, 30 insertions(+), 15 deletions(-) diff --git a/example/02-pki-management/service_call_metadata.py b/example/02-pki-management/service_call_metadata.py index 6579ac4..b74d110 100644 --- a/example/02-pki-management/service_call_metadata.py +++ b/example/02-pki-management/service_call_metadata.py @@ -2,6 +2,7 @@ 'SYSServiceID': 'generateCertCA', 'data': [ { + 'SYSBackendMethod': { 'CertCA': 'gen_cert' }, 'CertCA': { 'id': 'test-ca1', 'Smartcard': { @@ -28,6 +29,7 @@ 'SYSServiceID': 'generateCertServer', 'data': [ { + 'SYSBackendMethod': { 'CertServer': 'gen_cert' }, 'CertServer': { 'id': 'test-server1', 'CertCA': { @@ -57,6 +59,7 @@ 'SYSServiceID': 'generateCertClient', 'data': [ { + 'SYSBackendMethod': { 'CertClient': 'gen_cert' }, 'CertClient': { 'id': 'test-client1', 'CertCA': { diff --git a/example/02-pki-management/service_properties.py b/example/02-pki-management/service_properties.py index bfa8d4a..fe3b233 100644 --- a/example/02-pki-management/service_properties.py +++ b/example/02-pki-management/service_properties.py @@ -1,7 +1,4 @@ service_properties = { - 'SYSBackendMethods': [ - ('gen_cert', 'on_recursion_finish') - ], 'Cert': { 'properties': { 'id': { diff --git a/src/microesb.py b/src/microesb.py index a622cfd..a29d067 100644 --- a/src/microesb.py +++ b/src/microesb.py @@ -303,7 +303,7 @@ def set_json_dict(self): self.logger.debug('processing property:{}'.format(property_id)) self.json_dict[property_id] = getattr(self, property_id) - # Remove optional service method key if present; ignore if absent. + # remove optional service method key if present; ignore if absent. self.json_dict.pop('SYSServiceMethod', None) self.logger.debug('self._SYSProperties:{}'.format(self._SYSProperties)) @@ -482,6 +482,16 @@ def get_class_hierarchy(self): """ return self._class_hierarchy + def get_class_properties(self): + """ get_class_properties() method. + + :return: self._class_properties + :rtype: dict + + Get class properties dictionary. + """ + return self._class_properties + def _map( self, *, @@ -550,6 +560,7 @@ def __init__(self, *, class_mapper, service_call_data): self._class_mapper = class_mapper + sc_data_orig = copy.deepcopy(service_call_data) class_references = self._class_mapper.get_references() root_class = next(iter(class_references)) @@ -564,17 +575,21 @@ def __init__(self, *, class_mapper, service_call_data): self._map(**call_dict) - try: - for class_ref, class_props in class_references.items(): - for method_def in class_mapper._class_properties['SYSBackendMethods']: - if method_def[1] == 'on_recursion_finish': - self.logger.debug('SYSBackendMethod:{}'.format(method_def[0])) - try: - getattr(getattr(self._class_mapper, class_ref), method_def[0])() - except (TypeError, AttributeError) as e: - pass - except (KeyError, TypeError, AttributeError) as e: - self.logger.debug('SYSBackendMethods processing exception:{}'.format(e)) + class_properties = self._class_mapper.get_class_properties() + + if 'SYSBackendMethod' in sc_data_orig: + + bm_root = sc_data_orig['SYSBackendMethod'] + self.logger.debug('SYSBackendMethod:{}'.format(bm_root)) + bm_class_id, bm_method = next(iter(bm_root.items())) + + try: + bm_class_id = class_references[bm_class_id]['property_ref'] + except KeyError as e: + self.logger.debug('SYSBackendMethod no class_ref class_id:{} exception:{}'.format(bm_class_id, e)) + + if bm_method in class_properties[bm_class_id]['methods'] + getattr(getattr(self._class_mapper, bm_class_id), bm_method)() def _map( self, From e89c9cecc4a001fc7dceb91d148426014c01fb06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Claus=20Pr=C3=BCfer?= Date: Sun, 25 Jan 2026 09:16:23 +0100 Subject: [PATCH 2/6] Fix typo --- src/microesb.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/microesb.py b/src/microesb.py index a29d067..e22d99d 100644 --- a/src/microesb.py +++ b/src/microesb.py @@ -588,7 +588,7 @@ def __init__(self, *, class_mapper, service_call_data): except KeyError as e: self.logger.debug('SYSBackendMethod no class_ref class_id:{} exception:{}'.format(bm_class_id, e)) - if bm_method in class_properties[bm_class_id]['methods'] + if bm_method in class_properties[bm_class_id]['methods']: getattr(getattr(self._class_mapper, bm_class_id), bm_method)() def _map( From c3847e1fcd787797c5e67766ea37e1d84e72c98f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Claus=20Pr=C3=BCfer?= Date: Sun, 25 Jan 2026 09:22:26 +0100 Subject: [PATCH 3/6] Fix line length --- src/microesb.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/microesb.py b/src/microesb.py index e22d99d..9ccf4c4 100644 --- a/src/microesb.py +++ b/src/microesb.py @@ -586,7 +586,9 @@ def __init__(self, *, class_mapper, service_call_data): try: bm_class_id = class_references[bm_class_id]['property_ref'] except KeyError as e: - self.logger.debug('SYSBackendMethod no class_ref class_id:{} exception:{}'.format(bm_class_id, e)) + self.logger.debug( + 'BackendMethod no class_ref:{} exception:{}'.format(bm_class_id, e) + ) if bm_method in class_properties[bm_class_id]['methods']: getattr(getattr(self._class_mapper, bm_class_id), bm_method)() From 7fd6c7c14dc0ae1927e34717a01790016e076aa2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Claus=20Pr=C3=BCfer?= Date: Sun, 25 Jan 2026 12:11:10 +0100 Subject: [PATCH 4/6] Fix everything for working version 1.1.1 --- docker/examples.dockerfile | 7 +++---- example/01-hosting-use-case/main.py | 24 +++++++++++++++++------- example/02-pki-management/00-main-ca.py | 2 +- pyproject.toml | 2 +- src/microesb.py | 8 ++++---- 5 files changed, 26 insertions(+), 17 deletions(-) diff --git a/docker/examples.dockerfile b/docker/examples.dockerfile index 3c660af..d4def5d 100644 --- a/docker/examples.dockerfile +++ b/docker/examples.dockerfile @@ -2,7 +2,7 @@ FROM postgres:18-bookworm MAINTAINER Claus Prüfer ADD ./example / -COPY ./dist/microesb-1.1.tar.gz / +COPY ./dist/microesb-1.1.1.tar.gz / COPY ./example/01-hosting-use-case/01-create-schema-sequence.sql /docker-entrypoint-initdb.d/ COPY ./example/01-hosting-use-case/02-create-table.sql /docker-entrypoint-initdb.d/ @@ -11,8 +11,7 @@ COPY ./example/01-hosting-use-case/04-insert-user-data.sql /docker-entrypoint-in RUN apt-get -qq update -y -RUN apt-get -qq install python3-pip python3-sphinx python3-sphinx-rtd-theme -y -RUN apt-get -qq install python3-pytest python3-pytest-pep8 -y +RUN apt-get -qq install python3-pip -y RUN apt-get -qq install python3-psycopg2 python3-pymongo -y RUN apt-get -qq install curl -y @@ -25,7 +24,7 @@ RUN apt-get -qq install mongodb-org -y RUN mkdir -p /data/db -RUN pip3 install /microesb-1.1.tar.gz --break-system-packages +RUN pip3 install /microesb-1.1.1.tar.gz --break-system-packages ENV POSTGRES_USER postgres ENV POSTGRES_PASSWORD password diff --git a/example/01-hosting-use-case/main.py b/example/01-hosting-use-case/main.py index 7dab1e2..638af80 100644 --- a/example/01-hosting-use-case/main.py +++ b/example/01-hosting-use-case/main.py @@ -1,3 +1,5 @@ +import sys +import logging import psycopg2 from microesb import microesb @@ -8,6 +10,14 @@ from service_call_metadata import service_metadata +logging.getLogger().addHandler( + logging.StreamHandler(sys.stdout) +) + +logging.getLogger().setLevel( + logging.INFO +) + class_mapper = microesb.ClassMapper( class_references=class_reference, class_mappings=class_mapping, @@ -23,13 +33,13 @@ service_metadata['data'][0]['User']['dbcon'] = dbcon -try: - microesb.ServiceExecuter().execute( - class_mapper=class_mapper, - service_data=service_metadata - ) -except Exception as e: - print('Service execution error: {}'.format(e)) +#try: +microesb.ServiceExecuter().execute( + class_mapper=class_mapper, + service_data=service_metadata +) +#except Exception as e: +# print('Service execution error: {}'.format(e)) try: dbcon.commit() diff --git a/example/02-pki-management/00-main-ca.py b/example/02-pki-management/00-main-ca.py index c61a45b..c594f64 100644 --- a/example/02-pki-management/00-main-ca.py +++ b/example/02-pki-management/00-main-ca.py @@ -10,10 +10,10 @@ from pymongo import MongoClient + client = MongoClient('mongodb://127.0.0.1/') mongodb = client.get_database('microesb') - logging.getLogger().addHandler( logging.StreamHandler(sys.stdout) ) diff --git a/pyproject.toml b/pyproject.toml index 4457e13..97afc06 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "microesb" -version = "1.1" +version = "1.1.1" authors = [ { name="Claus Prüfer", email="pruefer@webcodex.de" }, diff --git a/src/microesb.py b/src/microesb.py index 9ccf4c4..d768efd 100644 --- a/src/microesb.py +++ b/src/microesb.py @@ -560,7 +560,6 @@ def __init__(self, *, class_mapper, service_call_data): self._class_mapper = class_mapper - sc_data_orig = copy.deepcopy(service_call_data) class_references = self._class_mapper.get_references() root_class = next(iter(class_references)) @@ -577,11 +576,12 @@ def __init__(self, *, class_mapper, service_call_data): class_properties = self._class_mapper.get_class_properties() - if 'SYSBackendMethod' in sc_data_orig: + if 'SYSBackendMethod' in service_call_data: - bm_root = sc_data_orig['SYSBackendMethod'] + bm_root = service_call_data['SYSBackendMethod'] self.logger.debug('SYSBackendMethod:{}'.format(bm_root)) bm_class_id, bm_method = next(iter(bm_root.items())) + bm_class_call_id = copy.deepcopy(bm_class_id) try: bm_class_id = class_references[bm_class_id]['property_ref'] @@ -591,7 +591,7 @@ def __init__(self, *, class_mapper, service_call_data): ) if bm_method in class_properties[bm_class_id]['methods']: - getattr(getattr(self._class_mapper, bm_class_id), bm_method)() + getattr(getattr(self._class_mapper, bm_class_call_id), bm_method)() def _map( self, From 72a9ecfd59713f6ef47abac1e4047734a9f74b19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Claus=20Pr=C3=BCfer?= Date: Sun, 25 Jan 2026 12:18:32 +0100 Subject: [PATCH 5/6] Fix forgotten uncommenting --- example/01-hosting-use-case/main.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/example/01-hosting-use-case/main.py b/example/01-hosting-use-case/main.py index 638af80..1caf348 100644 --- a/example/01-hosting-use-case/main.py +++ b/example/01-hosting-use-case/main.py @@ -33,13 +33,13 @@ service_metadata['data'][0]['User']['dbcon'] = dbcon -#try: -microesb.ServiceExecuter().execute( - class_mapper=class_mapper, - service_data=service_metadata -) -#except Exception as e: -# print('Service execution error: {}'.format(e)) +try: + microesb.ServiceExecuter().execute( + class_mapper=class_mapper, + service_data=service_metadata + ) +except Exception as e: + print('Service execution error: {}'.format(e)) try: dbcon.commit() From 5db41dc639a585c459d1b6a65c0dde91eceb8079 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Claus=20Pr=C3=BCfer?= Date: Sun, 25 Jan 2026 12:21:26 +0100 Subject: [PATCH 6/6] Fix version --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c0687ca..7555fb0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,7 +23,7 @@ jobs: run: python3 setup.py sdist - name: Install Python module - run: pip3 install ./dist/microesb-1.1.tar.gz + run: pip3 install ./dist/microesb-1.1.1.tar.gz - name: Run tests run: pytest --cov --cov-branch --cov-report=xml