Skip to content

Commit 07ecd15

Browse files
feat(mongo): added back support for mongodb < v4
pallets-eco#136 pallets-eco#135
1 parent 924dbcf commit 07ecd15

File tree

1 file changed

+25
-10
lines changed

1 file changed

+25
-10
lines changed

flask_session/sessions.py

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -452,14 +452,16 @@ def __init__(
452452
permanent=True,
453453
tz_aware=False,
454454
):
455+
import pymongo
456+
455457
if client is None:
456-
from pymongo import MongoClient
457458

458459
if tz_aware:
459-
client = MongoClient(tz_aware=tz_aware)
460+
client = pymongo.MongoClient(tz_aware=tz_aware)
460461
else:
461-
client = MongoClient()
462+
client = pymongo.MongoClient()
462463

464+
self.use_deprecated_method = int(pymongo.version.split(".")[0]) < 4
463465
self.client = client
464466
self.store = client[db][collection]
465467
self.key_prefix = key_prefix
@@ -495,7 +497,10 @@ def open_session(self, app, request):
495497

496498
if document and document.get("expiration") <= utc_now:
497499
# Delete expired session
498-
self.store.delete_one({"id": store_id})
500+
if self.use_deprecated_method:
501+
self.store.remove({"id": store_id})
502+
else:
503+
self.store.delete_one({"id": store_id})
499504
document = None
500505

501506
if document is not None:
@@ -515,7 +520,10 @@ def save_session(self, app, session, response):
515520
store_id = self.key_prefix + session.sid
516521
if not session:
517522
if session.modified:
518-
self.store.delete_one({"id": store_id})
523+
if self.use_deprecated_method:
524+
self.store.remove({"id": store_id})
525+
else:
526+
self.store.delete_one({"id": store_id})
519527
response.delete_cookie(
520528
app.config["SESSION_COOKIE_NAME"], domain=domain, path=path
521529
)
@@ -528,11 +536,18 @@ def save_session(self, app, session, response):
528536
conditional_cookie_kwargs["samesite"] = self.get_cookie_samesite(app)
529537
expires = self.get_expiration_time(app, session)
530538
value = self.serializer.dumps(dict(session))
531-
self.store.update_one(
532-
{"id": store_id},
533-
{"$set": {"id": store_id, "val": value, "expiration": expires}},
534-
True,
535-
)
539+
if self.use_deprecated_method:
540+
self.store.update(
541+
{"id": store_id},
542+
{"id": store_id, "val": value, "expiration": expires},
543+
True,
544+
)
545+
else:
546+
self.store.update_one(
547+
{"id": store_id},
548+
{"$set": {"id": store_id, "val": value, "expiration": expires}},
549+
True,
550+
)
536551
if self.use_signer:
537552
session_id = self._get_signer(app).sign(want_bytes(session.sid))
538553
else:

0 commit comments

Comments
 (0)