Пример #1
0
    def _enforce_retention_policy(
        self, rules_spec: fields.Str(required=True),
        filter_expression: fields.Str(missing=None),
        dry_run: fields.Bool(missing=False),
        keep_metadata_backup: fields.Bool(missing=False),
        group_label: fields.Str(missing=None)
    ) -> None:
        benji_obj = None
        try:
            benji_obj = Benji(self._config)
            dismissed_versions = benji_obj.enforce_retention_policy(
                filter_expression=filter_expression,
                rules_spec=rules_spec,
                dry_run=dry_run,
                keep_metadata_backup=keep_metadata_backup,
                group_label=group_label)

            result = StringIO()
            benji_obj.export_any(
                {'versions': dismissed_versions},
                result,
                ignore_relationships=[((Version, ), ('blocks', ))],
            )

            return result
        finally:
            if benji_obj:
                benji_obj.close()
Пример #2
0
class SettingsSchema(mm.Schema):
    admin_principals = PrincipalList(allow_groups=True)
    authorized_principals = PrincipalList(allow_groups=True)
    tileserver_url = fields.String(validate=[
        validate.URL(schemes={'http', 'https'}),
        lambda value: all(x in value for x in ('{x}', '{y}', '{z}'))
    ],
                                   allow_none=True)
    booking_limit = fields.Int(validate=[validate.Range(min=1)])
    notifications_enabled = fields.Bool()
    notification_before_days = fields.Int(
        validate=[validate.Range(min=1, max=30)])
    notification_before_days_weekly = fields.Int(
        validate=[validate.Range(min=1, max=30)])
    notification_before_days_monthly = fields.Int(
        validate=[validate.Range(min=1, max=30)])
    end_notifications_enabled = fields.Bool()
    end_notification_daily = fields.Int(
        validate=[validate.Range(min=1, max=30)])
    end_notification_weekly = fields.Int(
        validate=[validate.Range(min=1, max=30)])
    end_notification_monthly = fields.Int(
        validate=[validate.Range(min=1, max=30)])
    excluded_categories = ModelList(Category)
    grace_period = fields.Int(validate=[validate.Range(min=0, max=24)],
                              allow_none=True)
Пример #3
0
def make_sort_args(default=None,
                   multiple=True,
                   validator=None,
                   default_hide_null=False,
                   default_nulls_large=True):
    description = 'Provide a field to sort by. Use - for descending order.'
    if multiple:
        sort_field = fields.List(
            fields.Str(validate=validator),
            missing=default,
            description=description,
        )
    else:
        sort_field = fields.Str(
            missing=default,
            validate=validator,
            description=description,
        )
    return {
        'sort':
        sort_field,
        'sort_hide_null':
        fields.Bool(missing=default_hide_null,
                    description='Hide null values on sorted column(s).'),
        'sort_nulls_large':
        fields.Bool(
            missing=default_nulls_large,
            description='Treat null values as large on sorted column(s)',
        )
    }
Пример #4
0
class ContributionResource(Resource):
    """
    Endpoint for contributions in the spreadsheet.
    """
    query_parameters = {
        "category": fields.Str(),
        "status": fields.Str(),
        "author": fields.Str(),
        "moderator": fields.Str(),
        "staff_picked": fields.Bool(),
        "review_status": fields.Str(),
        "url": fields.Str(),
        "voted_on": fields.Bool(),
        "repository": fields.Str(),
    }

    @use_args(query_parameters)
    def get(self, query_parameters):
        """
        Uses the given query parameters to search for contributions in the
        database.
        """
        contributions = [
            json.loads(json_util.dumps(without_score(c)))
            for c in DB.contributions.find(query_parameters)
        ]
        return jsonify(contributions)
Пример #5
0
    def _rm(
        self, version_uid: str, force: fields.Bool(missing=False),
        keep_metadata_backup: fields.Bool(missing=False),
        override_lock: fields.Bool(missing=False)
    ) -> None:
        version_uid_obj = VersionUid(version_uid)
        disallow_rm_when_younger_than_days = self._config.get(
            'disallowRemoveWhenYounger', types=int)
        benji_obj = None
        try:
            benji_obj = Benji(self._config)

            result = StringIO()
            # Do this before deleting the version
            benji_obj.export_any({'versions': [version_uid_obj]},
                                 result,
                                 ignore_relationships=[((Version, ),
                                                        ('blocks', ))])

            benji_obj.rm(version_uid_obj,
                         force=force,
                         disallow_rm_when_younger_than_days=
                         disallow_rm_when_younger_than_days,
                         keep_metadata_backup=keep_metadata_backup,
                         override_lock=override_lock)

            return result
        finally:
            if benji_obj:
                benji_obj.close()
Пример #6
0
class RHUpdateRoom(RHRoomAdminBase):
    @use_args({
        'verbose_name': fields.Str(allow_none=True),
        'site': fields.Str(allow_none=True),
        'building': fields.String(validate=lambda x: x is not None),
        'floor': fields.String(validate=lambda x: x is not None),
        'number': fields.String(validate=lambda x: x is not None),
        'longitude': fields.Float(allow_none=True),
        'latitude': fields.Float(allow_none=True),
        'is_reservable': fields.Bool(allow_none=True),
        'reservations_need_confirmation': fields.Bool(allow_none=True),
        'notification_emails': fields.List(fields.Email()),
        'notification_before_days': fields.Int(validate=lambda x: 1 <= x <= 30, allow_none=True),
        'notification_before_days_weekly': fields.Int(validate=lambda x: 1 <= x <= 30, allow_none=True),
        'notification_before_days_monthly': fields.Int(validate=lambda x: 1 <= x <= 30, allow_none=True),
        'notifications_enabled': fields.Bool(),
        'end_notification_daily': fields.Int(validate=lambda x: 1 <= x <= 30, allow_none=True),
        'end_notification_weekly': fields.Int(validate=lambda x: 1 <= x <= 30, allow_none=True),
        'end_notification_monthly': fields.Int(validate=lambda x: 1 <= x <= 30, allow_none=True),
        'end_notifications_enabled': fields.Bool(),
        'booking_limit_days': fields.Int(validate=lambda x: x >= 1, allow_none=True),
        'owner': Principal(validate=lambda x: x is not None, allow_none=True),
        'key_location': fields.Str(),
        'telephone': fields.Str(),
        'capacity': fields.Int(validate=lambda x: x >= 1),
        'division': fields.Str(allow_none=True),
        'surface_area': fields.Int(validate=lambda x: x >= 0, allow_none=True),
        'max_advance_days': fields.Int(validate=lambda x: x >= 1, allow_none=True),
        'comments': fields.Str(),
    })
    def _process(self, args):
        update_room(self.room, args)
        RHRoomsPermissions._jsonify_user_permissions.clear_cached(session.user)
        return jsonify(room_update_schema.dump(self.room, many=False))
Пример #7
0
def add_user_routes(app, system_email, bcrypt):
    """ Create routes related to user management

        Args:
            app - Flask app to add routes to
            system_email - Sender address to use for emails
            bcrypt - Password hashing Bcrypt associated with app
    """
    @app.route("/v1/list_user_emails/", methods=["GET"])
    @requires_login
    def list_user_emails_route():
        """ list all users """
        return list_user_emails()

    @app.route("/v1/list_submission_users/", methods=["GET"])
    @requires_login
    @use_kwargs({'is_fabs': webargs_fields.Bool(missing=False)})
    def list_submission_users_route(is_fabs):
        """ List all users with submissions that the requesting user has permissions for """
        return list_submission_users(is_fabs)

    @app.route("/v1/active_user/", methods=["GET"])
    @requires_login
    def active_user():
        """ gets the current user information """
        return JsonResponse.create(StatusCode.OK,
                                   json_for_user(g.user, session['sid']))

    @app.route("/v1/set_skip_guide/", methods=["POST"])
    @requires_login
    @use_kwargs({'skip_guide': webargs_fields.Bool(required=True)})
    def set_skip_guide(skip_guide):
        """ Sets skip_guide param for current user """
        account_manager = AccountHandler(request, bcrypt=bcrypt)
        return account_manager.set_skip_guide(skip_guide)
Пример #8
0
    def _api_v1_versions_delete(
        self, version_uid: str, force: fields.Bool(missing=False),
        keep_metadata_backup: fields.Bool(missing=False),
        override_lock: fields.Bool(missing=False)
    ) -> StringIO:
        version_uid_obj = VersionUid(version_uid)
        result = StringIO()
        with Benji(self._config) as benji_obj:
            try:
                # Do this before deleting the version
                benji_obj.export_any(
                    {
                        'versions': [
                            benji_obj.get_version_by_uid(
                                version_uid=version_uid_obj)
                        ]
                    },
                    result,
                    ignore_relationships=[((Version, ), ('blocks', ))])

                benji_obj.rm(version_uid_obj,
                             force=force,
                             keep_metadata_backup=keep_metadata_backup,
                             override_lock=override_lock)
            except KeyError:
                response.status = f'410 Version {version_uid} not found.'

        return result
Пример #9
0
def make_sort_args(default=None, validator=None, default_hide_null=False,
        default_nulls_only=False, default_sort_nulls_last=False, show_nulls_last_arg=True,
        additional_description=''):
    args = {
        'sort': fields.Str(
            missing=default,
            validate=validator,
            description='Provide a field to sort by. Use `-` for descending order.\n{}'.format(
                additional_description
            ),
        ),
        'sort_hide_null': fields.Bool(
            missing=default_hide_null,
            description='Hide null values on sorted column(s).'
        ),
        'sort_null_only': fields.Bool(
            missing=default_nulls_only,
            description='Toggle that filters out all rows having sort column that is non-null'
        ),

    }
    if show_nulls_last_arg:
        args['sort_nulls_last'] = fields.Bool(
            missing=default_sort_nulls_last,
            description='Toggle that sorts null values last'
        )
    return args
Пример #10
0
class RHSearchRooms(RHRoomBookingBase):
    @use_args(dict(search_room_args, **{
        'unavailable': fields.Bool(missing=False),
        'admin_override_enabled': fields.Bool(missing=False)
    }))
    def _process(self, args):
        filter_availability = all(x in args for x in ('start_dt', 'end_dt', 'repeat_frequency', 'repeat_interval'))
        only_unavailable = args.pop('unavailable')
        admin_override_enabled = args.pop('admin_override_enabled')
        if not filter_availability:
            availability = None
            if only_unavailable:
                raise UnprocessableEntity('Required data to filter by availability is not present')
        else:
            availability = not only_unavailable
        search_query = search_for_rooms(args, allow_admin=admin_override_enabled, availability=availability)
        rooms = [(id_, room_name) for id_, room_name, in search_query.with_entities(Room.id, Room.full_name)]

        # We can't filter by blocking's acl in the search_query, so we need to adjust the results
        rooms = self._adjust_blockings(rooms, args, availability)
        room_ids = [room[0] for room in rooms]
        if filter_availability:
            room_ids_without_availability_filter = [
                id_ for id_, in search_for_rooms(args, allow_admin=admin_override_enabled).with_entities(Room.id)
            ]
        else:
            room_ids_without_availability_filter = room_ids
        return jsonify(rooms=room_ids, rooms_without_availability_filter=room_ids_without_availability_filter,
                       total=len(room_ids_without_availability_filter), availability_days=self._get_date_range(args))

    def _get_date_range(self, filters):
        try:
            start_dt, end_dt = filters['start_dt'], filters['end_dt']
            repetition = filters['repeat_frequency'], filters['repeat_interval']
        except KeyError:
            return None
        return [dt.date().isoformat() for dt in ReservationOccurrence.iter_start_time(start_dt, end_dt, repetition)]

    def _adjust_blockings(self, rooms, filters, availability):
        if availability is None:
            return rooms
        blocked_rooms = get_blockings_with_rooms(filters['start_dt'], filters['end_dt'])
        nonoverridable_blocked_rooms = filter_blocked_rooms(blocked_rooms, nonoverridable_only=True)
        if availability:
            # Remove nonoverridable blockings from available rooms
            nonoverridable_blocked_rooms_ids = [room.room_id for room in nonoverridable_blocked_rooms]
            rooms = [room for room in rooms if room[0] not in nonoverridable_blocked_rooms_ids]
        else:
            # Add nonoverridable blockings to unavailable rooms and re-sort results
            rooms_ids = [room[0] for room in rooms]
            missing_rooms = [(room.room_id, room.room.full_name) for room in nonoverridable_blocked_rooms
                             if room.room_id not in rooms_ids]
            if filters.get('favorite'):
                favorites = {r.id for r in session.user.favorite_rooms if not r.is_deleted}
                missing_rooms = [(room_id, room_name) for room_id, room_name in missing_rooms
                                 if room_id in favorites]
            rooms = sorted(rooms + missing_rooms, key=lambda room: natural_sort_key(room[1]))
        return rooms
Пример #11
0
class RHRoomBlockings(RHRoomBookingBase):
    @use_kwargs({
        'timeframe': fields.Str(),
        'my_rooms': fields.Bool(),
        'mine': fields.Bool()
    })
    def _process(self, timeframe, my_rooms, mine):
        filters = {'timeframe': timeframe, 'created_by': session.user if mine else None,
                   'in_rooms_owned_by': session.user if my_rooms else None}
        blockings = get_room_blockings(**filters)
        return jsonify(blockings_schema.dump(blockings).data)
Пример #12
0
class RHSearchRooms(RHRoomBookingBase):
    @use_args(
        dict(
            search_room_args, **{
                'unavailable': fields.Bool(missing=False),
                'admin_override_enabled': fields.Bool(missing=False)
            }))
    def _process(self, args):
        filter_availability = all(x in args for x in ('start_dt', 'end_dt',
                                                      'repeat_frequency',
                                                      'repeat_interval'))
        only_unavailable = args.pop('unavailable')
        admin_override_enabled = args.pop('admin_override_enabled')
        if not filter_availability:
            availability = None
            if only_unavailable:
                raise UnprocessableEntity(
                    'Required data to filter by availability is not present')
        else:
            availability = not only_unavailable

        search_query = search_for_rooms(args,
                                        allow_admin=admin_override_enabled,
                                        availability=availability)
        room_ids = [id_ for id_, in search_query.with_entities(Room.id)]
        if filter_availability:
            room_ids_without_availability_filter = [
                id_ for id_, in search_for_rooms(
                    args, allow_admin=admin_override_enabled).with_entities(
                        Room.id)
            ]
        else:
            room_ids_without_availability_filter = room_ids
        return jsonify(rooms=room_ids,
                       rooms_without_availability_filter=
                       room_ids_without_availability_filter,
                       total=len(room_ids_without_availability_filter),
                       availability_days=self._get_date_range(args))

    def _get_date_range(self, filters):
        try:
            start_dt, end_dt = filters['start_dt'], filters['end_dt']
            repetition = filters['repeat_frequency'], filters[
                'repeat_interval']
        except KeyError:
            return None
        return [
            dt.date().isoformat()
            for dt in ReservationOccurrence.iter_start_time(
                start_dt, end_dt, repetition)
        ]
Пример #13
0
class CommunityUpdateAPI(HTTPEndpoint):
    @use_args({"demos": fields.Bool(), "community_type": fields.Str(),
               "match_start_webhook": fields.Str(min=5, max=255),
               "round_end_webhook": fields.Str(min=5, max=255),
               "match_end_webhook": fields.Str(min=5, max=255),
               "allow_api_access": fields.Bool(),
               "email": fields.Str(max=255)})
    @requires("is_owner")
    async def post(self, request: Request, parameters: dict) -> response:
        await request.state.community.update(**parameters)

        await (CommunityCache(request.state.community.community_name)).expire()

        return response()
Пример #14
0
class PlayersSchema(Schema):
    name = fields.Str(min=1, max=42, required=True)
    steam_id = fields.Str(min=64, max=64)
    team = fields.Int(required=True)
    alive = fields.Bool(required=True)
    ping = fields.Int(required=True)
    kills = fields.Int(required=True)
    headshots = fields.Int(required=True)
    assists = fields.Int(required=True)
    deaths = fields.Int(required=True)
    shots_fired = fields.Int(required=True)
    shots_hit = fields.Int(required=True)
    mvps = fields.Int(required=True)
    score = fields.Int(required=True)
    disconnected = fields.Bool(required=True)
Пример #15
0
class RequestSchema:
    # BIN creation v2
    BinV2POST = {
        "creator": fields.Str(
            required=True, validate=validate.Regexp("([0-9a-zA-Z .@_-]){2,60}")
        ),
        "title": fields.Str(
            required=True, validate=validate.Regexp("([0-9a-zA-Z .@_-]){1,60}")
        ),
        "data": fields.Str(required=True),
        "private": fields.Bool(required=True),
        "language": fields.Str(required=True)
    }
    BinV2GET = {
        "slug": fields.Str(
            required=True, validate=validate.Regexp("([0-9a-zA-Z .@_-]){2,60}")
        ),
    }
    BinLikes = {
        "slug": fields.Str(
            required=True, validate=validate.Regexp("([0-9a-zA-Z .@_-]){2,60}")
        )
    }
    BinViews = {
        "slug": fields.Str(
            required=True, validate=validate.Regexp("([0-9a-zA-Z .@_-]){2,60}")
        )
    }
Пример #16
0
    def _api_v1_versions_patch(
        self, version_uid: str, protected: fields.Bool(missing=None),
        labels: fields.DelimitedList(fields.Str(), missing=None)
    ) -> StringIO:
        version_uid_obj = VersionUid(version_uid)
        if labels is not None:
            label_add, label_remove = InputValidation.parse_and_validate_labels(
                labels)
        else:
            label_add, label_remove = [], []
        result = StringIO()
        with Benji(self._config) as benji_obj:
            try:
                if protected is not None:
                    benji_obj.protect(version_uid_obj, protected=protected)

                for name, value in label_add:
                    benji_obj.add_label(version_uid_obj, name, value)
                for name in label_remove:
                    benji_obj.rm_label(version_uid_obj, name)

                benji_obj.export_any(
                    {
                        'versions': [
                            benji_obj.get_version_by_uid(
                                version_uid=version_uid_obj)
                        ]
                    },
                    result,
                    ignore_relationships=[((Version, ), ('blocks', ))])
            except KeyError:
                response.status = f'410 Version {version_uid} not found.'

        return result
Пример #17
0
class RHUploadBackgroundImage(RHModifyDesignerTemplateBase):
    @use_kwargs({'background': fields.Bool(load_default=False)},
                location='query')
    def _process(self, background):
        f = request.files['file']
        filename = secure_filename(f.filename, 'image')
        data = BytesIO()
        shutil.copyfileobj(f, data)
        data.seek(0)
        try:
            image_type = Image.open(data).format.lower()
        except OSError:
            # Invalid image data
            return jsonify(error='Invalid image data!')
        data.seek(0)
        if image_type not in {'jpeg', 'gif', 'png'}:
            return jsonify(error='File format not accepted!')
        content_type = 'image/' + image_type
        image = DesignerImageFile(template=self.template,
                                  filename=filename,
                                  content_type=content_type)
        if background:
            self.template.background_image = image
        image.save(data)
        flash(_('The image has been uploaded'), 'success')
        return jsonify_data(image_id=image.id, image_url=image.download_url)
Пример #18
0
class FamilyTogethernessSchemeResource(Resource):

    grant_args = {
        'has_husband_wife': fields.Bool(required=True),
        'age_limit': fields.Int(required=True),
    }

    @use_args(grant_args, location='query')
    def get(self, args):
        """ List households and qualifying family members for Family Togetherness Bonus
        -Household with husband and wife
        -Has children younger than 18 years old
        """
        family_members_list = []
        data = []

        age_limit_param = args['age_limit']
        has_husband_wife = args['has_husband_wife']

        # convert age limit to datetime object
        date_limit = datetime.date.today(
        ) - dateutil.relativedelta.relativedelta(years=int(age_limit_param))

        # query to select members below age limit
        children_sub_q = FamilyMember.query.with_entities(FamilyMember.household_id).filter(
            FamilyMember.dob > date_limit).group_by(FamilyMember.household_id)

        # query to select husband and wife
        spouse_sub_q = FamilyMember.query.with_entities(FamilyMember.household_id).filter(
            FamilyMember.spouse_name != None).group_by(FamilyMember.household_id).having(func.count(
                FamilyMember.spouse_name) > 1)

        # query to exclude non-married members older than age limit
        older_sub_q = FamilyMember.query.with_entities(
            FamilyMember.name).filter((FamilyMember.dob <= date_limit) & FamilyMember.spouse_name == None)

        if has_husband_wife:
            query_result = FamilyMember.query.filter(
                FamilyMember.household_id.in_(children_sub_q) & FamilyMember.household_id.in_(spouse_sub_q) & ~FamilyMember.name.in_(older_sub_q))

        for x in query_result:
            result_dict = x.__dict__
            result_dict.pop('_sa_instance_state', None)
            data.append(result_dict)

        # group qualifying members based on household id
        data = sorted(data, key=operator.itemgetter("household_id"))
        outputList = []
        for i, g in itertools.groupby(data, key=operator.itemgetter("household_id")):
            outputList.append(list(g))

        household_list = generateFamilyMembersDict(outputList)

        return (
            {
                "data": household_list

            },
            HTTPStatus.OK,
        )
Пример #19
0
def make_sort_args(default=None, validator=None, default_hide_null=False, default_reverse_nulls=True, default_nulls_only=False):
    return {
        'sort': fields.Str(
            missing=default,
            validate=validator,
            description='Provide a field to sort by. Use - for descending order.',
        ),
        'sort_hide_null': fields.Bool(
            missing=default_hide_null,
            description='Hide null values on sorted column(s).'
        ),
        'sort_null_only': fields.Bool(
            missing=default_nulls_only,
            description='Toggle that filters out all rows having sort column that is non-null'
        )
    }
Пример #20
0
 def switch(case):
     return {
         int: wf.Int(missing=None),
         float: wf.Float(missing=None),
         bool: wf.Bool(missing=None),
         list: wf.DelimitedList(wf.Str(), delimiter=',', missing=[]),
     }.get(case)
Пример #21
0
    def _protect(
        self, version_uid: str, protected: fields.Bool(missing=None),
        labels: fields.DelimitedList(fields.Str(), missing=None)
    ) -> StringIO:
        version_uid_obj = VersionUid(version_uid)
        if labels is not None:
            label_add, label_remove = InputValidation.parse_and_validate_labels(
                labels)
        else:
            label_add, label_remove = [], []
        benji_obj = None
        try:
            benji_obj = Benji(self._config)
            if protected is True:
                benji_obj.protect(version_uid_obj)
            elif protected is False:
                benji_obj.unprotect(version_uid_obj)

            for name, value in label_add:
                benji_obj.add_label(version_uid_obj, name, value)
            for name in label_remove:
                benji_obj.rm_label(version_uid_obj, name)

            result = StringIO()
            benji_obj.export_any(
                {'versions': [benji_obj.ls(version_uid=version_uid_obj)]},
                result,
                ignore_relationships=[((Version, ), ('blocks', ))])

            return result
        finally:
            if benji_obj:
                benji_obj.close()
Пример #22
0
 def get_dbs(
   cls, admin=None, active=None, verified=None, permissions=None, **kwargs
 ):
   args = parser.parse({
     'admin': wf.Bool(missing=None),
     'active': wf.Bool(missing=None),
     'verified': wf.Bool(missing=None),
     'permissions': wf.DelimitedList(wf.Str(), delimiter=',', missing=[]),
   })
   return super(User, cls).get_dbs(
     admin=admin or args['admin'],
     active=active or args['active'],
     verified=verified or args['verified'],
     permissions=permissions or args['permissions'],
     **kwargs
   )
Пример #23
0
class RHDisconnectService(RHEditingManagementBase):
    """Disconnect the event from the editing workflow service."""
    @use_kwargs({
        'force': fields.Bool(missing=False),
    })
    def _process(self, force):
        if not editing_settings.get(self.event, 'service_url'):
            raise BadRequest('Service URL not set')
        status = service_get_status(self.event)
        notify_service = True
        if status['error']:
            if not force:
                # this only happens if the service went down between loading
                # the page and sending the disconnect request
                raise BadRequest('Cannot disconnect service')
            notify_service = False
        elif not status['status']['can_disconnect']:
            raise BadRequest('Cannot disconnect service')
        if notify_service:
            try:
                service_handle_disconnected(self.event)
            except ServiceRequestFailed as exc:
                raise ServiceUnavailable(
                    _('Could not disconnect event from service: {}').format(
                        exc))
        editing_settings.delete(self.event, 'service_url', 'service_token')
        return '', 204
Пример #24
0
class RHRegistrationFormCheckEmail(RHRegistrationFormBase):
    """Check how an email will affect the registration."""

    ALLOW_PROTECTED_EVENT = True

    @use_kwargs({
        'email': fields.String(required=True),
        'update': UUIDString(load_default=None),
        'management': fields.Bool(load_default=False),
    }, location='query')
    def _process_args(self, email, update, management):
        RHRegistrationFormBase._process_args(self)
        self.email = email.lower()
        self.update = update
        self.management = management
        self.existing_registration = self.regform.get_registration(uuid=self.update) if self.update else None

    def _check_access(self):
        if not self.existing_registration:
            RHRegistrationFormBase._check_access(self)

    def _process(self):
        if self.update:
            return jsonify(check_registration_email(self.regform, self.email, self.existing_registration,
                                                    management=self.management))
        else:
            return jsonify(check_registration_email(self.regform, self.email, management=self.management))
Пример #25
0
 def _cleanup(self, override_lock: fields.Bool(missing=False)) -> None:
     benji_obj = None
     try:
         benji_obj = Benji(self._config)
         benji_obj.cleanup(override_lock=override_lock)
     finally:
         if benji_obj:
             benji_obj.close()
Пример #26
0
class RHRoomBlockings(RHRoomBookingBase):
    @use_kwargs({
        'start_dt': fields.Date(),
        'end_dt': fields.Date(),
        'blockings_in_my_rooms': fields.Bool(),
        'my_blockings': fields.Bool()
    })
    def _process(self, start_dt, end_dt, blockings_in_my_rooms, my_blockings):
        filters = {
            'start_dt': start_dt,
            'end_dt': end_dt,
            'created_by': session.user if my_blockings else None,
            'in_rooms_owned_by':
            session.user if blockings_in_my_rooms else None
        }
        blockings = get_room_blockings(**filters)
        return jsonify(blockings_schema.dump(blockings).data)
Пример #27
0
class RHGroupSearch(RHProtected):
    @use_kwargs({
        'name': fields.Str(required=True),
        'exact': fields.Bool(missing=False),
    })
    def _process(self, name, exact):
        groups = GroupProxy.search(name, exact=exact)
        total = len(groups)
        return jsonify(groups=[serialize_group(group) for group in groups[:10]], total=total)
Пример #28
0
class UserSchema(ModelSchema):
    is_admin = fields.Bool()
    publisher = fields.Nested(
        lambda: PublisherSchema(only=('id', 'name')),
        many=False,
    )

    class Meta:
        model = User
        exclude = ['password']
class PlayerTitlesFinals(Resource):
    args = {
        'singles': fields.Bool(missing=True),
        'years': fields.Str(missing="*")
    }

    @use_kwargs(args)
    def get(self, name, singles, years):
        name = parse_player_name(name)
        return parse_player_titles_page(name, singles, years)
Пример #30
0
 def _api_v1_versions_metadata_backup_create(
     self, filter_expression: fields.Str(missing=None),
     force: fields.Bool(missing=False)
 ) -> None:
     with Benji(self._config) as benji_obj:
         version_uid_objs = [
             version.uid for version in benji_obj.find_versions_with_filter(
                 filter_expression)
         ]
         benji_obj.metadata_backup(version_uid_objs, overwrite=force)