Implement support for location operators
This commit is contained in:
parent
8c8892bbd4
commit
31a70eea5e
5 changed files with 108 additions and 3 deletions
|
|
@ -5,6 +5,7 @@ from core.controllers.ApplicationVersionController import ApplicationVersionCont
|
||||||
from core.controllers.ClientVersionController import ClientVersionController
|
from core.controllers.ClientVersionController import ClientVersionController
|
||||||
from core.controllers.ConfigurationController import ConfigurationController
|
from core.controllers.ConfigurationController import ConfigurationController
|
||||||
from core.controllers.LocationController import LocationController
|
from core.controllers.LocationController import LocationController
|
||||||
|
from core.controllers.OperatorController import OperatorController
|
||||||
from core.controllers.SubscriptionPlanController import SubscriptionPlanController
|
from core.controllers.SubscriptionPlanController import SubscriptionPlanController
|
||||||
from core.observers.ClientObserver import ClientObserver
|
from core.observers.ClientObserver import ClientObserver
|
||||||
from core.observers.ConnectionObserver import ConnectionObserver
|
from core.observers.ConnectionObserver import ConnectionObserver
|
||||||
|
|
@ -73,6 +74,8 @@ class ClientController:
|
||||||
# noinspection PyProtectedMember
|
# noinspection PyProtectedMember
|
||||||
ClientVersionController._sync(proxies=proxies)
|
ClientVersionController._sync(proxies=proxies)
|
||||||
# noinspection PyProtectedMember
|
# noinspection PyProtectedMember
|
||||||
|
OperatorController._sync(proxies=proxies)
|
||||||
|
# noinspection PyProtectedMember
|
||||||
LocationController._sync(proxies=proxies)
|
LocationController._sync(proxies=proxies)
|
||||||
# noinspection PyProtectedMember
|
# noinspection PyProtectedMember
|
||||||
SubscriptionPlanController._sync(proxies=proxies)
|
SubscriptionPlanController._sync(proxies=proxies)
|
||||||
|
|
|
||||||
22
core/controllers/OperatorController.py
Normal file
22
core/controllers/OperatorController.py
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
from core.models.Operator import Operator
|
||||||
|
from core.services.WebServiceApiService import WebServiceApiService
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
|
||||||
|
class OperatorController:
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get(id: int):
|
||||||
|
return Operator.find_by_id(id)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_all():
|
||||||
|
return Operator.all()
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _sync(proxies: Optional[dict] = None):
|
||||||
|
|
||||||
|
operators = WebServiceApiService.get_operators(proxies)
|
||||||
|
|
||||||
|
Operator.truncate()
|
||||||
|
Operator.save_many(operators)
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
from core.models.Model import Model
|
from core.models.Model import Model
|
||||||
|
from core.models.Operator import Operator
|
||||||
from dataclasses import dataclass, field
|
from dataclasses import dataclass, field
|
||||||
from dataclasses_json import config, Exclude
|
from dataclasses_json import config, Exclude
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
@ -12,6 +13,7 @@ _table_definition: str = """
|
||||||
'code' varchar,
|
'code' varchar,
|
||||||
'name' varchar,
|
'name' varchar,
|
||||||
'time_zone' varchar,
|
'time_zone' varchar,
|
||||||
|
'operator_id' int,
|
||||||
'provider_name' varchar,
|
'provider_name' varchar,
|
||||||
UNIQUE(code, country_code)
|
UNIQUE(code, country_code)
|
||||||
"""
|
"""
|
||||||
|
|
@ -34,16 +36,25 @@ class Location(Model):
|
||||||
metadata=config(exclude=Exclude.ALWAYS)
|
metadata=config(exclude=Exclude.ALWAYS)
|
||||||
)
|
)
|
||||||
time_zone: Optional[str] = None
|
time_zone: Optional[str] = None
|
||||||
|
operator_id: Optional[int] = field(
|
||||||
|
default=None,
|
||||||
|
metadata=config(exclude=Exclude.ALWAYS)
|
||||||
|
)
|
||||||
provider_name: Optional[str] = field(
|
provider_name: Optional[str] = field(
|
||||||
default=None,
|
default=None,
|
||||||
metadata=config(exclude=Exclude.ALWAYS)
|
metadata=config(exclude=Exclude.ALWAYS)
|
||||||
)
|
)
|
||||||
|
operator: Optional[Operator] = field(
|
||||||
|
default=None,
|
||||||
|
metadata=config(exclude=Exclude.ALWAYS)
|
||||||
|
)
|
||||||
available: Optional[bool] = field(
|
available: Optional[bool] = field(
|
||||||
default=False,
|
default=False,
|
||||||
metadata=config(exclude=Exclude.ALWAYS)
|
metadata=config(exclude=Exclude.ALWAYS)
|
||||||
)
|
)
|
||||||
|
|
||||||
def __post_init__(self):
|
def __post_init__(self):
|
||||||
|
self.operator = Operator.find_by_id(self.operator_id)
|
||||||
self.available = self.exists(self.country_code, self.code)
|
self.available = self.exists(self.country_code, self.code)
|
||||||
|
|
||||||
def is_available(self):
|
def is_available(self):
|
||||||
|
|
@ -76,7 +87,7 @@ class Location(Model):
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def save_many(locations):
|
def save_many(locations):
|
||||||
Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition)
|
Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition)
|
||||||
Model._insert_many('INSERT INTO locations VALUES(?, ?, ?, ?, ?, ?, ?)', Location.tuple_factory, locations)
|
Model._insert_many('INSERT INTO locations VALUES(?, ?, ?, ?, ?, ?, ?, ?)', Location.tuple_factory, locations)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def factory(cursor, row):
|
def factory(cursor, row):
|
||||||
|
|
@ -85,4 +96,4 @@ class Location(Model):
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def tuple_factory(location):
|
def tuple_factory(location):
|
||||||
return location.id, location.country_code, location.country_name, location.code, location.name, location.time_zone, location.provider_name
|
return location.id, location.country_code, location.country_name, location.code, location.name, location.time_zone, location.operator_id, location.provider_name
|
||||||
|
|
|
||||||
56
core/models/Operator.py
Normal file
56
core/models/Operator.py
Normal file
|
|
@ -0,0 +1,56 @@
|
||||||
|
from core.models.Model import Model
|
||||||
|
from dataclasses import dataclass
|
||||||
|
|
||||||
|
_table_name: str = 'operators'
|
||||||
|
|
||||||
|
_table_definition: str = """
|
||||||
|
'id' int UNIQUE,
|
||||||
|
'name' varchar,
|
||||||
|
'public_key' varchar,
|
||||||
|
'nostr_public_key' varchar,
|
||||||
|
'nostr_profile_reference' varchar,
|
||||||
|
'nostr_attestation_event_reference' varchar
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Operator(Model):
|
||||||
|
id: int
|
||||||
|
name: str
|
||||||
|
public_key: str
|
||||||
|
nostr_public_key: str
|
||||||
|
nostr_profile_reference: str
|
||||||
|
nostr_attestation_event_reference: str
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def find_by_id(id: int):
|
||||||
|
Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition)
|
||||||
|
return Model._query_one('SELECT * FROM operators WHERE id = ? LIMIT 1', Operator.factory, [id])
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def exists(id: int):
|
||||||
|
Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition)
|
||||||
|
return Model._query_exists('SELECT * FROM operators WHERE id = ?', [id])
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def all():
|
||||||
|
Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition)
|
||||||
|
return Model._query_all('SELECT * FROM operators', Operator.factory)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def truncate():
|
||||||
|
Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition, drop_existing=True)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def save_many(operators):
|
||||||
|
Model._create_table_if_not_exists(table_name=_table_name, table_definition=_table_definition)
|
||||||
|
Model._insert_many('INSERT INTO operators VALUES(?, ?, ?, ?, ?, ?)', Operator.tuple_factory, operators)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def factory(cursor, row):
|
||||||
|
local_fields = [column[0] for column in cursor.description]
|
||||||
|
return Operator(**{key: value for key, value in zip(local_fields, row)})
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def tuple_factory(operator):
|
||||||
|
return operator.id, operator.name, operator.public_key, operator.nostr_public_key, operator.nostr_profile_reference, operator.nostr_attestation_event_reference
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
from core.Constants import Constants
|
from core.Constants import Constants
|
||||||
from core.models.ClientVersion import ClientVersion
|
from core.models.ClientVersion import ClientVersion
|
||||||
from core.models.Location import Location
|
from core.models.Location import Location
|
||||||
|
from core.models.Operator import Operator
|
||||||
from core.models.Subscription import Subscription
|
from core.models.Subscription import Subscription
|
||||||
from core.models.SubscriptionPlan import SubscriptionPlan
|
from core.models.SubscriptionPlan import SubscriptionPlan
|
||||||
from core.models.invoice.Invoice import Invoice
|
from core.models.invoice.Invoice import Invoice
|
||||||
|
|
@ -51,6 +52,18 @@ class WebServiceApiService:
|
||||||
|
|
||||||
return client_versions
|
return client_versions
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_operators(proxies: Optional[dict] = None):
|
||||||
|
|
||||||
|
response = WebServiceApiService.__get('/operators', None, proxies)
|
||||||
|
operators = []
|
||||||
|
|
||||||
|
if response.status_code == requests.codes.ok:
|
||||||
|
for operator in response.json()['data']:
|
||||||
|
operators.append(Operator(operator['id'], operator['name'], operator['public_key'], operator['nostr_public_key'], operator['nostr_profile_reference'], operator['nostr_attestation']['event_reference']))
|
||||||
|
|
||||||
|
return operators
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_locations(proxies: Optional[dict] = None):
|
def get_locations(proxies: Optional[dict] = None):
|
||||||
|
|
||||||
|
|
@ -59,7 +72,7 @@ class WebServiceApiService:
|
||||||
|
|
||||||
if response.status_code == requests.codes.ok:
|
if response.status_code == requests.codes.ok:
|
||||||
for location in response.json()['data']:
|
for location in response.json()['data']:
|
||||||
locations.append(Location(location['country']['code'], location['code'], location['id'], location['country']['name'], location['name'], location['time_zone']['code'], location['provider']['name']))
|
locations.append(Location(location['country']['code'], location['code'], location['id'], location['country']['name'], location['name'], location['time_zone']['code'], location['operator']['id'], location['provider']['name']))
|
||||||
|
|
||||||
return locations
|
return locations
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue