def __init__(self, uid=None, force=False):
        """
        Keeps information about user.
        """
        def on_update(self):
            """ Changes own status when the user info is modified. """
            self.modified = True

        self.modified = False
        self.uid = uid
        self.req = self._get_request_info()
        acc = {}

        if uid > 0:
            data = self._login(uid, force)
            acc = self._precache(data, force)
        else:
            data = self._create_guest()

        self.info = CallbackDict(data, on_update)
        #FIXME remove req after everybody start using flask request.
        CombinedMultiDict.__init__(
            self, [self.req, self.info, acc,
                   dict(CFG_USER_DEFAULT_INFO)])
        self.save()
Exemple #2
0
    def _get_mimetype_params(self):
        def on_update(d):
            self.headers["Content-Type"] = dump_options_header(
                self.mimetype, d)

        d = parse_options_header(self.headers.get("content-type", ""))[1]
        return CallbackDict(d, on_update)
Exemple #3
0
    def _get_mimetype_params(self):
        def on_update(d):
            self.headers['Content-Type'] = \
                dump_options_header(self.mimetype, d)

        d = parse_options_header(self.headers.get('content-type', ''))[1]
        return CallbackDict(d, on_update)
Exemple #4
0
    def mimetype_params(self) -> Dict[str, str]:
        """Returns the params parsed from the Content-Type header."""
        def _on_update(value: Dict[str, Any]) -> None:
            self.headers["Content-Type"] = dump_options_header(
                self.mimetype, value)

        value = parse_options_header(self.headers.get("Content-Type"))[1]
        return CallbackDict(value, _on_update)
Exemple #5
0
    def __init__(
        self,
        name,
        import_name,
        static_folder=None,
        static_url_path=None,
        template_folder=None,
        url_prefix=None,
        subdomain=None,
        url_defaults=None,
        root_path=None,
        login_url=None,
        authorized_url=None,
        storage=None,
    ):

        bp_kwargs = dict(
            name=name,
            import_name=import_name,
            static_folder=static_folder,
            static_url_path=static_url_path,
            template_folder=template_folder,
            url_prefix=url_prefix,
            subdomain=subdomain,
            url_defaults=url_defaults,
            root_path=root_path,
        )
        # `root_path` didn't exist in 0.10, and will cause an error if it's
        # passed in that version. Only pass `root_path` if it's set.
        if bp_kwargs["root_path"] is None:
            del bp_kwargs["root_path"]
        flask.Blueprint.__init__(self, **bp_kwargs)

        login_url = login_url or "/{bp.name}"
        authorized_url = authorized_url or "/{bp.name}/authorized"

        self.add_url_rule(rule=login_url.format(bp=self),
                          endpoint="login",
                          view_func=self.login)
        self.add_url_rule(
            rule=authorized_url.format(bp=self),
            endpoint="authorized",
            view_func=self.authorized,
        )

        if storage is None:
            self.storage = SessionStorage()
        elif callable(storage):
            self.storage = storage()
        else:
            self.storage = storage

        self.logged_in_funcs = []
        self.from_config = {}
        invalidate_token = lambda d: invalidate_cached_property(
            self.session, "token")
        self.config = CallbackDict(on_update=invalidate_token)
        self.before_app_request(self.load_config)
Exemple #6
0
    def mimetype_params(self) -> t.Dict[str, str]:
        """The mimetype parameters as dict. For example if the
        content type is ``text/html; charset=utf-8`` the params would be
        ``{'charset': 'utf-8'}``.

        .. versionadded:: 0.5
        """
        def on_update(d):
            self.headers["Content-Type"] = dump_options_header(
                self.mimetype, d)

        d = parse_options_header(self.headers.get("content-type", ""))[1]
        return CallbackDict(d, on_update)
Exemple #7
0
        def propfunc(self):
            _prop = '_' + prop
            prop_f = prop + '_f'
            if hasattr(self, _prop):
                return getattr(self, _prop)

            def on_update(cd):
                setattr(self, prop_f, pickle.dumps(dict(cd)))

            d = {}
            try:
                d = pickle.loads(getattr(self, prop_f))
            except:
                pass
            setattr(self, _prop, CallbackDict(d, on_update=on_update))
            return getattr(self, _prop)
Exemple #8
0
    def __init__(self, name, import_name,
            static_folder=None, static_url_path=None, template_folder=None,
            url_prefix=None, subdomain=None, url_defaults=None, root_path=None,
            login_url=None, authorized_url=None, backend=None):

        bp_kwargs = dict(
            name=name,
            import_name=import_name,
            static_folder=static_folder,
            static_url_path=static_url_path,
            template_folder=template_folder,
            url_prefix=url_prefix,
            subdomain=subdomain,
            url_defaults=url_defaults,
            root_path=root_path,
        )
        # `root_path` didn't exist until 1.0
        if StrictVersion(flask.__version__) < StrictVersion('1.0'):
            del bp_kwargs["root_path"]
        flask.Blueprint.__init__(self, **bp_kwargs)

        login_url = login_url or "/{bp.name}"
        authorized_url = authorized_url or "/{bp.name}/authorized"

        self.add_url_rule(
            rule=login_url.format(bp=self),
            endpoint="login",
            view_func=self.login,
        )
        self.add_url_rule(
            rule=authorized_url.format(bp=self),
            endpoint="authorized",
            view_func=self.authorized,
        )

        if backend is None:
            self.backend = SessionBackend()
        elif callable(backend):
            self.backend = backend()
        else:
            self.backend = backend

        self.logged_in_funcs = []
        self.from_config = {}
        invalidate_token = lambda d: lazy.invalidate(self.session, "token")
        self.config = CallbackDict(on_update=invalidate_token)
        self.before_app_request(self.load_config)
Exemple #9
0
    def extra(self):
        if hasattr(self, '_extra_f'):
            return self._extra_f

        def on_update(d):
            try:
                self.extra_f = json.dumps(d)
            except:
                pass

        _extra_fdict = {}
        try:
            _extra_fdict = json.loads(self.extra_f)
        except:
            pass
        self._extra_f = CallbackDict(_extra_fdict, on_update=on_update)
        return self._extra_f
Exemple #10
0
    def __init__(
        self,
        name,
        import_name,
        *,
        static_folder=None,
        static_url_path=None,
        template_folder=None,
        url_prefix=None,
        subdomain=None,
        url_defaults=None,
        root_path=None,
        login_url=None,
        authorized_url=None,
        storage=None,
        rule_kwargs=None,
    ):

        bp_kwargs = dict(
            name=name,
            import_name=import_name,
            static_folder=static_folder,
            static_url_path=static_url_path,
            template_folder=template_folder,
            url_prefix=url_prefix,
            subdomain=subdomain,
            url_defaults=url_defaults,
            root_path=root_path,
        )
        flask.Blueprint.__init__(self, **bp_kwargs)

        login_url = login_url or "/{bp.name}"
        authorized_url = authorized_url or "/{bp.name}/authorized"
        rule_kwargs = rule_kwargs or {}

        self.add_url_rule(
            rule=login_url.format(bp=self),
            endpoint="login",
            view_func=self.login,
            **rule_kwargs,
        )
        self.add_url_rule(
            rule=authorized_url.format(bp=self),
            endpoint="authorized",
            view_func=self.authorized,
            **rule_kwargs,
        )

        if storage is None:
            self.storage = SessionStorage()
        elif callable(storage):
            self.storage = storage()
        else:
            self.storage = storage

        self.logged_in_funcs = []
        self.from_config = {}

        def invalidate_token(d):
            try:
                invalidate_cached_property(self.session, "token")
            except KeyError:
                pass

        self.config = CallbackDict(on_update=invalidate_token)
        self.before_app_request(self.load_config)