# HG changeset patch # User Thomas De Schampheleire # Date 2016-09-25 15:06:34 # Node ID d75d9ce1320da84190efda61ce95058bbe9837bb # Parent 19c9f4f5428ed35c2be2444ff97ef5d90f3040e8 model: move code from __init__.py to base.py Having too much code, in particular too much imports, inside a package's __init__.py is a recipe for circular imports, and considered bad practice in Python [1] Move out everything from kallithea/model/__init__.py to a new file kallithea/model/base.py and adapt the existing imports. [1] http://docs.python-guide.org/en/latest/writing/structure/#packages diff --git a/kallithea/config/environment.py b/kallithea/config/environment.py --- a/kallithea/config/environment.py +++ b/kallithea/config/environment.py @@ -35,7 +35,7 @@ from kallithea.lib.utils import repo2db_ load_rcextensions, check_git_version, set_vcs_config, set_indexer_config from kallithea.lib.utils2 import engine_from_config, str2bool from kallithea.lib.db_manage import DbManage -from kallithea.model import init_model +from kallithea.model.base import init_model from kallithea.model.scm import ScmModel log = logging.getLogger(__name__) diff --git a/kallithea/lib/celerylib/__init__.py b/kallithea/lib/celerylib/__init__.py --- a/kallithea/lib/celerylib/__init__.py +++ b/kallithea/lib/celerylib/__init__.py @@ -37,7 +37,7 @@ from decorator import decorator from kallithea import CELERY_ON, CELERY_EAGER from kallithea.lib.utils2 import safe_str from kallithea.lib.pidlock import DaemonLock, LockHeld -from kallithea.model import init_model +from kallithea.model.base import init_model from kallithea.model import meta from sqlalchemy import engine_from_config diff --git a/kallithea/lib/db_manage.py b/kallithea/lib/db_manage.py --- a/kallithea/lib/db_manage.py +++ b/kallithea/lib/db_manage.py @@ -38,7 +38,7 @@ import alembic.command from kallithea.lib.paster_commands.common import ask_ok from kallithea.model.user import UserModel -from kallithea.model import init_model +from kallithea.model.base import init_model from kallithea.model.db import User, Permission, Ui, \ Setting, UserToPerm, RepoGroup, \ UserRepoGroupToPerm, CacheInvalidation, Repository diff --git a/kallithea/lib/hooks.py b/kallithea/lib/hooks.py --- a/kallithea/lib/hooks.py +++ b/kallithea/lib/hooks.py @@ -384,7 +384,7 @@ def handle_git_receive(repo_path, revs, from paste.deploy import appconfig from sqlalchemy import engine_from_config from kallithea.config.environment import load_environment - from kallithea.model import init_model + from kallithea.model.base import init_model from kallithea.model.db import Ui from kallithea.lib.utils import make_ui extras = _extract_extras(env) diff --git a/kallithea/lib/paster_commands/common.py b/kallithea/lib/paster_commands/common.py --- a/kallithea/lib/paster_commands/common.py +++ b/kallithea/lib/paster_commands/common.py @@ -100,7 +100,7 @@ class BasePasterCommand(Command): logging.config.fileConfig(self.path_to_ini_file) from pylons import config - from kallithea.model import init_model + from kallithea.model.base import init_model from kallithea.lib.utils2 import engine_from_config setup_cache_regions(config) engine = engine_from_config(config, 'sqlalchemy.') diff --git a/kallithea/model/__init__.py b/kallithea/model/__init__.py --- a/kallithea/model/__init__.py +++ b/kallithea/model/__init__.py @@ -23,87 +23,4 @@ Original author and date, and relevant c :author: marcink :copyright: (c) 2013 RhodeCode GmbH, and others. :license: GPLv3, see LICENSE.md for more details. - - -:example: - - .. code-block:: python - - from paste.deploy import appconfig - from pylons import config - from sqlalchemy import engine_from_config - from kallithea.config.environment import load_environment - - conf = appconfig('config:development.ini', relative_to = './../../') - load_environment(conf.global_conf, conf.local_conf) - - engine = engine_from_config(config, 'sqlalchemy.') - init_model(engine) - # RUN YOUR CODE HERE - """ - - -import logging -from kallithea.model import meta -from kallithea.lib.utils2 import obfuscate_url_pw - -log = logging.getLogger(__name__) - - -def init_model(engine): - """ - Initializes db session, bind the engine with the metadata, - Call this before using any of the tables or classes in the model, - preferably once in application start - - :param engine: engine to bind to - """ - engine_str = obfuscate_url_pw(str(engine.url)) - log.info("initializing db for %s", engine_str) - meta.Base.metadata.bind = engine - - -class BaseModel(object): - """ - Base Model for all Kallithea models, it adds sql alchemy session - into instance of model - - :param sa: If passed it reuses this session instead of creating a new one - """ - - def __init__(self, sa=None): - if sa is not None: - self.sa = sa - else: - self.sa = meta.Session() - - def _get_user(self, user): - """ - Helper method to get user by ID, or username fallback - - :param user: UserID, username, or User instance - """ - from kallithea.model.db import User - return User.guess_instance(user, - callback=User.get_by_username) - - def _get_repo(self, repository): - """ - Helper method to get repository by ID, or repository name - - :param repository: RepoID, repository name or Repository Instance - """ - from kallithea.model.db import Repository - return Repository.guess_instance(repository, - callback=Repository.get_by_repo_name) - - def _get_perm(self, permission): - """ - Helper method to get permission by ID, or permission name - - :param permission: PermissionID, permission_name or Permission instance - """ - from kallithea.model.db import Permission - return Permission.guess_instance(permission, - callback=Permission.get_by_key) diff --git a/kallithea/model/api_key.py b/kallithea/model/api_key.py --- a/kallithea/model/api_key.py +++ b/kallithea/model/api_key.py @@ -30,7 +30,7 @@ import logging from sqlalchemy import or_ from kallithea.lib.utils2 import generate_api_key -from kallithea.model import BaseModel +from kallithea.model.base import BaseModel from kallithea.model.db import UserApiKeys from kallithea.model.meta import Session diff --git a/kallithea/model/__init__.py b/kallithea/model/base.py copy from kallithea/model/__init__.py copy to kallithea/model/base.py --- a/kallithea/model/__init__.py +++ b/kallithea/model/base.py @@ -12,8 +12,8 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . """ -kallithea.model -~~~~~~~~~~~~~~~ +kallithea.model.base +~~~~~~~~~~~~~~~~~~~~ The application's model objects diff --git a/kallithea/model/changeset_status.py b/kallithea/model/changeset_status.py --- a/kallithea/model/changeset_status.py +++ b/kallithea/model/changeset_status.py @@ -28,7 +28,7 @@ Original author and date, and relevant c import logging from sqlalchemy.orm import joinedload -from kallithea.model import BaseModel +from kallithea.model.base import BaseModel from kallithea.model.db import ChangesetStatus, PullRequest from kallithea.lib.exceptions import StatusChangeOnClosedPullRequestError diff --git a/kallithea/model/comment.py b/kallithea/model/comment.py --- a/kallithea/model/comment.py +++ b/kallithea/model/comment.py @@ -32,7 +32,7 @@ from collections import defaultdict from kallithea.lib.utils2 import extract_mentioned_users, safe_unicode from kallithea.lib import helpers as h -from kallithea.model import BaseModel +from kallithea.model.base import BaseModel from kallithea.model.db import ChangesetComment, User, \ Notification, PullRequest from kallithea.model.notification import NotificationModel diff --git a/kallithea/model/gist.py b/kallithea/model/gist.py --- a/kallithea/model/gist.py +++ b/kallithea/model/gist.py @@ -34,7 +34,7 @@ import shutil from kallithea.lib.utils2 import safe_unicode, unique_id, safe_int, \ time_to_datetime, AttributeDict from kallithea.lib.compat import json -from kallithea.model import BaseModel +from kallithea.model.base import BaseModel from kallithea.model.db import Gist from kallithea.model.repo import RepoModel from kallithea.model.scm import ScmModel diff --git a/kallithea/model/notification.py b/kallithea/model/notification.py --- a/kallithea/model/notification.py +++ b/kallithea/model/notification.py @@ -36,7 +36,7 @@ from sqlalchemy.orm import joinedload, s import kallithea from kallithea.lib import helpers as h from kallithea.lib.utils2 import safe_unicode -from kallithea.model import BaseModel +from kallithea.model.base import BaseModel from kallithea.model.db import Notification, User, UserNotification from kallithea.model.meta import Session diff --git a/kallithea/model/permission.py b/kallithea/model/permission.py --- a/kallithea/model/permission.py +++ b/kallithea/model/permission.py @@ -31,7 +31,7 @@ import traceback from sqlalchemy.exc import DatabaseError -from kallithea.model import BaseModel +from kallithea.model.base import BaseModel from kallithea.model.db import User, Permission, UserToPerm, UserRepoToPerm, \ UserRepoGroupToPerm, UserUserGroupToPerm from kallithea.lib.utils2 import str2bool diff --git a/kallithea/model/pull_request.py b/kallithea/model/pull_request.py --- a/kallithea/model/pull_request.py +++ b/kallithea/model/pull_request.py @@ -35,7 +35,7 @@ from sqlalchemy.orm import joinedload from kallithea.model.meta import Session from kallithea.lib import helpers as h from kallithea.lib.exceptions import UserInvalidException -from kallithea.model import BaseModel +from kallithea.model.base import BaseModel from kallithea.model.db import PullRequest, PullRequestReviewers, Notification, \ ChangesetStatus, User from kallithea.model.notification import NotificationModel diff --git a/kallithea/model/repo.py b/kallithea/model/repo.py --- a/kallithea/model/repo.py +++ b/kallithea/model/repo.py @@ -41,7 +41,7 @@ from kallithea.lib.utils2 import LazyPro from kallithea.lib.caching_query import FromCache from kallithea.lib.hooks import log_delete_repository -from kallithea.model import BaseModel +from kallithea.model.base import BaseModel from kallithea.model.db import Repository, UserRepoToPerm, UserGroupRepoToPerm, \ UserRepoGroupToPerm, UserGroupRepoGroupToPerm, User, Permission, \ Statistics, UserGroup, Ui, RepoGroup, RepositoryField diff --git a/kallithea/model/repo_group.py b/kallithea/model/repo_group.py --- a/kallithea/model/repo_group.py +++ b/kallithea/model/repo_group.py @@ -34,7 +34,7 @@ import datetime from kallithea.lib.utils2 import LazyProperty -from kallithea.model import BaseModel +from kallithea.model.base import BaseModel from kallithea.model.db import RepoGroup, Ui, UserRepoGroupToPerm, \ User, Permission, UserGroupRepoGroupToPerm, UserGroup, Repository diff --git a/kallithea/model/repo_permission.py b/kallithea/model/repo_permission.py --- a/kallithea/model/repo_permission.py +++ b/kallithea/model/repo_permission.py @@ -24,7 +24,7 @@ Original author and date, and relevant c """ import logging -from kallithea.model import BaseModel +from kallithea.model.base import BaseModel from kallithea.model.db import UserRepoToPerm, UserGroupRepoToPerm, \ Permission diff --git a/kallithea/model/scm.py b/kallithea/model/scm.py --- a/kallithea/model/scm.py +++ b/kallithea/model/scm.py @@ -53,7 +53,7 @@ from kallithea.lib.auth import HasRepoPe HasUserGroupPermissionAny, HasPermissionAny, HasPermissionAny from kallithea.lib.utils import get_filesystem_repos, make_ui, \ action_logger -from kallithea.model import BaseModel +from kallithea.model.base import BaseModel from kallithea.model.db import Repository, Ui, CacheInvalidation, \ UserFollowing, UserLog, User, RepoGroup, PullRequest from kallithea.lib.hooks import log_push_action diff --git a/kallithea/model/user.py b/kallithea/model/user.py --- a/kallithea/model/user.py +++ b/kallithea/model/user.py @@ -39,7 +39,7 @@ from sqlalchemy.exc import DatabaseError from kallithea.lib.utils2 import safe_str, generate_api_key, get_current_authuser from kallithea.lib.caching_query import FromCache -from kallithea.model import BaseModel +from kallithea.model.base import BaseModel from kallithea.model.db import User, UserToPerm, Notification, \ UserEmailMap, UserIpMap from kallithea.lib.exceptions import DefaultUserException, \ diff --git a/kallithea/model/user_group.py b/kallithea/model/user_group.py --- a/kallithea/model/user_group.py +++ b/kallithea/model/user_group.py @@ -27,7 +27,7 @@ Original author and date, and relevant c import logging import traceback -from kallithea.model import BaseModel +from kallithea.model.base import BaseModel from kallithea.model.db import UserGroupMember, UserGroup, \ UserGroupRepoToPerm, Permission, UserGroupToPerm, User, UserUserGroupToPerm, \ UserGroupUserGroupToPerm diff --git a/kallithea/tests/scripts/manual_test_concurrency.py b/kallithea/tests/scripts/manual_test_concurrency.py --- a/kallithea/tests/scripts/manual_test_concurrency.py +++ b/kallithea/tests/scripts/manual_test_concurrency.py @@ -39,7 +39,7 @@ from paste.deploy import appconfig from sqlalchemy import engine_from_config from kallithea.lib.utils import setup_cache_regions -from kallithea.model import init_model +from kallithea.model.base import init_model from kallithea.model import meta from kallithea.model.db import User, Repository, Ui from kallithea.lib.auth import get_crypt_password