mirror of
https://git.selfprivacy.org/SelfPrivacy/selfprivacy-rest-api.git
synced 2024-11-29 07:21:27 +00:00
refactor(service): break out DNS records into a separate resolver field
This commit is contained in:
parent
b257d7f39e
commit
fed5735b24
|
@ -1,14 +1,17 @@
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
import typing
|
from typing import Optional, List
|
||||||
import strawberry
|
|
||||||
import datetime
|
import datetime
|
||||||
|
import strawberry
|
||||||
|
|
||||||
from selfprivacy_api.graphql.common_types.backup import BackupReason
|
from selfprivacy_api.graphql.common_types.backup import BackupReason
|
||||||
from selfprivacy_api.graphql.common_types.dns import DnsRecord
|
from selfprivacy_api.graphql.common_types.dns import DnsRecord
|
||||||
|
|
||||||
from selfprivacy_api.services import get_service_by_id, get_services_by_location
|
from selfprivacy_api.services import get_service_by_id, get_services_by_location
|
||||||
from selfprivacy_api.services import Service as ServiceInterface
|
from selfprivacy_api.services import Service as ServiceInterface
|
||||||
|
from selfprivacy_api.services import ServiceDnsRecord
|
||||||
|
|
||||||
from selfprivacy_api.utils.block_devices import BlockDevices
|
from selfprivacy_api.utils.block_devices import BlockDevices
|
||||||
import selfprivacy_api.utils.network as network_utils
|
from selfprivacy_api.utils.network import get_ip4, get_ip6
|
||||||
|
|
||||||
|
|
||||||
def get_usages(root: "StorageVolume") -> list["StorageUsageInterface"]:
|
def get_usages(root: "StorageVolume") -> list["StorageUsageInterface"]:
|
||||||
|
@ -33,8 +36,8 @@ class StorageVolume:
|
||||||
used_space: str
|
used_space: str
|
||||||
root: bool
|
root: bool
|
||||||
name: str
|
name: str
|
||||||
model: typing.Optional[str]
|
model: Optional[str]
|
||||||
serial: typing.Optional[str]
|
serial: Optional[str]
|
||||||
type: str
|
type: str
|
||||||
|
|
||||||
@strawberry.field
|
@strawberry.field
|
||||||
|
@ -46,7 +49,7 @@ class StorageVolume:
|
||||||
@strawberry.interface
|
@strawberry.interface
|
||||||
class StorageUsageInterface:
|
class StorageUsageInterface:
|
||||||
used_space: str
|
used_space: str
|
||||||
volume: typing.Optional[StorageVolume]
|
volume: Optional[StorageVolume]
|
||||||
title: str
|
title: str
|
||||||
|
|
||||||
|
|
||||||
|
@ -54,7 +57,7 @@ class StorageUsageInterface:
|
||||||
class ServiceStorageUsage(StorageUsageInterface):
|
class ServiceStorageUsage(StorageUsageInterface):
|
||||||
"""Storage usage for a service"""
|
"""Storage usage for a service"""
|
||||||
|
|
||||||
service: typing.Optional["Service"]
|
service: Optional["Service"]
|
||||||
|
|
||||||
|
|
||||||
@strawberry.enum
|
@strawberry.enum
|
||||||
|
@ -86,6 +89,19 @@ def get_storage_usage(root: "Service") -> ServiceStorageUsage:
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def service_dns_to_graphql(record: ServiceDnsRecord):
|
||||||
|
# Do we really need 2 types for this?
|
||||||
|
# ServiceDNSRecord and DnsRecord are almost identical
|
||||||
|
return DnsRecord(
|
||||||
|
record_type=record.type,
|
||||||
|
name=record.name,
|
||||||
|
content=record.content,
|
||||||
|
ttl=record.ttl,
|
||||||
|
priority=record.priority,
|
||||||
|
display_name=record.display_name,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@strawberry.type
|
@strawberry.type
|
||||||
class Service:
|
class Service:
|
||||||
id: str
|
id: str
|
||||||
|
@ -98,16 +114,26 @@ class Service:
|
||||||
can_be_backed_up: bool
|
can_be_backed_up: bool
|
||||||
backup_description: str
|
backup_description: str
|
||||||
status: ServiceStatusEnum
|
status: ServiceStatusEnum
|
||||||
url: typing.Optional[str]
|
url: Optional[str]
|
||||||
dns_records: typing.Optional[typing.List[DnsRecord]]
|
|
||||||
|
@strawberry.field
|
||||||
|
def dns_records(self) -> Optional[List[DnsRecord]]:
|
||||||
|
service = get_service_by_id(self.id)
|
||||||
|
if service is None:
|
||||||
|
raise LookupError(f"no service {self.id}. Should be unreachable")
|
||||||
|
|
||||||
|
raw_records = service.get_dns_records(get_ip4(), get_ip6())
|
||||||
|
dns_records = [service_dns_to_graphql(record) for record in raw_records]
|
||||||
|
return dns_records
|
||||||
|
|
||||||
@strawberry.field
|
@strawberry.field
|
||||||
def storage_usage(self) -> ServiceStorageUsage:
|
def storage_usage(self) -> ServiceStorageUsage:
|
||||||
"""Get storage usage for a service"""
|
"""Get storage usage for a service"""
|
||||||
return get_storage_usage(self)
|
return get_storage_usage(self)
|
||||||
|
|
||||||
|
# TODO: fill this
|
||||||
@strawberry.field
|
@strawberry.field
|
||||||
def backup_snapshots(self) -> typing.Optional[typing.List["SnapshotInfo"]]:
|
def backup_snapshots(self) -> Optional[List["SnapshotInfo"]]:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
@ -133,23 +159,10 @@ def service_to_graphql_service(service: ServiceInterface) -> Service:
|
||||||
backup_description=service.get_backup_description(),
|
backup_description=service.get_backup_description(),
|
||||||
status=ServiceStatusEnum(service.get_status().value),
|
status=ServiceStatusEnum(service.get_status().value),
|
||||||
url=service.get_url(),
|
url=service.get_url(),
|
||||||
dns_records=[
|
|
||||||
DnsRecord(
|
|
||||||
record_type=record.type,
|
|
||||||
name=record.name,
|
|
||||||
content=record.content,
|
|
||||||
ttl=record.ttl,
|
|
||||||
priority=record.priority,
|
|
||||||
display_name=record.display_name,
|
|
||||||
)
|
|
||||||
for record in service.get_dns_records(
|
|
||||||
network_utils.get_ip4(), network_utils.get_ip6()
|
|
||||||
)
|
|
||||||
],
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def get_volume_by_id(volume_id: str) -> typing.Optional[StorageVolume]:
|
def get_volume_by_id(volume_id: str) -> Optional[StorageVolume]:
|
||||||
"""Get volume by id"""
|
"""Get volume by id"""
|
||||||
volume = BlockDevices().get_block_device(volume_id)
|
volume = BlockDevices().get_block_device(volume_id)
|
||||||
if volume is None:
|
if volume is None:
|
||||||
|
|
Loading…
Reference in a new issue