Skip to content

Commit 739233e

Browse files
committed
fix #36 upgrade cached user to local user
1 parent d7b0aea commit 739233e

3 files changed

Lines changed: 20 additions & 3 deletions

File tree

sopy/auth/models.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,17 @@ def oauth_load(cls, token=None):
9797

9898
return o.se_update(data)
9999

100+
@classmethod
101+
def create_unique(cls, session, id):
102+
# if the site user was cached, manually upgrade it to a local user
103+
if SEUser.query.get(id) is not None:
104+
session.execute(cls.__table__.insert().values(id=id))
105+
return cls.query.get(id)
106+
107+
o = cls(id=id)
108+
session.add(o)
109+
return o
110+
100111

101112
user_group = db.Table(
102113
'user_group',

sopy/ext/sqlalchemy.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,13 @@ def __hash__(self):
3838
class UniqueMixin:
3939
"""Keep a cache of unique instances in memory so new instances can be safely created in bulk before they are committed."""
4040

41+
@classmethod
42+
def create_unique(cls, session, **kwargs):
43+
o = cls(**kwargs)
44+
session.add(o)
45+
return o
46+
47+
4148
@classmethod
4249
def get_unique(cls, **kwargs):
4350
g._unique_cache = cache = getattr(g, '_unique_cache', {})
@@ -54,8 +61,7 @@ def get_unique(cls, **kwargs):
5461
o = session.query(cls).filter_by(**kwargs).first()
5562

5663
if o is None:
57-
o = cls(**kwargs)
58-
session.add(o)
64+
o = cls.create_unique(session, **kwargs)
5965

6066
cache[key] = o
6167

sopy/se_data/models/models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class SEUser(ExternalIDModel):
1616
reputation = db.Column(db.Integer, nullable=False)
1717

1818
def __str__(self):
19-
return self.display_name
19+
return '{} {}'.format(self.id, self.display_name)
2020

2121
@classmethod
2222
def se_load(cls, ident, update=True):

0 commit comments

Comments
 (0)