class CheckMessage(metaclass=OrderedClassMembers): """Run Check result message""" uri = XmlNodeAttributeProperty('chkrun:uri') typ = XmlNodeAttributeProperty('chkrun:type') short_text = XmlNodeAttributeProperty('chkrun:shortText') category = XmlNodeAttributeProperty('chkrun:category')
class CheckObject(metaclass=OrderedClassMembers): """ADT Check Object item for the run request""" uri = XmlNodeAttributeProperty('adtcore:uri') chkrun_version = XmlNodeAttributeProperty('chkrun:version', value='active') def __init__(self, uri): self.uri = uri
class CheckProperties(metaclass=OrderedClassMembers): """Run Check result properties""" checked = XmlNodeAttributeProperty('checkExecuted') activated = XmlNodeAttributeProperty('activationExecuted') generated = XmlNodeAttributeProperty('generationExecuted') def __init__(self): self.checked = None self.activated = None self.generated = None
class CheckReport(metaclass=OrderedClassMembers): """Group of messages for a single reporter""" reporter = XmlNodeAttributeProperty('chkrun:reporter') triggering_uri = XmlNodeAttributeProperty('chkrun:triggeringUri') status = XmlNodeAttributeProperty('chkrun:status') status_text = XmlNodeAttributeProperty('chkrun:statusText') messages = XmlNodeProperty('chkrun:checkMessageList') def __init__(self): self.messages = CheckMessageList()
class WorkList(metaclass=OrderedClassMembers): """atcworklist:worklist XML Node""" objtype = ADTObjectType(None, None, XMLNS_ATCWORKLIST, 'application/xml', None, 'worklist') worklist_id = XmlNodeAttributeProperty('atcworklist:id') timestamp = XmlNodeAttributeProperty('atcworklist:timestamp') used_objectset = XmlNodeAttributeProperty('atcworklist:usedObjectSet') object_set_is_complete = XmlNodeAttributeProperty('atcworklist:objectSetIsComplete') object_sets = XmlNodeProperty('atcworklist:objectSets', factory=WorkListObjectSetList) objects = XmlNodeProperty('atcworklist:objects', factory=ATCObjectList)
class TestDurationSettings(metaclass=OrderedClassMembers): """Parameters for selection of executed tests. Usage: run = RunConfiguration() run.options.test_durations.short = 'true' run.options.test_durations.medium = 'true' run.options.test_durations.long = 'true' """ short = XmlNodeAttributeProperty('short', value='true') medium = XmlNodeAttributeProperty('medium', value='true') long = XmlNodeAttributeProperty('long', value='true')
class TestRiskLevelSettings(metaclass=OrderedClassMembers): """Parameters for selection of executed tests. Usage: run = RunConfiguration() run.options.test_risk_levels.harmless = 'true' run.options.test_risk_levels.dangerous = 'true' run.options.test_risk_levels.critical = 'true' """ harmless = XmlNodeAttributeProperty('harmless', value='true') dangerous = XmlNodeAttributeProperty('dangerous', value='true') critical = XmlNodeAttributeProperty('critical', value='true')
def test_xml_node_attribute_property_init(self): template = XmlAttributeProperty('attribute', None) node = XmlNodeAttributeProperty('attribute') self.assertIsNone(node.default_value) self.assertEqual(node.name, template.name) self.assertEqual(node.deserialize, template.deserialize) self.assertEqual(node.version, template.version) node = XmlNodeAttributeProperty('attribute2', value='value', deserialize=False, version='v2') self.assertEqual(node.default_value, 'value') self.assertEqual(node.name, 'attribute2') self.assertFalse(node.deserialize) self.assertEqual(node.version, 'v2')
class TestDeterminationStrategy(metaclass=OrderedClassMembers): """Parameters for selection of executed tests Usage: run = RunConfiguration() run.options.test_determination_strategy.same_program = 'true' run.options.test_determination_strategy.assigned_tests = 'false' run.options.test_determination_strategy.append_assigned_tests_preview = 'true' """ same_program = XmlNodeAttributeProperty('sameProgram', value='true') assigned_tests = XmlNodeAttributeProperty('assignedTests', value='false') append_assigned_tests_preview = XmlNodeAttributeProperty( 'appendAssignedTestsPreview', value='true')
class ATCFinding(metaclass=OrderedClassMembers): """atcfinding:finding XML Node""" uri = XmlNodeAttributeProperty('adtcore:uri') location = XmlNodeAttributeProperty('atcfinding:location') priority = XmlNodeAttributeProperty('atcfinding:priority') check_id = XmlNodeAttributeProperty('atcfinding:checkId') check_title = XmlNodeAttributeProperty('atcfinding:checkTitle') message_id = XmlNodeAttributeProperty('atcfinding:messageId') message_title = XmlNodeAttributeProperty('atcfinding:messageTitle') exemption_approval = XmlNodeAttributeProperty('atcfinding:exemptionApproval') exemption_kind = XmlNodeAttributeProperty('atcfinding:exemptionKind')
class XmlNodeAttributePropertyADTObject(metaclass=OrderedClassMembers): def __init__(self): self.objtype = ADTObjectType( None, None, XMLNamespace('mock', 'https://example.org/mock'), 'application/xml', None, 'xmlnode') attribute = XmlNodeAttributeProperty('mock:attribute')
class CoverageOption(metaclass=OrderedClassMembers): """Enabled/Disabled coverage for an ABAP Unit Test run. Usage: run = RunConfiguration() run.external.coverage.active = 'false' """ active = XmlNodeAttributeProperty('active', value='false')
class WithNavigationUriOption(metaclass=OrderedClassMembers): """Enable/Disable Results Navigation URI. Usage: run = RunConfiguration() run.options.with_navigation_uri.enabled = 'false' """ enabled = XmlNodeAttributeProperty('enabled', value='false')
class DummyADTObjectWithVersions(ADTObject): OBJTYPE = ADTObjectType( None, None, XMLNamespace('mock', 'https://github.com/jfilak/sapcli/mock'), None, None, 'versioned') elemverfst = XmlNodeProperty('mock:elemverfst', kind=XmlElementKind.TEXT, version='V1') elemverboth = XmlNodeProperty('mock:elemverboth', kind=XmlElementKind.TEXT, version=['V1', 'V2']) attrverfst = XmlNodeAttributeProperty('mock:attrverfst', version='V1') attrverboth = XmlNodeAttributeProperty('mock:attrverboth', version=['V1', 'V2']) def __init__(self): super(DummyADTObjectWithVersions, self).__init__(None, None) self._elemverall = 'Init-elem-all' self.elemverfst = 'Init-elem-fst' self.elemverboth = 'Init-elem-both' self._attrverall = 'Init-attr-all' self.attrverfst = 'Init-attr-fst' self.attrverboth = 'Init-attr-both' @xml_element('mock:elemverall', kind=XmlElementKind.TEXT) def elemverall(self): return self._elemverall @elemverall.setter def elemverall(self, value): self._elemverall = value @xml_attribute('mock:attrverall') def attrverall(self): return self._attrverall @attrverall.setter def attrverall(self, value): self._attrverall = value
class UriTypeOption(metaclass=OrderedClassMembers): """URI Type of Objects in ABAP Unit Test run configuration. Usage: run = RunConfiguration() run.options.uri_type.value = UriTypeOptionValue.SEMANTIC """ value = XmlNodeAttributeProperty('value', value=UriTypeOptionValue.SEMANTIC)
class Binding(metaclass=OrderedClassMembers): """The node serviceBinding/binding""" # [ODATA] typ = XmlNodeAttributeProperty('srvb:type') # [V2,V4] version = XmlNodeAttributeProperty('srvb:version') # [0] category = XmlNodeAttributeProperty('srvb:category') # Holds Name of the Business Service Binding object implementation = XmlNodeProperty('srvb:implementation', factory=Implementation) @property def term(self): """Rerturns code for URL. The name 'term' comes from /sap/bc/adt/discovery. """ return f'{self.typ.lower()}{self.version.lower()}'
class CheckMessage(metaclass=OrderedClassMembers): """Run Check result message""" obj_descr = XmlNodeAttributeProperty('objDescr') typ = XmlNodeAttributeProperty('type') line = XmlNodeAttributeProperty('line') href = XmlNodeAttributeProperty('href') force_supported = XmlNodeAttributeProperty('forceSupported') short_text = XmlNodeProperty('shortText', factory=CheckMessageText) @property def is_error(self): """Returns true if the message is an error""" return self.typ == 'E' @property def is_warning(self): """Returns true if the message is an error""" return self.typ == 'W'
def test_xml_node_attribute_property_get_set(self): node = XmlNodeAttributeProperty('attribute3', value='value2') obj = node self.assertEqual(node.get(obj), 'value2') node.set(obj, 'foo2') self.assertEqual(node.get(obj), 'foo2') self.assertEqual(node.default_value, 'value2')
class ATCObject(metaclass=OrderedClassMembers): """atcobject:object XML Node""" objtype = ADTObjectType(None, None, XMLNS_ATCOBJECT, 'application/xml', None, 'object') uri = XmlNodeAttributeProperty('adtcore:uri') typ = XmlNodeAttributeProperty('adtcore:type') name = XmlNodeAttributeProperty('adtcore:name') package_name = XmlNodeAttributeProperty('adtcore:packageName') author = XmlNodeAttributeProperty('atcobject:author') object_type_id = XmlNodeAttributeProperty('atcobject:objectTypeId') findings = XmlNodeProperty('atcobject:findings', factory=ATCFindingList)
class Reporter(metaclass=OrderedClassMembers): """ADT Object Checks Run Reporter""" name = XmlNodeAttributeProperty('chkrun:name') supported_types = XmlListNodeProperty('chkrun:supportedType', kind=XmlElementKind.TEXT) def __init__(self, name=None): self.name = name def supports_type(self, obj_code): """Returns true if the give object code is supported""" return any((fnmatch(obj_code, styp) for styp in self.supported_types)) def supports_object(self, adt_obj): """Returns true if the given object is supported""" return self.supports_type(adt_obj.objtype.code)
class RunRequest(metaclass=OrderedClassMembers): """Worklist run Request""" objtype = ADTObjectType(None, None, XMLNS_ATC, 'application/xml', None, 'run') max_verdicts = XmlNodeAttributeProperty('maximumVerdicts') def __init__(self, obj_sets, max_verdicts): """:param obj_sets: An instance of :class:`ADTObjectSets` :param max_verdicts: A number """ self._sets = obj_sets self.max_verdicts = max_verdicts @xml_element('objectSets') def sets(self): """Set of objects which we want to check""" return self._sets
class WorkListObjectSet(metaclass=OrderedClassMembers): """atcworklist:objectSet XML Node""" name = XmlNodeAttributeProperty('atcworklist:name') title = XmlNodeAttributeProperty('atcworklist:title') kind = XmlNodeAttributeProperty('atcworklist:kind')
class ServiceBinding(ADTObject): """Business Service binding abstraction""" OBJTYPE = ADTObjectType( 'SRVB/SVB', 'businessservices/bindings', XMLNS_SRVB, [ 'application/vnd.sap.adt.businessservices.servicebinding.v2+xml', 'application/vnd.sap.adt.businessservices.servicebinding.v1+xml' ], {}, 'serviceBinding') release_supported = XmlNodeAttributeProperty('srvb:releaseSupported') published = XmlNodeAttributeProperty('srvb:published') bindingCreated = XmlNodeAttributeProperty('srvb:bindingCreated') services = XmlNodeProperty('srvb:services', factory=ServicesContainer) binding = XmlNodeProperty('srvb:binding', factory=Binding) def __init__(self, connection, name, metadata=None): super().__init__(connection, name, metadata) def find_service(self, service_name=None, service_version=None): """Returns a first service matching the given parameters. If any parameter is None, the parameter is not considered for comparison. """ if service_name and service_version: return next((item for item in self.services if item.definition.name == service_name and item.version == service_version), None) if service_name is not None: return next((item for item in self.services if item.definition.name == service_name), None) if service_version is not None: return next( (item for item in self.services if item.version == service_version), None) raise SAPCliError( "You must specify either Service Name or Service Version or both") def publish(self, service): """Publish service definition""" references = ADTObjectReferences() references.add_object(self) response = self.connection.execute( 'POST', f'businessservices/{self.binding.term}/publishjobs', params={ 'servicename': self.name, 'serviceversion': service.version, }, headers={ # pylint: disable=line-too-long 'Accept': 'application/xml, application/vnd.sap.as+xml;charset=UTF-8;dataname=com.sap.adt.StatusMessage', 'Content-Type': 'application/xml' }, body=Marshal().serialize(references)) return from_xml(StatusMessage(), response.text, root_elem="DATA")
class Implementation(metaclass=OrderedClassMembers): """The node serviceBinding/binding/implementation""" name = XmlNodeAttributeProperty('adtcore:name')
class DefinitionLink(metaclass=OrderedClassMembers): """The node serviceBinding/services/content""" version = XmlNodeAttributeProperty('srvb:version') release_state = XmlNodeAttributeProperty('srvb:releaseState') definition = XmlNodeProperty('srvb:serviceDefinition', factory=Definition)
class Definition(metaclass=OrderedClassMembers): """The node serviceBinding/services/content/serviceDefinition""" uri = XmlNodeAttributeProperty('adtcore:uri') typ = XmlNodeAttributeProperty('adtcore:type') name = XmlNodeAttributeProperty('adtcore:name')
class Reporter(metaclass=OrderedClassMembers): """ADT Object Checks Run Reporter""" name = XmlNodeAttributeProperty('chkrun:name') supported_types = XmlListNodeProperty('chkrun:supportedType', kind=XmlElementKind.TEXT)