Mercurial > kallithea
changeset 6316:bf3546d1cd77
db: clean up SQLAlchemy session flushes
Many calls to Session().flush() were completely superfluous and have
been removed. (See also the note on "flush" in the contributor docs.)
For the remaining calls, a comment has been added to explain why it's
necessary.
author | Søren Løvborg <sorenl@unity3d.com> |
---|---|
date | Wed, 09 Nov 2016 14:17:34 +0100 |
parents | 2d5fecba40ed |
children | 36e22160e5e5 |
files | kallithea/lib/auth_modules/__init__.py kallithea/model/gist.py kallithea/model/user.py kallithea/model/user_group.py kallithea/tests/models/test_settings.py |
diffstat | 5 files changed, 15 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- a/kallithea/lib/auth_modules/__init__.py Mon Nov 07 14:51:12 2016 +0100 +++ b/kallithea/lib/auth_modules/__init__.py Wed Nov 09 14:17:34 2016 +0100 @@ -288,7 +288,6 @@ extern_name=user_data["extern_name"], extern_type=self.name ) - Session().flush() # enforce user is just in given groups, all of them has to be ones # created from plugins. We store this info in _group_data JSON field groups = user_data['groups'] or []
--- a/kallithea/model/gist.py Mon Nov 07 14:51:12 2016 +0100 +++ b/kallithea/model/gist.py Wed Nov 09 14:17:34 2016 +0100 @@ -122,7 +122,7 @@ gist.gist_expires = gist_expires gist.gist_type = safe_unicode(gist_type) self.sa.add(gist) - self.sa.flush() + self.sa.flush() # make database assign gist.gist_id if gist_type == Gist.GIST_PUBLIC: # use DB ID for easy to use GIST ID gist_id = safe_unicode(gist.gist_id) @@ -211,8 +211,6 @@ gist.gist_expires = gist_expires gist.owner = owner gist.gist_type = gist_type - self.sa.add(gist) - self.sa.flush() message = 'updated file' message += 's: ' if len(gist_mapping) > 1 else ': '
--- a/kallithea/model/user.py Mon Nov 07 14:51:12 2016 +0100 +++ b/kallithea/model/user.py Wed Nov 09 14:17:34 2016 +0100 @@ -92,7 +92,8 @@ setattr(new_user, k, v) new_user.api_key = generate_api_key() - self.sa.add(new_user) + Session().add(new_user) + Session().flush() # make database assign new_user.user_id log_create_user(new_user.get_dict(), cur_user) return new_user @@ -164,10 +165,13 @@ new_user.password = get_crypt_password(password) \ if password else '' - self.sa.add(new_user) + if user is None: + Session().add(new_user) + Session().flush() # make database assign new_user.user_id if not edit: log_create_user(new_user.get_dict(), cur_user) + return new_user except (DatabaseError,): log.error(traceback.format_exc()) @@ -182,9 +186,6 @@ form_data['extern_name'] = '' new_user = self.create(form_data) - self.sa.add(new_user) - self.sa.flush() - # notification to admins subject = _('New user registration') body = (
--- a/kallithea/model/user_group.py Mon Nov 07 14:51:12 2016 +0100 +++ b/kallithea/model/user_group.py Wed Nov 09 14:17:34 2016 +0100 @@ -132,18 +132,19 @@ for k, v in form_data.items(): if k == 'users_group_members': - user_group.members = [] - self.sa.flush() members_list = [] if v: v = [v] if isinstance(v, basestring) else v for u_id in set(v): member = UserGroupMember(user_group.users_group_id, u_id) members_list.append(member) - setattr(user_group, 'members', members_list) + self.sa.add(member) + user_group.members = members_list setattr(user_group, k, v) - self.sa.add(user_group) + # Flush to make db assign users_group_member_id to newly + # created UserGroupMembers. + self.sa.flush() except Exception: log.error(traceback.format_exc()) raise
--- a/kallithea/tests/models/test_settings.py Mon Nov 07 14:51:12 2016 +0100 +++ b/kallithea/tests/models/test_settings.py Wed Nov 09 14:17:34 2016 +0100 @@ -7,7 +7,7 @@ def test_passing_list_setting_value_results_in_string_valued_setting(): assert Setting.get_by_name(name) is None setting = Setting.create_or_update(name, ['spam', 'eggs']) - Session().flush() + Session().flush() # must flush so we can delete it below try: assert Setting.get_by_name(name) is not None # Quirk: list value is stringified. @@ -16,23 +16,21 @@ assert Setting.get_by_name(name).app_settings_type == 'unicode' finally: Session().delete(setting) - Session().flush() def test_list_valued_setting_creation_requires_manual_value_formatting(): assert Setting.get_by_name(name) is None # Quirk: need manual formatting of list setting value. setting = Setting.create_or_update(name, 'spam,eggs', type='list') - Session().flush() + Session().flush() # must flush so we can delete it below try: assert setting.app_settings_value == ['spam', 'eggs'] finally: Session().delete(setting) - Session().flush() def test_list_valued_setting_update(): assert Setting.get_by_name(name) is None setting = Setting.create_or_update(name, 'spam', type='list') - Session().flush() + Session().flush() # must flush so we can delete it below try: assert setting.app_settings_value == [u'spam'] # Assign back setting value. @@ -43,4 +41,3 @@ assert setting.app_settings_value == ["[u\"[u'spam']\"]"] finally: Session().delete(setting) - Session().flush()