esim/http_json_api: add alternative API interface (follow up)

This is a follow up patch to change:
I2a5d4b59b12e08d5eae7a1215814d3a69c8921f6

- do not ignore length of kwargs
- fix role parameter (roles other than 'legacy_client' can be used now)
- use startswith instead of match

Related: SYS#7866
Change-Id: Ifae13e82d671ff09bddf771f063a388d2ab283eb
This commit is contained in:
Philipp Maier
2026-02-10 13:32:53 +01:00
parent 7ee7173a2f
commit 8b2a49aa8e

View File

@@ -19,7 +19,6 @@ import abc
import requests import requests
import logging import logging
import json import json
from re import match
from typing import Optional from typing import Optional
import base64 import base64
from twisted.web.server import Request from twisted.web.server import Request
@@ -211,7 +210,7 @@ class JsonHttpApiFunction(abc.ABC):
# additional custom HTTP headers (server responses) # additional custom HTTP headers (server responses)
extra_http_res_headers = {} extra_http_res_headers = {}
def __new__(cls, *args, role = None, **kwargs): def __new__(cls, *args, role = 'legacy_client', **kwargs):
""" """
Args: Args:
args: (see JsonHttpApiClient and JsonHttpApiServer) args: (see JsonHttpApiClient and JsonHttpApiServer)
@@ -221,14 +220,13 @@ class JsonHttpApiFunction(abc.ABC):
# Create a dictionary with the class attributes of this class (the properties listed above and the encode_ # Create a dictionary with the class attributes of this class (the properties listed above and the encode_
# decode_ methods below). The dictionary will not include any dunder/magic methods # decode_ methods below). The dictionary will not include any dunder/magic methods
cls_attr = { attr_name: getattr(cls, attr_name) for attr_name in dir(cls) if not match("__.*__", attr_name) } cls_attr = {attr_name: getattr(cls, attr_name) for attr_name in dir(cls) if not attr_name.startswith('__')}
# Normal instantiation as JsonHttpApiFunction: # Normal instantiation as JsonHttpApiFunction:
if len(args) == 0: if len(args) == 0 and len(kwargs) == 0:
return type(cls.__name__, (abc.ABC,), cls_attr)() return type(cls.__name__, (abc.ABC,), cls_attr)()
# Instantiation as as JsonHttpApiFunction with a JsonHttpApiClient or JsonHttpApiServer base # Instantiation as as JsonHttpApiFunction with a JsonHttpApiClient or JsonHttpApiServer base
role = kwargs.get('role', 'legacy_client')
if role == 'legacy_client': if role == 'legacy_client':
# Deprecated: With the advent of the server role (JsonHttpApiServer) the API had to be changed. To maintain # Deprecated: With the advent of the server role (JsonHttpApiServer) the API had to be changed. To maintain
# compatibility with existing code (out-of-tree) the original behaviour and API interface and behaviour had # compatibility with existing code (out-of-tree) the original behaviour and API interface and behaviour had