comparison rhodecode/model/scm.py @ 1530:04027bdb876c beta

Refactoring of model get functions
author Marcin Kuzminski <marcin@python-works.com>
date Sat, 08 Oct 2011 02:02:25 +0200
parents 4aba7be311e8
children e7c6341ad3cb
comparison
equal deleted inserted replaced
1529:0b268dd369ec 1530:04027bdb876c
20 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 20 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 # GNU General Public License for more details. 21 # GNU General Public License for more details.
22 # 22 #
23 # You should have received a copy of the GNU General Public License 23 # You should have received a copy of the GNU General Public License
24 # along with this program. If not, see <http://www.gnu.org/licenses/>. 24 # along with this program. If not, see <http://www.gnu.org/licenses/>.
25 import os
26 import time 25 import time
27 import traceback 26 import traceback
28 import logging 27 import logging
29 28
30 from sqlalchemy.exc import DatabaseError 29 from sqlalchemy.exc import DatabaseError
39 from rhodecode.lib import safe_str 38 from rhodecode.lib import safe_str
40 from rhodecode.lib.auth import HasRepoPermissionAny 39 from rhodecode.lib.auth import HasRepoPermissionAny
41 from rhodecode.lib.utils import get_repos as get_filesystem_repos, make_ui, \ 40 from rhodecode.lib.utils import get_repos as get_filesystem_repos, make_ui, \
42 action_logger, EmptyChangeset 41 action_logger, EmptyChangeset
43 from rhodecode.model import BaseModel 42 from rhodecode.model import BaseModel
44 from rhodecode.model.user import UserModel
45 from rhodecode.model.db import Repository, RhodeCodeUi, CacheInvalidation, \ 43 from rhodecode.model.db import Repository, RhodeCodeUi, CacheInvalidation, \
46 UserFollowing, UserLog 44 UserFollowing, UserLog, User
47 45
48 log = logging.getLogger(__name__) 46 log = logging.getLogger(__name__)
49 47
50 48
51 class UserTemp(object): 49 class UserTemp(object):
281 .filter(UserFollowing.user_id == user_id).scalar() 279 .filter(UserFollowing.user_id == user_id).scalar()
282 280
283 return f is not None 281 return f is not None
284 282
285 def is_following_user(self, username, user_id, cache=False): 283 def is_following_user(self, username, user_id, cache=False):
286 u = UserModel(self.sa).get_by_username(username) 284 u = User.get_by_username(username)
287 285
288 f = self.sa.query(UserFollowing)\ 286 f = self.sa.query(UserFollowing)\
289 .filter(UserFollowing.follows_user == u)\ 287 .filter(UserFollowing.follows_user == u)\
290 .filter(UserFollowing.user_id == user_id).scalar() 288 .filter(UserFollowing.user_id == user_id).scalar()
291 289
292 return f is not None 290 return f is not None
293 291
294 def get_followers(self, repo_id): 292 def get_followers(self, repo_id):
295 if not isinstance(repo_id, int): 293 if not isinstance(repo_id, int):
296 repo_id = getattr(Repository.by_repo_name(repo_id), 'repo_id') 294 repo_id = getattr(Repository.get_by_repo_name(repo_id), 'repo_id')
297 295
298 return self.sa.query(UserFollowing)\ 296 return self.sa.query(UserFollowing)\
299 .filter(UserFollowing.follows_repo_id == repo_id).count() 297 .filter(UserFollowing.follows_repo_id == repo_id).count()
300 298
301 def get_forks(self, repo_id): 299 def get_forks(self, repo_id):
302 if not isinstance(repo_id, int): 300 if not isinstance(repo_id, int):
303 repo_id = getattr(Repository.by_repo_name(repo_id), 'repo_id') 301 repo_id = getattr(Repository.get_by_repo_name(repo_id), 'repo_id')
304 302
305 return self.sa.query(Repository)\ 303 return self.sa.query(Repository)\
306 .filter(Repository.fork_id == repo_id).count() 304 .filter(Repository.fork_id == repo_id).count()
307 305
308 def pull_changes(self, repo_name, username): 306 def pull_changes(self, repo_name, username):
309 dbrepo = Repository.by_repo_name(repo_name) 307 dbrepo = Repository.get_by_repo_name(repo_name)
310 clone_uri = dbrepo.clone_uri 308 clone_uri = dbrepo.clone_uri
311 if not clone_uri: 309 if not clone_uri:
312 raise Exception("This repository doesn't have a clone uri") 310 raise Exception("This repository doesn't have a clone uri")
313 311
314 repo = dbrepo.scm_instance 312 repo = dbrepo.scm_instance
315 try: 313 try:
316 extras = {'ip': '', 314 extras = {'ip': '',
317 'username': username, 315 'username': username,
318 'action': 'push_remote', 316 'action': 'push_remote',
361 from vcs.backends.hg import MercurialInMemoryChangeset as IMC 359 from vcs.backends.hg import MercurialInMemoryChangeset as IMC
362 elif repo.alias == 'git': 360 elif repo.alias == 'git':
363 from vcs.backends.git import GitInMemoryChangeset as IMC 361 from vcs.backends.git import GitInMemoryChangeset as IMC
364 # decoding here will force that we have proper encoded values 362 # decoding here will force that we have proper encoded values
365 # in any other case this will throw exceptions and deny commit 363 # in any other case this will throw exceptions and deny commit
366 364
367 if isinstance(content,(basestring,)): 365 if isinstance(content, (basestring,)):
368 content = safe_str(content) 366 content = safe_str(content)
369 elif isinstance(content,file): 367 elif isinstance(content, file):
370 content = content.read() 368 content = content.read()
371 369
372 message = safe_str(message) 370 message = safe_str(message)
373 path = safe_str(f_path) 371 path = safe_str(f_path)
374 author = safe_str(author) 372 author = safe_str(author)
375 m = IMC(repo) 373 m = IMC(repo)
376 374