コード例 #1
0
ファイル: test_builders.py プロジェクト: mrjmad/creme_crm
    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'))
コード例 #2
0
ファイル: test.py プロジェクト: wisamasd/python-altium
    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"),
        ))
コード例 #3
0
 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"),
     ))
コード例 #4
0
    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)
コード例 #5
0
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",
    )
コード例 #6
0
    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))
コード例 #7
0
ファイル: parser.py プロジェクト: btrzcinski/netchat-archive
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)
コード例 #8
0
    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
コード例 #9
0
    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')
                        )
コード例 #10
0
    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)
コード例 #11
0
    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)
コード例 #12
0
    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,
                                )
                             )
コード例 #13
0
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")