Esempio n. 1
0
 def processResponse(self, request, res):
     if not isinstance(res, response.Response):
         if res == None:
             return response.Response(status=200)
         request.profile.stopResponse()
         startConvert = time.time()
         text = converter.toText(request.responseType, res,
                                 self.controller, request)
         convertTime = time.time() - startConvert
         if False and request.contentType == 'text/plain':
             import gc
             class Results(modellib.Model):
                 profile = fields.ModelField(profile.ProfileData)
                 results = fields.ModelField(res.__class__,
                                             displayName=res._meta.name)
             request.profile.otherTimes.sort(key = lambda x: x.time)
             request.profile.convertTime = convertTime
             gc.collect()
             request.profile.references =  len(gc.get_objects())
             res = Results(profile=request.profile, 
                           results=res)
             text = converter.toText(request.responseType, res,
                                     self.controller, request)
         res = response.Response(text, content_type=request.contentType)
     res.headers['Cache-Control'] = 'private, must-revalidate, max-age=0'
     request.rootController.db.reset()
     return res
Esempio n. 2
0
    def processException(self, request, excClass, exception, tb):
        message = '%s: %s' % (excClass.__name__, exception)

        if hasattr(exception, 'status'):
            status = exception.status
        else:
            status = 500
            self.logError(request, excClass, exception, tb, doEmail=True)

        # Only send the traceback information if it's an unintentional
        # exception (i.e. a 500)
        if status == 500:
            tbString = 'Traceback:\n' + ''.join(traceback.format_tb(tb))
            text = [message + '\n', tbString]
        else:
            tbString = None
            text = [message + '\n']
        isFlash = 'HTTP_X_FLASH_VERSION' in request.headers or 'X-Wrap-Response-Codes' in request.headers
        if not getattr(request, 'contentType', None):
            request.contentType = 'text/xml'
            request.responseType = 'xml'
        if isFlash or request.contentType != 'text/plain':
        # for text/plain, just print out the traceback in the easiest to read
        # format.
            code = status
            if isFlash:
                # flash ignores all data sent with a non-200 error
                status = 200
            error = models.Fault(code=code, message=message, 
                                 traceback=tbString)
            text = converter.toText(request.responseType, error,
                                    self.controller, request)
        return response.Response(text, content_type=request.contentType,
                                 status=status)
Esempio n. 3
0
    def testImageFileURL(self):
        xml = """\
<image>
  <name>my image</name>
  <files>
    <file>
      <title>image title</title>
      <size>1234</size>
      <sha1>abc</sha1>
      <fileName>file name</fileName>
      <url urlType="0">http://localhost:1234</url>
      <url>http://localhost:12345</url>
      <url urlType="1"/>
    </file>
  </files>
  <imageId>1</imageId>
</image>
"""
        image = converter.fromText("xml", xml, models.Image, None, None)
        self.failUnlessEqual(image.name, "my image")
        self.failUnlessEqual([ x.title for x in image.files.files ],
            ['image title'])
        self.failUnlessEqual([ x.size for x in image.files.files ],
            [1234])
        self.failUnlessEqual([ x.sha1 for x in image.files.files ],
            ['abc'])
        self.failUnlessEqual([ x.fileName for x in image.files.files ],
            ['file name'])
        self.failUnlessEqual(
            [ [ (y.url, y.urlType) for y in x.urls ] for x in image.files.files ],
            [ [
                ('http://localhost:1234', 0),
                ('http://localhost:12345', None),
                (None, 1),
            ] ],
            )

        class Controller(object):
            def url(slf, request, *args, **kwargs):
                return args[0]
        class Request(object):
            def __init__(slf, baseUrl):
                slf.baseUrl = baseUrl

        # Need to set the file ID
        counter = 42
        for f in image.files.files:
            for url in f.urls:
                url.urlType = 0
                url.fileId = counter
                counter += 1
        # Now make sure we can dump the data back in xml, and the url
        # attribute/text field doesn't cause problems.
        newxml = converter.toText("xml", image, Controller(),
            Request("irc://goo/"))

        tmpl = '<url urlType="0">irc://goo/downloadImage?fileId=%s&amp;urlType=0</url>'
        for fileId in [42, 43, 44]:
            self.assertIn(tmpl % fileId, newxml)
Esempio n. 4
0
 def toString(self, item):
     controller = _Controller()
     txt = converter.toText('json', item, controller, None)
     return re.sub('\n *', '', txt)
Esempio n. 5
0
 def toString(self, item):
     controller = _Controller()
     return converter.toText('xml', item, controller, None)
Esempio n. 6
0
 def convert(self, type, request, object):
     return converter.toText(type, object, self.controller, request)