[TASK] Big unicode cleanup.

This commit is contained in:
Jan Philipp Timme 2014-09-29 15:01:35 +02:00
parent 9b06e3aac6
commit 13058a41f7
9 changed files with 94 additions and 86 deletions

View File

@ -10,12 +10,12 @@ from frontend.views import IndexView, ProjectView, ProjectUpdateView, ProjectPer
urlpatterns = patterns(
'',
url(r'^$', IndexView.as_view(), name='frontend-index'),
url(r'^project/$', ProjectView.as_view(), name='frontend-projects'),
url(r'^project/(?P<project_id>\d+)/update$', ProjectUpdateView.as_view(), name='frontend-project-update'),
url(r'^project/(?P<project_id>\d+)/map/person$', ProjectPersonView.as_view(), name='frontend-project-view-person'),
url(r'^project/(?P<project_id>\d+)/map/person/(?P<person_uuid>[\w\d-]+)$', ProjectMapPersonView.as_view(), name='frontend-project-map-person'),
url(r'^login/$', login_wrap, name='frontend-login'),
url(r'^logout/$', logout_wrap, name='frontend-logout'),
url(r'^$', IndexView.as_view(), name=u'frontend-index'),
url(r'^project/$', ProjectView.as_view(), name=u'frontend-projects'),
url(r'^project/(?P<project_id>\d+)/update$', ProjectUpdateView.as_view(), name=u'frontend-project-update'),
url(r'^project/(?P<project_id>\d+)/map/person$', ProjectPersonView.as_view(), name=u'frontend-project-view-person'),
url(r'^project/(?P<project_id>\d+)/map/person/(?P<person_uuid>[\w\d-]+)$', ProjectMapPersonView.as_view(), name=u'frontend-project-map-person'),
url(r'^login/$', login_wrap, name=u'frontend-login'),
url(r'^logout/$', logout_wrap, name=u'frontend-logout'),
url(r'^admin/', include(admin.site.urls)),
)

View File

@ -9,42 +9,42 @@ class NewProjectForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(NewProjectForm, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_class = 'form-horizontal'
self.helper.label_class = 'col-lg-2'
self.helper.field_class = 'col-lg-4'
self.helper.form_method = 'post'
self.helper.form_class = u'form-horizontal'
self.helper.label_class = u'col-lg-2'
self.helper.field_class = u'col-lg-4'
self.helper.form_method = u'post'
self.helper.layout = Layout(
'name',
'description',
Submit('send', 'Create', css_class='btn-default')
u'name',
u'description',
Submit(u'send', u'Create', css_class=u'btn-default')
)
name = forms.CharField(
label="Name",
label=u"Name",
max_length=255,
required=True,
)
description = forms.CharField(
label="Description",
label=u"Description",
required=True,
)
class Meta:
model = Project
fields = ['name', 'description']
fields = [u'name', u'description']
class FileUploadForm(forms.Form):
def __init__(self, *args, **kwargs):
super(FileUploadForm, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_class = 'form-horizontal'
self.helper.label_class = 'col-lg-2'
self.helper.field_class = 'col-lg-4'
self.helper.form_method = 'post'
self.helper.form_class = u'form-horizontal'
self.helper.label_class = u'col-lg-2'
self.helper.field_class = u'col-lg-4'
self.helper.form_method = u'post'
self.helper.layout = Layout(
'file',
Submit('send', 'Upload', css_class='btn-default')
u'file',
Submit(u'send', u'Upload', css_class=u'btn-default')
)
file = forms.FileField()
@ -54,17 +54,17 @@ class PersonMapForm(forms.Form):
def __init__(self, *args, **kwargs):
super(PersonMapForm, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_class = 'form-horizontal'
self.helper.label_class = 'col-lg-2'
self.helper.field_class = 'col-lg-4'
self.helper.form_method = 'post'
self.helper.form_class = u'form-horizontal'
self.helper.label_class = u'col-lg-2'
self.helper.field_class = u'col-lg-4'
self.helper.form_method = u'post'
self.helper.layout = Layout(
'action',
'global_identity',
Submit('skip', 'Skip', css_class='btn-default'),
Submit('save-continue', 'Save and continue', css_class='btn-default'),
u'action',
u'global_identity',
Submit(u'skip', u'Skip', css_class=u'btn-default'),
Submit(u'save-continue', u'Save and continue', css_class=u'btn-default'),
)
action = forms.ChoiceField(choices=[('new', 'Create new global Identity'), ('existing', 'Map to existing identity')], initial='new', widget=forms.RadioSelect())
action = forms.ChoiceField(choices=[(u'new', u'Create new global Identity'), (u'existing', u'Map to existing identity')], initial=u'new', widget=forms.RadioSelect())
global_identity = forms.ModelChoiceField(queryset=PersonGlobalIdentity.objects.all(), required=False)

View File

@ -2,7 +2,6 @@
from django.db import models
class Project(models.Model):
""" Model representing a citavi project. """
name = models.CharField(max_length=255)
@ -10,12 +9,12 @@ class Project(models.Model):
associated_filename = models.CharField(max_length=255, blank=True, null=True)
def __unicode__(self):
repr = self.name
temp = unicode(self.name)
if self.associated_filename:
repr += " (" + self.associated_filename + ")"
temp += u" (" + unicode(self.associated_filename) + u")"
else:
repr += " (empty)"
return repr
temp += u" (empty)"
return temp
class PersonGlobalIdentity(models.Model):
@ -24,8 +23,9 @@ class PersonGlobalIdentity(models.Model):
# TODO: Extend this for further stuff - maybe vivo external url or something?
def __unicode__(self):
repr = "<PersonGlobalIdentity ID=" + str(self.id) + ", type=" + self.type + ">"
return repr
from service.Mapper import PersonMapper
pm = PersonMapper()
return u"<PersonGlobalIdentity repr=" + pm.get_representation_for_global_identity(self) + u" ID=" + unicode(self.id) + u", type=" + unicode(self.type) + u">"
class CitaviProjectIdentity(models.Model):
@ -36,5 +36,4 @@ class CitaviProjectIdentity(models.Model):
preferred = models.BooleanField()
def __unicode__(self):
repr = "<CitaviProjectIdentity project=" + str(self.project) + ", citavi_uuid=" + self.citavi_uuid + ", global_identity=" + str(self.global_identity) + ", preferred=" + str(self.preferred) + ">"
return repr
return u"<CitaviProjectIdentity project=" + unicode(self.project) + u", citavi_uuid=" + unicode(self.citavi_uuid) + u", global_identity=" + unicode(self.global_identity) + u", preferred=" + unicode(self.preferred) + u">"

View File

@ -11,11 +11,6 @@
<p><strong>Description:</strong> {{project.description}}</h3>
<p><strong>Current uploaded database filename:</strong> {{project.associated_filename}}</p>
<!--
<h3>Upload the new database version</h3>
<p>{% crispy form %}</p>
-->
<h3>Stats</h3>
<p>
<strong>Mapped:</strong> {{mapped_persons|length}}<br>

View File

@ -27,8 +27,8 @@
<td>{{project.description}}</td>
<td>{{project.associated_filename}}</td>
<td>
<a href="{% url 'frontend-project-update' project.id %}">Update project</a>
<a href="{% url 'frontend-project-view-person' project.id %}">Persons</a>
<a href="{% url 'frontend-project-update' project.id %}">Update</a>,
<a href="{% url 'frontend-project-view-person' project.id %}">Map</a>
</td>
</tr>
{% endfor %}

View File

@ -17,25 +17,25 @@ from frontend.forms import NewProjectForm, FileUploadForm, PersonMapForm
from frontend.models import Project
FRONTEND_PAGE_NAME = 'Citavi Mapper'
FRONTEND_PAGE_NAME = u'Citavi Mapper'
# Login wrapper functions
def login_wrap(*args, **kwargs):
""" Wrapper function for login page. """
kwargs['extra_context'] = {
'page': {
'name': FRONTEND_PAGE_NAME,
'title': 'Login'
kwargs[u'extra_context'] = {
u'page': {
u'name': FRONTEND_PAGE_NAME,
u'title': 'Login'
}
}
return login(*args, **kwargs)
def logout_wrap(*args, **kwargs):
""" Wrapper function for logout page. """
kwargs['extra_context'] = {
'page': {
'name': FRONTEND_PAGE_NAME,
'title': 'Logout'
kwargs[u'extra_context'] = {
u'page': {
u'name': FRONTEND_PAGE_NAME,
u'title': 'Logout'
}
}
return logout(*args, **kwargs)
@ -44,9 +44,9 @@ def logout_wrap(*args, **kwargs):
# My base classes for views
class MyViewMixin(object):
""" Basic view mixin to add global variables to all templates. """
template_name = 'base.html'
template_name = u'base.html'
page_name = FRONTEND_PAGE_NAME
page_title = 'BASE'
page_title = u'BASE'
def get_page_data(self):
return {
@ -95,18 +95,18 @@ class ProtectedUpdateView(LoggedInMixin, MyUpdateView):
# Actual Views
class IndexView(ProtectedTemplateView):
template_name = 'index.html'
page_title = 'Index'
template_name = u'index.html'
page_title = u'Index'
class ProjectView(ProtectedFormView):
template_name = 'projects.html'
page_title = 'Projects'
template_name = u'projects.html'
page_title = u'Projects'
form_class = NewProjectForm
success_url = '/project'
success_url = u'/project'
def get_context_data(self, **kwargs):
kwargs[u'projects'] = Project.objects.order_by('id')
kwargs[u'projects'] = Project.objects.order_by(u'id')
return super(ProjectView, self).get_context_data(**kwargs)
def form_valid(self, form):
@ -115,11 +115,11 @@ class ProjectView(ProtectedFormView):
class ProjectUpdateView(ProtectedFormView, SingleObjectMixin):
template_name = 'project/update.html'
page_title = 'Update project'
template_name = u'project/update.html'
page_title = u'Update project'
form_class = FileUploadForm
success_url = '/project/'
success_url = u'/project/'
def get(self, request, *args, **kwargs):
self.project_id = kwargs[u'project_id']
@ -128,16 +128,17 @@ class ProjectUpdateView(ProtectedFormView, SingleObjectMixin):
def post(self, request, *args, **kwargs):
self.project_id = kwargs[u'project_id']
self.success_url = self.success_url + self.project_id + '/update'
self.object = Project.objects.get(pk=self.project_id)
self.success_url = self.success_url + self.project_id + u'/update'
return super(ProjectUpdateView, self).post(request, *args, **kwargs)
def form_valid(self, form, *args, **kwargs):
""" This form_valid handles the file upload. """
original_file = form.files[u'file']
original_filename = str(original_file)
original_filename = unicode(original_file)
original_contentfile = ContentFile(original_file.read())
""" Put file into temporary folder for analysis """
target_filename = 'tmp/project_' + str(self.project_id) + '.ctt4'
target_filename = u'tmp/project_' + unicode(self.project_id) + u'.ctt4'
relative_path = default_storage.save(target_filename, original_contentfile)
temp_sqlite = os.path.join(settings.MEDIA_ROOT, relative_path)
@ -154,7 +155,7 @@ class ProjectUpdateView(ProtectedFormView, SingleObjectMixin):
""" TODO: Put up an error message or something. """
pass
else:
target_filename = 'citavi/project_' + str(self.project_id) + '.ctt4'
target_filename = u'citavi/project_' + unicode(self.project_id) + u'.ctt4'
""" Remove eventually pre-existing citavi file. """
if default_storage.exists(target_filename):
default_storage.delete(target_filename)
@ -177,11 +178,11 @@ class ProjectUpdateView(ProtectedFormView, SingleObjectMixin):
class ProjectPersonView(ProtectedFormView, SingleObjectMixin):
template_name = 'project/view-person.html'
page_title = 'Person List View'
template_name = u'project/view-person.html'
page_title = u'Person List View'
form_class = FileUploadForm
success_url = '/projects/'
success_url = u'/project/'
def get_context_data(self, **kwargs):
project = self.object
@ -207,11 +208,11 @@ class ProjectPersonView(ProtectedFormView, SingleObjectMixin):
class ProjectMapPersonView(ProtectedFormView, SingleObjectMixin):
template_name = 'project/map-person.html'
page_title = 'Person Mapping'
template_name = u'project/map-person.html'
page_title = u'Person Mapping'
form_class = PersonMapForm
success_url = '/project'
success_url = u'/project'
def get_context_data(self, **kwargs):
project = self.object
@ -239,11 +240,11 @@ class ProjectMapPersonView(ProtectedFormView, SingleObjectMixin):
pm = Mapper.PersonMapper()
person = pm.get_person_by_uuid(self.object, self.person_uuid)
print str(form.cleaned_data)
print unicode(form.cleaned_data)
# TODO: do mapping according to parameters, override success_url to point to next person!
if form.cleaned_data['action'] == 'new':
if form.cleaned_data[u'action'] == u'new':
pm.create_new_identity(self.object, person)
elif form.cleaned_data['action'] == 'skip':
elif form.cleaned_data[u'action'] == u'skip':
pass
return super(ProjectMapPersonView, self).form_valid(form)

View File

@ -31,19 +31,19 @@ class Project():
except:
self._is_error = True
# TODO: better error handling!
print "An error occured within a get_persons call!"
print u"An error occured within a get_persons call!"
return False
def get_person_by_uuid(self, uuid):
""" Returns a person from the Citavi project by their uuid. """
try:
person_class = self._sa_sqlite_autobase.classes.Person
citavi_person = self._sa_sqlite_session.query(person_class).filter('ID=\'' + str(uuid) + '\'').all()
citavi_person = self._sa_sqlite_session.query(person_class).filter(u'ID=\'' + unicode(uuid) + u'\'').all()
return citavi_person[0]
except:
self._is_error = True
# TODO: better error handling!
print "An error occured within a get_person_by_uuid call!"
print u"An error occured within a get_person_by_uuid call!"
return False
def open(self):
@ -59,7 +59,7 @@ class Project():
def _open(self):
""" Internal method to open a citavi project file. """
try:
self._sa_sqlite_engine = create_engine('sqlite+pysqlite:///' + self.sqlite_file)
self._sa_sqlite_engine = create_engine(u'sqlite+pysqlite:///' + self.sqlite_file)
self._sa_sqlite_session = Session(self._sa_sqlite_engine)
self._sa_sqlite_meta = MetaData(bind=self._sa_sqlite_engine)
self._sa_sqlite_meta.reflect()
@ -96,7 +96,7 @@ class ProjectManager():
self._projects.clear()
def get_path_for_project_id(self, project_id):
return 'media/citavi/project_' + str(project_id) + '.ctt4'
return u'media/citavi/project_' + unicode(project_id) + u'.ctt4'
def _add_project(self, project_id):
""" Internal method to add a Project instance if not existing. """

View File

@ -26,3 +26,7 @@ class PersonIdentityManager():
def get_mapped_identities_for_project(self, project_instance):
""" Returns all existing (mapped) identies for a given project. """
return CitaviProjectIdentity.objects.filter(project=project_instance).all()
def get_citavi_identity_by_global_identity(self, global_identity):
""" Returns the preferred citavi identity based on their global identity. """
return CitaviProjectIdentity.objects.filter(global_identity=global_identity, preferred=True).all()[0]

View File

@ -46,3 +46,12 @@ class PersonMapper():
def get_person_by_uuid(self, project, uuid):
""" Returns a person from a citavi project by uuid. """
return self._citavi_project_manager.get_person_by_uuid(project.id, uuid)
def get_representation_for_global_identity(self, global_identity):
""" Returns a unicode string representation for a global identiy. """
if global_identity.type == 'citavi':
citavi_identity = self._person_identity_manager.get_citavi_identity_by_global_identity(global_identity)
citavi_person = self._citavi_project_manager.get_person_by_uuid(citavi_identity.project_id, citavi_identity.citavi_uuid)
return unicode(citavi_person.ID) + u" " + unicode(citavi_person.FirstName) + u" " + unicode(citavi_person.LastName)
else:
return unicode(global_identity)