Skip to content

Commit

Permalink
Merge branch 'master' of github.com:hasadna/Open-Knesset
Browse files Browse the repository at this point in the history
  • Loading branch information
MeirKriheli committed Jan 17, 2013
2 parents a629ad6 + bbc373f commit 5ee224a
Show file tree
Hide file tree
Showing 6 changed files with 1,708 additions and 1,671 deletions.
9 changes: 9 additions & 0 deletions persons/managers.py
@@ -0,0 +1,9 @@
from django.utils.encoding import smart_text
from django.db.models import Q, Manager

class PersonManager(Manager):

def get_by_name(self, name):
name = smart_text(name)
return self.get((Q(aliases__name__in=name) | Q(name=name)))

6 changes: 5 additions & 1 deletion persons/models.py
Expand Up @@ -4,6 +4,8 @@
from django.core.exceptions import ValidationError
from django.forms.fields import IntegerField

from managers import PersonManager

GENDER_CHOICES = (
(u'M', _('Male')),
(u'F', _('Female')),
Expand All @@ -17,7 +19,7 @@ def __unicode__(self):

class PersonAlias(models.Model):
name = models.CharField(max_length=64)
person = models.ForeignKey('Person')
person = models.ForeignKey('Person', related_name='aliases')

def __unicode__(self):
return "%s -> %s" % (self.name, self.person.name)
Expand Down Expand Up @@ -50,6 +52,8 @@ class Person(models.Model):
residence_economy = models.IntegerField(blank=True, null=True)
gender = models.CharField(max_length=1, choices=GENDER_CHOICES, blank=True, null=True)

objects = PersonManager()

def __unicode__(self):
return self.name

Expand Down
70 changes: 35 additions & 35 deletions polyorg/management/commands/import_candidatelist.py
Expand Up @@ -11,64 +11,59 @@
logger = logging.getLogger("open-knesset.polyorg.import_candidatelist")

CandidateTuple = namedtuple('CandidateTuple', ['comments', 'candidate_wikipedia',
'party_youtube', 'mqg', 'party_facebook', 'party_manifest_url',
'party_website', 'party_image_url', 'mk_id', 'ordinal', 'name',
'party_youtube', 'mqg', 'facebook', 'party_manifest_url', 'twitter',
'website', 'image_url', 'mk_id', 'ordinal', 'name',
'ballot', 'list'])

class Command(BaseCommand):

def _add_link_if_changed(self, cnd, record, link_arg, link_title, link_type, model_name):
def _add_link_if_changed(self, cnd, model, link_arg, link_title, link_type, model_name):
if getattr(cnd, link_arg):
# Link exists in CSV
# Check if such a link exists in DB
links = Link.objects.filter(content_type__app_label='polyorg',
content_type__model=model_name,
object_pk=record.id)
if links:
# it does!
link = links[0]
else:
# it doesn't - create it
link = Link.objects.create(url=getattr(cnd, link_arg), title=link_title,
content_object=record, link_type=link_type)
if link.url <> getattr(cnd, link_arg):
# Link URL different in CSV - update it!
##logger.info('Changing link %s for %s' % (link_title, (record.person.name if model_name=='candidate' else record.name)))
link.url = getattr(cnd, link_arg)
link.save()

url = getattr(cnd, link_arg)
try:
Link.objects.get_or_create(url=url, defaults = {
'content_object': model,
'link_type': link_type,
'title': link_title })
except Link.MultipleObjectsReturned:
links = Link.objects.filter(url=url)
for i in range(1,len(links)):
links[i].delete()

def _list_by_cnd(self, cnd):
ls = CandidateList.objects.filter(name__exact = cnd.list)
if ls:
clist = ls[0]
else:
clist = CandidateList.objects.create(name = cnd.list, ballot = cnd.ballot)
# update candidate fields, if changed, and add links
if cnd.party_image_url:
clist.img_url = cnd.party_image_url
clist.save()
youtube_type, _ = LinkType.objects.get_or_create(title='YouTube')
facebook_type, _ = LinkType.objects.get_or_create(title='פייסבוק')
default_type, _ = LinkType.objects.get_or_create(title='default')
self._add_link_if_changed(cnd, clist, 'party_youtube', link_title='סרטון YouTube של הרשימה',
link_type=youtube_type, model_name='candidatelist')
self._add_link_if_changed(cnd, clist, 'party_facebook', link_title='דף פייסבוק של הרשימה',
link_type=facebook_type, model_name='candidatelist')
self._add_link_if_changed(cnd, clist, 'party_manifest_url', link_title='מצע הרשימה',
link_type=default_type, model_name='candidatelist')
self._add_link_if_changed(cnd, clist, 'party_website', link_title='אתר הרשימה',
self._add_link_if_changed(cnd, clist, 'website', link_title='אתר הרשימה',
link_type=default_type, model_name='candidatelist')
self._add_link_if_changed(cnd, clist, 'mqg', link_title='דף הרשימה באתר התנועה לאיכות השלטון',
link_type=default_type, model_name='candidatelist')
return clist

def _person_by_cnd(self, cnd):
persons = list(Person.objects.filter(name__exact = cnd.name))
''' use the mk_id (if there) or the name to return the person '''
if cnd.mk_id:
persons = list(Person.objects.filter(mk__id = cnd.mk_id)) + persons
if persons:
return persons[0]
return Person.objects.create(name = cnd.name)
try:
return Person.objects.get(mk_id = cnd.mk_id)
except Person.DoesNotExist:
pass
try:
return Person.objects.get_by_name(cnd.name)
except Person.DoesNotExist:
person = Person(name = cnd.name)
if cnd.mk_id:
person.mk_id = mk_id
person.save()

@transaction.commit_on_success()
def handle(self, *args, **options):
Expand All @@ -86,6 +81,11 @@ def handle(self, *args, **options):
candidate = Candidate.objects.create(candidates_list = clist, person = person, ordinal = cnd.ordinal)
# update candidate fields, if changed
wiki_type, _ = LinkType.objects.get_or_create(title='ויקיפדיה')
self._add_link_if_changed(cnd, candidate, 'candidate_wikipedia',
link_title='ערך ויקיפדיה של המועמד',
link_type=wiki_type, model_name='candidate')
self._add_link_if_changed(cnd, person, 'candidate_wikipedia',
link_title='ויקיפדיה',
link_type=wiki_type, model_name='person')
facebook_type, _ = LinkType.objects.get_or_create(title='פייסבוק')
self._add_link_if_changed(cnd, person, 'facebook', link_title='פייסבוק',
link_type=facebook_type, model_name='person')
person.img_url = cnd.image_url
person.save()
21 changes: 20 additions & 1 deletion polyorg/static/css/polyorg.css
Expand Up @@ -108,7 +108,7 @@ section {clear:both; padding:0.5em;}
display: none;
z-index: 1;
position: absolute;
top: 80px;
top: 40px;
width: 405px;
height: 218px;
}
Expand All @@ -133,6 +133,25 @@ section {clear:both; padding:0.5em;}
height: 47px;
background: #f6f6f6;
padding-right: 160px;
overflow: hidden;
}
.person-info-links ul {
margin-top: 8px;
margin-right: -10px;
list-style-type: none;
}
.person-info-links ul li {
float:right;
padding: 0;
border: 0 none;
}
.person-info-links ul li a {
display: block;
overflow: hidden;
text-indent: -30000em;
width: 32px;
height: 32px;
opacity: 0.7;
}
.person-card:hover .person-info {
display: block;
Expand Down
7 changes: 6 additions & 1 deletion templates/persons/person_cards.html
@@ -1,4 +1,5 @@
{% load static from staticfiles %}
{% load links_tags %}
{% for person in persons %}
<div class="person-card">
<a href="{{person.get_absolute_url}}">
Expand All @@ -16,7 +17,11 @@ <h3>{{person.name}}</h3>
<h3><a href="{{person.get_absolute_url}}">{{person.name}}</a></h3>
<p>{{person.get_role}}</p>
</div>
<div class="person-info-links"></div>
<div class="person-info-links">
<ul>
{% object_icon_links person %}
</ul>
</div>
<div class="person-info-photo">
<img src="{{person.img_url}}">
</div>
Expand Down

0 comments on commit 5ee224a

Please sign in to comment.