Fixed double open on meta poools

This commit is contained in:
Adolfo Gómez García 2022-01-30 18:21:32 +01:00
parent a255b52628
commit f7cd474264
10 changed files with 20 additions and 35 deletions

View File

@ -776,7 +776,8 @@ class UserServiceManager(metaclass=singleton.Singleton):
for t in userService.deployed_service.transports.order_by('priority'):
typeTrans = t.getType()
if (
t.validForIp(srcIp)
typeTrans
and t.validForIp(srcIp)
and typeTrans.supportsOs(os['OS'])
and t.validForOs(os['OS'])
):
@ -1003,7 +1004,8 @@ class UserServiceManager(metaclass=singleton.Singleton):
for t in q:
typeTrans = t.getType()
if (
t.getType()
typeTrans
and t.getType()
and t.validForIp(srcIp)
and typeTrans.supportsOs(os['OS'])
and t.validForOs(os['OS'])

View File

@ -102,6 +102,7 @@ class ManagedObjectModel(UUIDModel):
return self._cachedInstance
klass = self.getType()
env = self.getEnvironment()
obj = klass(env, values)
self.deserialize(obj, values)

View File

@ -82,11 +82,7 @@ class OSManager(ManagedObjectModel, TaggingMixin): # type: ignore
# We only need to get info from this, not access specific data (class specific info)
from uds.core import osmanagers
type_ = osmanagers.factory().lookup(self.data_type)
if type_:
return type_
# If invalid type, ensure at least we have "basic" model (that will fail if used, but not if referenced)
return osmanagers.OSManager
return osmanagers.factory().lookup(self.data_type) or osmanagers.OSManager
def remove(self) -> bool:
"""

View File

@ -78,12 +78,7 @@ class Provider(ManagedObjectModel, TaggingMixin): # type: ignore
"""
from uds.core import services # pylint: disable=redefined-outer-name
type_ = services.factory().lookup(self.data_type)
if type_:
return type_
return (
services.ServiceProvider
) # Basic Service implementation. Will fail if we try to use it, but will be ok to reference it
return services.factory().lookup(self.data_type) or services.ServiceProvider
def getInstance(
self, values: typing.Optional[typing.Dict[str, str]] = None

View File

@ -39,6 +39,7 @@ from uds.core.environment import Environment
from uds.core.util import log
from uds.core.util import unique
from uds.core.util import connection
from uds.core import services
from .managed_object_model import ManagedObjectModel
from .tag import TaggingMixin
@ -47,7 +48,6 @@ from .provider import Provider
# Not imported at runtime, just for type checking
if typing.TYPE_CHECKING:
from uds.core import services
from uds.models.service_pool import ServicePool
@ -157,15 +157,7 @@ class Service(ManagedObjectModel, TaggingMixin): # type: ignore
:note: We only need to get info from this, not access specific data (class specific info)
"""
prov: typing.Type['services.ServiceProvider'] = self.provider.getType()
type_ = prov.getServiceByType(self.data_type)
if type_:
return type_
raise Exception(
'Service type of {} is not recogniced by provider {}'.format(
self.data_type, prov
)
)
return prov.getServiceByType(self.data_type) or services.Service
def isInMaintenance(self) -> bool:
# orphaned services?

View File

@ -84,7 +84,7 @@ class Transport(ManagedObjectModel, TaggingMixin):
) -> 'transports.Transport':
return typing.cast('transports.Transport', super().getInstance(values=values))
def getType(self) -> 'typing.Type[transports.Transport]':
def getType(self) -> typing.Type['transports.Transport']:
"""
Get the type of the object this record represents.
@ -95,10 +95,7 @@ class Transport(ManagedObjectModel, TaggingMixin):
:note: We only need to get info from this, not access specific data (class specific info)
"""
v = transports.factory().lookup(self.data_type)
if not v:
raise Exception('transport not found')
return v
return transports.factory().lookup(self.data_type) or transports.Transport
def validForIp(self, ipStr: str) -> bool:
"""

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -63,6 +63,7 @@ if typing.TYPE_CHECKING:
logger = logging.getLogger(__name__)
def getServicesData(
request: 'ExtendedHttpRequestWithUser',
) -> typing.Dict[
@ -267,12 +268,10 @@ def getServicesData(
for t in sorted(
sPool.transports.all(), key=lambda x: x.priority
): # In memory sort, allows reuse prefetched and not too big array
try:
typeTrans = t.getType()
except Exception:
continue
typeTrans = t.getType()
if (
t.validForIp(request.ip)
typeTrans
and t.validForIp(request.ip)
and typeTrans.supportsOs(osName)
and t.validForOs(osName)
):
@ -410,6 +409,8 @@ def enableService(
userService.setProperty('accessedByClient', '0') # Reset accesed property to
typeTrans = trans.getType()
if not typeTrans:
raise Exception('Transport not found')
error = '' # No error

View File

@ -153,6 +153,7 @@ def userServiceStatus(
'running' if not ready
'ready' if is ready but not accesed by client
'accessed' if ready and accesed by UDS client
'error' if error is found (for example, intancing user service)
Note:
'''
ip: typing.Union[str, None, bool]