"HttpResponse" has no _get_content attribute

I am using Django 1.5.1 and Piston to support support using the MongoDB database.

When I try to check the remaining URL to receive the data, I get the following error.

type object 'HttpResponse' has no attribute '_get_content'
Request Method: GET
Request URL:    http://127.0.0.1:8000/annotation/search?limit=20&uri=/document
Django Version: 1.5.1
Exception Type: AttributeError
Exception Value:    
type object 'HttpResponse' has no attribute '_get_content'
Exception Location: /home/tank/sites/python/env.example/lib/python2.7/site-packages/piston/utils.py in HttpResponseWrapper, line 72
Python Executable:  /home/tank/sites/python/env.example/bin/python
Python Version: 2.7.4

The problem arises in the piston code, not sure of the reason. Here's the full trace

Environment:


Request Method: GET
Request URL: http://127.0.0.1:8000/annotations/search?limit=20&uri=/templates

Django Version: 1.5.1
Python Version: 2.7.4
Installed Applications:
('django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.admin',
 'django.contrib.admindocs',
 'django.contrib.flatpages',
 'app.modules.members',
 'app.modules.cms',
 'app.modules.annotator',
 'debug_toolbar')
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'debug_toolbar.middleware.DebugToolbarMiddleware')


Traceback:
File "/home/tank/sites/python/env.example/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  115.                         response = callback(request, *callback_args, **callback_kwargs)
File "/home/tank/sites/python/env.example/lib/python2.7/site-packages/django/views/decorators/vary.py" in inner_func
  19.             response = func(*args, **kwargs)
File "/home/tank/sites/python/env.example/lib/python2.7/site-packages/piston/resource.py" in __call__
  166.             result = self.error_handler(e, request, meth, em_format)
File "/home/tank/sites/python/env.example/lib/python2.7/site-packages/piston/resource.py" in error_handler
  257.             result = rc.BAD_REQUEST
File "/home/tank/sites/python/env.example/lib/python2.7/site-packages/piston/utils.py" in __getattr__
  51.         class HttpResponseWrapper(HttpResponse):
File "/home/tank/sites/python/env.example/lib/python2.7/site-packages/piston/utils.py" in HttpResponseWrapper
  72.             content = property(HttpResponse._get_content, _set_content)            

Exception Type: AttributeError at /annotations/search
Exception Value: type object 'HttpResponse' has no attribute '_get_content'

/Thank

The new reverse trackback for the "HttpResponseWrapper" object does not have the "_is_string" attribute:

Environment:


Request Method: GET
Request URL: http://127.0.0.1:8000/annotations/search?limit=20&uri=

Django Version: 1.5.1
Python Version: 2.7.4
Installed Applications:
('django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.admin',
 'django.contrib.admindocs',
 'django.contrib.flatpages',
 'app.modules.members',
 'app.modules.cms',
 'app.modules.annotator',
 'debug_toolbar')
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'debug_toolbar.middleware.DebugToolbarMiddleware')


Traceback:
File "/home/tank/sites/python/env.example/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  115.                         response = callback(request, *callback_args, **callback_kwargs)
File "/home/tank/sites/python/env.example/lib/python2.7/site-packages/django/views/decorators/vary.py" in inner_func
  19.             response = func(*args, **kwargs)
File "/home/tank/sites/python/env.example/lib/python2.7/site-packages/piston/resource.py" in __call__
  184.         if isinstance(result, HttpResponse) and not result._is_string:

Exception Type: AttributeError at /annotations/search
Exception Value: 'HttpResponseWrapper' object has no attribute '_is_string'
+5
source share
2 answers

In Django 1.5, this code:

def _get_content(self):
    # do some stuff

def _set_content(self):
    # do some stuff

content = property(_get_content, _set_content)

has been changed to:

@property
def content(self):
    # do some stuff

@content.setter
def content(self, value):
    # do some stuff

So, Django 1.5 has no function _get_content. You should change the HttpResponseWrapper/utils.py piston to something like this:

class HttpResponseWrapper(HttpResponse):
    """
    Wrap HttpResponse and make sure that the internal
    _is_string/_base_content_is_iter flag is updated when the
    _set_content method (via the content property) is called
    """

    def _set_content(self, content):
        """
        Set the _container and _is_string /
        _base_content_is_iter properties based on the type of
        the value parameter. This logic is in the construtor
        for HttpResponse, but doesn't get repeated when
        setting HttpResponse.content although this bug report
        (feature request) suggests that it should:
        http://code.djangoproject.com/ticket/9403
        """
        is_string = False
        if not isinstance(content, basestring) and hasattr(content, '__iter__'):
            self._container = content
        else:
            self._container = [content]
            is_string = True
        if django.VERSION >= (1, 4):
            self._base_content_is_iter = not is_string
        else:
            self._is_string = is_string

    try:
        # Django versoin is older than 1.5

        content = property(HttpResponse._get_content, _set_content)

    except:
        # Django version 1.5

        @HttpResponse.content.setter
        def content(self, content):
            self._set_content(content)

Let me know if this works, I will do it with code piston.


: , . this commit.

+3

All Articles