本文整理汇总了Python中candidates.models.PopItPerson类的典型用法代码示例。如果您正苦于以下问题:Python PopItPerson类的具体用法?Python PopItPerson怎么用?Python PopItPerson使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了PopItPerson类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: handle
def handle(self, **options):
for collection in ('organization', 'person'):
api_collection = getattr(self.api, collection + 's')
message = "{titled} {base_url}{plural}/{id}"
for item in popit_unwrap_pagination(
api_collection,
embed='',
per_page=100
):
print message.format(
titled=collection.title(),
base_url=get_base_url(),
plural=(collection + "s"),
id=item['id']
)
for image in item.get('images', []):
print " Image with URL:", image['url']
fix_image(image)
# Some images have an empty 'created' field, which
# causes an Elasticsearch indexing error, so change it
# to null if that's the case:
if not image.get('created'):
image['created'] = None
fix_dates(item)
try:
api_collection(item['id']).put(item)
except HttpClientError as e:
print "HttpClientError", e.content
sys.exit(1)
# If this is a person, make sure that the
# corresponding cache entries are invalidated:
if collection == 'person':
person = PopItPerson.create_from_dict(item)
person.invalidate_cache_entries()
示例2: get_context_data
def get_context_data(self, **kwargs):
context = super(PhotoUploadSuccess, self).get_context_data(**kwargs)
context['person'] = PopItPerson.create_from_popit(
self.api,
kwargs['popit_person_id']
)
return context
示例3: handle
def handle(self, *args, **options):
self.verbosity = int(options.get('verbosity', 1))
api = create_popit_api_object()
if len(args) != 2:
raise CommandError("You must provide all two arguments")
person_id, other_name = args
person = PopItPerson.create_from_popit(api, person_id)
person.other_names.append(
{
'name': other_name,
'note': options['note'],
'start_date': options['start_date'],
'end_date': options['end_date']
}
)
person.save_to_popit(api)
person.invalidate_cache_entries()
# FIXME: this should create a new version in the versions
# array too, otherwise you manually have to edit on the
# YourNextRepresentative site too to create a new version with
# a change message.
print "Successfully updated {0}".format(person_id)
示例4: handle
def handle(self, **options):
all_people = []
for person_dict in popit_unwrap_pagination(
self.api.persons,
embed="membership.organization",
per_page=100,
):
if person_dict.get('standing_in') \
and person_dict['standing_in'].get(options['year']):
person = PopItPerson.create_from_dict(person_dict)
all_people.append(person.as_dict(year=options['year']))
csv = list_to_csv(all_people)
# Write to stdout if no output filename is specified, or if it
# is '-'
if options['output_filename'] in (None, '-'):
with sys.stdout as f:
f.write(csv)
else:
# Otherwise write to a temporary file and atomically
# rename into place:
ntf = NamedTemporaryFile(
delete=False,
dir=dirname(options['output_filename'])
)
ntf.write(csv)
chmod(ntf.name, 0o644)
rename(ntf.name, options['output_filename'])
示例5: handle
def handle(self, *args, **options):
self.verbosity = int(options.get('verbosity', 1))
api = create_popit_api_object()
if len(args) != 3:
raise CommandError("You must provide all three arguments")
person_id, scheme, identifier = args
person = PopItPerson.create_from_popit(api, person_id)
person.identifiers.append(
{
'scheme': scheme,
'identifier': identifier,
}
)
person.save_to_popit(api)
person.invalidate_cache_entries()
# FIXME: this should create a new version in the versions
# array too, otherwise you manually have to edit on YourNextMP
# too to create a new version with a change message.
print "Successfully updated {0}".format(person_id)
示例6: get_existing_popit_person
def get_existing_popit_person(vi_person_id):
from candidates.models import PopItPerson
from candidates.popit import get_search_url
# See if this person already exists by searching for the
# ID they were imported with:
query_format = \
'identifiers.identifier:"{id}" AND ' + \
'identifiers.scheme:"{scheme}"'
search_url = get_search_url(
'persons',
query_format.format(
id=vi_person_id, scheme='import-id'
),
embed='membership.organization'
)
results = requests.get(search_url).json()
total = results['total']
if total > 1:
message = "Multiple matches for CI ID {0}"
raise Exception(message.format(vi_person_id))
if total == 0:
return None
# Otherwise there was exactly one result:
return PopItPerson.create_from_dict(results['result'][0])
示例7: handle
def handle(self, **options):
for person_data in popit_unwrap_pagination(
self.api.persons,
embed='',
per_page=100
):
msg = "Person {0}persons/{1}"
print msg.format(get_base_url(), person_data['id'])
strip_bogus_fields(
person_data,
[
'founding_date',
'dissolution_date',
'start_date',
'end_date'
]
)
for image in person_data.get('images', []):
strip_bogus_fields(
image,
[
'birth_date',
'death_date',
'founding_date',
'dissolution_date',
'start_date',
'end_date'
]
)
person = PopItPerson.create_from_dict(person_data)
person.save_to_popit(self.api)
person.invalidate_cache_entries()
示例8: update_popit_person
def update_popit_person(self, popit_person_id, ppc_data, image_filename):
from candidates.models import PopItPerson
from ..images import image_uploaded_already
# Get the existing data first:
person_data, _ = self.get_person(popit_person_id)
previous_versions = person_data.pop('versions')
new_person_data = self.get_person_data_from_ppc(ppc_data)
# Remove any empty keys, we don't want to overwrite exiting
# data with nothing:
keys = new_person_data.keys()
warnings = []
for key in keys:
if not new_person_data[key]:
del new_person_data[key]
# Also make sure that we don't overwrite any existing
# fields that are filled in with different values:
if key not in ('standing_in', 'party_memberships'):
new_person_data_value = new_person_data.get(key)
person_data_value = person_data.get(key)
if person_data_value and new_person_data_value and new_person_data_value != person_data_value:
if key_value_appeared_in_previous_version(
key,
new_person_data_value,
previous_versions
):
warning_message = "[{0}] it looks as if a previous "
warning_message += "version had {1}, so not "
warning_message += "overwriting the current value {2}"
warnings.append(warning_message.format(
key,
new_person_data_value,
person_data_value
))
del new_person_data[key]
else:
warnings.append("[{0}] replacing {1}".format(key, person_data_value))
warnings.append("[{0}] with new value {1}".format(key, new_person_data_value))
if warnings:
print("Warnings for person/{0} {1}".format(
popit_person_id, person_data['name']
).encode('utf-8'))
for warning in warnings:
print(" ...", warning.encode('utf-8'))
merged_person_data = merge_person_data(person_data, new_person_data)
change_metadata = get_change_metadata(
None,
'Updated candidate from official PPC data ({0})'.format(ppc_data['party_slug']),
)
person = PopItPerson.create_from_reduced_json(merged_person_data)
person.record_version(change_metadata)
person_id = person.save_to_popit(self.api)
if image_filename:
if image_uploaded_already(self.api.persons, person_id, image_filename):
print("That image has already been uploaded!")
else:
print("Uploading image...")
self.upload_person_image(person_id, image_filename, ppc_data['image_url'])
person.invalidate_cache_entries()
return person_id
示例9: handle
def handle(self, *args, **options):
from candidates.models import PopItPerson
from candidates.popit import create_popit_api_object
self.verbosity = int(options.get('verbosity', 1))
api = create_popit_api_object()
if len(args) != 1:
raise CommandError("You must provide a person.js URL")
person_js_url = args[0]
people_data = requests.get(person_js_url).json()
for person_data in people_data['persons']:
twfy_person = PopItPerson.create_from_dict(person_data)
ynmp_id = twfy_person.get_identifier('yournextmp')
if not ynmp_id:
continue
parlparse_id = twfy_person.id
ynmp_person = PopItPerson.create_from_popit(api, ynmp_id)
existing_parlparse_id = ynmp_person.get_identifier('uk.org.publicwhip')
if existing_parlparse_id:
if existing_parlparse_id == parlparse_id:
# That's fine, there's already the right parlparse ID
pass
else:
# Otherwise there's a mismatch, which needs investigation
msg = "Warning: parlparse ID mismatch between YNMP {0} "
msg += "and TWFY {1} for YNMP person {2}\n"
self.stderr.write(
msg.format(
existing_parlparse_id,
parlparse_id,
ynmp_id,
)
)
continue
msg = "Updating the YourNextMP person {0} with parlparse_id {1}\n"
self.stdout.write(msg.format(ynmp_id, parlparse_id))
ynmp_person.set_identifier(
'uk.org.publicwhip',
parlparse_id,
)
change_metadata = get_change_metadata(
None, "Fetched a new parlparse ID"
)
ynmp_person.record_version(change_metadata)
ynmp_person.save_to_popit(api)
ynmp_person.invalidate_cache_entries()
示例10: handle
def handle(self, *args, **kwargs):
if len(args) < 1:
raise CommandError("You must provide one or more PopIt person ID")
for person_id in args:
person = PopItPerson.create_from_popit(
create_popit_api_object(), person_id
)
person.delete_memberships()
self.create_party_memberships(person_id, person.popit_data)
self.create_candidate_list_memberships(person_id, person.popit_data)
示例11: parse_data
def parse_data(self, json_file):
with open(json_file) as f:
for ec_party in json.load(f):
ec_party_id = ec_party['ECRef'].strip()
# We're only interested in political parties:
if not ec_party_id.startswith('PP'):
continue
party_id = self.clean_id(ec_party_id)
if ec_party['RegulatedEntityTypeName'] == 'Minor Party':
register = ec_party['RegisterNameMinorParty'].replace(
' (minor party)', ''
)
else:
register = ec_party['RegisterName']
party_name, party_dissolved = self.clean_name(ec_party['RegulatedEntityName'])
party_founded = self.clean_date(ec_party['ApprovedDate'])
party_data = {
'id': party_id,
'name': party_name,
'slug': slugify(party_name),
'classification': 'Party',
'descriptions': get_descriptions(ec_party),
'founding_date': party_founded,
'dissolution_date': party_dissolved,
'register': register,
'identifiers': [
{
'identifier': ec_party_id,
'scheme': 'electoral-commission',
}
]
}
try:
self.api.organizations.post(party_data)
self.upload_images(ec_party['PartyEmblems'], party_id)
except HttpServerError as e:
if 'E11000' in e.content:
# Duplicate Party Found
self.api.organizations(party_id).put(party_data)
self.upload_images(ec_party['PartyEmblems'], party_id)
else:
raise
organization_with_memberships = \
self.api.organizations(party_id).get(embed='membership.person')['result']
# Make sure any members of these parties are
# invalidated from the cache so that the embedded
# party information when getting posts and persons is
# up-to-date:
for membership in organization_with_memberships.get(
'memberships', []
):
person = PopItPerson.create_from_dict(membership['person_id'])
person.invalidate_cache_entries()
开发者ID:YoQuieroSaber,项目名称:yournextrepresentative,代码行数:53,代码来源:candidates_update_popit_parties_from_ec_data.py
示例12: add_popit_person
def add_popit_person(self, ppc_data, image_filename):
change_metadata = get_change_metadata(
None,
'Created new candidate from official PPC data ({0})'.format(ppc_data['party_slug']),
)
person_data = self.get_person_data_from_ppc(ppc_data)
person = PopItPerson.create_from_reduced_json(person_data)
person.record_version(change_metadata)
person_id = person.save_to_popit(self.api)
if image_filename:
self.upload_person_image(person_id, image_filename, ppc_data['image_url'])
person.invalidate_cache_entries()
return person_id
示例13: handle
def handle(self, *args, **kwargs):
api = create_popit_api_object()
if len(args) < 1:
raise CommandError("You must provide one or more PopIt person ID")
for person_id in args:
invalidate_person(person_id)
person = PopItPerson.create_from_popit(api, person_id)
posts_to_invalidate = person.get_associated_posts()
person.delete_memberships(api)
# The memberships are recreated when you assign to
# standing_in and party_memberships; this script assumes
# these are correct and so re-setting these should
# recreate the memberships correctly.
person.standing_in = person.standing_in
person.party_memberships = person.party_memberships
person.save_to_popit(api)
invalidate_posts(posts_to_invalidate)
invalidate_person(person_id)
示例14: handle
def handle(self, **options):
for o in popit_unwrap_pagination(
self.api.organizations,
per_page=100,
embed='membership.person'
):
if o['classification'] != 'Party':
continue
print o['name']
for image in o.get('images', []):
print " DELETE", image['_id']
self.api.organizations(o['id']).image(image['_id']).delete()
# The person pages get party images via the
# membership.organization embed, so invalidate the cache
# entries for any person who's a member of this party:
for membership in o.get('memberships', []):
person = PopItPerson.create_from_dict(membership['person_id'])
person.invalidate_cache_entries()
示例15: handle
def handle(self, **options):
for person_data in popit_unwrap_pagination(
self.api.persons,
embed='',
per_page=100
):
needs_update = False
for version in person_data.get('versions', []):
data = version['data']
if data.get('last_party'):
needs_update = True
msg = "Fixing person {0}persons/{1}"
print msg.format(get_base_url(), person_data['id'])
del data['last_party']
if not needs_update:
continue
person = PopItPerson.create_from_dict(person_data)
person.save_to_popit(self.api)
person.invalidate_cache_entries()
开发者ID:YoQuieroSaber,项目名称:yournextrepresentative,代码行数:19,代码来源:candidates_remove_last_party_from_versions.py