コード例 #1
0
ファイル: memory.py プロジェクト: theruziev/sanic_session
    def __init__(
        self,
        domain: str = None,
        expiry: int = 2592000,
        httponly: bool = True,
        cookie_name: str = "session",
        prefix: str = "session:",
        sessioncookie: bool = False,
        samesite: str = None,
        session_name="session",
        secure: bool = False,
    ):

        super().__init__(
            expiry=expiry,
            prefix=prefix,
            cookie_name=cookie_name,
            domain=domain,
            httponly=httponly,
            sessioncookie=sessioncookie,
            samesite=samesite,
            session_name=session_name,
            secure=secure,
        )
        self.session_store = ExpiringDict()
コード例 #2
0
 def __init__(self,
              domain: str = None,
              expiry: int = 2592000,
              httponly: bool = True,
              cookie_name: str = 'session',
              prefix: str = 'session:'):
     self.expiry = expiry
     self.prefix = prefix
     self.cookie_name = cookie_name
     self.domain = domain
     self.httponly = httponly
     self.session_store = ExpiringDict()
コード例 #3
0
def test_deletes_values():
    e = ExpiringDict()
    e.set('foo', 'bar', 300)
    e.delete('foo')

    assert e.get('foo') is None
    assert e.expiry_times.get('foo') is None
コード例 #4
0
ファイル: test_utils.py プロジェクト: theruziev/sanic_session
def test_deletes_values():
    e = ExpiringDict()
    e.set("foo", "bar", 300)
    e.delete("foo")

    assert e.get("foo") is None
    assert e.expiry_times.get("foo") is None
コード例 #5
0
def test_expires_value_if_after_expiry():
    e = ExpiringDict()
    e.set('foo', 'bar', 300)
    e.expiry_times['foo'] = 0

    assert e.get('foo') is None
    assert e.expiry_times.get('foo') is None
コード例 #6
0
ファイル: test_utils.py プロジェクト: theruziev/sanic_session
def test_expires_value_if_after_expiry():
    e = ExpiringDict()
    e.set("foo", "bar", 300)
    e.expiry_times["foo"] = 0

    assert e.get("foo") is None
    assert e.expiry_times.get("foo") is None
コード例 #7
0
ファイル: memory.py プロジェクト: theruziev/sanic_session
class InMemorySessionInterface(BaseSessionInterface):
    def __init__(
        self,
        domain: str = None,
        expiry: int = 2592000,
        httponly: bool = True,
        cookie_name: str = "session",
        prefix: str = "session:",
        sessioncookie: bool = False,
        samesite: str = None,
        session_name="session",
        secure: bool = False,
    ):

        super().__init__(
            expiry=expiry,
            prefix=prefix,
            cookie_name=cookie_name,
            domain=domain,
            httponly=httponly,
            sessioncookie=sessioncookie,
            samesite=samesite,
            session_name=session_name,
            secure=secure,
        )
        self.session_store = ExpiringDict()

    async def _get_value(self, prefix, sid):
        return self.session_store.get(self.prefix + sid)

    async def _delete_key(self, key):
        if key in self.session_store:
            self.session_store.delete(key)

    async def _set_value(self, key, data):
        self.session_store.set(key, data, self.expiry)
    def __init__(
        self,
        domain: str = None,
        expiry: int = 2592000,
        httponly: bool = True,
        cookie_name: str = "session",
        prefix: str = "session:",
        sessioncookie: bool = False,
        samesite: str = None,
        session_name="session",
        secure: bool = False,
        directory: str = None,
        filename: str = None
    ):

        super().__init__(
            expiry=expiry,
            prefix=prefix,
            cookie_name=cookie_name,
            domain=domain,
            httponly=httponly,
            sessioncookie=sessioncookie,
            samesite=samesite,
            session_name=session_name,
            secure=secure,
        )
        if directory is None:
            directory = path.curdir
        if filename is None:
            filename = "sessionstore.pickle"
        self._fss_filename = path.join(directory, filename)
        try:
            _cache = self._fss_unpickler()
        except FileNotFoundError:
            _cache = ExpiringDict()
            self._fss_pickler(_cache)
コード例 #9
0
def test_returns_value_if_before_expiry():
    e = ExpiringDict()
    e.set('foo', 'bar', 300)
    assert e.get('foo') is not None
コード例 #10
0
def test_sets_expiry_internally():
    e = ExpiringDict()
    e.set('foo', 'bar', 300)
    assert e.expiry_times['foo'] is not None
コード例 #11
0
class InMemorySessionInterface(BaseSessionInterface):
    def __init__(self,
                 domain: str = None,
                 expiry: int = 2592000,
                 httponly: bool = True,
                 cookie_name: str = 'session',
                 prefix: str = 'session:',
                 sessioncookie: bool = False):
        self.expiry = expiry
        self.prefix = prefix
        self.cookie_name = cookie_name
        self.domain = domain
        self.httponly = httponly
        self.session_store = ExpiringDict()
        self.sessioncookie = sessioncookie

    async def open(self, request) -> SessionDict:
        """Opens an in-memory session onto the request. Restores the client's session
        from memory if one exists.The session will be available on
        `request.session`.


        Args:
            request (sanic.request.Request):
                The request, which a session will be opened onto.

        Returns:
            dict:
                the client's session data,
                attached as well to `request.session`.
        """
        sid = request.cookies.get(self.cookie_name)

        if not sid:
            sid = uuid.uuid4().hex
            session_dict = SessionDict(sid=sid)
        else:
            val = self.session_store.get(self.prefix + sid)

            if val is not None:
                data = ujson.loads(val)
                session_dict = SessionDict(data, sid=sid)
            else:
                session_dict = SessionDict(sid=sid)

        request['session'] = session_dict
        return session_dict

    async def save(self, request, response) -> None:
        """Saves the session to the in-memory session store.

        Args:
            request (sanic.request.Request):
                The sanic request which has an attached session.
            response (sanic.response.Response):
                The Sanic response. Cookies with the appropriate expiration
                will be added onto this response.

        Returns:
            None
        """
        if 'session' not in request:
            return

        key = self.prefix + request['session'].sid
        if not request['session']:
            if key in self.session_store:
                self.session_store.delete(key)

            if request['session'].modified:
                self._delete_cookie(request, response)

            return

        val = ujson.dumps(dict(request['session']))

        self.session_store.set(key, val, self.expiry)

        self._set_cookie_expiration(request, response)

    def get_session(self, sid):
        key = self.prefix + sid
        val = self.session_store.get(key)

        if val:
            return SessionDict(ujson.loads(val), sid=sid)
コード例 #12
0
ファイル: test_utils.py プロジェクト: theruziev/sanic_session
def test_returns_value_if_before_expiry():
    e = ExpiringDict()
    e.set("foo", "bar", 300)
    assert e.get("foo") is not None
コード例 #13
0
ファイル: test_utils.py プロジェクト: theruziev/sanic_session
def test_sets_expiry_internally():
    e = ExpiringDict()
    e.set("foo", "bar", 300)
    assert e.expiry_times["foo"] is not None