Exemplo n.º 1
0
 def test_multiple_query_items_included_in_marshall_results(self):
     portal = self.layer['portal']
     login(portal, 'admin')
     query = [{
         'i': 'portal_type',
         'o': 'plone.app.querystring.operation.string.is',
         'v': 'News Item',
     },{ 'i': 'Title',
         'o': 'plone.app.querystring.operation.string.is',
         'v': 'Test News Item',
     }]
     
     portal.invokeFactory("Collection",
                          "collection",
                          query=query,
                          title="New Collection")
     collection = portal['collection']
     rfc822 = collection.manage_FTPget()
     data = parseRFC822(rfc822)
     
     self.assertIn('query0_i', data[0])
     self.assertIn('query0_o', data[0])
     self.assertIn('query0_v', data[0])
     self.assertIn('query1_i', data[0])
     self.assertIn('query1_o', data[0])
     self.assertIn('query1_v', data[0])
     
     self.assertEqual(data[0]['query0_i'], query[0]['i'])
     self.assertEqual(data[0]['query0_o'], query[0]['o'])
     self.assertEqual(data[0]['query0_v'], query[0]['v'])
     self.assertEqual(data[0]['query1_i'], query[1]['i'])
     self.assertEqual(data[0]['query1_o'], query[1]['o'])
     self.assertEqual(data[0]['query1_v'], query[1]['v'])
Exemplo n.º 2
0
 def demarshall(self, instance, data, **kwargs):
     # We don't want to pass file forward.
     if 'file' in kwargs:
         if not data:
             # TODO Yuck! Shouldn't read the whole file, never.
             # OTOH, if you care about large files, you should be
             # using the PrimaryFieldMarshaller or something
             # similar.
             data = kwargs['file'].read()
         del kwargs['file']
     headers, body = parseRFC822(data)
     
     query = {}
     for k, v in headers.items():
         if not k.startswith("query"):
             continue
         else:
             index = int(k[5])
             sub_key = k.split("_")[1]
             query_part = query.get(index, {})
             query_part[sub_key] = v
             query[index] = query_part
             del headers[k]
     query = [facet[1] for facet in sorted(query.items())]
     
     header = formatRFC822Headers(headers.items())
     data = '%s\n\n%s' % (header, body)
     
     try:
         return RFC822Marshaller.demarshall(self, instance, data, **kwargs)
     finally:
         instance.query = query
Exemplo n.º 3
0
    def demarshall(self, instance, data, **kwargs):
        # We don't want to pass file forward.
        if 'file' in kwargs:
            if not data:
                # TODO Yuck! Shouldn't read the whole file, never.
                # OTOH, if you care about large files, you should be
                # using the PrimaryFieldMarshaller or something
                # similar.
                data = kwargs['file'].read()
            del kwargs['file']
        headers, body = parseRFC822(data)

        query = {}
        for k, v in headers.items():
            if not k.startswith("query"):
                continue
            else:
                index = int(k[5])
                sub_key = k.split("_")[1]
                query_part = query.get(index, {})
                query_part[sub_key] = v
                query[index] = query_part
                del headers[k]
        query = [facet[1] for facet in sorted(query.items())]

        header = formatRFC822Headers(headers.items())
        data = '%s\n\n%s' % (header, body)

        try:
            return RFC822Marshaller.demarshall(self, instance, data, **kwargs)
        finally:
            instance.query = query
Exemplo n.º 4
0
    def test_multiple_query_items_included_in_marshall_results(self):
        portal = self.layer['portal']
        login(portal, 'admin')
        query = [{
            'i': 'portal_type',
            'o': 'plone.app.querystring.operation.string.is',
            'v': 'News Item',
        }, {
            'i': 'Title',
            'o': 'plone.app.querystring.operation.string.is',
            'v': 'Test News Item',
        }]

        portal.invokeFactory("Collection",
                             "collection",
                             query=query,
                             title="New Collection")
        collection = portal['collection']
        rfc822 = collection.manage_FTPget()
        data = parseRFC822(rfc822)

        self.assertIn('query0_i', data[0])
        self.assertIn('query0_o', data[0])
        self.assertIn('query0_v', data[0])
        self.assertIn('query1_i', data[0])
        self.assertIn('query1_o', data[0])
        self.assertIn('query1_v', data[0])

        self.assertEqual(data[0]['query0_i'], query[0]['i'])
        self.assertEqual(data[0]['query0_o'], query[0]['o'])
        self.assertEqual(data[0]['query0_v'], query[0]['v'])
        self.assertEqual(data[0]['query1_i'], query[1]['i'])
        self.assertEqual(data[0]['query1_o'], query[1]['o'])
        self.assertEqual(data[0]['query1_v'], query[1]['v'])
Exemplo n.º 5
0
 def marshall(self, instance, **kwargs):
     content_type, length, data = RFC822Marshaller.marshall(self, instance, **kwargs)
     headers, body = parseRFC822(data)
     
     headers = headers.items()
     for i, query in enumerate(instance.query):
         for key, value in query.items():
             if isinstance(value, list):
                 value = "\n".join(value)
             header_key = 'query%d_%s' % (i, key)
             headers.append((header_key, value))
     
     header = formatRFC822Headers(headers)
     data = '%s\n\n%s' % (header, body)
     length = len(data)
     return (content_type, length, data)
Exemplo n.º 6
0
 def marshall(self, instance, **kwargs):
     content_type, length, data = RFC822Marshaller.marshall(self, instance, **kwargs)
     headers, body = parseRFC822(data)
     
     headers = headers.items()
     for i, query in enumerate(instance.query):
         for key, value in query.items():
             if isinstance(value, list):
                 value = "\n".join(value)
             header_key = 'query%d_%s' % (i, key)
             headers.append((header_key, value))
     
     header = formatRFC822Headers(headers)
     data = '%s\n\n%s' % (header, body)
     length = len(data)
     return (content_type, length, data)