def save(self): meeting = self.obj or Meeting() # Store meetings settings to prevent overwriting them initial_settings = { k: v for k, v in (meeting.settings or {}).items() if k not in dict(MEETING_SETTINGS) } self.populate_obj(meeting) meeting.settings.update(initial_settings) meeting.photo_field_id = meeting.photo_field_id or None meeting.address_field_id = meeting.address_field_id or None meeting.telephone_field_id = meeting.telephone_field_id or None meeting.media_photo_field_id = meeting.media_photo_field_id or None self._clean_badge_header(meeting) if meeting.id is None: meeting.owner = current_user.staff db.session.add(meeting) self._save_phrases(meeting) self._save_categories(meeting) self._save_custom_field(meeting) if meeting.media_participant_enabled: add_custom_fields_for_meeting(meeting, form_class=MediaParticipantDummyForm) db.session.commit() return meeting
def get(self, user_id): user = User.query.filter_by(id=user_id).first_or_404() participants = (user.participants.order_by( Participant.deleted.asc()).order_by(Participant.id.asc()).filter( Participant.meeting != Meeting.get_default())) return render_template('admin/user/detail.html', user=user, participants=participants)
def get(self, user_id): user = User.query.filter_by(id=user_id).first_or_404() participants = ( user.participants .order_by(Participant.deleted.asc()) .order_by(Participant.id.asc()) .filter(Participant.meeting != Meeting.get_default()) ) return render_template('admin/user/detail.html', user=user, participants=participants)
def save(self): meeting = Meeting() self.populate_obj(meeting) meeting.photo_field_id = meeting.photo_field_id or None meeting.media_photo_field_id = meeting.media_photo_field_id or None self._clone_custom_fields(meeting, self.obj.custom_fields, ('label', )) self._clone_relation(meeting, self.obj.categories, ('title', )) self._clone_relation(meeting, self.obj.phrases, ('description', )) self._clone_relation(meeting, self.obj.role_users, exclude_fk=False) self._clone_relation(meeting, self.obj.user_notifications, exclude_fk=False) self._clone_rules(meeting, self.obj.rules) meeting.owner = self.obj.owner if self.obj.photo_field_id: meeting.photo_field = (meeting.custom_fields .filter_by(slug=meeting.photo_field.slug) .first()) if self.obj.media_photo_field_id: meeting.media_photo_field = ( meeting.custom_fields .filter_by(slug=meeting.media_photo_field.slug) .first()) db.session.add(meeting) db.session.commit() return meeting
def save(self): meeting = Meeting() self.populate_obj(meeting) meeting.photo_field_id = meeting.photo_field_id or None meeting.address_field_id = meeting.address_field_id or None meeting.telephone_field_id = meeting.telephone_field_id or None meeting.media_photo_field_id = meeting.media_photo_field_id or None self._clone_custom_fields(meeting, self.obj.custom_fields, ('label', )) self._clone_categories(meeting, self.obj.categories) self._clone_relation(meeting, self.obj.phrases, ('description', )) self._clone_relation(meeting, self.obj.role_users, exclude_fk=False) self._clone_relation(meeting, self.obj.user_notifications, exclude_fk=False) self._clone_rules(meeting, self.obj.rules) self._clone_printout_fields(meeting) meeting.owner = self.obj.owner db.session.add(meeting) db.session.commit() return meeting
def sync_cites_meetings(ctx): app = ctx.obj['app'] cites_meetings_urls = { 'english': 'https://cites.org/ws/meetings-mrt', 'french': 'https://cites.org/fra/ws/meetings-mrt', 'spanish': 'https://cites.org/esp/ws/meetings-mrt', } retrieved_meetings = defaultdict(dict) headers = {'Accept': 'application/json'} for language in cites_meetings_urls: response = requests.get(cites_meetings_urls[language], headers=headers) response.raise_for_status() for meeting in response.json(): unique_id = meeting.get('id', '') meeting_dict = retrieved_meetings[unique_id] meeting_dict['{}_title'.format(language)] = meeting.get( 'title', '') meeting_dict['{}_city'.format(language)] = meeting.get('city', '') meeting_dict['description'] = meeting.get('description', '') meeting_dict['meeting_type'] = meeting.get('type', '') meeting_dict['start'] = meeting.get('start', '') meeting_dict['end'] = meeting.get('end', '') meeting_dict['location'] = meeting.get('location', '') meeting_dict['country'] = meeting.get('country', '') meeting_dict['country_code2'] = meeting.get('country_code2', '') meeting_dict['country_code3'] = meeting.get('country_code3', '') meeting_dict['meeting_number'] = meeting.get('meeting_number', '') meeting_dict['link'] = meeting.get('link', '') meeting_dict['acronym'] = meeting_dict[ 'meeting_type'] + meeting_dict['meeting_number'] with app.test_request_context(): for meeting in retrieved_meetings: meeting_dict = retrieved_meetings[meeting] if Meeting.query.filter_by( acronym=meeting_dict['acronym']).count(): # Meeting already exists continue else: curr_meeting_type = MeetingType.query.filter_by( label=meeting_dict['meeting_type']).first() if not curr_meeting_type: curr_meeting_type = MeetingType( label=meeting_dict['meeting_type'], slug=slugify(meeting_dict['meeting_type'])) db.session.add(curr_meeting_type) date_start = datetime.strptime( re.sub(re.compile('<.*?>'), '', meeting_dict['start']), '%d/%m/%Y') date_end = datetime.strptime( re.sub(re.compile('<.*?>'), '', meeting_dict['end']), '%d/%m/%Y') curr_meeting = Meeting(acronym=meeting_dict['acronym'], date_start=date_start, date_end=date_end) curr_meeting.meeting_type = curr_meeting_type curr_meeting.venue_country = meeting_dict['country_code2'] curr_meeting.venue_city = Translation( english=meeting_dict['english_city'], french=meeting_dict['french_city'], spanish=meeting_dict['spanish_city']) curr_meeting.title = Translation( english=meeting_dict['english_title'], french=meeting_dict['french_title'], spanish=meeting_dict['spanish_title']) db.session.add(curr_meeting) db.session.commit()