Trying to fix attach entity #44

Merged
merge-bot merged 8 commits from Qubasa-main into main 2024-01-08 19:57:51 +00:00
44 changed files with 605 additions and 1401 deletions

View File

@@ -80,6 +80,8 @@ def main() -> None:
replacement = "from typing import Any, List, Optional, Dict"
replace_in_directory(directory_path=src_client, pattern=pattern, replacement=replacement)
src_clients_tests = src_client / "test"
shutil.rmtree(src_clients_tests)
dst_client: Path = args.out / "openapi_client"
shutil.rmtree(dst_client, ignore_errors=True)
shutil.copytree(src_client, dst_client)

View File

@@ -15,7 +15,6 @@ from ..schemas import (
Resolution,
Service,
ServiceCreate,
ServicesByName,
)
from ..tags import Tags
@@ -30,7 +29,7 @@ log = logging.getLogger(__name__)
# #
#########################
@router.post("/api/v1/service", response_model=Service, tags=[Tags.services])
async def create_service(
def create_service(
service: ServiceCreate, db: Session = Depends(sql_db.get_db)
) -> Service:
# todo checken ob schon da ...
@@ -38,17 +37,15 @@ async def create_service(
@router.get("/api/v1/services", response_model=List[Service], tags=[Tags.services])
async def get_all_services(
def get_all_services(
skip: int = 0, limit: int = 100, db: Session = Depends(sql_db.get_db)
) -> List[sql_models.Service]:
services = sql_crud.get_services(db, skip=skip, limit=limit)
return services
@router.get(
"/api/v1/{entity_did}/service", response_model=List[Service], tags=[Tags.services]
)
async def get_service_by_did(
@router.get("/api/v1/service", response_model=List[Service], tags=[Tags.services])
def get_service_by_did(
entity_did: str = "did:sov:test:1234",
skip: int = 0,
limit: int = 100,
@@ -59,25 +56,22 @@ async def get_service_by_did(
@router.get(
"/api/v1/services_by_entity_name",
response_model=ServicesByName,
"/api/v1/services_without_entity",
response_model=List[Service],
tags=[Tags.services],
)
async def get_services_by_name(
entity_name: str,
def get_services_without_entity(
entity_did: str = "did:sov:test:1234",
skip: int = 0,
limit: int = 100,
db: Session = Depends(sql_db.get_db),
) -> ServicesByName:
entity = sql_crud.get_entity_by_name(db, name=entity_name)
if entity is None:
raise ClanError(f"Entity with name '{entity_name}' not found")
services = sql_crud.get_services_by_entity_did(db, entity_did=str(entity.did))
return ServicesByName(entity=entity, services=services) # type: ignore
) -> List[sql_models.Service]:
service = sql_crud.get_services_without_entity_id(db, entity_did=entity_did)
return service
@router.delete("/api/v1/{entity_did}/service", tags=[Tags.services])
async def delete_service(
@router.delete("/api/v1/service", tags=[Tags.services])
def delete_service(
entity_did: str = "did:sov:test:1234",
db: Session = Depends(sql_db.get_db),
) -> dict[str, str]:
@@ -95,7 +89,7 @@ async def delete_service(
response_model=List[Service],
tags=[Tags.repositories],
)
async def get_all_repositories(
def get_all_repositories(
skip: int = 0, limit: int = 100, db: Session = Depends(sql_db.get_db)
) -> List[sql_models.Service]:
repositories = sql_crud.get_services(db, skip=skip, limit=limit)
@@ -108,7 +102,7 @@ async def get_all_repositories(
# #
#########################
@router.post("/api/v1/entity", response_model=Entity, tags=[Tags.entities])
async def create_entity(
def create_entity(
entity: EntityCreate, db: Session = Depends(sql_db.get_db)
) -> EntityCreate:
return sql_crud.create_entity(db, entity)
@@ -117,7 +111,7 @@ async def create_entity(
@router.get(
"/api/v1/entity_by_name", response_model=Optional[Entity], tags=[Tags.entities]
)
async def get_entity_by_name(
def get_entity_by_name(
entity_name: str, db: Session = Depends(sql_db.get_db)
) -> Optional[sql_models.Entity]:
entity = sql_crud.get_entity_by_name(db, name=entity_name)
@@ -125,17 +119,15 @@ async def get_entity_by_name(
@router.get("/api/v1/entities", response_model=List[Entity], tags=[Tags.entities])
async def get_all_entities(
def get_all_entities(
skip: int = 0, limit: int = 100, db: Session = Depends(sql_db.get_db)
) -> List[sql_models.Entity]:
entities = sql_crud.get_entities(db, skip=skip, limit=limit)
return entities
@router.get(
"/api/v1/{entity_did}/entity", response_model=Optional[Entity], tags=[Tags.entities]
)
async def get_entity_by_did(
@router.get("/api/v1/entity", response_model=Optional[Entity], tags=[Tags.entities])
def get_entity_by_did(
entity_did: str = "did:sov:test:1234",
db: Session = Depends(sql_db.get_db),
) -> Optional[sql_models.Entity]:
@@ -148,61 +140,97 @@ async def get_entity_by_did(
response_model=List[Entity],
tags=[Tags.entities],
)
async def get_attached_entities(
def get_attached_entities(
skip: int = 0, limit: int = 100, db: Session = Depends(sql_db.get_db)
) -> List[sql_models.Entity]:
entities = sql_crud.get_attached_entities(db, skip=skip, limit=limit)
return entities
@router.post("/api/v1/{entity_did}/detach", response_model=Entity, tags=[Tags.entities])
async def detach_entity(
background_tasks: BackgroundTasks,
entity_did: str = "did:sov:test:1234",
skip: int = 0,
limit: int = 100,
db: Session = Depends(sql_db.get_db),
) -> sql_models.Entity:
entity = sql_crud.set_attached_by_entity_did(db, entity_did, False)
return entity
@router.post("/api/v1/{entity_did}/attach", tags=[Tags.entities])
async def attach_entity(
@router.post("/api/v1/detach", tags=[Tags.entities])
def detach_entity(
background_tasks: BackgroundTasks,
entity_did: str = "did:sov:test:1234",
skip: int = 0,
limit: int = 100,
db: Session = Depends(sql_db.get_db),
) -> dict[str, str]:
if sql_crud.get_entity_by_did(db, entity_did) is None:
entity = sql_crud.get_entity_by_did(db, did=entity_did)
if entity is None:
raise ClanError(f"Entity with did '{entity_did}' not found")
sql_crud.set_stop_health_task(db, entity_did, True)
return {"message": f"Detached {entity_did} successfully"}
@router.post("/api/v1/attach", tags=[Tags.entities])
def attach_entity(
background_tasks: BackgroundTasks,
entity_did: str = "did:sov:test:1234",
skip: int = 0,
limit: int = 100,
db: Session = Depends(sql_db.get_db),
) -> dict[str, str]:
entity = sql_crud.get_entity_by_did(db, did=entity_did)
if entity is None:
raise ClanError(f"Entity with did '{entity_did}' not found")
url = f"http://{entity.ip}"
sql_crud.set_stop_health_task(db, entity_did, False)
print("Start health query at", url)
background_tasks.add_task(attach_entity_loc, db, entity_did)
return {"message": f"Started attachment task for {entity.name}"}
@router.get("/api/v1/is_attached", tags=[Tags.entities])
def is_attached(
entity_did: str = "did:sov:test:1234", db: Session = Depends(sql_db.get_db)
) -> dict[str, str]:
entity = sql_crud.get_entity_by_did(db, did=entity_did)
if entity is None:
raise ClanError(f"Entity with did '{entity_did}' not found")
background_tasks.add_task(attach_entity_loc, db, entity_did)
return {"message": "Attaching in the background"}
timer = 0.0
timeout = 2
while not entity.attached:
time.sleep(0.1)
timer += 0.1
if timer > timeout:
url = f"http://{entity.ip}"
raise ClanError(f"Entity at {url} not reachable")
db.refresh(entity)
return {"message": f"Attached to {entity.name} successfully"}
def attach_entity_loc(db: Session, entity_did: str) -> None:
db_entity = sql_crud.set_attached_by_entity_did(db, entity_did, True)
entity = sql_crud.get_entity_by_did(db, did=entity_did)
try:
while db_entity.attached:
# query status endpoint
# https://www.python-httpx.org/
response = httpx.get(f"http://{db_entity.ip}", timeout=2)
print(response)
# test with:
# while true ; do printf 'HTTP/1.1 200 OK\r\n\r\ncool, thanks' | nc -l -N localhost 5555 ; done
# client test (apt install python3-httpx):
# httpx http://localhost:5555
# except not reached set false
assert entity is not None
url = f"http://{entity.ip}"
while entity.stop_health_task is False:
response = httpx.get(url, timeout=2)
if response.status_code != 200:
raise ClanError(
f"Entity with did '{entity_did}' returned {response.status_code}"
)
if entity.attached is False:
sql_crud.set_attached_by_entity_did(db, entity_did, True)
if entity is None:
raise ClanError(f"Entity with did '{entity_did}' has been deleted")
time.sleep(1)
db.refresh(entity)
except Exception:
log.warning(f"Entity {entity_did} not reachable. Setting attached to false")
db_entity = sql_crud.set_attached_by_entity_did(db, entity_did, False)
print(f"Entity {entity_did} not reachable at {url}")
finally:
sql_crud.set_attached_by_entity_did(db, entity_did, False)
sql_crud.set_stop_health_task(db, entity_did, False)
@router.delete("/api/v1/{entity_did}/entity", tags=[Tags.entities])
@router.delete("/api/v1/entity", tags=[Tags.entities])
async def delete_entity(
entity_did: str = "did:sov:test:1234",
db: Session = Depends(sql_db.get_db),
@@ -216,8 +244,6 @@ async def delete_entity(
# Resolution #
# #
#########################
@router.get(
"/api/v1/resolutions", response_model=List[Resolution], tags=[Tags.resolutions]
)

View File

@@ -41,6 +41,7 @@ class EntityCreate(EntityBase):
class Entity(EntityCreate):
attached: bool = Field(...)
stop_health_task: bool = Field(...)
class Config:
orm_mode = True

View File

@@ -64,7 +64,9 @@ def get_services_without_entity_id(
# #
#########################
def create_entity(db: Session, entity: schemas.EntityCreate) -> sql_models.Entity:
db_entity = sql_models.Entity(**entity.dict(), attached=False)
db_entity = sql_models.Entity(
**entity.dict(), attached=False, stop_health_task=False
)
db.add(db_entity)
db.commit()
db.refresh(db_entity)
@@ -100,20 +102,30 @@ def get_attached_entities(
# Returns same entity if setting didnt changed something
def set_attached_by_entity_did(
db: Session, entity_did: str, value: bool
) -> sql_models.Entity:
def set_stop_health_task(db: Session, entity_did: str, value: bool) -> None:
db_entity = get_entity_by_did(db, entity_did)
if db_entity is None:
raise ClanError(f"Entity with did '{entity_did}' not found")
setattr(db_entity, "attached", value)
setattr(db_entity, "stop_health_task", value)
# save changes in db
db.add(db_entity)
db.commit()
db.refresh(db_entity)
def set_attached_by_entity_did(db: Session, entity_did: str, attached: bool) -> None:
db_entity = get_entity_by_did(db, entity_did)
if db_entity is None:
raise ClanError(f"Entity with did '{entity_did}' not found")
setattr(db_entity, "attached", attached)
# save changes in db
db.add(db_entity)
db.commit()
db.refresh(db_entity)
return db_entity
def delete_entity_by_did(db: Session, did: str) -> None:

View File

@@ -23,6 +23,7 @@ class Entity(Base):
ip = Column(String, index=True)
attached = Column(Boolean, index=True)
visible = Column(Boolean, index=True)
stop_health_task = Column(Boolean)
## Non queryable body ##
# In here we deposit: Network, Roles, Visible, etc.

View File

@@ -4,7 +4,6 @@ from typing import Any, Dict, List
class Tags(Enum):
services = "services"
clients = "clients"
entities = "entities"
repositories = "repositories"
resolutions = "resolution"
@@ -18,10 +17,6 @@ tags_metadata: List[Dict[str, Any]] = [
"name": str(Tags.services),
"description": "Operations on a service.",
},
{
"name": str(Tags.clients),
"description": "Operations on a client.",
},
{
"name": str(Tags.entities),
"description": "Operations on an entity.",

View File

@@ -8,7 +8,6 @@
, openssh
, pytest
, pytest-cov
, pytest-xdist
, pytest-subprocess
, pytest-timeout
, remote-pdb
@@ -56,7 +55,6 @@ let
pytest
pytest-cov
pytest-subprocess
pytest-xdist
pytest-timeout
remote-pdb
ipdb

View File

@@ -1,3 +1,3 @@
#!/usr/bin/env bash
while true ; do printf 'HTTP/1.1 200 OK\r\n\r\ncool, thanks' | nc -l -N 127.0.0.1 5555 ; done
while true ; do printf 'HTTP/1.1 200 OK\r\n\r\ncool, thanks' | nc -l -N 127.0.0.1 7002; done

View File

@@ -21,7 +21,7 @@ testpaths = "tests"
faulthandler_timeout = 60
log_level = "DEBUG"
log_format = "%(levelname)s: %(message)s"
addopts = "--cov . --cov-report term --cov-report html:.reports/html --no-cov-on-fail --durations 5 --color=yes --maxfail=1 --new-first -nauto" # Add --pdb for debugging
addopts = "--cov . --cov-report term --cov-report html:.reports/html --no-cov-on-fail --durations 5 --color=yes --maxfail=1 --new-first" # Add --pdb for debugging
norecursedirs = "tests/helpers"
markers = [ "impure" ]

View File

@@ -9,6 +9,7 @@ import pytest
import uvicorn
from fastapi.testclient import TestClient
from openapi_client import ApiClient, Configuration
from ports import PortFunction
from clan_cli.webui.app import app
@@ -31,8 +32,8 @@ def get_health(*, url: str, max_retries: int = 20, delay: float = 0.2) -> str |
# Pytest fixture to run the server in a separate process
@pytest.fixture(scope="session")
def server_url() -> Generator[str, None, None]:
port = 8000
def server_url(unused_tcp_port: PortFunction) -> Generator[str, None, None]:
port = unused_tcp_port()
host = "127.0.0.1"
proc = Process(
target=uvicorn.run,

View File

@@ -42,7 +42,6 @@ from openapi_client.models.machine import Machine
from openapi_client.models.resolution import Resolution
from openapi_client.models.service import Service
from openapi_client.models.service_create import ServiceCreate
from openapi_client.models.services_by_name import ServicesByName
from openapi_client.models.status import Status
from openapi_client.models.validation_error import ValidationError
from openapi_client.models.validation_error_loc_inner import ValidationErrorLocInner

View File

@@ -46,7 +46,7 @@ class EntitiesApi:
self.api_client = api_client
@validate_arguments
def attach_entity(self, entity_did : StrictStr, skip : Optional[StrictInt] = None, limit : Optional[StrictInt] = None, **kwargs) -> Dict[str, str]: # noqa: E501
def attach_entity(self, entity_did : Optional[StrictStr] = None, skip : Optional[StrictInt] = None, limit : Optional[StrictInt] = None, **kwargs) -> Dict[str, str]: # noqa: E501
"""Attach Entity # noqa: E501
This method makes a synchronous HTTP request by default. To make an
@@ -55,7 +55,7 @@ class EntitiesApi:
>>> thread = api.attach_entity(entity_did, skip, limit, async_req=True)
>>> result = thread.get()
:param entity_did: (required)
:param entity_did:
:type entity_did: str
:param skip:
:type skip: int
@@ -79,7 +79,7 @@ class EntitiesApi:
return self.attach_entity_with_http_info(entity_did, skip, limit, **kwargs) # noqa: E501
@validate_arguments
def attach_entity_with_http_info(self, entity_did : StrictStr, skip : Optional[StrictInt] = None, limit : Optional[StrictInt] = None, **kwargs) -> ApiResponse: # noqa: E501
def attach_entity_with_http_info(self, entity_did : Optional[StrictStr] = None, skip : Optional[StrictInt] = None, limit : Optional[StrictInt] = None, **kwargs) -> ApiResponse: # noqa: E501
"""Attach Entity # noqa: E501
This method makes a synchronous HTTP request by default. To make an
@@ -88,7 +88,7 @@ class EntitiesApi:
>>> thread = api.attach_entity_with_http_info(entity_did, skip, limit, async_req=True)
>>> result = thread.get()
:param entity_did: (required)
:param entity_did:
:type entity_did: str
:param skip:
:type skip: int
@@ -152,12 +152,12 @@ class EntitiesApi:
# process the path parameters
_path_params = {}
if _params['entity_did']:
_path_params['entity_did'] = _params['entity_did']
# process the query parameters
_query_params = []
if _params.get('entity_did') is not None: # noqa: E501
_query_params.append(('entity_did', _params['entity_did']))
if _params.get('skip') is not None: # noqa: E501
_query_params.append(('skip', _params['skip']))
@@ -184,7 +184,7 @@ class EntitiesApi:
}
return self.api_client.call_api(
'/api/v1/{entity_did}/attach', 'POST',
'/api/v1/attach', 'POST',
_path_params,
_query_params,
_header_params,
@@ -347,7 +347,7 @@ class EntitiesApi:
_request_auth=_params.get('_request_auth'))
@validate_arguments
def delete_entity(self, entity_did : StrictStr, **kwargs) -> Dict[str, str]: # noqa: E501
def delete_entity(self, entity_did : Optional[StrictStr] = None, **kwargs) -> Dict[str, str]: # noqa: E501
"""Delete Entity # noqa: E501
This method makes a synchronous HTTP request by default. To make an
@@ -356,7 +356,7 @@ class EntitiesApi:
>>> thread = api.delete_entity(entity_did, async_req=True)
>>> result = thread.get()
:param entity_did: (required)
:param entity_did:
:type entity_did: str
:param async_req: Whether to execute the request asynchronously.
:type async_req: bool, optional
@@ -376,7 +376,7 @@ class EntitiesApi:
return self.delete_entity_with_http_info(entity_did, **kwargs) # noqa: E501
@validate_arguments
def delete_entity_with_http_info(self, entity_did : StrictStr, **kwargs) -> ApiResponse: # noqa: E501
def delete_entity_with_http_info(self, entity_did : Optional[StrictStr] = None, **kwargs) -> ApiResponse: # noqa: E501
"""Delete Entity # noqa: E501
This method makes a synchronous HTTP request by default. To make an
@@ -385,7 +385,7 @@ class EntitiesApi:
>>> thread = api.delete_entity_with_http_info(entity_did, async_req=True)
>>> result = thread.get()
:param entity_did: (required)
:param entity_did:
:type entity_did: str
:param async_req: Whether to execute the request asynchronously.
:type async_req: bool, optional
@@ -443,12 +443,12 @@ class EntitiesApi:
# process the path parameters
_path_params = {}
if _params['entity_did']:
_path_params['entity_did'] = _params['entity_did']
# process the query parameters
_query_params = []
if _params.get('entity_did') is not None: # noqa: E501
_query_params.append(('entity_did', _params['entity_did']))
# process the header parameters
_header_params = dict(_params.get('_headers', {}))
# process the form parameters
@@ -469,7 +469,7 @@ class EntitiesApi:
}
return self.api_client.call_api(
'/api/v1/{entity_did}/entity', 'DELETE',
'/api/v1/entity', 'DELETE',
_path_params,
_query_params,
_header_params,
@@ -486,7 +486,7 @@ class EntitiesApi:
_request_auth=_params.get('_request_auth'))
@validate_arguments
def detach_entity(self, entity_did : StrictStr, skip : Optional[StrictInt] = None, limit : Optional[StrictInt] = None, **kwargs) -> Entity: # noqa: E501
def detach_entity(self, entity_did : Optional[StrictStr] = None, skip : Optional[StrictInt] = None, limit : Optional[StrictInt] = None, **kwargs) -> Dict[str, str]: # noqa: E501
"""Detach Entity # noqa: E501
This method makes a synchronous HTTP request by default. To make an
@@ -495,7 +495,7 @@ class EntitiesApi:
>>> thread = api.detach_entity(entity_did, skip, limit, async_req=True)
>>> result = thread.get()
:param entity_did: (required)
:param entity_did:
:type entity_did: str
:param skip:
:type skip: int
@@ -510,7 +510,7 @@ class EntitiesApi:
:return: Returns the result object.
If the method is called asynchronously,
returns the request thread.
:rtype: Entity
:rtype: Dict[str, str]
"""
kwargs['_return_http_data_only'] = True
if '_preload_content' in kwargs:
@@ -519,7 +519,7 @@ class EntitiesApi:
return self.detach_entity_with_http_info(entity_did, skip, limit, **kwargs) # noqa: E501
@validate_arguments
def detach_entity_with_http_info(self, entity_did : StrictStr, skip : Optional[StrictInt] = None, limit : Optional[StrictInt] = None, **kwargs) -> ApiResponse: # noqa: E501
def detach_entity_with_http_info(self, entity_did : Optional[StrictStr] = None, skip : Optional[StrictInt] = None, limit : Optional[StrictInt] = None, **kwargs) -> ApiResponse: # noqa: E501
"""Detach Entity # noqa: E501
This method makes a synchronous HTTP request by default. To make an
@@ -528,7 +528,7 @@ class EntitiesApi:
>>> thread = api.detach_entity_with_http_info(entity_did, skip, limit, async_req=True)
>>> result = thread.get()
:param entity_did: (required)
:param entity_did:
:type entity_did: str
:param skip:
:type skip: int
@@ -556,7 +556,7 @@ class EntitiesApi:
:return: Returns the result object.
If the method is called asynchronously,
returns the request thread.
:rtype: tuple(Entity, status_code(int), headers(HTTPHeaderDict))
:rtype: tuple(Dict[str, str], status_code(int), headers(HTTPHeaderDict))
"""
_params = locals()
@@ -592,12 +592,12 @@ class EntitiesApi:
# process the path parameters
_path_params = {}
if _params['entity_did']:
_path_params['entity_did'] = _params['entity_did']
# process the query parameters
_query_params = []
if _params.get('entity_did') is not None: # noqa: E501
_query_params.append(('entity_did', _params['entity_did']))
if _params.get('skip') is not None: # noqa: E501
_query_params.append(('skip', _params['skip']))
@@ -619,12 +619,12 @@ class EntitiesApi:
_auth_settings = [] # noqa: E501
_response_types_map = {
'200': "Entity",
'200': "Dict[str, str]",
'422': "HTTPValidationError",
}
return self.api_client.call_api(
'/api/v1/{entity_did}/detach', 'POST',
'/api/v1/detach', 'POST',
_path_params,
_query_params,
_header_params,
@@ -935,7 +935,7 @@ class EntitiesApi:
_request_auth=_params.get('_request_auth'))
@validate_arguments
def get_entity_by_did(self, entity_did : StrictStr, **kwargs) -> Entity: # noqa: E501
def get_entity_by_did(self, entity_did : Optional[StrictStr] = None, **kwargs) -> Entity: # noqa: E501
"""Get Entity By Did # noqa: E501
This method makes a synchronous HTTP request by default. To make an
@@ -944,7 +944,7 @@ class EntitiesApi:
>>> thread = api.get_entity_by_did(entity_did, async_req=True)
>>> result = thread.get()
:param entity_did: (required)
:param entity_did:
:type entity_did: str
:param async_req: Whether to execute the request asynchronously.
:type async_req: bool, optional
@@ -964,7 +964,7 @@ class EntitiesApi:
return self.get_entity_by_did_with_http_info(entity_did, **kwargs) # noqa: E501
@validate_arguments
def get_entity_by_did_with_http_info(self, entity_did : StrictStr, **kwargs) -> ApiResponse: # noqa: E501
def get_entity_by_did_with_http_info(self, entity_did : Optional[StrictStr] = None, **kwargs) -> ApiResponse: # noqa: E501
"""Get Entity By Did # noqa: E501
This method makes a synchronous HTTP request by default. To make an
@@ -973,7 +973,7 @@ class EntitiesApi:
>>> thread = api.get_entity_by_did_with_http_info(entity_did, async_req=True)
>>> result = thread.get()
:param entity_did: (required)
:param entity_did:
:type entity_did: str
:param async_req: Whether to execute the request asynchronously.
:type async_req: bool, optional
@@ -1031,12 +1031,12 @@ class EntitiesApi:
# process the path parameters
_path_params = {}
if _params['entity_did']:
_path_params['entity_did'] = _params['entity_did']
# process the query parameters
_query_params = []
if _params.get('entity_did') is not None: # noqa: E501
_query_params.append(('entity_did', _params['entity_did']))
# process the header parameters
_header_params = dict(_params.get('_headers', {}))
# process the form parameters
@@ -1057,7 +1057,7 @@ class EntitiesApi:
}
return self.api_client.call_api(
'/api/v1/{entity_did}/entity', 'GET',
'/api/v1/entity', 'GET',
_path_params,
_query_params,
_header_params,
@@ -1211,3 +1211,142 @@ class EntitiesApi:
_request_timeout=_params.get('_request_timeout'),
collection_formats=_collection_formats,
_request_auth=_params.get('_request_auth'))
@validate_arguments
def is_attached(self, entity_did : Optional[StrictStr] = None, **kwargs) -> Dict[str, str]: # noqa: E501
"""Is Attached # noqa: E501
This method makes a synchronous HTTP request by default. To make an
asynchronous HTTP request, please pass async_req=True
>>> thread = api.is_attached(entity_did, async_req=True)
>>> result = thread.get()
:param entity_did:
:type entity_did: str
:param async_req: Whether to execute the request asynchronously.
:type async_req: bool, optional
:param _request_timeout: timeout setting for this request.
If one number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:return: Returns the result object.
If the method is called asynchronously,
returns the request thread.
:rtype: Dict[str, str]
"""
kwargs['_return_http_data_only'] = True
if '_preload_content' in kwargs:
message = "Error! Please call the is_attached_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501
raise ValueError(message)
return self.is_attached_with_http_info(entity_did, **kwargs) # noqa: E501
@validate_arguments
def is_attached_with_http_info(self, entity_did : Optional[StrictStr] = None, **kwargs) -> ApiResponse: # noqa: E501
"""Is Attached # noqa: E501
This method makes a synchronous HTTP request by default. To make an
asynchronous HTTP request, please pass async_req=True
>>> thread = api.is_attached_with_http_info(entity_did, async_req=True)
>>> result = thread.get()
:param entity_did:
:type entity_did: str
:param async_req: Whether to execute the request asynchronously.
:type async_req: bool, optional
:param _preload_content: if False, the ApiResponse.data will
be set to none and raw_data will store the
HTTP response body without reading/decoding.
Default is True.
:type _preload_content: bool, optional
:param _return_http_data_only: response data instead of ApiResponse
object with status code, headers, etc
:type _return_http_data_only: bool, optional
:param _request_timeout: timeout setting for this request. If one
number provided, it will be total request
timeout. It can also be a pair (tuple) of
(connection, read) timeouts.
:param _request_auth: set to override the auth_settings for an a single
request; this effectively ignores the authentication
in the spec for a single request.
:type _request_auth: dict, optional
:type _content_type: string, optional: force content-type for the request
:return: Returns the result object.
If the method is called asynchronously,
returns the request thread.
:rtype: tuple(Dict[str, str], status_code(int), headers(HTTPHeaderDict))
"""
_params = locals()
_all_params = [
'entity_did'
]
_all_params.extend(
[
'async_req',
'_return_http_data_only',
'_preload_content',
'_request_timeout',
'_request_auth',
'_content_type',
'_headers'
]
)
# validate the arguments
for _key, _val in _params['kwargs'].items():
if _key not in _all_params:
raise ApiTypeError(
"Got an unexpected keyword argument '%s'"
" to method is_attached" % _key
)
_params[_key] = _val
del _params['kwargs']
_collection_formats = {}
# process the path parameters
_path_params = {}
# process the query parameters
_query_params = []
if _params.get('entity_did') is not None: # noqa: E501
_query_params.append(('entity_did', _params['entity_did']))
# process the header parameters
_header_params = dict(_params.get('_headers', {}))
# process the form parameters
_form_params = []
_files = {}
# process the body parameter
_body_params = None
# set the HTTP header `Accept`
_header_params['Accept'] = self.api_client.select_header_accept(
['application/json']) # noqa: E501
# authentication setting
_auth_settings = [] # noqa: E501
_response_types_map = {
'200': "Dict[str, str]",
'422': "HTTPValidationError",
}
return self.api_client.call_api(
'/api/v1/is_attached', 'GET',
_path_params,
_query_params,
_header_params,
body=_body_params,
post_params=_form_params,
files=_files,
response_types_map=_response_types_map,
auth_settings=_auth_settings,
async_req=_params.get('async_req'),
_return_http_data_only=_params.get('_return_http_data_only'), # noqa: E501
_preload_content=_params.get('_preload_content', True),
_request_timeout=_params.get('_request_timeout'),
collection_formats=_collection_formats,
_request_auth=_params.get('_request_auth'))

View File

@@ -24,7 +24,6 @@ from typing import Any, List, Optional, Dict
from openapi_client.models.service import Service
from openapi_client.models.service_create import ServiceCreate
from openapi_client.models.services_by_name import ServicesByName
from openapi_client.api_client import ApiClient
from openapi_client.api_response import ApiResponse
@@ -193,7 +192,7 @@ class ServicesApi:
_request_auth=_params.get('_request_auth'))
@validate_arguments
def delete_service(self, entity_did : StrictStr, **kwargs) -> Dict[str, str]: # noqa: E501
def delete_service(self, entity_did : Optional[StrictStr] = None, **kwargs) -> Dict[str, str]: # noqa: E501
"""Delete Service # noqa: E501
This method makes a synchronous HTTP request by default. To make an
@@ -202,7 +201,7 @@ class ServicesApi:
>>> thread = api.delete_service(entity_did, async_req=True)
>>> result = thread.get()
:param entity_did: (required)
:param entity_did:
:type entity_did: str
:param async_req: Whether to execute the request asynchronously.
:type async_req: bool, optional
@@ -222,7 +221,7 @@ class ServicesApi:
return self.delete_service_with_http_info(entity_did, **kwargs) # noqa: E501
@validate_arguments
def delete_service_with_http_info(self, entity_did : StrictStr, **kwargs) -> ApiResponse: # noqa: E501
def delete_service_with_http_info(self, entity_did : Optional[StrictStr] = None, **kwargs) -> ApiResponse: # noqa: E501
"""Delete Service # noqa: E501
This method makes a synchronous HTTP request by default. To make an
@@ -231,7 +230,7 @@ class ServicesApi:
>>> thread = api.delete_service_with_http_info(entity_did, async_req=True)
>>> result = thread.get()
:param entity_did: (required)
:param entity_did:
:type entity_did: str
:param async_req: Whether to execute the request asynchronously.
:type async_req: bool, optional
@@ -289,12 +288,12 @@ class ServicesApi:
# process the path parameters
_path_params = {}
if _params['entity_did']:
_path_params['entity_did'] = _params['entity_did']
# process the query parameters
_query_params = []
if _params.get('entity_did') is not None: # noqa: E501
_query_params.append(('entity_did', _params['entity_did']))
# process the header parameters
_header_params = dict(_params.get('_headers', {}))
# process the form parameters
@@ -315,7 +314,7 @@ class ServicesApi:
}
return self.api_client.call_api(
'/api/v1/{entity_did}/service', 'DELETE',
'/api/v1/service', 'DELETE',
_path_params,
_query_params,
_header_params,
@@ -479,7 +478,7 @@ class ServicesApi:
_request_auth=_params.get('_request_auth'))
@validate_arguments
def get_service_by_did(self, entity_did : StrictStr, skip : Optional[StrictInt] = None, limit : Optional[StrictInt] = None, **kwargs) -> List[Service]: # noqa: E501
def get_service_by_did(self, entity_did : Optional[StrictStr] = None, skip : Optional[StrictInt] = None, limit : Optional[StrictInt] = None, **kwargs) -> List[Service]: # noqa: E501
"""Get Service By Did # noqa: E501
This method makes a synchronous HTTP request by default. To make an
@@ -488,7 +487,7 @@ class ServicesApi:
>>> thread = api.get_service_by_did(entity_did, skip, limit, async_req=True)
>>> result = thread.get()
:param entity_did: (required)
:param entity_did:
:type entity_did: str
:param skip:
:type skip: int
@@ -512,7 +511,7 @@ class ServicesApi:
return self.get_service_by_did_with_http_info(entity_did, skip, limit, **kwargs) # noqa: E501
@validate_arguments
def get_service_by_did_with_http_info(self, entity_did : StrictStr, skip : Optional[StrictInt] = None, limit : Optional[StrictInt] = None, **kwargs) -> ApiResponse: # noqa: E501
def get_service_by_did_with_http_info(self, entity_did : Optional[StrictStr] = None, skip : Optional[StrictInt] = None, limit : Optional[StrictInt] = None, **kwargs) -> ApiResponse: # noqa: E501
"""Get Service By Did # noqa: E501
This method makes a synchronous HTTP request by default. To make an
@@ -521,7 +520,7 @@ class ServicesApi:
>>> thread = api.get_service_by_did_with_http_info(entity_did, skip, limit, async_req=True)
>>> result = thread.get()
:param entity_did: (required)
:param entity_did:
:type entity_did: str
:param skip:
:type skip: int
@@ -585,12 +584,12 @@ class ServicesApi:
# process the path parameters
_path_params = {}
if _params['entity_did']:
_path_params['entity_did'] = _params['entity_did']
# process the query parameters
_query_params = []
if _params.get('entity_did') is not None: # noqa: E501
_query_params.append(('entity_did', _params['entity_did']))
if _params.get('skip') is not None: # noqa: E501
_query_params.append(('skip', _params['skip']))
@@ -617,7 +616,7 @@ class ServicesApi:
}
return self.api_client.call_api(
'/api/v1/{entity_did}/service', 'GET',
'/api/v1/service', 'GET',
_path_params,
_query_params,
_header_params,
@@ -634,17 +633,17 @@ class ServicesApi:
_request_auth=_params.get('_request_auth'))
@validate_arguments
def get_services_by_name(self, entity_name : StrictStr, skip : Optional[StrictInt] = None, limit : Optional[StrictInt] = None, **kwargs) -> ServicesByName: # noqa: E501
"""Get Services By Name # noqa: E501
def get_services_without_entity(self, entity_did : Optional[StrictStr] = None, skip : Optional[StrictInt] = None, limit : Optional[StrictInt] = None, **kwargs) -> List[Service]: # noqa: E501
"""Get Services Without Entity # noqa: E501
This method makes a synchronous HTTP request by default. To make an
asynchronous HTTP request, please pass async_req=True
>>> thread = api.get_services_by_name(entity_name, skip, limit, async_req=True)
>>> thread = api.get_services_without_entity(entity_did, skip, limit, async_req=True)
>>> result = thread.get()
:param entity_name: (required)
:type entity_name: str
:param entity_did:
:type entity_did: str
:param skip:
:type skip: int
:param limit:
@@ -658,26 +657,26 @@ class ServicesApi:
:return: Returns the result object.
If the method is called asynchronously,
returns the request thread.
:rtype: ServicesByName
:rtype: List[Service]
"""
kwargs['_return_http_data_only'] = True
if '_preload_content' in kwargs:
message = "Error! Please call the get_services_by_name_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501
message = "Error! Please call the get_services_without_entity_with_http_info method with `_preload_content` instead and obtain raw data from ApiResponse.raw_data" # noqa: E501
raise ValueError(message)
return self.get_services_by_name_with_http_info(entity_name, skip, limit, **kwargs) # noqa: E501
return self.get_services_without_entity_with_http_info(entity_did, skip, limit, **kwargs) # noqa: E501
@validate_arguments
def get_services_by_name_with_http_info(self, entity_name : StrictStr, skip : Optional[StrictInt] = None, limit : Optional[StrictInt] = None, **kwargs) -> ApiResponse: # noqa: E501
"""Get Services By Name # noqa: E501
def get_services_without_entity_with_http_info(self, entity_did : Optional[StrictStr] = None, skip : Optional[StrictInt] = None, limit : Optional[StrictInt] = None, **kwargs) -> ApiResponse: # noqa: E501
"""Get Services Without Entity # noqa: E501
This method makes a synchronous HTTP request by default. To make an
asynchronous HTTP request, please pass async_req=True
>>> thread = api.get_services_by_name_with_http_info(entity_name, skip, limit, async_req=True)
>>> thread = api.get_services_without_entity_with_http_info(entity_did, skip, limit, async_req=True)
>>> result = thread.get()
:param entity_name: (required)
:type entity_name: str
:param entity_did:
:type entity_did: str
:param skip:
:type skip: int
:param limit:
@@ -704,13 +703,13 @@ class ServicesApi:
:return: Returns the result object.
If the method is called asynchronously,
returns the request thread.
:rtype: tuple(ServicesByName, status_code(int), headers(HTTPHeaderDict))
:rtype: tuple(List[Service], status_code(int), headers(HTTPHeaderDict))
"""
_params = locals()
_all_params = [
'entity_name',
'entity_did',
'skip',
'limit'
]
@@ -731,7 +730,7 @@ class ServicesApi:
if _key not in _all_params:
raise ApiTypeError(
"Got an unexpected keyword argument '%s'"
" to method get_services_by_name" % _key
" to method get_services_without_entity" % _key
)
_params[_key] = _val
del _params['kwargs']
@@ -743,8 +742,8 @@ class ServicesApi:
# process the query parameters
_query_params = []
if _params.get('entity_name') is not None: # noqa: E501
_query_params.append(('entity_name', _params['entity_name']))
if _params.get('entity_did') is not None: # noqa: E501
_query_params.append(('entity_did', _params['entity_did']))
if _params.get('skip') is not None: # noqa: E501
_query_params.append(('skip', _params['skip']))
@@ -767,12 +766,12 @@ class ServicesApi:
_auth_settings = [] # noqa: E501
_response_types_map = {
'200': "ServicesByName",
'200': "List[Service]",
'422': "HTTPValidationError",
}
return self.api_client.call_api(
'/api/v1/services_by_entity_name', 'GET',
'/api/v1/services_without_entity', 'GET',
_path_params,
_query_params,
_header_params,

View File

@@ -3,19 +3,20 @@
All URIs are relative to _http://localhost_
| Method | HTTP request | Description |
| ----------------------------------------------------------------- | -------------------------------------- | --------------------- |
| [**attach_entity**](EntitiesApi.md#attach_entity) | **POST** /api/v1/{entity_did}/attach | Attach Entity |
| ----------------------------------------------------------------- | --------------------------------- | --------------------- |
| [**attach_entity**](EntitiesApi.md#attach_entity) | **POST** /api/v1/attach | Attach Entity |
| [**create_entity**](EntitiesApi.md#create_entity) | **POST** /api/v1/entity | Create Entity |
| [**delete_entity**](EntitiesApi.md#delete_entity) | **DELETE** /api/v1/{entity_did}/entity | Delete Entity |
| [**detach_entity**](EntitiesApi.md#detach_entity) | **POST** /api/v1/{entity_did}/detach | Detach Entity |
| [**delete_entity**](EntitiesApi.md#delete_entity) | **DELETE** /api/v1/entity | Delete Entity |
| [**detach_entity**](EntitiesApi.md#detach_entity) | **POST** /api/v1/detach | Detach Entity |
| [**get_all_entities**](EntitiesApi.md#get_all_entities) | **GET** /api/v1/entities | Get All Entities |
| [**get_attached_entities**](EntitiesApi.md#get_attached_entities) | **GET** /api/v1/attached_entities | Get Attached Entities |
| [**get_entity_by_did**](EntitiesApi.md#get_entity_by_did) | **GET** /api/v1/{entity_did}/entity | Get Entity By Did |
| [**get_entity_by_did**](EntitiesApi.md#get_entity_by_did) | **GET** /api/v1/entity | Get Entity By Did |
| [**get_entity_by_name**](EntitiesApi.md#get_entity_by_name) | **GET** /api/v1/entity_by_name | Get Entity By Name |
| [**is_attached**](EntitiesApi.md#is_attached) | **GET** /api/v1/is_attached | Is Attached |
# **attach_entity**
> Dict[str, str] attach_entity(entity_did, skip=skip, limit=limit)
> Dict[str, str] attach_entity(entity_did=entity_did, skip=skip, limit=limit)
Attach Entity
@@ -39,13 +40,13 @@ configuration = openapi_client.Configuration(
with openapi_client.ApiClient(configuration) as api_client:
# Create an instance of the API class
api_instance = openapi_client.EntitiesApi(api_client)
entity_did = 'entity_did_example' # str |
entity_did = 'did:sov:test:1234' # str | (optional) (default to 'did:sov:test:1234')
skip = 0 # int | (optional) (default to 0)
limit = 100 # int | (optional) (default to 100)
try:
# Attach Entity
api_response = api_instance.attach_entity(entity_did, skip=skip, limit=limit)
api_response = api_instance.attach_entity(entity_did=entity_did, skip=skip, limit=limit)
print("The response of EntitiesApi->attach_entity:\n")
pprint(api_response)
except Exception as e:
@@ -55,8 +56,8 @@ with openapi_client.ApiClient(configuration) as api_client:
### Parameters
| Name | Type | Description | Notes |
| -------------- | ------- | ----------- | --------------------------- |
| **entity_did** | **str** | |
| -------------- | ------- | ----------- | --------------------------------------------------- |
| **entity_did** | **str** | | [optional] [default to 'did:sov:test:1234'] |
| **skip** | **int** | | [optional] [default to 0] |
| **limit** | **int** | | [optional] [default to 100] |
@@ -151,7 +152,7 @@ No authorization required
# **delete_entity**
> Dict[str, str] delete_entity(entity_did)
> Dict[str, str] delete_entity(entity_did=entity_did)
Delete Entity
@@ -175,11 +176,11 @@ configuration = openapi_client.Configuration(
with openapi_client.ApiClient(configuration) as api_client:
# Create an instance of the API class
api_instance = openapi_client.EntitiesApi(api_client)
entity_did = 'entity_did_example' # str |
entity_did = 'did:sov:test:1234' # str | (optional) (default to 'did:sov:test:1234')
try:
# Delete Entity
api_response = api_instance.delete_entity(entity_did)
api_response = api_instance.delete_entity(entity_did=entity_did)
print("The response of EntitiesApi->delete_entity:\n")
pprint(api_response)
except Exception as e:
@@ -189,8 +190,8 @@ with openapi_client.ApiClient(configuration) as api_client:
### Parameters
| Name | Type | Description | Notes |
| -------------- | ------- | ----------- | ----- |
| **entity_did** | **str** | |
| -------------- | ------- | ----------- | --------------------------------------------------- |
| **entity_did** | **str** | | [optional] [default to 'did:sov:test:1234'] |
### Return type
@@ -216,7 +217,7 @@ No authorization required
# **detach_entity**
> Entity detach_entity(entity_did, skip=skip, limit=limit)
> Dict[str, str] detach_entity(entity_did=entity_did, skip=skip, limit=limit)
Detach Entity
@@ -226,7 +227,6 @@ Detach Entity
import time
import os
import openapi_client
from openapi_client.models.entity import Entity
from openapi_client.rest import ApiException
from pprint import pprint
@@ -241,13 +241,13 @@ configuration = openapi_client.Configuration(
with openapi_client.ApiClient(configuration) as api_client:
# Create an instance of the API class
api_instance = openapi_client.EntitiesApi(api_client)
entity_did = 'entity_did_example' # str |
entity_did = 'did:sov:test:1234' # str | (optional) (default to 'did:sov:test:1234')
skip = 0 # int | (optional) (default to 0)
limit = 100 # int | (optional) (default to 100)
try:
# Detach Entity
api_response = api_instance.detach_entity(entity_did, skip=skip, limit=limit)
api_response = api_instance.detach_entity(entity_did=entity_did, skip=skip, limit=limit)
print("The response of EntitiesApi->detach_entity:\n")
pprint(api_response)
except Exception as e:
@@ -257,14 +257,14 @@ with openapi_client.ApiClient(configuration) as api_client:
### Parameters
| Name | Type | Description | Notes |
| -------------- | ------- | ----------- | --------------------------- |
| **entity_did** | **str** | |
| -------------- | ------- | ----------- | --------------------------------------------------- |
| **entity_did** | **str** | | [optional] [default to 'did:sov:test:1234'] |
| **skip** | **int** | | [optional] [default to 0] |
| **limit** | **int** | | [optional] [default to 100] |
### Return type
[**Entity**](Entity.md)
**Dict[str, str]**
### Authorization
@@ -422,7 +422,7 @@ No authorization required
# **get_entity_by_did**
> Entity get_entity_by_did(entity_did)
> Entity get_entity_by_did(entity_did=entity_did)
Get Entity By Did
@@ -447,11 +447,11 @@ configuration = openapi_client.Configuration(
with openapi_client.ApiClient(configuration) as api_client:
# Create an instance of the API class
api_instance = openapi_client.EntitiesApi(api_client)
entity_did = 'entity_did_example' # str |
entity_did = 'did:sov:test:1234' # str | (optional) (default to 'did:sov:test:1234')
try:
# Get Entity By Did
api_response = api_instance.get_entity_by_did(entity_did)
api_response = api_instance.get_entity_by_did(entity_did=entity_did)
print("The response of EntitiesApi->get_entity_by_did:\n")
pprint(api_response)
except Exception as e:
@@ -461,8 +461,8 @@ with openapi_client.ApiClient(configuration) as api_client:
### Parameters
| Name | Type | Description | Notes |
| -------------- | ------- | ----------- | ----- |
| **entity_did** | **str** | |
| -------------- | ------- | ----------- | --------------------------------------------------- |
| **entity_did** | **str** | | [optional] [default to 'did:sov:test:1234'] |
### Return type
@@ -551,3 +551,68 @@ No authorization required
| **422** | Validation Error | - |
[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
# **is_attached**
> Dict[str, str] is_attached(entity_did=entity_did)
Is Attached
### Example
```python
import time
import os
import openapi_client
from openapi_client.rest import ApiException
from pprint import pprint
# Defining the host is optional and defaults to http://localhost
# See configuration.py for a list of all supported configuration parameters.
configuration = openapi_client.Configuration(
host = "http://localhost"
)
# Enter a context with an instance of the API client
with openapi_client.ApiClient(configuration) as api_client:
# Create an instance of the API class
api_instance = openapi_client.EntitiesApi(api_client)
entity_did = 'did:sov:test:1234' # str | (optional) (default to 'did:sov:test:1234')
try:
# Is Attached
api_response = api_instance.is_attached(entity_did=entity_did)
print("The response of EntitiesApi->is_attached:\n")
pprint(api_response)
except Exception as e:
print("Exception when calling EntitiesApi->is_attached: %s\n" % e)
```
### Parameters
| Name | Type | Description | Notes |
| -------------- | ------- | ----------- | --------------------------------------------------- |
| **entity_did** | **str** | | [optional] [default to 'did:sov:test:1234'] |
### Return type
**Dict[str, str]**
### Authorization
No authorization required
### HTTP request headers
- **Content-Type**: Not defined
- **Accept**: application/json
### HTTP response details
| Status code | Description | Response headers |
| ----------- | ------------------- | ---------------- |
| **200** | Successful Response | - |
| **422** | Validation Error | - |
[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)

View File

@@ -3,13 +3,14 @@
## Properties
| Name | Type | Description | Notes |
| ------------ | ---------- | ----------- | ----- |
| -------------------- | ---------- | ----------- | ----- |
| **did** | **str** | |
| **name** | **str** | |
| **ip** | **str** | |
| **visible** | **bool** | |
| **other** | **object** | |
| **attached** | **bool** | |
| **stop_health_task** | **bool** | |
## Example

View File

@@ -3,12 +3,12 @@
All URIs are relative to _http://localhost_
| Method | HTTP request | Description |
| --------------------------------------------------------------- | --------------------------------------- | -------------------- |
| ----------------------------------------------------------------------------- | --------------------------------------- | --------------------------- |
| [**create_service**](ServicesApi.md#create_service) | **POST** /api/v1/service | Create Service |
| [**delete_service**](ServicesApi.md#delete_service) | **DELETE** /api/v1/{entity_did}/service | Delete Service |
| [**delete_service**](ServicesApi.md#delete_service) | **DELETE** /api/v1/service | Delete Service |
| [**get_all_services**](ServicesApi.md#get_all_services) | **GET** /api/v1/services | Get All Services |
| [**get_service_by_did**](ServicesApi.md#get_service_by_did) | **GET** /api/v1/{entity_did}/service | Get Service By Did |
| [**get_services_by_name**](ServicesApi.md#get_services_by_name) | **GET** /api/v1/services_by_entity_name | Get Services By Name |
| [**get_service_by_did**](ServicesApi.md#get_service_by_did) | **GET** /api/v1/service | Get Service By Did |
| [**get_services_without_entity**](ServicesApi.md#get_services_without_entity) | **GET** /api/v1/services_without_entity | Get Services Without Entity |
# **create_service**
@@ -79,7 +79,7 @@ No authorization required
# **delete_service**
> Dict[str, str] delete_service(entity_did)
> Dict[str, str] delete_service(entity_did=entity_did)
Delete Service
@@ -103,11 +103,11 @@ configuration = openapi_client.Configuration(
with openapi_client.ApiClient(configuration) as api_client:
# Create an instance of the API class
api_instance = openapi_client.ServicesApi(api_client)
entity_did = 'entity_did_example' # str |
entity_did = 'did:sov:test:1234' # str | (optional) (default to 'did:sov:test:1234')
try:
# Delete Service
api_response = api_instance.delete_service(entity_did)
api_response = api_instance.delete_service(entity_did=entity_did)
print("The response of ServicesApi->delete_service:\n")
pprint(api_response)
except Exception as e:
@@ -117,8 +117,8 @@ with openapi_client.ApiClient(configuration) as api_client:
### Parameters
| Name | Type | Description | Notes |
| -------------- | ------- | ----------- | ----- |
| **entity_did** | **str** | |
| -------------- | ------- | ----------- | --------------------------------------------------- |
| **entity_did** | **str** | | [optional] [default to 'did:sov:test:1234'] |
### Return type
@@ -212,7 +212,7 @@ No authorization required
# **get_service_by_did**
> List[Service] get_service_by_did(entity_did, skip=skip, limit=limit)
> List[Service] get_service_by_did(entity_did=entity_did, skip=skip, limit=limit)
Get Service By Did
@@ -237,13 +237,13 @@ configuration = openapi_client.Configuration(
with openapi_client.ApiClient(configuration) as api_client:
# Create an instance of the API class
api_instance = openapi_client.ServicesApi(api_client)
entity_did = 'entity_did_example' # str |
entity_did = 'did:sov:test:1234' # str | (optional) (default to 'did:sov:test:1234')
skip = 0 # int | (optional) (default to 0)
limit = 100 # int | (optional) (default to 100)
try:
# Get Service By Did
api_response = api_instance.get_service_by_did(entity_did, skip=skip, limit=limit)
api_response = api_instance.get_service_by_did(entity_did=entity_did, skip=skip, limit=limit)
print("The response of ServicesApi->get_service_by_did:\n")
pprint(api_response)
except Exception as e:
@@ -253,8 +253,8 @@ with openapi_client.ApiClient(configuration) as api_client:
### Parameters
| Name | Type | Description | Notes |
| -------------- | ------- | ----------- | --------------------------- |
| **entity_did** | **str** | |
| -------------- | ------- | ----------- | --------------------------------------------------- |
| **entity_did** | **str** | | [optional] [default to 'did:sov:test:1234'] |
| **skip** | **int** | | [optional] [default to 0] |
| **limit** | **int** | | [optional] [default to 100] |
@@ -280,11 +280,11 @@ No authorization required
[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
# **get_services_by_name**
# **get_services_without_entity**
> ServicesByName get_services_by_name(entity_name, skip=skip, limit=limit)
> List[Service] get_services_without_entity(entity_did=entity_did, skip=skip, limit=limit)
Get Services By Name
Get Services Without Entity
### Example
@@ -292,7 +292,7 @@ Get Services By Name
import time
import os
import openapi_client
from openapi_client.models.services_by_name import ServicesByName
from openapi_client.models.service import Service
from openapi_client.rest import ApiException
from pprint import pprint
@@ -307,30 +307,30 @@ configuration = openapi_client.Configuration(
with openapi_client.ApiClient(configuration) as api_client:
# Create an instance of the API class
api_instance = openapi_client.ServicesApi(api_client)
entity_name = 'entity_name_example' # str |
entity_did = 'did:sov:test:1234' # str | (optional) (default to 'did:sov:test:1234')
skip = 0 # int | (optional) (default to 0)
limit = 100 # int | (optional) (default to 100)
try:
# Get Services By Name
api_response = api_instance.get_services_by_name(entity_name, skip=skip, limit=limit)
print("The response of ServicesApi->get_services_by_name:\n")
# Get Services Without Entity
api_response = api_instance.get_services_without_entity(entity_did=entity_did, skip=skip, limit=limit)
print("The response of ServicesApi->get_services_without_entity:\n")
pprint(api_response)
except Exception as e:
print("Exception when calling ServicesApi->get_services_by_name: %s\n" % e)
print("Exception when calling ServicesApi->get_services_without_entity: %s\n" % e)
```
### Parameters
| Name | Type | Description | Notes |
| --------------- | ------- | ----------- | --------------------------- |
| **entity_name** | **str** | |
| -------------- | ------- | ----------- | --------------------------------------------------- |
| **entity_did** | **str** | | [optional] [default to 'did:sov:test:1234'] |
| **skip** | **int** | | [optional] [default to 0] |
| **limit** | **int** | | [optional] [default to 100] |
### Return type
[**ServicesByName**](ServicesByName.md)
[**List[Service]**](Service.md)
### Authorization

View File

@@ -1,28 +0,0 @@
# ServicesByName
## Properties
| Name | Type | Description | Notes |
| ------------ | ------------------------------- | ----------- | ----- |
| **entity** | [**Entity**](Entity.md) | |
| **services** | [**List[Service]**](Service.md) | |
## Example
```python
from openapi_client.models.services_by_name import ServicesByName
# TODO update the JSON string below
json = "{}"
# create an instance of ServicesByName from a JSON string
services_by_name_instance = ServicesByName.from_json(json)
# print the JSON string representation of the object
print ServicesByName.to_json()
# convert the object into a dict
services_by_name_dict = services_by_name_instance.to_dict()
# create an instance of ServicesByName from a dict
services_by_name_form_dict = services_by_name.from_dict(services_by_name_dict)
```
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)

View File

@@ -21,7 +21,6 @@ from openapi_client.models.machine import Machine
from openapi_client.models.resolution import Resolution
from openapi_client.models.service import Service
from openapi_client.models.service_create import ServiceCreate
from openapi_client.models.services_by_name import ServicesByName
from openapi_client.models.status import Status
from openapi_client.models.validation_error import ValidationError
from openapi_client.models.validation_error_loc_inner import ValidationErrorLocInner

View File

@@ -31,7 +31,8 @@ class Entity(BaseModel):
visible: StrictBool = Field(...)
other: Dict[str, Any] = Field(...)
attached: StrictBool = Field(...)
__properties = ["did", "name", "ip", "visible", "other", "attached"]
stop_health_task: StrictBool = Field(...)
__properties = ["did", "name", "ip", "visible", "other", "attached", "stop_health_task"]
class Config:
"""Pydantic configuration"""
@@ -74,7 +75,8 @@ class Entity(BaseModel):
"ip": obj.get("ip"),
"visible": obj.get("visible"),
"other": obj.get("other"),
"attached": obj.get("attached")
"attached": obj.get("attached"),
"stop_health_task": obj.get("stop_health_task")
})
return _obj

View File

@@ -1,85 +0,0 @@
# coding: utf-8
"""
FastAPI
No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
The version of the OpenAPI document: 0.1.0
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from typing import List
from pydantic import BaseModel, Field, conlist
from openapi_client.models.entity import Entity
from openapi_client.models.service import Service
class ServicesByName(BaseModel):
"""
ServicesByName
"""
entity: Entity = Field(...)
services: conlist(Service) = Field(...)
__properties = ["entity", "services"]
class Config:
"""Pydantic configuration"""
allow_population_by_field_name = True
validate_assignment = True
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.dict(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> ServicesByName:
"""Create an instance of ServicesByName from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self):
"""Returns the dictionary representation of the model using alias"""
_dict = self.dict(by_alias=True,
exclude={
},
exclude_none=True)
# override the default output from pydantic by calling `to_dict()` of entity
if self.entity:
_dict['entity'] = self.entity.to_dict()
# override the default output from pydantic by calling `to_dict()` of each item in services (list)
_items = []
if self.services:
for _item in self.services:
if _item:
_items.append(_item.to_dict())
_dict['services'] = _items
return _dict
@classmethod
def from_dict(cls, obj: dict) -> ServicesByName:
"""Create an instance of ServicesByName from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return ServicesByName.parse_obj(obj)
_obj = ServicesByName.parse_obj({
"entity": Entity.from_dict(obj.get("entity")) if obj.get("entity") is not None else None,
"services": [Service.from_dict(_item) for _item in obj.get("services")] if obj.get("services") is not None else None
})
return _obj

View File

@@ -1,52 +0,0 @@
# coding: utf-8
"""
FastAPI
No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
The version of the OpenAPI document: 0.1.0
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
import unittest
from openapi_client.api.default_api import DefaultApi # noqa: E501
class TestDefaultApi(unittest.TestCase):
"""DefaultApi unit test stubs"""
def setUp(self) -> None:
self.api = DefaultApi() # noqa: E501
def tearDown(self) -> None:
pass
def test_get(self) -> None:
"""Test case for get
Get # noqa: E501
"""
pass
def test_health(self) -> None:
"""Test case for health
Health # noqa: E501
"""
pass
def test_root(self) -> None:
"""Test case for root
Root # noqa: E501
"""
pass
if __name__ == '__main__':
unittest.main()

View File

@@ -1,87 +0,0 @@
# coding: utf-8
"""
FastAPI
No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
The version of the OpenAPI document: 0.1.0
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
import unittest
from openapi_client.api.entities_api import EntitiesApi # noqa: E501
class TestEntitiesApi(unittest.TestCase):
"""EntitiesApi unit test stubs"""
def setUp(self) -> None:
self.api = EntitiesApi() # noqa: E501
def tearDown(self) -> None:
pass
def test_attach_entity(self) -> None:
"""Test case for attach_entity
Attach Entity # noqa: E501
"""
pass
def test_create_entity(self) -> None:
"""Test case for create_entity
Create Entity # noqa: E501
"""
pass
def test_delete_entity(self) -> None:
"""Test case for delete_entity
Delete Entity # noqa: E501
"""
pass
def test_detach_entity(self) -> None:
"""Test case for detach_entity
Detach Entity # noqa: E501
"""
pass
def test_get_all_entities(self) -> None:
"""Test case for get_all_entities
Get All Entities # noqa: E501
"""
pass
def test_get_attached_entities(self) -> None:
"""Test case for get_attached_entities
Get Attached Entities # noqa: E501
"""
pass
def test_get_entity_by_did(self) -> None:
"""Test case for get_entity_by_did
Get Entity By Did # noqa: E501
"""
pass
def test_get_entity_by_name(self) -> None:
"""Test case for get_entity_by_name
Get Entity By Name # noqa: E501
"""
pass
if __name__ == '__main__':
unittest.main()

View File

@@ -1,63 +0,0 @@
# coding: utf-8
"""
FastAPI
No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
The version of the OpenAPI document: 0.1.0
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
import unittest
import datetime
from openapi_client.models.entity import Entity # noqa: E501
class TestEntity(unittest.TestCase):
"""Entity unit test stubs"""
def setUp(self):
pass
def tearDown(self):
pass
def make_instance(self, include_optional) -> Entity:
"""Test Entity
include_option is a boolean, when False only required
params are included, when True both required and
optional params are included """
# uncomment below to create an instance of `Entity`
"""
model = Entity() # noqa: E501
if include_optional:
return Entity(
did = 'did:sov:test:1234',
name = 'C1',
ip = '127.0.0.1',
visible = True,
other = {network=Carlos Home Network, roles=[service repository, service prosumer]},
attached = True
)
else:
return Entity(
did = 'did:sov:test:1234',
name = 'C1',
ip = '127.0.0.1',
visible = True,
other = {network=Carlos Home Network, roles=[service repository, service prosumer]},
attached = True,
)
"""
def testEntity(self):
"""Test Entity"""
# inst_req_only = self.make_instance(include_optional=False)
# inst_req_and_optional = self.make_instance(include_optional=True)
if __name__ == '__main__':
unittest.main()

View File

@@ -1,61 +0,0 @@
# coding: utf-8
"""
FastAPI
No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
The version of the OpenAPI document: 0.1.0
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
import unittest
import datetime
from openapi_client.models.entity_create import EntityCreate # noqa: E501
class TestEntityCreate(unittest.TestCase):
"""EntityCreate unit test stubs"""
def setUp(self):
pass
def tearDown(self):
pass
def make_instance(self, include_optional) -> EntityCreate:
"""Test EntityCreate
include_option is a boolean, when False only required
params are included, when True both required and
optional params are included """
# uncomment below to create an instance of `EntityCreate`
"""
model = EntityCreate() # noqa: E501
if include_optional:
return EntityCreate(
did = 'did:sov:test:1234',
name = 'C1',
ip = '127.0.0.1',
visible = True,
other = {network=Carlos Home Network, roles=[service repository, service prosumer]}
)
else:
return EntityCreate(
did = 'did:sov:test:1234',
name = 'C1',
ip = '127.0.0.1',
visible = True,
other = {network=Carlos Home Network, roles=[service repository, service prosumer]},
)
"""
def testEntityCreate(self):
"""Test EntityCreate"""
# inst_req_only = self.make_instance(include_optional=False)
# inst_req_and_optional = self.make_instance(include_optional=True)
if __name__ == '__main__':
unittest.main()

View File

@@ -1,59 +0,0 @@
# coding: utf-8
"""
FastAPI
No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
The version of the OpenAPI document: 0.1.0
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
import unittest
import datetime
from openapi_client.models.http_validation_error import HTTPValidationError # noqa: E501
class TestHTTPValidationError(unittest.TestCase):
"""HTTPValidationError unit test stubs"""
def setUp(self):
pass
def tearDown(self):
pass
def make_instance(self, include_optional) -> HTTPValidationError:
"""Test HTTPValidationError
include_option is a boolean, when False only required
params are included, when True both required and
optional params are included """
# uncomment below to create an instance of `HTTPValidationError`
"""
model = HTTPValidationError() # noqa: E501
if include_optional:
return HTTPValidationError(
detail = [
openapi_client.models.validation_error.ValidationError(
loc = [
null
],
msg = '',
type = '', )
]
)
else:
return HTTPValidationError(
)
"""
def testHTTPValidationError(self):
"""Test HTTPValidationError"""
# inst_req_only = self.make_instance(include_optional=False)
# inst_req_and_optional = self.make_instance(include_optional=True)
if __name__ == '__main__':
unittest.main()

View File

@@ -1,55 +0,0 @@
# coding: utf-8
"""
FastAPI
No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
The version of the OpenAPI document: 0.1.0
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
import unittest
import datetime
from openapi_client.models.machine import Machine # noqa: E501
class TestMachine(unittest.TestCase):
"""Machine unit test stubs"""
def setUp(self):
pass
def tearDown(self):
pass
def make_instance(self, include_optional) -> Machine:
"""Test Machine
include_option is a boolean, when False only required
params are included, when True both required and
optional params are included """
# uncomment below to create an instance of `Machine`
"""
model = Machine() # noqa: E501
if include_optional:
return Machine(
name = '',
status = 'online'
)
else:
return Machine(
name = '',
status = 'online',
)
"""
def testMachine(self):
"""Test Machine"""
# inst_req_only = self.make_instance(include_optional=False)
# inst_req_and_optional = self.make_instance(include_optional=True)
if __name__ == '__main__':
unittest.main()

View File

@@ -1,38 +0,0 @@
# coding: utf-8
"""
FastAPI
No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
The version of the OpenAPI document: 0.1.0
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
import unittest
from openapi_client.api.repositories_api import RepositoriesApi # noqa: E501
class TestRepositoriesApi(unittest.TestCase):
"""RepositoriesApi unit test stubs"""
def setUp(self) -> None:
self.api = RepositoriesApi() # noqa: E501
def tearDown(self) -> None:
pass
def test_get_all_repositories(self) -> None:
"""Test case for get_all_repositories
Get All Repositories # noqa: E501
"""
pass
if __name__ == '__main__':
unittest.main()

View File

@@ -1,63 +0,0 @@
# coding: utf-8
"""
FastAPI
No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
The version of the OpenAPI document: 0.1.0
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
import unittest
import datetime
from openapi_client.models.resolution import Resolution # noqa: E501
class TestResolution(unittest.TestCase):
"""Resolution unit test stubs"""
def setUp(self):
pass
def tearDown(self):
pass
def make_instance(self, include_optional) -> Resolution:
"""Test Resolution
include_option is a boolean, when False only required
params are included, when True both required and
optional params are included """
# uncomment below to create an instance of `Resolution`
"""
model = Resolution() # noqa: E501
if include_optional:
return Resolution(
requester_name = 'C1',
requester_did = 'did:sov:test:1122',
resolved_did = 'did:sov:test:1234',
other = {test=test},
timestamp = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'),
id = 56
)
else:
return Resolution(
requester_name = 'C1',
requester_did = 'did:sov:test:1122',
resolved_did = 'did:sov:test:1234',
other = {test=test},
timestamp = datetime.datetime.strptime('2013-10-20 19:20:30.00', '%Y-%m-%d %H:%M:%S.%f'),
id = 56,
)
"""
def testResolution(self):
"""Test Resolution"""
# inst_req_only = self.make_instance(include_optional=False)
# inst_req_and_optional = self.make_instance(include_optional=True)
if __name__ == '__main__':
unittest.main()

View File

@@ -1,38 +0,0 @@
# coding: utf-8
"""
FastAPI
No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
The version of the OpenAPI document: 0.1.0
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
import unittest
from openapi_client.api.resolution_api import ResolutionApi # noqa: E501
class TestResolutionApi(unittest.TestCase):
"""ResolutionApi unit test stubs"""
def setUp(self) -> None:
self.api = ResolutionApi() # noqa: E501
def tearDown(self) -> None:
pass
def test_get_all_resolutions(self) -> None:
"""Test case for get_all_resolutions
Get All Resolutions # noqa: E501
"""
pass
if __name__ == '__main__':
unittest.main()

View File

@@ -1,79 +0,0 @@
# coding: utf-8
"""
FastAPI
No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
The version of the OpenAPI document: 0.1.0
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
import unittest
import datetime
from openapi_client.models.service import Service # noqa: E501
class TestService(unittest.TestCase):
"""Service unit test stubs"""
def setUp(self):
pass
def tearDown(self):
pass
def make_instance(self, include_optional) -> Service:
"""Test Service
include_option is a boolean, when False only required
params are included, when True both required and
optional params are included """
# uncomment below to create an instance of `Service`
"""
model = Service() # noqa: E501
if include_optional:
return Service(
uuid = '8e285c0c-4e40-430a-a477-26b3b81e30df',
service_name = 'Carlos Printing',
service_type = '3D Printing',
endpoint_url = 'http://127.0.0.1:8000',
status = 'unknown',
other = {action=[register, deregister, delete, create]},
entity_did = 'did:sov:test:1234',
entity = openapi_client.models.entity.Entity(
did = 'did:sov:test:1234',
name = 'C1',
ip = '127.0.0.1',
visible = True,
other = {network=Carlos Home Network, roles=[service repository, service prosumer]},
attached = True, )
)
else:
return Service(
uuid = '8e285c0c-4e40-430a-a477-26b3b81e30df',
service_name = 'Carlos Printing',
service_type = '3D Printing',
endpoint_url = 'http://127.0.0.1:8000',
status = 'unknown',
other = {action=[register, deregister, delete, create]},
entity_did = 'did:sov:test:1234',
entity = openapi_client.models.entity.Entity(
did = 'did:sov:test:1234',
name = 'C1',
ip = '127.0.0.1',
visible = True,
other = {network=Carlos Home Network, roles=[service repository, service prosumer]},
attached = True, ),
)
"""
def testService(self):
"""Test Service"""
# inst_req_only = self.make_instance(include_optional=False)
# inst_req_and_optional = self.make_instance(include_optional=True)
if __name__ == '__main__':
unittest.main()

View File

@@ -1,65 +0,0 @@
# coding: utf-8
"""
FastAPI
No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
The version of the OpenAPI document: 0.1.0
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
import unittest
import datetime
from openapi_client.models.service_create import ServiceCreate # noqa: E501
class TestServiceCreate(unittest.TestCase):
"""ServiceCreate unit test stubs"""
def setUp(self):
pass
def tearDown(self):
pass
def make_instance(self, include_optional) -> ServiceCreate:
"""Test ServiceCreate
include_option is a boolean, when False only required
params are included, when True both required and
optional params are included """
# uncomment below to create an instance of `ServiceCreate`
"""
model = ServiceCreate() # noqa: E501
if include_optional:
return ServiceCreate(
uuid = '8e285c0c-4e40-430a-a477-26b3b81e30df',
service_name = 'Carlos Printing',
service_type = '3D Printing',
endpoint_url = 'http://127.0.0.1:8000',
status = 'unknown',
other = {action=[register, deregister, delete, create]},
entity_did = 'did:sov:test:1234'
)
else:
return ServiceCreate(
uuid = '8e285c0c-4e40-430a-a477-26b3b81e30df',
service_name = 'Carlos Printing',
service_type = '3D Printing',
endpoint_url = 'http://127.0.0.1:8000',
status = 'unknown',
other = {action=[register, deregister, delete, create]},
entity_did = 'did:sov:test:1234',
)
"""
def testServiceCreate(self):
"""Test ServiceCreate"""
# inst_req_only = self.make_instance(include_optional=False)
# inst_req_and_optional = self.make_instance(include_optional=True)
if __name__ == '__main__':
unittest.main()

View File

@@ -1,66 +0,0 @@
# coding: utf-8
"""
FastAPI
No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
The version of the OpenAPI document: 0.1.0
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
import unittest
from openapi_client.api.services_api import ServicesApi # noqa: E501
class TestServicesApi(unittest.TestCase):
"""ServicesApi unit test stubs"""
def setUp(self) -> None:
self.api = ServicesApi() # noqa: E501
def tearDown(self) -> None:
pass
def test_create_service(self) -> None:
"""Test case for create_service
Create Service # noqa: E501
"""
pass
def test_delete_service(self) -> None:
"""Test case for delete_service
Delete Service # noqa: E501
"""
pass
def test_get_all_services(self) -> None:
"""Test case for get_all_services
Get All Services # noqa: E501
"""
pass
def test_get_service_by_did(self) -> None:
"""Test case for get_service_by_did
Get Service By Did # noqa: E501
"""
pass
def test_get_services_by_name(self) -> None:
"""Test case for get_services_by_name
Get Services By Name # noqa: E501
"""
pass
if __name__ == '__main__':
unittest.main()

View File

@@ -1,99 +0,0 @@
# coding: utf-8
"""
FastAPI
No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
The version of the OpenAPI document: 0.1.0
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
import unittest
import datetime
from openapi_client.models.services_by_name import ServicesByName # noqa: E501
class TestServicesByName(unittest.TestCase):
"""ServicesByName unit test stubs"""
def setUp(self):
pass
def tearDown(self):
pass
def make_instance(self, include_optional) -> ServicesByName:
"""Test ServicesByName
include_option is a boolean, when False only required
params are included, when True both required and
optional params are included """
# uncomment below to create an instance of `ServicesByName`
"""
model = ServicesByName() # noqa: E501
if include_optional:
return ServicesByName(
entity = openapi_client.models.entity.Entity(
did = 'did:sov:test:1234',
name = 'C1',
ip = '127.0.0.1',
visible = True,
other = {network=Carlos Home Network, roles=[service repository, service prosumer]},
attached = True, ),
services = [
openapi_client.models.service.Service(
uuid = '8e285c0c-4e40-430a-a477-26b3b81e30df',
service_name = 'Carlos Printing',
service_type = '3D Printing',
endpoint_url = 'http://127.0.0.1:8000',
status = 'unknown',
other = {action=[register, deregister, delete, create]},
entity_did = 'did:sov:test:1234',
entity = openapi_client.models.entity.Entity(
did = 'did:sov:test:1234',
name = 'C1',
ip = '127.0.0.1',
visible = True,
other = {network=Carlos Home Network, roles=[service repository, service prosumer]},
attached = True, ), )
]
)
else:
return ServicesByName(
entity = openapi_client.models.entity.Entity(
did = 'did:sov:test:1234',
name = 'C1',
ip = '127.0.0.1',
visible = True,
other = {network=Carlos Home Network, roles=[service repository, service prosumer]},
attached = True, ),
services = [
openapi_client.models.service.Service(
uuid = '8e285c0c-4e40-430a-a477-26b3b81e30df',
service_name = 'Carlos Printing',
service_type = '3D Printing',
endpoint_url = 'http://127.0.0.1:8000',
status = 'unknown',
other = {action=[register, deregister, delete, create]},
entity_did = 'did:sov:test:1234',
entity = openapi_client.models.entity.Entity(
did = 'did:sov:test:1234',
name = 'C1',
ip = '127.0.0.1',
visible = True,
other = {network=Carlos Home Network, roles=[service repository, service prosumer]},
attached = True, ), )
],
)
"""
def testServicesByName(self):
"""Test ServicesByName"""
# inst_req_only = self.make_instance(include_optional=False)
# inst_req_and_optional = self.make_instance(include_optional=True)
if __name__ == '__main__':
unittest.main()

View File

@@ -1,34 +0,0 @@
# coding: utf-8
"""
FastAPI
No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
The version of the OpenAPI document: 0.1.0
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
import unittest
import datetime
from openapi_client.models.status import Status # noqa: E501
class TestStatus(unittest.TestCase):
"""Status unit test stubs"""
def setUp(self):
pass
def tearDown(self):
pass
def testStatus(self):
"""Test Status"""
# inst = Status()
if __name__ == '__main__':
unittest.main()

View File

@@ -1,61 +0,0 @@
# coding: utf-8
"""
FastAPI
No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
The version of the OpenAPI document: 0.1.0
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
import unittest
import datetime
from openapi_client.models.validation_error import ValidationError # noqa: E501
class TestValidationError(unittest.TestCase):
"""ValidationError unit test stubs"""
def setUp(self):
pass
def tearDown(self):
pass
def make_instance(self, include_optional) -> ValidationError:
"""Test ValidationError
include_option is a boolean, when False only required
params are included, when True both required and
optional params are included """
# uncomment below to create an instance of `ValidationError`
"""
model = ValidationError() # noqa: E501
if include_optional:
return ValidationError(
loc = [
null
],
msg = '',
type = ''
)
else:
return ValidationError(
loc = [
null
],
msg = '',
type = '',
)
"""
def testValidationError(self):
"""Test ValidationError"""
# inst_req_only = self.make_instance(include_optional=False)
# inst_req_and_optional = self.make_instance(include_optional=True)
if __name__ == '__main__':
unittest.main()

View File

@@ -1,51 +0,0 @@
# coding: utf-8
"""
FastAPI
No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
The version of the OpenAPI document: 0.1.0
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
import unittest
import datetime
from openapi_client.models.validation_error_loc_inner import ValidationErrorLocInner # noqa: E501
class TestValidationErrorLocInner(unittest.TestCase):
"""ValidationErrorLocInner unit test stubs"""
def setUp(self):
pass
def tearDown(self):
pass
def make_instance(self, include_optional) -> ValidationErrorLocInner:
"""Test ValidationErrorLocInner
include_option is a boolean, when False only required
params are included, when True both required and
optional params are included """
# uncomment below to create an instance of `ValidationErrorLocInner`
"""
model = ValidationErrorLocInner() # noqa: E501
if include_optional:
return ValidationErrorLocInner(
)
else:
return ValidationErrorLocInner(
)
"""
def testValidationErrorLocInner(self):
"""Test ValidationErrorLocInner"""
# inst_req_only = self.make_instance(include_optional=False)
# inst_req_and_optional = self.make_instance(include_optional=True)
if __name__ == '__main__':
unittest.main()

View File

@@ -26,12 +26,6 @@ def test_health(api_client: ApiClient) -> None:
assert res.status == Status.ONLINE
def test_entities_empty(api_client: ApiClient) -> None:
entity = EntitiesApi(api_client=api_client)
res = entity.get_all_entities()
assert res == []
def create_entities(num: int = 10) -> list[EntityCreate]:
res = []
for i in range(num):

View File

@@ -45,7 +45,7 @@ export default function AccessPoint() {
useEffect(() => {
const interval = setInterval(() => {
onRefresh();
}, 1000);
}, 5000);
return () => clearInterval(interval);
// eslint-disable-next-line react-hooks/exhaustive-deps

View File

@@ -10,13 +10,100 @@ import {
CardHeader,
Snackbar,
Typography,
CircularProgress,
IconButton,
} from "@mui/material";
import CopyToClipboard from "@/components/copy_to_clipboard";
import { useGetServicesByName } from "@/api/services/services";
import { attachEntity, detachEntity } from "@/api/entities/entities";
import {
attachEntity,
detachEntity,
isAttached,
} from "@/api/entities/entities";
import { mutate } from "swr";
import { Skeleton } from "@mui/material";
import { Service } from "@/api/model";
import { Entity, Service } from "@/api/model";
import useGetEntityByNameOrDid from "@/components/hooks/useGetEntityByNameOrDid";
import { useGetAllServices } from "@/api/services/services";
import axios from "axios";
import CloseIcon from "@mui/icons-material/Close";
interface SnackMessage {
message: string;
severity: "success" | "error";
}
type AttachButtonProps = {
entity?: Entity;
setSnackbarMessage: (message: SnackMessage) => void;
setSnackbarOpen: (open: boolean) => void;
};
const AttachButton = ({
entity,
setSnackbarMessage,
setSnackbarOpen,
}: AttachButtonProps) => {
const [loading, setLoading] = useState(false);
const handleClick = async () => {
setLoading(true);
// Call the attach or detach function depending on the isAttached value
// and await for the result
try {
let response = await (entity?.attached
? detachEntity({ entity_did: entity?.did })
: attachEntity({ entity_did: entity?.did }));
if (!entity?.attached) {
console.log("calling isAttached");
response = await isAttached({ entity_did: entity?.did });
console.log("response: ", response);
}
const msg = {
message: response.data.message,
severity: "success",
} as SnackMessage;
setSnackbarMessage(msg);
setSnackbarOpen(true);
} catch (error) {
if (axios.isAxiosError(error)) {
// Extract the error message from the error object
const errorMessage = error.response?.data.detail[0].msg;
const msg = {
message: `${errorMessage}`,
severity: "error",
} as SnackMessage;
setSnackbarMessage(msg);
setSnackbarOpen(true);
} else {
console.error("error: ", error);
}
} finally {
setLoading(false);
}
};
return (
<>
<Button
onClick={handleClick}
className="mr-6"
variant="contained"
// Disable the button while loading
disabled={loading}
>
{loading ? (
<CircularProgress size={24} />
) : entity?.attached ? (
"Detach"
) : (
"Attach"
)}
</Button>
</>
);
};
export default function Client({
params,
@@ -25,18 +112,16 @@ export default function Client({
}) {
const { client_name } = params;
const { entity: entity } = useGetEntityByNameOrDid(client_name);
const {
data: services,
isLoading: services_loading,
swrKey: entityKeyFunc,
} = useGetServicesByName({
entity_name: client_name,
});
} = useGetAllServices();
const entity = services?.data?.entity;
const clients: Service[] = useMemo(() => {
if (services?.data?.services) {
return services.data.services.filter((service) => {
if (services?.data) {
return services.data.filter((service) => {
if (service.entity_did !== entity?.did) return true;
});
}
@@ -60,47 +145,15 @@ export default function Client({
const cardContentRef = useRef(null);
const [snackbarOpen, setSnackbarOpen] = useState(false);
const [snackbarMessage, setSnackbarMessage] = useState("");
const [isAttached, setIsAttached] = useState(entity?.attached);
const [snackbarMessage, setSnackbarMessage] = useState<
SnackMessage | undefined
>(undefined);
const closeSnackBar = () => {
setSnackbarMessage("");
setSnackbarMessage(undefined);
setSnackbarOpen(false);
};
const onAttachEntity = async () => {
try {
if (entity) {
const response = await attachEntity(entity.did);
setSnackbarMessage(response.data.message);
setSnackbarOpen(true);
} else {
console.error("no entity");
}
} catch (error) {
console.error(error);
} finally {
setIsAttached(true);
}
};
const onDetachEntity = async () => {
try {
if (entity) {
const response = await detachEntity(entity.did);
console.log(response);
setSnackbarMessage("Entity detached successfully.");
setSnackbarOpen(true);
} else {
console.error("no entity");
}
} catch (error) {
console.error(error);
} finally {
setIsAttached(false);
}
};
if (services_loading) return <Skeleton height={500} />;
if (!services) return <Alert severity="error">Client not found</Alert>;
@@ -113,25 +166,13 @@ export default function Client({
justifyContent: "space-between",
}}
>
<h2>Client 1</h2>
<h2>Entity {entity?.name}</h2>
<div>
{isAttached === false ? (
<Button
onClick={onAttachEntity}
className="mr-6"
variant="contained"
>
Attach
</Button>
) : (
<Button
onClick={onDetachEntity}
className="mr-6"
variant="contained"
>
Detach
</Button>
)}
<AttachButton
entity={entity}
setSnackbarMessage={setSnackbarMessage}
setSnackbarOpen={setSnackbarOpen}
></AttachButton>
<Button onClick={onRefresh} variant="contained">
Refresh
@@ -169,7 +210,7 @@ export default function Client({
<h4>Service View</h4>
<CustomTable
loading={services_loading}
data={services?.data?.services}
data={services?.data}
configuration={ServiceTableConfig}
tkey="service-table"
/>
@@ -178,10 +219,25 @@ export default function Client({
onClose={closeSnackBar}
anchorOrigin={{ vertical: "top", horizontal: "center" }}
open={snackbarOpen}
autoHideDuration={1000}
autoHideDuration={5000}
>
<Alert severity="success" sx={{ width: "100%" }}>
{snackbarMessage}
<Alert
severity={snackbarMessage?.severity}
// Add some margin or padding to the Alert component
sx={{ width: "100%", margin: 1, padding: 2 }}
// Add an IconButton component with a CloseIcon inside the Alert component
action={
<IconButton
size="small"
aria-label="close"
color="inherit"
onClick={closeSnackBar}
>
<CloseIcon fontSize="small" />
</IconButton>
}
>
{snackbarMessage?.message}
</Alert>
</Snackbar>
</div>

View File

@@ -1,7 +1,7 @@
import { useContext } from "react";
import { AppContext } from "./useAppContext";
const useGetEntityByName = (nameOrDid: string) => {
const useGetEntityByNameOrDid = (nameOrDid: string) => {
const { data } = useContext(AppContext);
const allEntities = data.allEntities;
@@ -16,4 +16,4 @@ const useGetEntityByName = (nameOrDid: string) => {
return { entity, isLoading: false };
};
export default useGetEntityByName;
export default useGetEntityByNameOrDid;

View File

@@ -36,7 +36,6 @@ const CustomTable = ({ configuration, data, loading, tkey }: ICustomTable) => {
// cover use case if we want to render a component
if (render) renderedValue = render(value);
console.log("renderTableCell key", cellKey);
return (
<StyledTableCell key={cellKey} align="left">
{renderedValue}

View File

@@ -71,7 +71,6 @@ export const ServiceTableConfig = [
))}
</>
);
console.log("render", renderedValue);
return renderedValue;
},
},