I am using Django 1.5.1 and Piston for rest support with MongoDB database.
When trying to test the rest url to retrieve 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 is generated in the piston code, not sure the reason. Here's the full traceback
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'
/Thanks
New error trackback for 'HttpResponseWrapper' object has no attribute '_is_string' :
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'
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)
was changed to:
@property
def content(self):
# do some stuff
@content.setter
def content(self, value):
# do some stuff
So, Django 1.5 doesn't have _get_content
function. You should change HttpResponseWrapper
in piston/utils.py 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 it works, I will commit this to piston
code.
About the second issue: perhaps, your version is old. This issue was already solved in this commit.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With