forked from shaba/openuds
Fixed double open on meta poools
This commit is contained in:
parent
a255b52628
commit
f7cd474264
@ -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'])
|
||||
|
@ -102,6 +102,7 @@ class ManagedObjectModel(UUIDModel):
|
||||
return self._cachedInstance
|
||||
|
||||
klass = self.getType()
|
||||
|
||||
env = self.getEnvironment()
|
||||
obj = klass(env, values)
|
||||
self.deserialize(obj, values)
|
||||
|
@ -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:
|
||||
"""
|
||||
|
@ -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
|
||||
|
@ -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?
|
||||
|
@ -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
@ -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
|
||||
|
||||
|
@ -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]
|
||||
|
Loading…
x
Reference in New Issue
Block a user