1733 lines
47 KiB
Python
Raw Normal View History

2017-11-07 14:41:38 +01:00
from enum import IntEnum, unique
from openmtc.model import (Resource as Res, UnicodeAttribute, DatetimeAttribute,
Attribute, ListAttribute, Entity, EntityAttribute,
AnyURI, StringListAttribute, ContentResource)
from openmtc.model.exc import ModelTypeError
from futile import issubclass
LATEST_VERSION = "2a"
2017-11-07 14:41:38 +01:00
class OneM2MIntEnum(IntEnum):
def __str__(self):
return str(self.value)
class OneM2MEntity(Entity):
pass
class OneM2MContentResource(ContentResource, OneM2MEntity):
pass
class OneM2MResource(Res, OneM2MEntity):
__model_name__ = "onem2m"
__model_version__ = "2a"
2017-11-07 14:41:38 +01:00
################################################################################
# enumerationTypes
################################################################################
class ResourceTypeE(OneM2MIntEnum):
accessControlPolicy = 1
AE = 2
container = 3
contentInstance = 4
CSEBase = 5
delivery = 6
eventConfig = 7
execInstance = 8
group = 9
locationPolicy = 10
m2mServiceSubscription = 11
2017-11-07 14:41:38 +01:00
mgmtCmd = 12
mgmtObj = 13
node = 14
pollingChannel = 15
remoteCSE = 16
request = 17
schedule = 18
serviceSubscribedAppRule = 19
serviceSubscribedNode = 20
statsCollect = 21
statsConfig = 22
subscription = 23
semanticDescriptor = 24
notificationTargetMgmtPolicyRef = 25
notificationTargetPolicy = 26
policyDeletionRules = 27
flexContainer = 28
timeSeries = 29
timeSeriesInstance = 30
role = 31
token = 32
trafficPattern = 33
dynamicAuthorizationConsultation = 34
2017-11-07 14:41:38 +01:00
accessControlPolicyAnnc = 10001
AEAnnc = 10002
containerAnnc = 10003
contentInstanceAnnc = 10004
groupAnnc = 10009
locationPolicyAnnc = 10010
mgmtObjAnnc = 10013
nodeAnnc = 10014
remoteCSEAnnc = 10016
scheduleAnnc = 10018
semanticDescriptorAnnc = 10024
flexContainerAnnc = 10028
timeSeriesAnnc = 10029
timeSeriesInstanceAnnc = 10030
trafficPatternAnnc = 10033
dynamicAuthorizationConsultationAnnc = 10034
2017-11-07 14:41:38 +01:00
@unique
class CSETypeIDE(OneM2MIntEnum):
IN_CSE = 1
MN_CSE = 2
AEN_CSE = 3
@unique
class LocationSourceE(OneM2MIntEnum):
Network_based = 1
Device_based = 2
Sharing_based = 3
@unique
class StdEventCatsE(OneM2MIntEnum):
mmediate = 2
BestEffort = 3
Latest = 4
@unique
class OperationE(OneM2MIntEnum):
Create = 1
Retrieve = 2
Update = 3
Delete = 4
Notify = 5
@unique
class ResponseType(OneM2MIntEnum):
nonBlockingRequestSynch = 1
nonBlockingRequestAsynch = 2
blockingRequest = 3
# @unique
2018-10-05 15:31:05 +02:00
class ResultContentE(OneM2MIntEnum):
nothing = 0
attributes = 1
hierarchical_address = 2
hierarchical_address_and_attributes = 3
attributes_and_child_resources = 4
attributes_and_child_resource_references = 5
child_resource_references = 6
original_resource = 7
child_resources = 8
modified_attributes = 9
2017-11-07 14:41:38 +01:00
@unique
class DiscResTypeE(OneM2MIntEnum):
structured = 1
unstructured = 2
# TODO: responseStatusCode
@unique
class RequestStatusE(OneM2MIntEnum):
COMPLETED = 1
FAILED = 2
PENDING = 3
FORWARDED = 4
@unique
class MemberTypeE(OneM2MIntEnum):
mixed = 0
2017-11-07 14:41:38 +01:00
accessControlPolicy = 1
AE = 2
container = 3
contentInstance = 4
CSEBase = 5
delivery = 6
eventConfig = 7
execInstance = 8
group = 9
locationPolicy = 10
m2mServiceSubscription = 11
mgmtCmd = 12
mgmtObj = 13
node = 14
pollingChannel = 15
remoteCSE = 16
request = 17
schedule = 18
serviceSubscribedAppRule = 19
serviceSubscribedNode = 20
statsCollect = 21
statsConfig = 22
subscription = 23
semanticDescriptor = 24
notificationTargetMgmtPolicyRef = 25
notificationTargetPolicy = 26
policyDeletionRules = 27
flexContainer = 28
timeSeries = 29
timeSeriesInstance = 30
role = 31
2017-11-07 14:41:38 +01:00
token = 32
trafficPattern = 33
2017-11-07 14:41:38 +01:00
dynamicAuthorizationConsultation = 34
accessControlPolicyAnnc = 10001
AEAnnc = 10002
containerAnnc = 10003
contentInstanceAnnc = 10004
groupAnnc = 10009
locationPolicyAnnc = 10010
mgmtObjAnnc = 10013
nodeAnnc = 10014
remoteCSEAnnc = 10016
scheduleAnnc = 10018
semanticDescriptorAnnc = 10024
flexContainerAnnc = 10028
timeSeriesAnnc = 10029
timeSeriesInstanceAnnc = 10030
trafficPatternAnnc = 10033
2017-11-07 14:41:38 +01:00
dynamicAuthorizationConsultationAnnc = 10034
oldest = 20001
latest = 20002
2017-11-07 14:41:38 +01:00
@unique
class ConsistencyStrategyE(OneM2MIntEnum):
ABANDON_MEMBER = 1
ABANDON_GROUP = 2
SET_MIXED = 3
@unique
class CmdTypeE(OneM2MIntEnum):
RESET = 1
REBOOT = 2
UPLOAD = 3
DOWNLOAD = 4
SOFTWAREINSTALL = 5
SOFTWAREUNINSTALL = 6
SOFTWAREUPDATE = 7
@unique
class ExecModeTypeE(OneM2MIntEnum):
MMEDIATEONCE = 1
IMMEDIATEREPEAT = 2
RANDOMONCE = 3
RANDOMREPEAT = 4
@unique
class ExecStatusTypeE(OneM2MIntEnum):
INITIATED = 1
PENDING = 2
FINISHED = 3
CANCELLING = 4
CANCELLED = 5
STATUS_NON_CANCELLABLE = 6
@unique
class ExecResultTypeE(OneM2MIntEnum):
STATUS_REQUEST_UNSUPPORTED = 1
STATUS_REQUEST_DENIED = 2
STATUS_CANCELLATION_DENIED = 3
STATUS_INTERNAL_ERROR = 4
STATUS_INVALID_ARGUMENTS = 5
STATUS_RESOURCES_EXCEEDED = 6
STATUS_FILE_TRANSFER_FAILED = 7
STATUS_FILE_TRANSFER_SERVER_AUTHENTICATION_FAILURE = 8
STATUS_UNSUPPORTED_PROTOCOL = 9
STATUS_UPLOAD_FAILED = 10
STATUS_FILE_TRANSFER_FAILED_MULTICAST_GROUP_UNABLE_JOIN = 11
STATUS_FILE_TRANSFER_FAILED_SERVER_CONTACT_FAILED = 12
STATUS_FILE_TRANSFER_FAILED_FILE_ACCESS_FAILED = 13
STATUS_FILE_TRANSFER_FAILED_DOWNLOAD_INCOMPLETE = 14
STATUS_FILE_TRANSFER_FAILED_FILE_CORRUPTED = 15
STATUS_FILE_TRANSFER_FILE_AUTHENTICATION_FAILURE = 16
STATUS_FILE_TRANSFER_WINDOW_EXCEEDED = 19
STATUS_INVALID_UUID_FORMAT = 20
STATUS_UNKNOWN_EXECUTION_ENVIRONMENT = 21
STATUS_DISABLED_EXECUTION_ENVIRONMENT = 22
STATUS_EXECUTION_ENVIRONMENT_MISMATCH = 23
STATUS_DUPLICATE_DEPLOYMENT_UNIT = 24
STATUS_SYSTEM_RESOURCES_EXCEEDED = 25
STATUS_UNKNOWN_DEPLOYMENT_UNIT = 26
STATUS_INVALID_DEPLOYMENT_UNIT_STATE = 27
STATUS_INVALID_DEPLOYMENT_UNIT_UPDATE_DOWNGRADE_DISALLOWED = 28
STATUS_INVALID_DEPLOYMENT_UNIT_UPDATE_UPGRADE_DISALLOWED = 29
STATUS_INVALID_DEPLOYMENT_UNIT_UPDATE_VERSION_EXISTS = 30
@unique
class PendingNotificationE(OneM2MIntEnum):
sendLatest = 1
sendAllPending = 2
@unique
class NotificationContentTypeE(OneM2MIntEnum):
allAttributes = 1
modifiedAttributes = 2
resourceID = 3
@unique
class NotificationEventTypeE(OneM2MIntEnum):
updateOfResource = 1
deleteOfResource = 2
createOfDirectChildResource = 3
deleteOfDirectChildResource = 4
@unique
class StatusE(OneM2MIntEnum):
Successful = 1
Failure = 2
In_Process = 3
@unique
class BatteryStatusE(OneM2MIntEnum):
NORMAL = 1
CHARGING = 2
CHARGING_COMPLETE = 3
DAMAGED = 4
LOW_BATTERY = 5
NOT_INSTALLED = 6
UNKNOWN = 7
@unique
class ManagementDefinitionE(OneM2MIntEnum):
firmware = 1001
software = 1002
memory = 1003
areaNwkInfo = 1004
areaNwkDeviceInfo = 1005
battery = 1006
deviceInfo = 1007
deviceCapability = 1008
reboot = 1009
eventLog = 1010
cmdhPolicy = 1011
activeCmdhPolicy = 1012
cmdhDefaults = 1013
cmdhDefEcValue = 1014
cmdhEcDefParamValues = 1015
cmdhLimits = 1016
cmdhNetworkAccessRules = 1017
cmdhNwAccessRule = 1018
cmdhBuffer = 1019
Unspecified = 0
@unique
class LogTypeIdE(OneM2MIntEnum):
System = 1
Security = 2
Event = 3
Trace = 4
Panic = 5
@unique
class LogStatusE(OneM2MIntEnum):
Started = 1
Stopped = 2
Unknown = 3
NotPresent = 4
Error = 5
@unique
class EventTypeE(OneM2MIntEnum):
DATAOPERATION = 1
STORAGEBASED = 2
TIMERBASED = 3
@unique
class StatsRuleStatusTypeE(OneM2MIntEnum):
ACTIVE = 1
INACTIVE = 2
@unique
class StatModelTypeE(OneM2MIntEnum):
EVENTBASED = 1
@unique
class EncodingTypeE(OneM2MIntEnum):
plain = 0
base64String = 1
base64Binary = 2
# TODO(rkr): values are wrong?
# => see TS-0004, p.47, m2m:accessControlOperations,
# => more values in xsd enumerationTypes
@unique
class AccessControlOperationE(OneM2MIntEnum):
create = 1
retrieve = 2
update = 4
delete = 8
notify = 16
discover = 32
# TODO: SRole-ID
@unique
class FilterUsageE(OneM2MIntEnum):
Discovery = 1
ConditionalRetrieval = 2
@unique
class CountryCodeE(OneM2MIntEnum):
india = 91
usa = 01
@unique
class SecurityInfoTypeE(OneM2MIntEnum):
# TS-0004, p.49, Table 6.3.4.2.35-1
DynamicAuthorizationRequest = 1
DynamicAuthorizationResponse = 2
ReceiverE2ERandObjectRequest = 3
ReceiverE2ERandObjectResponse = 4
ESPrimObject = 5
ESCertKEMessage = 6
################################################################################
# commonTypes
################################################################################
# simple #######################################################################
class IDS(UnicodeAttribute):
pass
# TODO: nodeID
# TODO: deviceID
# TODO: externalID
class RequestIDS(UnicodeAttribute):
pass
class NhURIS(UnicodeAttribute):
pass
# TODO: acpType
class LabelsS(StringListAttribute):
pass
# TODO: triggerRecipientID
# TODO: listOfM2MID
# TODO: longMin-1
# TODO: listOfMinMax
# TODO: backOffParameters
# TODO: poaList
class TimestampS(DatetimeAttribute):
pass
# TODO: absRelTimestamp
# TODO: typeOfContent
# TODO: permittedMediaTypes
# TODO: serializations
# TODO: contentInfo
# TODO: eventCat
# TODO: eventCatWithDef
# TODO: listOfEventCat
# TODO: listOfEventCatWithDef
# TODO: scheduleEntry
class ListOfURIsS(StringListAttribute):
content_type = AnyURI
class AttributeListS(StringListAttribute):
pass
# complex ######################################################################
# TODO: deliveryMetaData
# TODO: aggregatedRequest
# TODO: metaInformation
# TODO: primitiveContent
class FilterCriteria(OneM2MEntity):
createdBefore = TimestampS()
createdAfter = TimestampS()
modifiedSince = TimestampS()
unmodifiedSince = TimestampS()
stateTagSmaller = Attribute(int) # xs:positiveInteger
stateTagBigger = Attribute(int) # xs:nonNegativeInteger
expireBefore = TimestampS()
expireAfter = TimestampS()
labels = StringListAttribute()
resourceType = ListAttribute(ResourceTypeE)
sizeAbove = Attribute(int) # xs:nonNegativeInteger
sizeBelow = Attribute(int) # xs:positiveInteger
contentType = UnicodeAttribute() # m2m:typeOfContent
attribute = ListAttribute() # m2m:attribute
filterUsage = EntityAttribute(FilterUsageE)
limit = Attribute(int) # xs:nonNegativeInteger
# TODO: attribute
# TODO: scheduleEntries
# TODO: actionStatus
# TODO: anyArgType
# TODO: resetArgsType
# TODO: rebootArgsType
# TODO: uploadArgsType
# TODO: downloadArgsType
# TODO: softwareInstallArgsType
# TODO: softwareUpdateArgsType
# TODO: softwareUninstallArgsType
# TODO: execReqArgsListType
# TODO: mgmtLinkRef
# TODO: childResourceRef
# TODO: responseTypeInfo
# TODO: operationResult
# TODO(rkr):
# "This is an xs:choice. A locationRegion shall contain either:
# 1) A countryCode element, in which case circRegion shall not appear, or
# 2) A circRegion element, in which case countryCode shall not appear"
class LocationRegionC(OneM2MEntity):
countryCode = ListAttribute(CountryCodeE)
circRegion = ListAttribute(float) # "list of 3 xs:float": values "represent" latitude. longitude, radius
class LabeledResource(OneM2MResource):
labels = LabelsS()
class ExpiringResource(OneM2MResource):
expirationTime = TimestampS(mandatory=False)
class AccessControlPolicyIDHolder(OneM2MResource):
accessControlPolicyIDs = StringListAttribute()
class DynamicAuthorizationConsultationIDHolder(OneM2MResource):
dynamicAuthorizationConsultationIDs = ListOfURIsS()
class SubscribableResource(OneM2MResource):
pass
class AnnounceableResource(OneM2MResource):
announceTo = ListOfURIsS()
announcedAttribute = UnicodeAttribute() # TODO
class AnnouncedResource(OneM2MResource):
link = Attribute(AnyURI)
class ResourceC(LabeledResource):
__child_types__ = ()
typename = None
resourceName = UnicodeAttribute(accesstype=Attribute.WO)
resourceType = EntityAttribute(ResourceTypeE, accesstype=Attribute.RO)
resourceID = IDS(accesstype=Attribute.RO)
parentID = NhURIS(accesstype=Attribute.RO)
lastModifiedTime = TimestampS(accesstype=Attribute.RO)
creationTime = TimestampS(accesstype=Attribute.RO)
childResource = ListAttribute()
@property
def name(self):
return self.resourceName
@property
def id(self):
return self.resourceID
def __repr__(self):
return "%s(path='%s', id='%s')" % (type(self).__name__, self.path,
self.id)
def has_child_type(self, resource_type):
return resource_type in self.__child_types__
ResourceC.childResource.content_type = ResourceC
class RegularResourceC(ResourceC, ExpiringResource, AccessControlPolicyIDHolder,
DynamicAuthorizationConsultationIDHolder):
pass
class AnnounceableResourceC(RegularResourceC, AnnounceableResource):
pass
class AnnouncedResourceC(RegularResourceC, AnnouncedResource):
pass
class AnnounceableSubordinateResourceC(ResourceC, ExpiringResource,
AnnounceableResource):
pass
class AnnouncedSubordinateResourceC(ResourceC, ExpiringResource,
AnnouncedResource):
pass
# TODO: mgmtResource
# TODO: announcedMgmtResource
################################################################################
# requestPrimitive
################################################################################
class RequestPrimitive(OneM2MEntity):
operation = EntityAttribute(OperationE)
to = Attribute(AnyURI)
from_ = IDS()
requestIdentifier = RequestIDS()
resourceType = EntityAttribute(ResourceTypeE)
name = UnicodeAttribute()
primitiveContent = UnicodeAttribute() # m2m:primitiveContent
role = UnicodeAttribute() # xs:anyType
originatingTimestamp = TimestampS()
requestExpirationTimestamp = TimestampS() # m2m::absRelTimestamp
resultExpirationTimestamp = TimestampS() # m2m::absRelTimestamp
operationExecutionTime = TimestampS() # m2m::absRelTimestamp
responseType = UnicodeAttribute() # m2m:responseTypeInfo
resultPersistence = TimestampS() # m2m::absRelTimestamp
resultContent = UnicodeAttribute() # m2m:resultContent
eventCategory = UnicodeAttribute() # m2m:eventCat
deliveryAggregation = Attribute(bool)
groupRequestIdentifier = UnicodeAttribute()
filterCriteria = EntityAttribute(FilterCriteria)
discoveryResultType = EntityAttribute(DiscResTypeE)
class AttributeList(OneM2MContentResource):
typename = "attributeList"
CONTENT = AttributeListS()
################################################################################
# responsePrimitive
################################################################################
class ResponsePrimitive(OneM2MEntity):
responseStatusCode = UnicodeAttribute() # m2m:responseStatusCode
requestIdentifier = RequestIDS()
primitiveContent = UnicodeAttribute() # m2m:primitiveContent
to = IDS()
from_ = IDS()
originatingTimestamp = TimestampS()
resultExpirationTimestamp = TimestampS() # m2m:absRelTimestamp
eventCategory = UnicodeAttribute() # m2m:eventCat
class Resource(OneM2MContentResource):
pass
class URIList(OneM2MContentResource):
typename = "URIList"
CONTENT = ListOfURIsS()
class AggregatedResponse(OneM2MEntity):
responsePrimitive = ListAttribute(ResponsePrimitive)
################################################################################
# notification
################################################################################
class OperationMonitorTypeC(OneM2MEntity):
operation = UnicodeAttribute() # m2m:operation
originator = UnicodeAttribute() # m2m:ID
class NotificationEventC(OneM2MEntity):
representation = EntityAttribute(ResourceC) # xs:anyType
operationMonitor = EntityAttribute(OperationMonitorTypeC)
notificationEventType = EntityAttribute(NotificationEventTypeE)
class Notification(OneM2MEntity):
notificationEvent = EntityAttribute(NotificationEventC)
verificationRequest = Attribute(bool)
subscriptionDeletion = Attribute(bool)
subscriptionReference = Attribute(AnyURI)
creator = UnicodeAttribute() # ID
notificationForwardingURI = Attribute(AnyURI)
class AggregatedNotification(OneM2MEntity):
"""See TS-0004 Table 7.4.1.1-2"""
notification = ListAttribute(Notification)
################################################################################
# subscription
################################################################################
class EventNotificationCriteria(OneM2MEntity):
"""See TS-0004 Table 6.3.2.3-1"""
createdBefore = TimestampS()
createdAfter = TimestampS()
modifiedSince = TimestampS()
unmodifiedSince = TimestampS()
stateTagSmaller = Attribute(int)
stateTagBigger = Attribute(int)
expireBefore = TimestampS()
expireAfter = TimestampS()
sizeAbove = Attribute(int)
sizeBelow = Attribute(int)
operationMonitor = UnicodeAttribute() # ListAttribute(m2m:operation)
# attribute = Attribute(int) # enum but to be defined in the standard
attribute = UnicodeAttribute() # ListAttribute(m2m:attribute)
notificationEventType = ListAttribute(NotificationEventTypeE)
class BatchNotify(OneM2MEntity):
pass # TODO
class RateLimit(OneM2MEntity):
pass # TODO
class Subscription(RegularResourceC):
""" See TS-0001 section 9.6.8
See TS-0004 Table 7.3.7.1-3"""
eventNotificationCriteria = EntityAttribute(EventNotificationCriteria)
expirationCounter = Attribute(int)
notificationURI = ListOfURIsS(mandatory=True)
groupID = Attribute(AnyURI)
notificationForwardingURI = Attribute(AnyURI)
batchNotify = EntityAttribute(BatchNotify)
rateLimit = EntityAttribute(RateLimit)
preSubscriptionNotify = Attribute(int, accesstype=Attribute.WO,
mandatory=False)
pendingNotification = Attribute(PendingNotificationE)
notificationStoragePriority = Attribute(int)
latestNotify = Attribute(bool)
notificationContentType = Attribute(NotificationContentTypeE)
notificationEventCat = UnicodeAttribute() # m2m:eventCat
creator = IDS(accesstype=Attribute.WO, mandatory=False)
subscriberURI = Attribute(AnyURI, accesstype=Attribute.WO, mandatory=False)
__child_types__ = (
# Schedule,
)
################################################################################
# accessControlPolicy
################################################################################
class AccessControlObjectDetailsC(OneM2MEntity):
# specifies to which resource type the rule applies
resourceType = EntityAttribute(ResourceTypeE)
# TODO(rkr): Child resource types listed in the childResourceType component are subject of
# TODO access control for the Create operation only. Once a child resource is created,
# TODO the Access Control Policies assigned directly to it apply.
# for create operation only, list of creatable child resources
childResourceType = ListAttribute(ResourceTypeE)
specializationID = Attribute(AnyURI) # xs:anyURI
class AccessControlIpAddressesC(OneM2MEntity):
ipv4Addresses = ListAttribute(AnyURI) # m2m:ipv4
ipv6Addresses = ListAttribute(AnyURI) # m2m:ipv6
class AccessControlContextsC(OneM2MEntity):
accessControlWindow = StringListAttribute() # m2m:scheduleEntry
accessControlIpAddresses = EntityAttribute(AccessControlIpAddressesC)
accessControlLocationRegion = ListAttribute(LocationRegionC) # m2m:locationRegion
class AccessControlRuleC(OneM2MEntity):
accessControlOriginators = ListOfURIsS() # m2m:listOfURIs # Mand
accessControlOperations = ListAttribute(AccessControlOperationE) # Mand
accessControlContexts = ListAttribute(AccessControlContextsC) # Opt
# accessControlContexts = EntityAttribute(AccessControlContextsC) # Opt
# TODO(rkr): currently default of the Flag is set to False;
# TODO if not explicitly set to True the authorization is performed without authentication
# TODO when authentication is used, it should maybe set to be True by default
accessControlAuthenticationFlag = Attribute(bool, default=False) # Opt
# TODO(rkr): "ObjectDetails" only described in TS-0001, 9.6.2.4, p.121 (which is version 2.10.0) as optional
# TODO parameter of an access control rule, but not in TS-0004 and not in xsd version 2.7.0.
# accessControlObjectDetails = ListAttribute(AccessControlObjectDetailsC)
class AccessControlPolicy(AnnounceableSubordinateResourceC,
SubscribableResource):
privileges = ListAttribute(AccessControlRuleC)
selfPrivileges = ListAttribute(AccessControlRuleC)
__child_types__ = (
Subscription,
)
class AccessControlPolicyAnnc(AnnouncedSubordinateResourceC,
SubscribableResource):
privileges = ListAttribute(AccessControlRuleC)
selfPrivileges = ListAttribute(AccessControlRuleC)
__child_types__ = (
Subscription,
)
################################################################################
# SemanticDescriptor
################################################################################
class SemanticDescriptor(AnnounceableResourceC, SubscribableResource):
# Has a default value : application/rdf+xml:1
descriptorRepresentation = StringListAttribute(mandatory=True)
semanticOpExec = Attribute(str)
descriptor = Attribute(str, mandatory=True)
ontologyRef = Attribute(AnyURI, mandatory=False)
relatedSemantics = StringListAttribute(mandatory=False)
__child_types__ = (
Subscription,
)
################################################################################
# dynamicAuthorization
################################################################################
class DynamicAuthorizationConsultation(AnnounceableResourceC):
dynamicAuthorizationEnabled = Attribute(bool, mandatory=True)
dynamicAuthorizationPoA = ListOfURIsS()
dynamicAuthorizationLifetime = TimestampS()
class OriginatorIPTypeC(OneM2MEntity):
ipv4Address = UnicodeAttribute() # m2m:ipv4
ipv6Address = UnicodeAttribute() # m2m:ipv6
# see "CDT-notification-v2_7_0.xsd" for securityInfoType and dynAuthDasResponse
class DynamicACPInfoC(OneM2MEntity):
grantedPrivileges = ListAttribute(AccessControlRuleC)
privilegesLifetime = TimestampS() # m2m:absRelTimestamp
# see "CDT-commonTypes-v2_7_0.xsd"
class DynAuthDasRequestC(OneM2MEntity):
originator = UnicodeAttribute() # m2m:ID
targetedResourceType = Attribute(ResourceTypeE)
operation = UnicodeAttribute() # m2m:operation
# operation = EntityAttribute(OperationE)
originatorIP = EntityAttribute(OriginatorIPTypeC)
originatorLocation = EntityAttribute(LocationRegionC)
requestTimestamp = TimestampS()
targetedResourceID = UnicodeAttribute() # xs:anyURI
# targetedResourceID = Attribute(AnyURI)
proposedPrivilegesLifetime = TimestampS()
# TODO(rkr): is this ok?
originatorRoleIDs = StringListAttribute() # list of m2m:roleID
roleIDsFromACPs = StringListAttribute() # list of m2m:roleID
tokenIDs = StringListAttribute() # list of m2m:tokeID
class DynAuthDasResponseC(OneM2MEntity):
# dynamicACPInfo = ListAttribute(DynamicACPInfoC)
dynamicACPInfo = EntityAttribute(DynamicACPInfoC)
tokens = StringListAttribute() # list of simpleType m2m:dynAuthJWT
# TODO(rkr): check if correct
class SecurityInfo(OneM2MEntity):
securityInfoType = Attribute(SecurityInfoTypeE)
# dasRequest = ListAttribute() # lists are wrong?
# dasResponse = ListAttribute()
dasRequest = EntityAttribute(DynAuthDasRequestC)
dasResponse = EntityAttribute(DynAuthDasResponseC)
esprimRandObject = ListAttribute() # m2m:receiverESPrimRandObject
esprimObject = ListAttribute() # m2m:e2eCompactJWE
escertkeMessage = ListAttribute() # xs:base64Binary
################################################################################
# remoteCSE
################################################################################
class RemoteCSE(AnnounceableResourceC, SubscribableResource):
"""See TS-0001 section 9.6.4"""
cseType = Attribute(CSETypeIDE, accesstype=Attribute.WO, mandatory=False)
pointOfAccess = StringListAttribute()
CSEBase = UnicodeAttribute(accesstype=Attribute.WO)
CSE_ID = UnicodeAttribute(accesstype=Attribute.WO) # TODO: CSE-ID (minus!)
M2M_Ext_ID = UnicodeAttribute() # TODO: M2M-Ext-ID (minus!)
Trigger_Recipient_ID = UnicodeAttribute() # TODO: Trigger-Recipient-ID
requestReachability = Attribute(bool)
nodeLink = UnicodeAttribute()
__child_types__ = (
Subscription,
SemanticDescriptor,
)
class RemoteCSEAnnc(AnnouncedResourceC, SubscribableResource):
cseType = Attribute(CSETypeIDE, accesstype=Attribute.WO, mandatory=False)
pointOfAccess = StringListAttribute()
CSEBase = UnicodeAttribute(accesstype=Attribute.WO)
CSE_ID = UnicodeAttribute(accesstype=Attribute.WO) # TODO: CSE-ID (minus!)
requestReachability = Attribute(bool)
nodeLink = UnicodeAttribute()
__child_types__ = (
Subscription,
SemanticDescriptor,
# TODO
)
################################################################################
# contentInstance
################################################################################
class ContentInstance(AnnounceableSubordinateResourceC,
SubscribableResource):
"""See TS-0001 section 9.6.7"""
2018-10-05 11:30:42 +02:00
stateTag = Attribute(int, accesstype=Attribute.RO)
2017-11-07 14:41:38 +01:00
creator = UnicodeAttribute() # m2m:ID
# contentInfo = typeOfContent(:EncodingType)
# typeOfContent => Media Types
# ex: application/json:1
contentInfo = UnicodeAttribute() # m2m:contentInfo
contentSize = Attribute(int, accesstype=Attribute.RO)
ontologyRef = UnicodeAttribute(accesstype=Attribute.WO)
content = Attribute(bytes, accesstype=Attribute.WO, mandatory=True)
__child_types__ = (
Subscription,
SemanticDescriptor,
)
class ContentInstanceAnnc(AnnouncedSubordinateResourceC):
2018-10-05 11:30:42 +02:00
stateTag = Attribute(int, accesstype=Attribute.RO)
2017-11-07 14:41:38 +01:00
contentInfo = UnicodeAttribute(EncodingTypeE) # m2m:contentInfo
contentSize = Attribute(int, accesstype=Attribute.WO)
ontologyRef = UnicodeAttribute(accesstype=Attribute.WO)
content = Attribute(bytes, accesstype=Attribute.WO, mandatory=True)
################################################################################
# container
################################################################################
class Container(AnnounceableResourceC, SubscribableResource):
"""See TS-0001 section 9.6.6"""
2018-10-05 11:30:42 +02:00
stateTag = Attribute(int, accesstype=Attribute.RO)
2017-11-07 14:41:38 +01:00
creator = UnicodeAttribute()
maxNrOfInstances = Attribute(int)
maxByteSize = Attribute(int)
maxInstanceAge = UnicodeAttribute(mandatory=False) # todo
currentNrOfInstances = Attribute(int, accesstype=Attribute.RO)
currentByteSize = Attribute(int, accesstype=Attribute.RO)
locationID = UnicodeAttribute()
ontologyRef = UnicodeAttribute()
latest = Attribute(ContentInstance, mandatory=False)
oldest = Attribute(ContentInstance, mandatory=False)
__child_types__ = (
ContentInstance,
Subscription,
SemanticDescriptor,
)
Container.__child_types__ = (
ContentInstance,
Container,
Subscription,
SemanticDescriptor,
)
class ContainerAnnc(AnnouncedResourceC, SubscribableResource):
2018-10-05 11:30:42 +02:00
stateTag = Attribute(int, accesstype=Attribute.RO)
2017-11-07 14:41:38 +01:00
maxNrOfInstances = Attribute(int)
maxByteSize = Attribute(int)
maxInstanceAge = UnicodeAttribute(mandatory=False) # todo
currentNrOfInstances = Attribute(int, accesstype=Attribute.RO)
currentByteSize = Attribute(int, accesstype=Attribute.RO)
locationID = UnicodeAttribute()
ontologyRef = UnicodeAttribute()
latest = Attribute(ContentInstance, mandatory=False)
__child_types__ = (
ContentInstance,
ContentInstanceAnnc,
Container,
Subscription,
SemanticDescriptor,
)
ContainerAnnc.__child_types__ = (
ContentInstance,
ContentInstanceAnnc,
Container,
ContainerAnnc,
Subscription,
SemanticDescriptor,
)
################################################################################
# AE
################################################################################
class AE(AnnounceableResourceC, SubscribableResource):
"""See TS-0001 section 9.6.5"""
typename = "AE"
appName = UnicodeAttribute()
App_ID = UnicodeAttribute(accesstype=Attribute.WO, mandatory=True)
AE_ID = UnicodeAttribute(accesstype=Attribute.RO) # m2m:ID
pointOfAccess = StringListAttribute() # m2m:poaList
ontologyRef = UnicodeAttribute() # xs:anyURI
nodeLink = UnicodeAttribute(accesstype=Attribute.RO) # xs:anyURI
requestReachability = Attribute(bool, mandatory=True)
contentSerialization = UnicodeAttribute() # TODO m2m:serializations
__child_types__ = (
Container,
# Group,
Subscription,
AccessControlPolicy,
# PollingChannel,
# Schedule,
DynamicAuthorizationConsultation,
SemanticDescriptor,
)
class AEAnnc(AnnouncedResourceC, SubscribableResource):
typename = "AEAnnc"
appName = UnicodeAttribute(accesstype=Attribute.WO)
App_ID = UnicodeAttribute()
AE_ID = UnicodeAttribute()
pointOfAccess = StringListAttribute()
ontologyRef = UnicodeAttribute()
nodeLink = UnicodeAttribute()
requestReachability = Attribute(bool)
__child_types__ = (
Container,
ContainerAnnc,
# Group,
# GroupAnnc,
Subscription,
# AccessControlPolicy,
# AccessControlPolicyAnnc,
# PollingChannel,
# Schedule,
SemanticDescriptor,
)
################################################################################
# CSEBase
################################################################################
class CSEBase(ResourceC, SubscribableResource, AccessControlPolicyIDHolder):
"""See TS-0001 section 9.6.3"""
typename = "CSEBase"
cseType = Attribute(CSETypeIDE, accesstype=Attribute.WO)
CSE_ID = UnicodeAttribute(accesstype=Attribute.WO) # TODO: CSE-ID (minus!)
supportedResourceType = StringListAttribute(content_type=ResourceTypeE,
accesstype=Attribute.RO)
pointOfAccess = StringListAttribute()
nodeLink = UnicodeAttribute()
__child_types__ = (
RemoteCSE,
# Node,
AE,
Container,
# Group,
AccessControlPolicy,
Subscription,
# MgmtCmd,
# LocationPolicy,
# StatsConfig,
# StatsCollect,
# Request,
# Delivery,
# Schedule,
# M2mServiceSubscriptionProfile,
DynamicAuthorizationConsultation,
SemanticDescriptor,
)
################################################################################
# misc
################################################################################
long_to_short_attribute_mapping = {
"accessControlPolicyIDs": "acpi",
"announcedAttribute": "aa",
"announceTo": "at",
"creationTime": "ct",
"expirationTime": "et",
"labels": "lbl",
"lastModifiedTime": "lt",
"parentID": "pi",
"resourceID": "ri",
"resourceType": "ty",
"stateTag": "st",
"resourceName": "rn",
"privileges": "pv",
"selfPrivileges": "pvs",
"App-ID": "api",
"AE-ID": "aei",
"appName": "apn",
"pointOfAccess": "poa",
"ontologyRef": "or",
"nodeLink": "nl",
"contentSerialization": "csz",
"creator": "cr",
"maxNrOfInstances": "mni",
"maxByteSize": "mbs",
"maxInstanceAge": "mia",
"currentNrOfInstances": "cni",
"currentByteSize": "cbs",
"locationID": "li",
"contentInfo": "cnf",
"contentSize": "cs",
"primitiveContent": "pc",
"content": "con",
"cseType": "cst",
"CSE-ID": "csi",
"supportedResourceType": "srt",
"notificationCongestionPolicy": "ncp",
"source": "sr",
"target": "tg",
"lifespan": "ls",
"eventCat": "ec",
"deliveryMetaData": "dmd",
"aggregatedRequest": "arq",
"eventID": "evi",
"eventType": "evt",
"evenStart": "evs",
"eventEnd": "eve",
"operationType": "opt",
"dataSize": "ds",
"execStatus": "exs",
"execResult": "exr",
"execDisable": "exd",
"execTarget": "ext",
"execMode": "exm",
"execFrequency": "exf",
"execDelay": "exy",
"execNumber": "exn",
"execReqArgs": "exra",
"execEnable": "exe",
"memberType": "mt",
"currentNrOfMembers": "cnm",
"maxNrOfMembers": "mnm",
"memberIDs": "mid",
"membersAccessControlPolicyIDs": "macp",
"memberTypeValidated": "mtv",
"consistencyStrategy": "csy",
"groupName": "gn",
"locationSource": "los",
"locationUpdatePeriod": "lou",
"locationTargetId": "lot",
"locationServer": "lor",
"locationContainerID": "loi",
"locationContainerName": "lon",
"locationStatus": "lost",
"serviceRoles": "svr",
"description": "dc",
"cmdType": "cmt",
"mgmtDefinition": "mgd",
"objectIDs": "onis",
"objectPaths": "obps",
"nodeID": "ni",
"hostedCSELink": "hcl",
"CSEBase": "cb",
"M2M-Ext-ID": "mei",
"Trigger-Recipient-ID": "tri",
"requestReachability": "rr",
"originator": "og",
"metaInformation": "mi",
"requestStatus": "rs",
"operationResult": "ol",
"operation": "opn",
"requestID": "rid",
"scheduleElement": "se",
"deviceIdentifier": "di",
"ruleLinks": "rlk",
"statsCollectID": "sci",
"collectingEntityID": "cei",
"collectedEntityID": "cdi",
"devStatus": "ss",
"statsRuleStatus": "srs",
"statModel": "sm",
"collectPeriod": "cp",
"eventNotificationCriteria": "enc",
"expirationCounter": "exc",
"notificationURI": "nu",
"groupID": "gpi",
"notificationForwardingURI": "nfu",
"batchNotify": "bn",
"rateLimit": "rl",
"preSubscriptionNotify": "psn",
"pendingNotification": "pn",
"notificationStoragePriority": "nsp",
"latestNotify": "ln",
"notificationContentType": "nct",
"notificationEventCat": "nec",
"subscriberURI": "su",
"version": "vr",
"URL": "url",
"update": "ud",
"updateStatus": "uds",
"install": "in",
"uninstall": "un",
"installStatus": "ins",
"activate": "act",
"deactivate": "dea",
"activeStatus": "acts",
"memAvailable": "mma",
"memTotal": "mmt",
"areaNwkType": "ant",
"listOfDevices": "idv",
"devId": "dvd",
"devType": "dvt",
"areaNwkId": "awi",
"sleepInterval": "sli",
"sleepDuration": "sld",
"listOfNeighbors": "lnh",
"batteryLevel": "btl",
"batteryStatus": "bts",
"deviceLabel": "dlb",
"manufacturer": "man",
"model": "mod",
"deviceType": "dty",
"fwVersion": "fwv",
"swVersion": "swv",
"hwVersion": "hwv",
"capabilityName": "can",
"attached": "att",
"capabilityActionStatus": "cas",
"enable": "ena",
"disable": "dis",
"currentState": "cus",
"reboot": "rbo",
"factoryReset": "far",
"logTypeId": "lgt",
"logData": "lgd",
"logActionStatus": "lgs",
"logStatus": "lgst",
"logStart": "lga",
"logStop": "lgo",
"firmwareName": "fwnnam",
"softwareName": "swn",
"cmdhPolicyName": "cpn",
"mgmtLink": "cmlk",
"activeCmdhPolicyLink": "acmlk",
"order": "od",
"defEcValue": "dev",
"requestOrigin": "ror",
"requestContext": "rct",
"requestContextNotification": "rcn",
"requestCharacteristics": "rch",
"applicableEventCategories": "aecs",
"applicableEventCategory": "aec",
"defaultRequestExpTime": "dget",
"defaultResultExpTime": "dset",
"defaultOpExecTime": "doet",
"defaultRespPersistence": "drp",
"defaultDelAggregation": "dda",
"limitsEventCategory": "lec",
"limitsRequestExpTime": "lget",
"limitsResultExpTime": "lset",
"limitsOpExecTime": "loet",
"limitsRespPersistence": "lrp",
"limitsDelAggregation": "lda",
"targetNetwork": "ttn",
"minReqVolume": "mrv",
"backOffParameters": "bop",
"otherConditions": "ohc",
"maxBufferSize": "mbfs",
"storagePriority": "sgp",
"applicableCredIDs": "apci",
"allowedApp-IDs": "aai",
"allowedAEs": "aae",
"dynamicAuthorizationConsultationIDs": "daci",
"dynamicAuthorizationEnabled": "dae",
"dynamicAuthorizationPoA": "dap",
"dynamicAuthorizationLifetime": "dal",
# TODO (rkr): resourceType is specified in Table 8.2.3-267, "Resource attribute short names", two times with
# TODO different short names "ty" and "acodTy"
# there is some issue paper from oneM2M where there have found out that this is an issue with usual resource type
# "resourceType": "acodTy"
"descriptorRepresentation": "dcrp",
"semanticOpExec": "soe",
"descriptor": "dsp",
"relatedSemantics": "rels",
}
short_to_long_attribute_mapping = {v: k for k, v in
long_to_short_attribute_mapping.items()}
def get_long_attribute_name(n):
return short_to_long_attribute_mapping.get(n)
def get_short_attribute_name(n):
return long_to_short_attribute_mapping.get(n)
long_to_short_resource_mapping = {
"accessControlPolicy": "acp",
"accessControlPolicyAnnc": "acpA",
"AE": "ae",
"AEAnnc": "aeA",
"container": "cnt",
"containerAnnc": "cntA",
"latest": "la",
"oldest": "ol",
"contentInstance": "cin",
"contentInstanceAnnc": "cinA",
"CSEBase": "cb",
"delivery": "dlv",
"eventConfig": "evcg",
"execInstance": "exin",
"fanOutPoint": "fopt",
"group": "grp",
"groupAnnc": "grpA",
"locationPolicy": "lcp",
"locationPolicyAnnc": "lcpA",
"m2mServiceSubscriptionProfile": "mssp",
"mgmtCmd": "mgc",
"mgmtObj": "mgo",
"mgmtObjAnnc": "mgoA",
"node": "nod",
"nodeAnnc": "nodA",
"pollingChannel": "pch",
"pollingChannelURI": "pcu",
"remoteCSE": "csr",
"remoteCSEAnnc": "csrA",
"request": "req",
"schedule": "sch",
"scheduleAnnc": "schA",
"serviceSubscribedAppRule": "asar",
"serviceSubscribedNode": "svsn",
"statsCollect": "stcl",
"statsConfig": "stcg",
"subscription": "sub",
"semanticDescriptor": "smd",
"firmware": "fwr",
"firmwareAnnc": "fwrA",
"software": "swr",
"softwareAnnc": "swrA",
"memory": "mem",
"memoryAnnc": "memA",
"areaNwkInfo": "ani",
"areaNwkInfoAnnc": "aniA",
"areaNwkDeviceInfo": "andi",
"areaNwkDeviceInfoAnnc": "andiA",
"battery": "bat",
"batteryAnnc": "batA",
"deviceInfo": "dvi",
"deviceInfoAnnc": "dviA",
"deviceCapability": "dvc",
"deviceCapabilityAnnc": "dvcA",
"reboot": "rbo",
"rebootAnnc": "rboA",
"eventLog": "evl",
"eventLogAnnc": "evlA",
"cmdhPolicy": "cmp",
"activeCmdhPolicy": "acmp",
"cmdhDefaults": "cmdf",
"cmdhDefEcValue": "cmdv",
"cmdhEcDefParamValues": "cmpv",
"cmdhLimits": "cml",
"cmdhNetworkAccessRules": "cmnr",
"cmdhNwAccessRule": "cmwr",
"cmdhBuffer": "cmbf",
"dynamicAuthorizationConsultation": "dac"
}
short_to_long_resource_mapping = {v: k for k, v in
long_to_short_resource_mapping.items()}
def get_long_resource_name(n):
return short_to_long_resource_mapping.get(n)
def get_short_resource_name(n):
return long_to_short_resource_mapping.get(n)
long_to_short_member_mapping = {
"createdBefore": "crb",
"createdAfter": "cra",
"modifiedSince": "ms",
"unmodifiedSince": "us",
"stateTagSmaller": "sts",
"stateTagBigger": "stb",
"expireBefore": "exb",
"expireAfter": "exa",
"labels": "lbl",
"resourceType": "ty",
"sizeAbove": "sza",
"sizeBelow": "szb",
"contentType": "cty",
"limit": "lim",
"attribute": "atr",
"notificationEventType": "net",
"operationMonitor": "om",
"representation": "rep",
"filterUsage": "fu",
"eventCatType": "ect",
"eventCatNo": "ecn",
"number": "num",
"duration": "dur",
"notification": "sgn",
"notificationEvent": "nev",
"verificationRequest": "vrq",
"subscriptionDeletion": "sud",
"subscriptionReference": "sur",
"creator": "cr",
"notificationForwardingURI": "nfu",
"operation": "opr",
"originator": "org",
"accessId": "aci",
"MSISDN": "msd",
"action": "acn",
"status": "sus",
"childResource": "ch",
"accessControlRule": "acr",
"accessControlOriginators": "acor",
"accessControlOperations": "acop",
"accessControlContexts": "acco",
"accessControlWindow": "actw",
"accessControlIpAddresses": "acip",
"ipv4Addresses": "ipv4",
"ipv6Addresses": "ipv6",
"accessControlLocationRegion": "aclr",
"countryCode": "accc",
"circRegion": "accr",
"name": "nm",
"value": "val",
"type": "typ",
"maxNrOfNotify": "mnn",
"timeWindow": "tww",
"scheduleEntry": "sce",
"aggregatedNotification": "agn",
"attributeList": "atrl",
"aggregatedResponse": "agr",
"resource": "rce",
"URIList": "uril",
"anyArg": "any",
"fileType": "ftyp",
"URL": "url",
"username": "unm",
"password": "pwd",
"fileSize": "fsi",
"targetFile": "tgf",
"delaySeconds": "dss",
"successURL": "surl",
"startTime": "stt",
"completeTime": "cpt",
"UUID": "uuid",
"executionEnvRef": "eer",
"version": "vr",
"reset": "rst",
"reboot": "rbo",
"upload": "uld",
"download": "dld",
"softwareInstall": "swin",
"softwareUpdate": "swup",
"softwareUninstall": "swun",
"tracingOption": "tcop",
"tracingInfo": "tcin",
"responseTypeValue": "rtv",
"notificationURI": "nu",
"accessControlAuthenticationFlag": "acaf",
"ipv4Address": "ip4",
"ipv6Address": "ip6",
"specializationID": "spid",
"accessControlObjectDetails": "acod",
"childResourceType": "chty",
"targetedResourceType": "trt",
"originatorIP": "oip",
"originatorLocation": "olo",
"originatorRoleIDs": "orid",
"requestTimestamp": "rts",
"targetedResourceID": "trid",
"proposedPrivilegesLifetime": "ppl",
"roleIDsFromACPs": "rfa",
"tokenIDs": "tids",
"dynamicACPInfo": "dai",
"grantedPrivileges": "gp",
"privilegesLifetime": "pl",
"tokens": "tkns",
"securityInfo": "seci",
"securityInfoType": "sit",
"dasRequest": "dreq",
"dasResponse": "dres",
"esprimRandObject": "ero",
"esprimObject": "epo",
"escertkeMessage": "eckm"
}
short_to_long_member_mapping = {v: k for k, v in
long_to_short_member_mapping.items()}
def get_long_member_name(n):
return short_to_long_member_mapping.get(n)
def get_short_member_name(n):
return long_to_short_member_mapping.get(n)
long_to_short_root_mapping = {
"requestPrimitive": "rqp",
"responsePrimitive": "rsp"
}
short_to_long_root_mapping = {v: k for k, v in
long_to_short_root_mapping.items()}
def get_long_root_name(n):
return short_to_long_root_mapping.get(n)
def get_short_root_name(n):
return long_to_short_root_mapping.get(n)
long_to_short_parameter_mapping = {
"operation": "op",
"to": "to",
"from": "fr",
"requestIdentifier": "rqi",
"resourceType": "ty",
"primitiveContent": "pc",
"role": "rol",
"originatingTimestamp": "ot",
"requestExpirationTimestamp": "rqet",
"resultExpirationTimestamp": "rset",
"operationExecutionTime": "oet",
"responseType": "rt",
"resultPersistence": "rp",
"resultContent": "rcn",
"eventCategory": "ec",
"deliveryAggregation": "da",
"groupRequestIdentifier": "gid",
"filterCriteria": "fc",
"discoveryResultType": "drt",
"responseStatusCode": "rsc"
}
short_to_long_parameter_mapping = {v: k for k, v in
long_to_short_parameter_mapping.items()}
def get_long_parameter_name(n):
return short_to_long_parameter_mapping.get(n)
def get_short_parameter_name(n):
return long_to_short_parameter_mapping.get(n)
_all_types = {k: v for k, v in globals().iteritems()
if issubclass(v, OneM2MEntity) and not v.__subclasses__()}
_all_types_short = {}
_all_types_long = {}
for k, v in _all_types.iteritems():
if get_short_resource_name(k):
long_name = k
short_name = get_short_resource_name(k)
elif get_short_attribute_name(k):
long_name = k
short_name = get_short_attribute_name(k)
elif get_short_member_name(k):
long_name = k
short_name = get_short_member_name(k)
elif get_short_root_name(k):
long_name = k
short_name = get_short_root_name(k)
elif get_short_resource_name(k[0].lower() + k[1:]):
long_name = k[0].lower() + k[1:]
short_name = get_short_resource_name(long_name)
elif get_short_attribute_name(k[0].lower() + k[1:]):
long_name = k[0].lower() + k[1:]
short_name = get_short_attribute_name(long_name)
elif get_short_member_name(k[0].lower() + k[1:]):
long_name = k[0].lower() + k[1:]
short_name = get_short_member_name(long_name)
elif get_short_root_name(k[0].lower() + k[1:]):
long_name = k[0].lower() + k[1:]
short_name = get_short_root_name(long_name)
else:
continue
_all_types_short[short_name] = v
_all_types_long[long_name] = v
_resource_types = {k: v for k, v in _all_types.iteritems()
if issubclass(v, ResourceC)}
_resource_types_short = {}
_resource_types_long = {}
for k, v in _resource_types.iteritems():
if get_short_resource_name(k):
long_name = k
short_name = get_short_resource_name(k)
elif get_short_resource_name(k[0].lower() + k[1:]):
long_name = k[0].lower() + k[1:]
short_name = get_short_resource_name(long_name)
else:
continue
_resource_types_short[short_name] = v
_resource_types_long[long_name] = v
def get_onem2m_type(typename):
try:
try:
return _all_types_short[typename]
except KeyError:
return _all_types_long[typename]
except KeyError:
raise ModelTypeError("Not a valid type: %s" % (typename,))
def get_onem2m_resource_type(typename):
try:
try:
return _resource_types_short[typename]
except KeyError:
return _resource_types_long[typename]
except KeyError:
raise ModelTypeError("Not a valid resource type: %s" % (typename,))
def get_onem2m_types():
return _all_types.values()
def get_onem2m_resource_types():
return _resource_types.values()