Reputation: 231
I am trying to use set function in App Engine, to prepare a list with unique elements. I hit a snag when i wrote a Python code which works fine in the Python Shell but not in App Engine + Django
This is what i intend to do(ran this script in IDLE):
import re
value=' [email protected], dash@ben,, , [email protected] '
value = value.lower()
value = list(set(re.split('^\s*|\s*,+\s*|\s*$', value)))
if (value[0] == ''):
value.remove('')
print value
The desired output is(got this output in IDLE):
['dash@ben', '[email protected]', '[email protected]']
Now when I do something equivalent in my views.py file in App Engine:
import os
import re
import django
from django.http import HttpResponse
from django.shortcuts import render_to_response # host of other imports also there
def add(request):
value=' [email protected], dash@ben,, , [email protected] '
value = value.lower()
value = list(set(re.split('^\s*|\s*,+\s*|\s*$', value)))
if (value[0] == ''):
value.remove('')
return render_to_response('sc-actonform.html', {
'value': value,
})
I get this error while going to the appropriate page(pasting the traceback):
Traceback (most recent call last):
File "G:\Dhushyanth\Google\google_appengine\lib\django\django\core\handlers\base.py" in get_response
77. response = callback(request, *callback_args, **callback_kwargs)
File "G:\Dhushyanth\development\AppengineProjects\trunk_sanjhachoolha\sandbox\dushyanth\sanjhachoolha\views.py" in add
148. value = list(set(re.split('^\s*|\s*,+\s*|\s*$', value)))
File "G:\Dhushyanth\development\AppengineProjects\trunk_sanjhachoolha\sandbox\dushyanth\sanjhachoolha\views.py" in list
208. return respond(request, None, 'sc-base', {'content': responseText})
File "G:\Dhushyanth\development\AppengineProjects\trunk_sanjhachoolha\sandbox\dushyanth\sanjhachoolha\views.py" in respond
115. params['sign_in'] = users.create_login_url(request.path)
AttributeError at /sanjhachoolha/acton/add
'set' object has no attribute 'path'
on commenting out:
#value = list(set(re.split('^\s*|\s*,+\s*|\s*$', value)))
I get the desired output in the appropriate webpage:
[email protected], dash@ben,, , [email protected]
I am sure the list() is the root of my troubles. Can anyone suggest why this is happening. Please also suggest alternatives. The aim is to remove duplicates from the list.
Thanks!
Upvotes: 0
Views: 258
Reputation: 1460
It seems like you implemented your own list() function. Its return
statements should be at line 208 of your file (views.py). You should rename your list()
function to something else (even list_()
).
EDIT: Also you can change you regexp, like this:
import re
value=' [email protected], dash@ben,, , [email protected] '
value = value.lower()
#value = list(set(re.split('^\s*|\s*,+\s*|\s*$', value)))
#if (value[0] == ''):
# value.remove('')
value = set(re.findall(r'[\w\d\.\-_]+@[\w\d\.\-_]+', value))
print value
re.findall()
returns a list
of all matched occurences.
Upvotes: 8