def delete(self): """ Mark as deleted. """ self.deleted_at = utcnow()
def cancel(self): """ Mark as cancelled. """ self.cancelled_at = utcnow()
def publish(self): """Mark as published.""" self.published_at = utcnow()
def announce(self): """Mark as announced.""" self.announced_at = utcnow()
def person_needs_update(self, person): too_old = utcnow() - datetime.timedelta( minutes=self.MAX_PERSON_DATA_AGE) return (person.last_update_from_feide is None or person.last_update_from_feide < too_old)
def make_group_from_template(session, template_name, ou, principals=()): """Create election with elections from template.""" current_app.logger.info('Make election group %s for %s', template_name, ou) election_templates = current_app.config.get('ELECTION_GROUP_TEMPLATES') template = election_templates[template_name] name = template['name'] group_type = template['settings']['group_type'] elections = template['settings']['elections'] metadata = template['settings']['rule_set'] now = utcnow() def candidate_type(e): return metadata['candidate_type'] def common_candidate_type(): return functools.reduce(lambda x, y: x if x == y else None, map(candidate_type, elections)) def default_start(): return datetime.datetime.combine( now.date(), DEFAULT_START_TIME).replace(tzinfo=datetime.timezone.utc) def default_end(): return datetime.datetime.combine( (now + DEFAULT_DURATION).date(), DEFAULT_END_TIME).replace(tzinfo=datetime.timezone.utc) def mandate_period_start(e): start = e['mandate_period'].get('start', '--01-01') if start.startswith('--'): # aniso8601 does not support extended year representation. # Let's try to fix that: start = str(now.year) + start[1:] date = aniso8601.parse_date(start) if date < now.date(): date = date.replace(year=(now.year + 1)) return date def mandate_period_end(e): start = mandate_period_start(e) length = e['mandate_period'].get('duration') if length is None: return None duration = aniso8601.parse_duration(length) return start + duration grp_name = {} for lang in name.keys(): grp_name[lang] = name[lang].format(ou.name[lang]) group = ElectionGroup( name=grp_name, template_name=template_name, description=None, # Set this? type=group_type, meta=metadata, ou=ou) def make_candidate_list(name): cand_list = ElectionList(name=name) return cand_list def make_pollbook(kw): return Pollbook(**kw) def make_election(e): if group_type == 'single_election': name = group.name else: name = e['name'] election = Election( name=name, sequence=e['sequence'], election_group=group, start=default_start(), end=default_end(), mandate_period_start=mandate_period_start(e), mandate_period_end=mandate_period_end(e), meta=metadata, active=group_type == 'single_election', ) if candidate_type(e) == 'party_list': election.lists = [] else: election.lists = [make_candidate_list(name)] election.pollbooks = list(map(make_pollbook, e['voter_groups'])) return election group.elections = list(map(make_election, elections)) session.add(group) session.flush() return group