def test_manifest_xsf_03(self): "Test M2M field." body_map = {'user_id': 1, 'language': ''} backend = self._get_backend( ContactFakeBackend, subject='create_contact', body_map=body_map, model=Contact, ) builder = self._get_builder(backend) content = builder._render_manifest_xsf(self.request) self.assertEqual( re.search(r'xmlns:my="(?P<ns>[\w\d\-:/\.]*)"', content)['ns'], builder.get_namespace() ) # Can't be got with ElementTree, because it's a namespace xsf = '{http://schemas.microsoft.com/office/infopath/2003/solutionDefinition}' xml2edit_node = XML(content).find(f'{xsf}views/{xsf}view/{xsf}editing/{xsf}xmlToEdit') self.assertIsNotNone(xml2edit_node) self.assertEqual('language', xml2edit_node.get('name')) self.assertEqual( '/my:CremeCRMCrudity/my:language/my:language_value', xml2edit_node.get('item') ) self.assertEqual('xTextList', xml2edit_node.find(f'{xsf}editWith').get('component'))
def test_svg(self): sch = ( b"|RECORD=15|LOCATION.X=100|LOCATION.Y=200|XSIZE=40|YSIZE=30" b"|COLOR=7846673|AREACOLOR=3381725|ISSOLID=T|OWNERPARTID=-1" b"|UNIQUEID=\x00", b"|RECORD=7" b"|LOCATIONCOUNT=3|X1=100|Y1=100|X2=110|Y2=120|X3=120|Y3=100" b"|ISSOLID=T|COLOR=16711680|AREACOLOR=16777215" b"|OWNERPARTID=-1|ISNOTACCESIBLE=T\x00", ) output = XML(self.convert(sch)) SVG = "{http://www.w3.org/2000/svg}" self.assertEqual(output.tag, SVG + "svg") for [dimension, expected] in (("width", 11.506), ("height", 7.606)): with self.subTest(dimension): value = output.get(dimension) self.assertTrue(value.endswith("in")) self.assertAlmostEqual(float(value[:-2]), expected, 3) for [name, value] in ( ("viewBox", "-0.3,-760.3 1150.6,760.6"), ("stroke-width", "1"), ): with self.subTest(name): self.assertEqual(output.get(name), value) [style, defs, border, sheet, triangle] = output self.assertEqual(style.tag, SVG + "style") self.assertEqual(defs.tag, SVG + "defs") self.assertEqual(border.tag, SVG + "g") self.assertCountEqual(border.items(), (("transform", "translate(0, -760)"), )) self.assertEqual(sheet.tag, SVG + "rect") self.assertCountEqual(sheet.items(), ( ("transform", "translate(100.0, -200.0)"), ("width", "40"), ("height", "30"), ("stroke-width", "0.6"), ("class", "solid"), ("style", "fill: #DD9933; stroke: #11BB77"), )) self.assertEqual(triangle.tag, SVG + "polygon") self.assertCountEqual(triangle.items(), ( ("points", "100.0,-100.0 110.0,-120.0 120.0,-100.0"), ("class", "solid"), ("stroke-width", "0.6"), ("style", "fill: #FFFFFF; stroke: #0000FF"), ))
def test_svg(self): sch = ( b"|RECORD=15|LOCATION.X=100|LOCATION.Y=200|XSIZE=40|YSIZE=30" b"|COLOR=7846673|AREACOLOR=3381725|ISSOLID=T|OWNERPARTID=-1" b"|UNIQUEID=\x00", b"|RECORD=7" b"|LOCATIONCOUNT=3|X1=100|Y1=100|X2=110|Y2=120|X3=120|Y3=100" b"|ISSOLID=T|COLOR=16711680|AREACOLOR=16777215" b"|OWNERPARTID=1|ISNOTACCESIBLE=T\x00", ) output = XML(self.convert(sch)) SVG = "{http://www.w3.org/2000/svg}" self.assertEqual(output.tag, SVG + "svg") for [dimension, expected] in (("width", 11.506), ("height", 7.606)): with self.subTest(dimension): value = output.get(dimension) self.assertTrue(value.endswith("in")) self.assertAlmostEqual(float(value[:-2]), expected, 3) for [name, value] in ( ("viewBox", "-0.3,-760.3 1150.6,760.6"), ("stroke-width", "1"), ): with self.subTest(name): self.assertEqual(output.get(name), value) [style, defs, border, sheet, triangle] = output self.assertEqual(style.tag, SVG + "style") self.assertEqual(defs.tag, SVG + "defs") self.assertEqual(border.tag, SVG + "g") self.assertCountEqual(border.items(), ( ("transform", "translate(0, -760)"), )) self.assertEqual(sheet.tag, SVG + "rect") self.assertCountEqual(sheet.items(), ( ("transform", "translate(100.0, -200.0)"), ("width", "40"), ("height", "30"), ("stroke-width", "0.6"), ("class", "solid"), ("style", "fill: #DD9933; stroke: #11BB77"), )) self.assertEqual(triangle.tag, SVG + "polygon") self.assertCountEqual(triangle.items(), ( ("points", "100.0,-100.0 110.0,-120.0 120.0,-100.0"), ("class", "solid"), ("stroke-width", "0.6"), ("style", "fill: #FFFFFF; stroke: #0000FF"), ))
def post(self, request, *args, **kwargs): notify_xml = XML(request.raw_post_data) self.notify_type = self._extract_notify_type(notify_xml) self.notify_type_const = \ GoogleOrder.trans_notify_type_const(self.notify_type) ts_utc = dt_parse(notify_xml.findtext(xpq_timestamp)) self.timestamp = self._trans_utc_to_local(ts_utc) self.serial_number = notify_xml.get('serial-number') self.order_number = long(notify_xml.findtext(xpq_order_number)) backend_class = get_backend_class(ngc_settings.BACKEND) self.backend = backend_class(request, notify_xml=notify_xml) self.cart = self.backend.get_cart() # if we don't find a cart, we do actually go ahead and continue # processing. The idea is the data npo_google_checkout holds should # match all of what google checkout holds msg_target = "cart '{0}'".format(self.cart) \ if self.cart else 'unknown cart' msg = "GC {0} #{1} received for {2}.".format( self.notify_type, self.serial_number, msg_target), logger.info(msg, extra={'request': request}) # notification type-specific handling if self.notify_type_const == GoogleOrder.NEW_ORDER_NOTIFY_TYPE: self._post_new_order(notify_xml) else: try: order = GoogleOrder.objects.get(number=self.order_number) except GoogleOrder.DoesNotExist: order = None else: order.last_notify_type = self.notify_type_const order.last_notify_dt = self.timestamp if not order: # silently ignore notifications for orders we didn't see the # new-order-notification for pass elif self.notify_type_const == GoogleOrder.ORDER_STATE_CHANGE_NOTIFY_TYPE: self._post_order_state_change(order, notify_xml) elif self.notify_type_const == GoogleOrder.RISK_INFORMATION_NOTIFY_TYPE: self._post_risk_informaiton(order, notify_xml) elif self.notify_type_const == GoogleOrder.AUTHORIZATION_AMOUNT_NOTIFY_TYPE: self._post_authorization_amount(order, notify_xml) elif self.notify_type_const == GoogleOrder.CHARGE_AMOUNT_NOTIFY_TYPE: self._post_charge_amount(order, notify_xml) else: msg = "Unrecognized notification '{0}' recieved". \ format(self.notify_type) raise RuntimeError(msg) return super(NotificationListenerView, self).get( request, *args, **kwargs)
def printXml(text): xml = XML(text) print "%s\t%.2f\t%.2f\t%s" % ( xml.get("name"), eval(xml.find("price").text), eval(xml.find("offer").text), "up" if xml.find("up").text == "True" else "down", )
def test_myschema_xsd02(self): "With Document" body_map = {'user_id': 1, 'title': '', 'description': '', 'linked_folder': '', 'filedata': '', } backend = self._get_backend(DocumentFakeBackend, subject='create_doc', body_map=body_map, model=Document ) builder = self._get_builder(backend) xsd = '{http://www.w3.org/2001/XMLSchema}' content = builder._render_myschema_xsd(self.request) xml = XML(content) self.assertEqual(builder.namespace, xml.get('targetNamespace')) self.assertEqual(builder.namespace, re.search(r'xmlns:my="(?P<ns>[\w\d\-:/\.]*)"', content).groupdict()['ns'] ) # Can't be got with ElementTree, because it's a namespace ref_attrs = {node.get('ref') for node in xml.findall('{xsd}element/{xsd}complexType/{xsd}sequence/{xsd}element'.format(xsd=xsd)) } expected_ref_attrs = {'my:{}'.format(key) for key in body_map} self.assertEqual(expected_ref_attrs, ref_attrs) xsd_elements = { 'CremeCRMCrudity': {'name': 'CremeCRMCrudity'}, 'user_id': {'name': 'user_id', 'type': 'xsd:integer'}, # <xsd:element name="user_id" type="xsd:integer"/> 'title': {'name': 'title', 'type': 'my:requiredString'}, # <xsd:element name="first_name" type="xsd:requiredString"/> # <xsd:element name="description"> # <xsd:complexType mixed="true"> # <xsd:sequence> # <xsd:any minOccurs="0" maxOccurs="unbounded" # namespace="http://www.w3.org/1999/xhtml" processContents="lax"/> # </xsd:sequence> # </xsd:complexType> # </xsd:element> 'description': {'name': 'description'}, 'linked_folder': {'name': 'linked_folder', 'type': 'xsd:integer'}, 'filedata': {'name': 'filedata', 'type': 'my:requiredBase64Binary'}, } for element_node in xml.findall('{}element'.format(xsd)): xsd_element_attrs = xsd_elements.get(element_node.get('name')) if xsd_element_attrs is None: self.fail('There is at least an extra node named: {}'.format(element_node.get('name'))) self.assertEqual(set(xsd_element_attrs.keys()), set(element_node.keys())) for attr in element_node.keys(): self.assertEqual(xsd_element_attrs[attr], element_node.get(attr))
def parse(packet, term, xmlc): opts = { 'data': print_data } try: tree = XML(packet) except ExpatError: term.sendLine('Warning: Malformed XML. Interpreting as data.') tree = XML(Data(packet).to_xml()) typ = tree.get('type', 'data') opts.get(typ, print_data)(tree, term, xmlc)
def setUp(self): self.path = reverse('ngc-order-submit') order_submit.connect(self.order_submit_receiver) # semi-hacky. get the order-submit requiest to hit the file on disk # see use of 'order_submit_url' in views.py ngc_settings.API_BASE_URL = 'file://{0}'.format(self.data_dir) ngc_settings.MERCHANT_ID = self.checkout_redirect_fn checkout_redirect_xml_path = \ OrderSubmitView.order_submit_frmt_str.format( NGC_API_BASE_URL=self.data_dir, NGC_MERCHANT_ID=self.checkout_redirect_fn) cr_xml = XML(open(join(checkout_redirect_xml_path)).read()) self.serial_number = cr_xml.get('serial-number') self.redirect_url = cr_xml.find(xpq_redirect_url).text
def test_manifest_xsf_01(self): "Test some base values" backend = self._get_backend(ContactFakeBackend, subject='create_ce') builder = self._get_builder(backend) ns = '{http://schemas.microsoft.com/office/infopath/2003/solutionDefinition}' ns2 = '{http://schemas.microsoft.com/office/infopath/2006/solutionDefinition/extensions}' content = builder._render_manifest_xsf(self.request) xml = XML(content) xml_find = xml.find namespace = builder.get_namespace() self.assertEqual(re.search(r'xmlns:my="(?P<ns>[\w\d\-:/\.]*)"', content).groupdict()['ns'], namespace ) # Can't be got with ElementTree, because it's a namespace self.assertEqual(builder.get_urn(), xml.get('name')) self.assertEqual(namespace, xml_find('{ns}package/{ns}files/{ns}file/{ns}fileProperties/{ns}property'.format(ns=ns)).get('value')) self.assertEqual(namespace, xml_find('{ns}applicationParameters/{ns}solutionProperties'.format(ns=ns)).get('fullyEditableNamespace')) self.assertEqual(namespace, xml_find('{ns}documentSchemas/{ns}documentSchema'.format(ns=ns)).get('location').split()[0]) # ElementTree 1.2.6 (shipped with python <= 2.6) doesn't support advanced xpath expressions TODO: improve file_nodes = xml.findall('{ns}package/{ns}files/{ns}file'.format(ns=ns)) for node in file_nodes: if node.get('name') == 'view1.xsl': found_node = node break else: self.fail('<xsf:file name="view1.xsl"> not found') for node in found_node.findall('{ns}fileProperties/{ns}property'.format(ns=ns)): if node.get('name') == 'lang': # property_node = node # TODO: use ? self.assertEqual(builder._get_lang_code(self.request.LANGUAGE_CODE), node.get('value')) break else: self.fail('<xsf:property name="lang" type="string" value=""></xsf:property> not found') mail_form_name = backend.subject self.assertEqual(mail_form_name, xml_find('{ns}extensions/{ns}extension/{ns2}solutionDefinition/{ns2}solutionPropertiesExtension/{ns2}mail'.format(ns=ns, ns2=ns2)) .get('formName') )
def test_basic(self): """ http://code.google.com/apis/checkout/developer/Google_Checkout_XML_API_Guide_for_Nonprofit_Organizations.html NOTE: example hello commands are broken. should be: curl -d '<hello xmlns="http://checkout.google.com/schema/2" />' https://{MERCHANT_ID}:{MERCHANT_KEY}@sandbox.google.com/checkout/api/checkout/v2/request/Merchant/{MERCHANT_ID} """ ngc_settings.BACKEND = \ 'npo_google_checkout.backends.default.DefaultBackend' backend = get_backend_class(ngc_settings.BACKEND)(None) url = self.url_frmt_str.format( NGC_API_BASE_URL=ngc_settings.API_BASE_URL, NGC_MERCHANT_ID=backend.get_merchant_id()) data = self.request_frmt_str.format(xmlns=xmlns) osv = OrderSubmitView() osv.backend = backend response_data = osv.syncronous_gc_request(url, data) response_xml_tree = XML(response_data) response_serial_number = response_xml_tree.get('serial-number') response_stripped = response_data.replace('\r\n', '') response_expected = self.response_frmt_str.format( xmlns=xmlns, serial_number=response_serial_number) self.assertEquals(response_stripped, response_expected)
def test_myschema_xsd01(self): body_map = {'user_id': 1, 'first_name': '', 'last_name': '', 'email': '*****@*****.**', 'description': '', 'birthday': '', 'created': '', # TODO: ignore this (editable=False) 'url_site': '', 'image': '', 'language': '', } backend = self._get_backend(ContactFakeBackend, subject='create_contact', body_map=body_map, model=Contact, ) builder = self._get_builder(backend) xsd = '{http://www.w3.org/2001/XMLSchema}' content = builder._render_myschema_xsd(self.request) xml = XML(content) self.assertEqual(builder.namespace, xml.get('targetNamespace')) self.assertEqual(builder.namespace, re.search(r'xmlns:my="(?P<ns>[\w\d\-:/\.]*)"', content).groupdict()['ns'] ) # Can't be got with ElementTree, because it's a namespace ref_attrs = {node.get('ref') for node in xml.findall('{xsd}element/{xsd}complexType/{xsd}sequence/{xsd}element'.format(xsd=xsd)) } # chain() because language_value is not declared in body_map, only language has to (m2m) expected_ref_attrs = {'my:{}'.format(key) for key in chain(body_map, ['language_value'])} self.assertEqual(expected_ref_attrs, ref_attrs) xsd_elements = { 'CremeCRMCrudity': {'name': 'CremeCRMCrudity'}, # <xsd:element name="user_id" type="xsd:integer"/> 'user_id': {'name': 'user_id', 'type': 'xsd:integer'}, # # <xsd:element name="is_actived" type="xsd:boolean"/> # 'is_actived': {'name': 'is_actived', 'type': 'xsd:boolean'}, # TODO: check if my:requiredString accepts empty strings # # <xsd:element name="first_name" type="xsd:string"/> # 'first_name': {'name': 'first_name', 'type': 'xsd:string'}, # <xsd:element name="first_name" type="my:requiredString"/> 'first_name': {'name': 'first_name', 'type': 'my:requiredString'}, # <xsd:element name="last_name" type="xsd:requiredString"/> 'last_name': {'name': 'last_name', 'type': 'my:requiredString'}, # TODO: check if my:requiredString accepts empty strings # # <xsd:element name="email" type="xsd:string"/> # 'email': {'name': 'email', 'type': 'xsd:string'}, # <xsd:element name="email" type="my:requiredString"/> 'email': {'name': 'email', 'type': 'my:requiredString'}, # <xsd:element name="description"> # <xsd:complexType mixed="true"> # <xsd:sequence> # <xsd:any minOccurs="0" maxOccurs="unbounded" # namespace="http://www.w3.org/1999/xhtml" processContents="lax"/> # </xsd:sequence> # </xsd:complexType> # </xsd:element> 'description': {'name': 'description'}, # <xsd:element name="birthday" nillable="true" type="xsd:date"/> 'birthday': {'name': 'birthday', 'type': 'xsd:date', 'nillable': 'true'}, # <xsd:element name="created" type="xsd:dateTime"/> 'created': {'name': 'created', 'type': 'xsd:dateTime'}, # TODO: check if my:requiredAnyURI accepts empty strings # 'url_site': {'name': 'url_site', 'type': 'xsd:anyURI'}, 'url_site': {'name': 'url_site', 'type': 'my:requiredAnyURI'}, 'image': {'name': 'image', 'type': 'xsd:base64Binary', 'nillable': 'true'}, 'language': {'name': 'language'}, 'language_value': {'name': 'language_value', 'type': 'xsd:integer', 'nillable': 'true'}, } for element_node in xml.findall('{}element'.format(xsd)): name = element_node.get('name') xsd_element_attrs = xsd_elements.get(name) if xsd_element_attrs is None: self.fail('There is at least an extra node named: {}'.format(name)) self.assertEqual(set(xsd_element_attrs.keys()), set(element_node.keys())) for attr in element_node.keys(): # self.assertEqual(xsd_element_attrs[attr], element_node.get(attr)) # TODO: factorise expected = xsd_element_attrs[attr] value = element_node.get(attr) if expected != value: self.fail('Value of attribute "{}" in node "{}" is wrong: expected "{}", got "{}".'.format( attr, name, expected, value, ) )
def printXml(text): xml = XML(text) print "%s\t%.2f\t%.2f\t%s" % (xml.get("name"), eval( xml.find("price").text), eval(xml.find("offer").text), "up" if xml.find("up").text == "True" else "down")