"""The base Controller APIProvides the BaseController class for subclassing."""importloggingfrompylonsimportconfig,tmpl_contextasc,request,session,urlfrompylons.controllersimportWSGIControllerfrompylons.controllers.utilimportredirectfrompylons.templatingimportrender_makoasrenderfromrhodecodeimport__version__fromrhodecode.lib.authimportAuthUserfromrhodecode.lib.utilsimportget_repo_slugfromrhodecode.modelimportmetafromrhodecode.model.scmimportScmModelfromrhodecodeimportBACKENDSfromrhodecode.model.dbimportRepositorylog=logging.getLogger(__name__)classBaseController(WSGIController):def__before__(self):c.rhodecode_version=__version__c.rhodecode_name=config.get('rhodecode_title')c.ga_code=config.get('rhodecode_ga_code')c.repo_name=get_repo_slug(request)c.backends=BACKENDS.keys()self.cut_off_limit=int(config.get('cut_off_limit'))self.sa=meta.Session()self.scm_model=ScmModel(self.sa)#c.unread_journal = scm_model.get_unread_journal()def__call__(self,environ,start_response):"""Invoke the Controller"""# WSGIController.__call__ dispatches to the Controller method# the request is routed to. This routing information is# available in environ['pylons.routes_dict']try:# putting this here makes sure that we update permissions each timeapi_key=request.GET.get('api_key')user_id=getattr(session.get('rhodecode_user'),'user_id',None)self.rhodecode_user=c.rhodecode_user=AuthUser(user_id,api_key)self.rhodecode_user.set_authenticated(getattr(session.get('rhodecode_user'),'is_authenticated',False))session['rhodecode_user']=self.rhodecode_usersession.save()returnWSGIController.__call__(self,environ,start_response)finally:meta.Session.remove()classBaseRepoController(BaseController):""" Base class for controllers responsible for loading all needed data for those controllers, loaded items are c.rhodecode_repo: instance of scm repository (taken from cache) """def__before__(self):super(BaseRepoController,self).__before__()ifc.repo_name:c.rhodecode_db_repo=Repository.get_by_repo_name(c.repo_name)c.rhodecode_repo=c.rhodecode_db_repo.scm_instanceifc.rhodecode_repoisNone:log.error('%s this repository is present in database but it ''cannot be created as an scm instance',c.repo_name)redirect(url('home'))c.repository_followers= \
self.scm_model.get_followers(c.repo_name)c.repository_forks=self.scm_model.get_forks(c.repo_name)