Пример #1
0
 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
Пример #2
0
 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)
Пример #3
0
 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
Пример #5
0
 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
Пример #6
0
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()