##// END OF EJS Templates
Fixed links for repository, it's optional now to pass a link without a summary...
marcink -
r976:de535f8b beta
parent child Browse files
Show More
@@ -1,217 +1,219 b''
1 """
1 """
2 Routes configuration
2 Routes configuration
3
3
4 The more specific and detailed routes should be defined first so they
4 The more specific and detailed routes should be defined first so they
5 may take precedent over the more generic routes. For more information
5 may take precedent over the more generic routes. For more information
6 refer to the routes manual at http://routes.groovie.org/docs/
6 refer to the routes manual at http://routes.groovie.org/docs/
7 """
7 """
8 from __future__ import with_statement
8 from __future__ import with_statement
9 from routes import Mapper
9 from routes import Mapper
10 from rhodecode.lib.utils import check_repo_fast as cr
10 from rhodecode.lib.utils import check_repo_fast as cr
11
11
12 def make_map(config):
12 def make_map(config):
13 """Create, configure and return the routes Mapper"""
13 """Create, configure and return the routes Mapper"""
14 map = Mapper(directory=config['pylons.paths']['controllers'],
14 map = Mapper(directory=config['pylons.paths']['controllers'],
15 always_scan=config['debug'])
15 always_scan=config['debug'])
16 map.minimization = False
16 map.minimization = False
17 map.explicit = False
17 map.explicit = False
18
18
19 def check_repo(environ, match_dict):
19 def check_repo(environ, match_dict):
20 """
20 """
21 check for valid repository for proper 404 handling
21 check for valid repository for proper 404 handling
22 :param environ:
22 :param environ:
23 :param match_dict:
23 :param match_dict:
24 """
24 """
25 repo_name = match_dict.get('repo_name')
25 repo_name = match_dict.get('repo_name')
26 return not cr(repo_name, config['base_path'])
26 return not cr(repo_name, config['base_path'])
27
27
28 # The ErrorController route (handles 404/500 error pages); it should
28 # The ErrorController route (handles 404/500 error pages); it should
29 # likely stay at the top, ensuring it can always be resolved
29 # likely stay at the top, ensuring it can always be resolved
30 map.connect('/error/{action}', controller='error')
30 map.connect('/error/{action}', controller='error')
31 map.connect('/error/{action}/{id}', controller='error')
31 map.connect('/error/{action}/{id}', controller='error')
32
32
33 #==========================================================================
33 #==========================================================================
34 # CUSTOM ROUTES HERE
34 # CUSTOM ROUTES HERE
35 #==========================================================================
35 #==========================================================================
36
36
37 #MAIN PAGE
37 #MAIN PAGE
38 map.connect('home', '/', controller='home', action='index')
38 map.connect('home', '/', controller='home', action='index')
39 map.connect('bugtracker', "http://bitbucket.org/marcinkuzminski/rhodecode/issues", _static=True)
39 map.connect('bugtracker', "http://bitbucket.org/marcinkuzminski/rhodecode/issues", _static=True)
40 map.connect('gpl_license', "http://www.gnu.org/licenses/gpl.html", _static=True)
40 map.connect('gpl_license', "http://www.gnu.org/licenses/gpl.html", _static=True)
41 #ADMIN REPOSITORY REST ROUTES
41 #ADMIN REPOSITORY REST ROUTES
42 with map.submapper(path_prefix='/_admin', controller='admin/repos') as m:
42 with map.submapper(path_prefix='/_admin', controller='admin/repos') as m:
43 m.connect("repos", "/repos",
43 m.connect("repos", "/repos",
44 action="create", conditions=dict(method=["POST"]))
44 action="create", conditions=dict(method=["POST"]))
45 m.connect("repos", "/repos",
45 m.connect("repos", "/repos",
46 action="index", conditions=dict(method=["GET"]))
46 action="index", conditions=dict(method=["GET"]))
47 m.connect("formatted_repos", "/repos.{format}",
47 m.connect("formatted_repos", "/repos.{format}",
48 action="index",
48 action="index",
49 conditions=dict(method=["GET"]))
49 conditions=dict(method=["GET"]))
50 m.connect("new_repo", "/repos/new",
50 m.connect("new_repo", "/repos/new",
51 action="new", conditions=dict(method=["GET"]))
51 action="new", conditions=dict(method=["GET"]))
52 m.connect("formatted_new_repo", "/repos/new.{format}",
52 m.connect("formatted_new_repo", "/repos/new.{format}",
53 action="new", conditions=dict(method=["GET"]))
53 action="new", conditions=dict(method=["GET"]))
54 m.connect("/repos/{repo_name:.*}",
54 m.connect("/repos/{repo_name:.*}",
55 action="update", conditions=dict(method=["PUT"],
55 action="update", conditions=dict(method=["PUT"],
56 function=check_repo))
56 function=check_repo))
57 m.connect("/repos/{repo_name:.*}",
57 m.connect("/repos/{repo_name:.*}",
58 action="delete", conditions=dict(method=["DELETE"],
58 action="delete", conditions=dict(method=["DELETE"],
59 function=check_repo))
59 function=check_repo))
60 m.connect("edit_repo", "/repos/{repo_name:.*}/edit",
60 m.connect("edit_repo", "/repos/{repo_name:.*}/edit",
61 action="edit", conditions=dict(method=["GET"],
61 action="edit", conditions=dict(method=["GET"],
62 function=check_repo))
62 function=check_repo))
63 m.connect("formatted_edit_repo", "/repos/{repo_name:.*}.{format}/edit",
63 m.connect("formatted_edit_repo", "/repos/{repo_name:.*}.{format}/edit",
64 action="edit", conditions=dict(method=["GET"],
64 action="edit", conditions=dict(method=["GET"],
65 function=check_repo))
65 function=check_repo))
66 m.connect("repo", "/repos/{repo_name:.*}",
66 m.connect("repo", "/repos/{repo_name:.*}",
67 action="show", conditions=dict(method=["GET"],
67 action="show", conditions=dict(method=["GET"],
68 function=check_repo))
68 function=check_repo))
69 m.connect("formatted_repo", "/repos/{repo_name:.*}.{format}",
69 m.connect("formatted_repo", "/repos/{repo_name:.*}.{format}",
70 action="show", conditions=dict(method=["GET"],
70 action="show", conditions=dict(method=["GET"],
71 function=check_repo))
71 function=check_repo))
72 #ajax delete repo perm user
72 #ajax delete repo perm user
73 m.connect('delete_repo_user', "/repos_delete_user/{repo_name:.*}",
73 m.connect('delete_repo_user', "/repos_delete_user/{repo_name:.*}",
74 action="delete_perm_user", conditions=dict(method=["DELETE"],
74 action="delete_perm_user", conditions=dict(method=["DELETE"],
75 function=check_repo))
75 function=check_repo))
76 #settings actions
76 #settings actions
77 m.connect('repo_stats', "/repos_stats/{repo_name:.*}",
77 m.connect('repo_stats', "/repos_stats/{repo_name:.*}",
78 action="repo_stats", conditions=dict(method=["DELETE"],
78 action="repo_stats", conditions=dict(method=["DELETE"],
79 function=check_repo))
79 function=check_repo))
80 m.connect('repo_cache', "/repos_cache/{repo_name:.*}",
80 m.connect('repo_cache', "/repos_cache/{repo_name:.*}",
81 action="repo_cache", conditions=dict(method=["DELETE"],
81 action="repo_cache", conditions=dict(method=["DELETE"],
82 function=check_repo))
82 function=check_repo))
83
83
84 #ADMIN USER REST ROUTES
84 #ADMIN USER REST ROUTES
85 map.resource('user', 'users', controller='admin/users', path_prefix='/_admin')
85 map.resource('user', 'users', controller='admin/users', path_prefix='/_admin')
86
86
87 #ADMIN USER REST ROUTES
87 #ADMIN USER REST ROUTES
88 map.resource('users_group', 'users_groups', controller='admin/users_groups', path_prefix='/_admin')
88 map.resource('users_group', 'users_groups', controller='admin/users_groups', path_prefix='/_admin')
89
89
90 #ADMIN GROUP REST ROUTES
90 #ADMIN GROUP REST ROUTES
91 map.resource('group', 'groups', controller='admin/groups', path_prefix='/_admin')
91 map.resource('group', 'groups', controller='admin/groups', path_prefix='/_admin')
92
92
93 #ADMIN PERMISSIONS REST ROUTES
93 #ADMIN PERMISSIONS REST ROUTES
94 map.resource('permission', 'permissions', controller='admin/permissions', path_prefix='/_admin')
94 map.resource('permission', 'permissions', controller='admin/permissions', path_prefix='/_admin')
95
95
96 ##ADMIN LDAP SETTINGS
96 ##ADMIN LDAP SETTINGS
97 map.connect('ldap_settings', '/_admin/ldap', controller='admin/ldap_settings',
97 map.connect('ldap_settings', '/_admin/ldap', controller='admin/ldap_settings',
98 action='ldap_settings', conditions=dict(method=["POST"]))
98 action='ldap_settings', conditions=dict(method=["POST"]))
99 map.connect('ldap_home', '/_admin/ldap', controller='admin/ldap_settings',)
99 map.connect('ldap_home', '/_admin/ldap', controller='admin/ldap_settings',)
100
100
101
101
102 #ADMIN SETTINGS REST ROUTES
102 #ADMIN SETTINGS REST ROUTES
103 with map.submapper(path_prefix='/_admin', controller='admin/settings') as m:
103 with map.submapper(path_prefix='/_admin', controller='admin/settings') as m:
104 m.connect("admin_settings", "/settings",
104 m.connect("admin_settings", "/settings",
105 action="create", conditions=dict(method=["POST"]))
105 action="create", conditions=dict(method=["POST"]))
106 m.connect("admin_settings", "/settings",
106 m.connect("admin_settings", "/settings",
107 action="index", conditions=dict(method=["GET"]))
107 action="index", conditions=dict(method=["GET"]))
108 m.connect("formatted_admin_settings", "/settings.{format}",
108 m.connect("formatted_admin_settings", "/settings.{format}",
109 action="index", conditions=dict(method=["GET"]))
109 action="index", conditions=dict(method=["GET"]))
110 m.connect("admin_new_setting", "/settings/new",
110 m.connect("admin_new_setting", "/settings/new",
111 action="new", conditions=dict(method=["GET"]))
111 action="new", conditions=dict(method=["GET"]))
112 m.connect("formatted_admin_new_setting", "/settings/new.{format}",
112 m.connect("formatted_admin_new_setting", "/settings/new.{format}",
113 action="new", conditions=dict(method=["GET"]))
113 action="new", conditions=dict(method=["GET"]))
114 m.connect("/settings/{setting_id}",
114 m.connect("/settings/{setting_id}",
115 action="update", conditions=dict(method=["PUT"]))
115 action="update", conditions=dict(method=["PUT"]))
116 m.connect("/settings/{setting_id}",
116 m.connect("/settings/{setting_id}",
117 action="delete", conditions=dict(method=["DELETE"]))
117 action="delete", conditions=dict(method=["DELETE"]))
118 m.connect("admin_edit_setting", "/settings/{setting_id}/edit",
118 m.connect("admin_edit_setting", "/settings/{setting_id}/edit",
119 action="edit", conditions=dict(method=["GET"]))
119 action="edit", conditions=dict(method=["GET"]))
120 m.connect("formatted_admin_edit_setting", "/settings/{setting_id}.{format}/edit",
120 m.connect("formatted_admin_edit_setting", "/settings/{setting_id}.{format}/edit",
121 action="edit", conditions=dict(method=["GET"]))
121 action="edit", conditions=dict(method=["GET"]))
122 m.connect("admin_setting", "/settings/{setting_id}",
122 m.connect("admin_setting", "/settings/{setting_id}",
123 action="show", conditions=dict(method=["GET"]))
123 action="show", conditions=dict(method=["GET"]))
124 m.connect("formatted_admin_setting", "/settings/{setting_id}.{format}",
124 m.connect("formatted_admin_setting", "/settings/{setting_id}.{format}",
125 action="show", conditions=dict(method=["GET"]))
125 action="show", conditions=dict(method=["GET"]))
126 m.connect("admin_settings_my_account", "/my_account",
126 m.connect("admin_settings_my_account", "/my_account",
127 action="my_account", conditions=dict(method=["GET"]))
127 action="my_account", conditions=dict(method=["GET"]))
128 m.connect("admin_settings_my_account_update", "/my_account_update",
128 m.connect("admin_settings_my_account_update", "/my_account_update",
129 action="my_account_update", conditions=dict(method=["PUT"]))
129 action="my_account_update", conditions=dict(method=["PUT"]))
130 m.connect("admin_settings_create_repository", "/create_repository",
130 m.connect("admin_settings_create_repository", "/create_repository",
131 action="create_repository", conditions=dict(method=["GET"]))
131 action="create_repository", conditions=dict(method=["GET"]))
132
132
133 #ADMIN MAIN PAGES
133 #ADMIN MAIN PAGES
134 with map.submapper(path_prefix='/_admin', controller='admin/admin') as m:
134 with map.submapper(path_prefix='/_admin', controller='admin/admin') as m:
135 m.connect('admin_home', '', action='index')#main page
135 m.connect('admin_home', '', action='index')#main page
136 m.connect('admin_add_repo', '/add_repo/{new_repo:[a-z0-9\. _-]*}',
136 m.connect('admin_add_repo', '/add_repo/{new_repo:[a-z0-9\. _-]*}',
137 action='add_repo')
137 action='add_repo')
138
138
139
139
140 #USER JOURNAL
140 #USER JOURNAL
141 map.connect('journal', '/_admin/journal', controller='journal',)
141 map.connect('journal', '/_admin/journal', controller='journal',)
142 map.connect('toggle_following', '/_admin/toggle_following', controller='journal',
142 map.connect('toggle_following', '/_admin/toggle_following', controller='journal',
143 action='toggle_following', conditions=dict(method=["POST"]))
143 action='toggle_following', conditions=dict(method=["POST"]))
144
144
145
145
146 #SEARCH
146 #SEARCH
147 map.connect('search', '/_admin/search', controller='search',)
147 map.connect('search', '/_admin/search', controller='search',)
148 map.connect('search_repo', '/_admin/search/{search_repo:.*}', controller='search')
148 map.connect('search_repo', '/_admin/search/{search_repo:.*}', controller='search')
149
149
150 #LOGIN/LOGOUT/REGISTER/SIGN IN
150 #LOGIN/LOGOUT/REGISTER/SIGN IN
151 map.connect('login_home', '/_admin/login', controller='login')
151 map.connect('login_home', '/_admin/login', controller='login')
152 map.connect('logout_home', '/_admin/logout', controller='login', action='logout')
152 map.connect('logout_home', '/_admin/logout', controller='login', action='logout')
153 map.connect('register', '/_admin/register', controller='login', action='register')
153 map.connect('register', '/_admin/register', controller='login', action='register')
154 map.connect('reset_password', '/_admin/password_reset', controller='login', action='password_reset')
154 map.connect('reset_password', '/_admin/password_reset', controller='login', action='password_reset')
155
155
156 #FEEDS
156 #FEEDS
157 map.connect('rss_feed_home', '/{repo_name:.*}/feed/rss',
157 map.connect('rss_feed_home', '/{repo_name:.*}/feed/rss',
158 controller='feed', action='rss',
158 controller='feed', action='rss',
159 conditions=dict(function=check_repo))
159 conditions=dict(function=check_repo))
160 map.connect('atom_feed_home', '/{repo_name:.*}/feed/atom',
160 map.connect('atom_feed_home', '/{repo_name:.*}/feed/atom',
161 controller='feed', action='atom',
161 controller='feed', action='atom',
162 conditions=dict(function=check_repo))
162 conditions=dict(function=check_repo))
163
163
164
164
165 #REPOSITORY ROUTES
165 #REPOSITORY ROUTES
166 map.connect('changeset_home', '/{repo_name:.*}/changeset/{revision}',
166 map.connect('changeset_home', '/{repo_name:.*}/changeset/{revision}',
167 controller='changeset', revision='tip',
167 controller='changeset', revision='tip',
168 conditions=dict(function=check_repo))
168 conditions=dict(function=check_repo))
169 map.connect('raw_changeset_home', '/{repo_name:.*}/raw-changeset/{revision}',
169 map.connect('raw_changeset_home', '/{repo_name:.*}/raw-changeset/{revision}',
170 controller='changeset', action='raw_changeset', revision='tip',
170 controller='changeset', action='raw_changeset', revision='tip',
171 conditions=dict(function=check_repo))
171 conditions=dict(function=check_repo))
172 map.connect('summary_home', '/{repo_name:.*}',
173 controller='summary', conditions=dict(function=check_repo))
172 map.connect('summary_home', '/{repo_name:.*}/summary',
174 map.connect('summary_home', '/{repo_name:.*}/summary',
173 controller='summary', conditions=dict(function=check_repo))
175 controller='summary', conditions=dict(function=check_repo))
174 map.connect('shortlog_home', '/{repo_name:.*}/shortlog',
176 map.connect('shortlog_home', '/{repo_name:.*}/shortlog',
175 controller='shortlog', conditions=dict(function=check_repo))
177 controller='shortlog', conditions=dict(function=check_repo))
176 map.connect('branches_home', '/{repo_name:.*}/branches',
178 map.connect('branches_home', '/{repo_name:.*}/branches',
177 controller='branches', conditions=dict(function=check_repo))
179 controller='branches', conditions=dict(function=check_repo))
178 map.connect('tags_home', '/{repo_name:.*}/tags',
180 map.connect('tags_home', '/{repo_name:.*}/tags',
179 controller='tags', conditions=dict(function=check_repo))
181 controller='tags', conditions=dict(function=check_repo))
180 map.connect('changelog_home', '/{repo_name:.*}/changelog',
182 map.connect('changelog_home', '/{repo_name:.*}/changelog',
181 controller='changelog', conditions=dict(function=check_repo))
183 controller='changelog', conditions=dict(function=check_repo))
182 map.connect('files_home', '/{repo_name:.*}/files/{revision}/{f_path:.*}',
184 map.connect('files_home', '/{repo_name:.*}/files/{revision}/{f_path:.*}',
183 controller='files', revision='tip', f_path='',
185 controller='files', revision='tip', f_path='',
184 conditions=dict(function=check_repo))
186 conditions=dict(function=check_repo))
185 map.connect('files_diff_home', '/{repo_name:.*}/diff/{f_path:.*}',
187 map.connect('files_diff_home', '/{repo_name:.*}/diff/{f_path:.*}',
186 controller='files', action='diff', revision='tip', f_path='',
188 controller='files', action='diff', revision='tip', f_path='',
187 conditions=dict(function=check_repo))
189 conditions=dict(function=check_repo))
188 map.connect('files_rawfile_home', '/{repo_name:.*}/rawfile/{revision}/{f_path:.*}',
190 map.connect('files_rawfile_home', '/{repo_name:.*}/rawfile/{revision}/{f_path:.*}',
189 controller='files', action='rawfile', revision='tip', f_path='',
191 controller='files', action='rawfile', revision='tip', f_path='',
190 conditions=dict(function=check_repo))
192 conditions=dict(function=check_repo))
191 map.connect('files_raw_home', '/{repo_name:.*}/raw/{revision}/{f_path:.*}',
193 map.connect('files_raw_home', '/{repo_name:.*}/raw/{revision}/{f_path:.*}',
192 controller='files', action='raw', revision='tip', f_path='',
194 controller='files', action='raw', revision='tip', f_path='',
193 conditions=dict(function=check_repo))
195 conditions=dict(function=check_repo))
194 map.connect('files_annotate_home', '/{repo_name:.*}/annotate/{revision}/{f_path:.*}',
196 map.connect('files_annotate_home', '/{repo_name:.*}/annotate/{revision}/{f_path:.*}',
195 controller='files', action='annotate', revision='tip', f_path='',
197 controller='files', action='annotate', revision='tip', f_path='',
196 conditions=dict(function=check_repo))
198 conditions=dict(function=check_repo))
197 map.connect('files_archive_home', '/{repo_name:.*}/archive/{fname}',
199 map.connect('files_archive_home', '/{repo_name:.*}/archive/{fname}',
198 controller='files', action='archivefile',
200 controller='files', action='archivefile',
199 conditions=dict(function=check_repo))
201 conditions=dict(function=check_repo))
200 map.connect('repo_settings_delete', '/{repo_name:.*}/settings',
202 map.connect('repo_settings_delete', '/{repo_name:.*}/settings',
201 controller='settings', action="delete",
203 controller='settings', action="delete",
202 conditions=dict(method=["DELETE"], function=check_repo))
204 conditions=dict(method=["DELETE"], function=check_repo))
203 map.connect('repo_settings_update', '/{repo_name:.*}/settings',
205 map.connect('repo_settings_update', '/{repo_name:.*}/settings',
204 controller='settings', action="update",
206 controller='settings', action="update",
205 conditions=dict(method=["PUT"], function=check_repo))
207 conditions=dict(method=["PUT"], function=check_repo))
206 map.connect('repo_settings_home', '/{repo_name:.*}/settings',
208 map.connect('repo_settings_home', '/{repo_name:.*}/settings',
207 controller='settings', action='index',
209 controller='settings', action='index',
208 conditions=dict(function=check_repo))
210 conditions=dict(function=check_repo))
209
211
210 map.connect('repo_fork_create_home', '/{repo_name:.*}/fork',
212 map.connect('repo_fork_create_home', '/{repo_name:.*}/fork',
211 controller='settings', action='fork_create',
213 controller='settings', action='fork_create',
212 conditions=dict(function=check_repo, method=["POST"]))
214 conditions=dict(function=check_repo, method=["POST"]))
213 map.connect('repo_fork_home', '/{repo_name:.*}/fork',
215 map.connect('repo_fork_home', '/{repo_name:.*}/fork',
214 controller='settings', action='fork',
216 controller='settings', action='fork',
215 conditions=dict(function=check_repo))
217 conditions=dict(function=check_repo))
216
218
217 return map
219 return map
@@ -1,337 +1,337 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 """
2 """
3 rhodecode.model.db
3 rhodecode.model.db
4 ~~~~~~~~~~~~~~~~~~
4 ~~~~~~~~~~~~~~~~~~
5
5
6 Database Models for RhodeCode
6 Database Models for RhodeCode
7
7
8 :created_on: Apr 08, 2010
8 :created_on: Apr 08, 2010
9 :author: marcink
9 :author: marcink
10 :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com>
10 :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com>
11 :license: GPLv3, see COPYING for more details.
11 :license: GPLv3, see COPYING for more details.
12 """
12 """
13 # This program is free software; you can redistribute it and/or
13 # This program is free software; you can redistribute it and/or
14 # modify it under the terms of the GNU General Public License
14 # modify it under the terms of the GNU General Public License
15 # as published by the Free Software Foundation; version 2
15 # as published by the Free Software Foundation; version 2
16 # of the License or (at your opinion) any later version of the license.
16 # of the License or (at your opinion) any later version of the license.
17 #
17 #
18 # This program is distributed in the hope that it will be useful,
18 # This program is distributed in the hope that it will be useful,
19 # but WITHOUT ANY WARRANTY; without even the implied warranty of
19 # but WITHOUT ANY WARRANTY; without even the implied warranty of
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, write to the Free Software
24 # along with this program; if not, write to the Free Software
25 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
25 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
26 # MA 02110-1301, USA.
26 # MA 02110-1301, USA.
27 import logging
27 import logging
28 import datetime
28 import datetime
29
29
30 from sqlalchemy import *
30 from sqlalchemy import *
31 from sqlalchemy.exc import DatabaseError
31 from sqlalchemy.exc import DatabaseError
32 from sqlalchemy.orm import relationship, backref, class_mapper
32 from sqlalchemy.orm import relationship, backref, class_mapper
33 from sqlalchemy.orm.session import Session
33 from sqlalchemy.orm.session import Session
34
34
35 from rhodecode.model.meta import Base
35 from rhodecode.model.meta import Base
36
36
37 log = logging.getLogger(__name__)
37 log = logging.getLogger(__name__)
38
38
39 class BaseModel(object):
39 class BaseModel(object):
40
40
41 @classmethod
41 @classmethod
42 def _get_keys(cls):
42 def _get_keys(cls):
43 """return column names for this model """
43 """return column names for this model """
44 return class_mapper(cls).c.keys()
44 return class_mapper(cls).c.keys()
45
45
46 def get_dict(self):
46 def get_dict(self):
47 """return dict with keys and values corresponding
47 """return dict with keys and values corresponding
48 to this model data """
48 to this model data """
49
49
50 d = {}
50 d = {}
51 for k in self._get_keys():
51 for k in self._get_keys():
52 d[k] = getattr(self, k)
52 d[k] = getattr(self, k)
53 return d
53 return d
54
54
55 def get_appstruct(self):
55 def get_appstruct(self):
56 """return list with keys and values tupples corresponding
56 """return list with keys and values tupples corresponding
57 to this model data """
57 to this model data """
58
58
59 l = []
59 l = []
60 for k in self._get_keys():
60 for k in self._get_keys():
61 l.append((k, getattr(self, k),))
61 l.append((k, getattr(self, k),))
62 return l
62 return l
63
63
64 def populate_obj(self, populate_dict):
64 def populate_obj(self, populate_dict):
65 """populate model with data from given populate_dict"""
65 """populate model with data from given populate_dict"""
66
66
67 for k in self._get_keys():
67 for k in self._get_keys():
68 if k in populate_dict:
68 if k in populate_dict:
69 setattr(self, k, populate_dict[k])
69 setattr(self, k, populate_dict[k])
70
70
71 class RhodeCodeSettings(Base, BaseModel):
71 class RhodeCodeSettings(Base, BaseModel):
72 __tablename__ = 'rhodecode_settings'
72 __tablename__ = 'rhodecode_settings'
73 __table_args__ = (UniqueConstraint('app_settings_name'), {'useexisting':True})
73 __table_args__ = (UniqueConstraint('app_settings_name'), {'useexisting':True})
74 app_settings_id = Column("app_settings_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
74 app_settings_id = Column("app_settings_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
75 app_settings_name = Column("app_settings_name", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
75 app_settings_name = Column("app_settings_name", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
76 app_settings_value = Column("app_settings_value", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
76 app_settings_value = Column("app_settings_value", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
77
77
78 def __init__(self, k='', v=''):
78 def __init__(self, k='', v=''):
79 self.app_settings_name = k
79 self.app_settings_name = k
80 self.app_settings_value = v
80 self.app_settings_value = v
81
81
82 def __repr__(self):
82 def __repr__(self):
83 return "<%s('%s:%s')>" % (self.__class__.__name__,
83 return "<%s('%s:%s')>" % (self.__class__.__name__,
84 self.app_settings_name, self.app_settings_value)
84 self.app_settings_name, self.app_settings_value)
85
85
86 class RhodeCodeUi(Base, BaseModel):
86 class RhodeCodeUi(Base, BaseModel):
87 __tablename__ = 'rhodecode_ui'
87 __tablename__ = 'rhodecode_ui'
88 __table_args__ = {'useexisting':True}
88 __table_args__ = {'useexisting':True}
89 ui_id = Column("ui_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
89 ui_id = Column("ui_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
90 ui_section = Column("ui_section", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
90 ui_section = Column("ui_section", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
91 ui_key = Column("ui_key", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
91 ui_key = Column("ui_key", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
92 ui_value = Column("ui_value", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
92 ui_value = Column("ui_value", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
93 ui_active = Column("ui_active", Boolean(), nullable=True, unique=None, default=True)
93 ui_active = Column("ui_active", Boolean(), nullable=True, unique=None, default=True)
94
94
95
95
96 class User(Base, BaseModel):
96 class User(Base, BaseModel):
97 __tablename__ = 'users'
97 __tablename__ = 'users'
98 __table_args__ = (UniqueConstraint('username'), UniqueConstraint('email'), {'useexisting':True})
98 __table_args__ = (UniqueConstraint('username'), UniqueConstraint('email'), {'useexisting':True})
99 user_id = Column("user_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
99 user_id = Column("user_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
100 username = Column("username", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
100 username = Column("username", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
101 password = Column("password", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
101 password = Column("password", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
102 active = Column("active", Boolean(), nullable=True, unique=None, default=None)
102 active = Column("active", Boolean(), nullable=True, unique=None, default=None)
103 admin = Column("admin", Boolean(), nullable=True, unique=None, default=False)
103 admin = Column("admin", Boolean(), nullable=True, unique=None, default=False)
104 name = Column("name", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
104 name = Column("name", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
105 lastname = Column("lastname", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
105 lastname = Column("lastname", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
106 email = Column("email", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
106 email = Column("email", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
107 last_login = Column("last_login", DateTime(timezone=False), nullable=True, unique=None, default=None)
107 last_login = Column("last_login", DateTime(timezone=False), nullable=True, unique=None, default=None)
108 is_ldap = Column("is_ldap", Boolean(), nullable=False, unique=None, default=False)
108 is_ldap = Column("is_ldap", Boolean(), nullable=False, unique=None, default=False)
109
109
110 user_log = relationship('UserLog', cascade='all')
110 user_log = relationship('UserLog', cascade='all')
111 user_perms = relationship('UserToPerm', primaryjoin="User.user_id==UserToPerm.user_id", cascade='all')
111 user_perms = relationship('UserToPerm', primaryjoin="User.user_id==UserToPerm.user_id", cascade='all')
112
112
113 repositories = relationship('Repository')
113 repositories = relationship('Repository')
114 user_followers = relationship('UserFollowing', primaryjoin='UserFollowing.follows_user_id==User.user_id', cascade='all')
114 user_followers = relationship('UserFollowing', primaryjoin='UserFollowing.follows_user_id==User.user_id', cascade='all')
115
115
116 @property
116 @property
117 def full_contact(self):
117 def full_contact(self):
118 return '%s %s <%s>' % (self.name, self.lastname, self.email)
118 return '%s %s <%s>' % (self.name, self.lastname, self.email)
119
119
120
120
121 @property
121 @property
122 def is_admin(self):
122 def is_admin(self):
123 return self.admin
123 return self.admin
124
124
125 def __repr__(self):
125 def __repr__(self):
126 return "<%s('id:%s:%s')>" % (self.__class__.__name__,
126 return "<%s('id:%s:%s')>" % (self.__class__.__name__,
127 self.user_id, self.username)
127 self.user_id, self.username)
128
128
129 def update_lastlogin(self):
129 def update_lastlogin(self):
130 """Update user lastlogin"""
130 """Update user lastlogin"""
131
131
132 try:
132 try:
133 session = Session.object_session(self)
133 session = Session.object_session(self)
134 self.last_login = datetime.datetime.now()
134 self.last_login = datetime.datetime.now()
135 session.add(self)
135 session.add(self)
136 session.commit()
136 session.commit()
137 log.debug('updated user %s lastlogin', self.username)
137 log.debug('updated user %s lastlogin', self.username)
138 except (DatabaseError,):
138 except (DatabaseError,):
139 session.rollback()
139 session.rollback()
140
140
141
141
142 class UserLog(Base, BaseModel):
142 class UserLog(Base, BaseModel):
143 __tablename__ = 'user_logs'
143 __tablename__ = 'user_logs'
144 __table_args__ = {'useexisting':True}
144 __table_args__ = {'useexisting':True}
145 user_log_id = Column("user_log_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
145 user_log_id = Column("user_log_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
146 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None)
146 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None)
147 repository_id = Column("repository_id", Integer(length=None, convert_unicode=False, assert_unicode=None), ForeignKey('repositories.repo_id'), nullable=False, unique=None, default=None)
147 repository_id = Column("repository_id", Integer(length=None, convert_unicode=False, assert_unicode=None), ForeignKey('repositories.repo_id'), nullable=False, unique=None, default=None)
148 repository_name = Column("repository_name", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
148 repository_name = Column("repository_name", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
149 user_ip = Column("user_ip", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
149 user_ip = Column("user_ip", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
150 action = Column("action", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
150 action = Column("action", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
151 action_date = Column("action_date", DateTime(timezone=False), nullable=True, unique=None, default=None)
151 action_date = Column("action_date", DateTime(timezone=False), nullable=True, unique=None, default=None)
152
152
153 user = relationship('User')
153 user = relationship('User')
154 repository = relationship('Repository')
154 repository = relationship('Repository')
155
155
156
156
157 class UsersGroup(Base, BaseModel):
157 class UsersGroup(Base, BaseModel):
158 __tablename__ = 'users_groups'
158 __tablename__ = 'users_groups'
159 __table_args__ = {'useexisting':True}
159 __table_args__ = {'useexisting':True}
160
160
161 users_group_id = Column("users_group_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
161 users_group_id = Column("users_group_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
162 users_group_name = Column("users_group_name", String(length=None, convert_unicode=False, assert_unicode=None), nullable=False, unique=True, default=None)
162 users_group_name = Column("users_group_name", String(length=None, convert_unicode=False, assert_unicode=None), nullable=False, unique=True, default=None)
163 users_group_active = Column("users_group_active", Boolean(), nullable=True, unique=None, default=None)
163 users_group_active = Column("users_group_active", Boolean(), nullable=True, unique=None, default=None)
164
164
165 members = relationship('UsersGroupMember', cascade="all, delete, delete-orphan", lazy="joined")
165 members = relationship('UsersGroupMember', cascade="all, delete, delete-orphan", lazy="joined")
166
166
167 class UsersGroupMember(Base, BaseModel):
167 class UsersGroupMember(Base, BaseModel):
168 __tablename__ = 'users_groups_members'
168 __tablename__ = 'users_groups_members'
169 __table_args__ = {'useexisting':True}
169 __table_args__ = {'useexisting':True}
170
170
171 users_group_member_id = Column("users_group_member_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
171 users_group_member_id = Column("users_group_member_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
172 users_group_id = Column("users_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None)
172 users_group_id = Column("users_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None)
173 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None)
173 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None)
174
174
175 user = relationship('User', lazy='joined')
175 user = relationship('User', lazy='joined')
176 users_group = relationship('UsersGroup')
176 users_group = relationship('UsersGroup')
177
177
178 def __init__(self, gr_id, u_id):
178 def __init__(self, gr_id, u_id):
179 self.users_group_id = gr_id
179 self.users_group_id = gr_id
180 self.user_id = u_id
180 self.user_id = u_id
181
181
182 class Repository(Base, BaseModel):
182 class Repository(Base, BaseModel):
183 __tablename__ = 'repositories'
183 __tablename__ = 'repositories'
184 __table_args__ = (UniqueConstraint('repo_name'), {'useexisting':True},)
184 __table_args__ = (UniqueConstraint('repo_name'), {'useexisting':True},)
185 repo_id = Column("repo_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
185 repo_id = Column("repo_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
186 repo_name = Column("repo_name", String(length=None, convert_unicode=False, assert_unicode=None), nullable=False, unique=True, default=None)
186 repo_name = Column("repo_name", String(length=None, convert_unicode=False, assert_unicode=None), nullable=False, unique=True, default=None)
187 repo_type = Column("repo_type", String(length=None, convert_unicode=False, assert_unicode=None), nullable=False, unique=False, default='hg')
187 repo_type = Column("repo_type", String(length=None, convert_unicode=False, assert_unicode=None), nullable=False, unique=False, default='hg')
188 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=False, default=None)
188 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=False, default=None)
189 private = Column("private", Boolean(), nullable=True, unique=None, default=None)
189 private = Column("private", Boolean(), nullable=True, unique=None, default=None)
190 enable_statistics = Column("statistics", Boolean(), nullable=True, unique=None, default=True)
190 enable_statistics = Column("statistics", Boolean(), nullable=True, unique=None, default=True)
191 enable_downloads = Column("downloads", Boolean(), nullable=True, unique=None, default=True)
191 enable_downloads = Column("downloads", Boolean(), nullable=True, unique=None, default=True)
192 description = Column("description", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
192 description = Column("description", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
193 fork_id = Column("fork_id", Integer(), ForeignKey('repositories.repo_id'), nullable=True, unique=False, default=None)
193 fork_id = Column("fork_id", Integer(), ForeignKey('repositories.repo_id'), nullable=True, unique=False, default=None)
194 group_id = Column("group_id", Integer(), ForeignKey('groups.group_id'), nullable=True, unique=False, default=None)
194 group_id = Column("group_id", Integer(), ForeignKey('groups.group_id'), nullable=True, unique=False, default=None)
195
195
196 user = relationship('User')
196 user = relationship('User')
197 fork = relationship('Repository', remote_side=repo_id)
197 fork = relationship('Repository', remote_side=repo_id)
198 group = relationship('Group')
198 group = relationship('Group')
199 repo_to_perm = relationship('RepoToPerm', cascade='all')
199 repo_to_perm = relationship('RepoToPerm', cascade='all')
200 stats = relationship('Statistics', cascade='all', uselist=False)
200 stats = relationship('Statistics', cascade='all', uselist=False)
201
201
202 repo_followers = relationship('UserFollowing', primaryjoin='UserFollowing.follows_repo_id==Repository.repo_id', cascade='all')
202 repo_followers = relationship('UserFollowing', primaryjoin='UserFollowing.follows_repo_id==Repository.repo_id', cascade='all')
203
203
204 logs = relation('UserLog', cascade='all')
204 logs = relationship('UserLog', cascade='all')
205
205
206 def __repr__(self):
206 def __repr__(self):
207 return "<%s('%s:%s')>" % (self.__class__.__name__,
207 return "<%s('%s:%s')>" % (self.__class__.__name__,
208 self.repo_id, self.repo_name)
208 self.repo_id, self.repo_name)
209
209
210 class Group(Base, BaseModel):
210 class Group(Base, BaseModel):
211 __tablename__ = 'groups'
211 __tablename__ = 'groups'
212 __table_args__ = (UniqueConstraint('group_name'), {'useexisting':True},)
212 __table_args__ = (UniqueConstraint('group_name'), {'useexisting':True},)
213
213
214 group_id = Column("group_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
214 group_id = Column("group_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
215 group_name = Column("group_name", String(length=None, convert_unicode=False, assert_unicode=None), nullable=False, unique=True, default=None)
215 group_name = Column("group_name", String(length=None, convert_unicode=False, assert_unicode=None), nullable=False, unique=True, default=None)
216 group_parent_id = Column("group_parent_id", Integer(), ForeignKey('groups.group_id'), nullable=True, unique=None, default=None)
216 group_parent_id = Column("group_parent_id", Integer(), ForeignKey('groups.group_id'), nullable=True, unique=None, default=None)
217
217
218 parent_group = relationship('Group', remote_side=group_id)
218 parent_group = relationship('Group', remote_side=group_id)
219
219
220
220
221 def __init__(self, group_name='', parent_group=None):
221 def __init__(self, group_name='', parent_group=None):
222 self.group_name = group_name
222 self.group_name = group_name
223 self.parent_group = parent_group
223 self.parent_group = parent_group
224
224
225 def __repr__(self):
225 def __repr__(self):
226 return "<%s('%s:%s')>" % (self.__class__.__name__, self.group_id,
226 return "<%s('%s:%s')>" % (self.__class__.__name__, self.group_id,
227 self.group_name)
227 self.group_name)
228
228
229 class Permission(Base, BaseModel):
229 class Permission(Base, BaseModel):
230 __tablename__ = 'permissions'
230 __tablename__ = 'permissions'
231 __table_args__ = {'useexisting':True}
231 __table_args__ = {'useexisting':True}
232 permission_id = Column("permission_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
232 permission_id = Column("permission_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
233 permission_name = Column("permission_name", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
233 permission_name = Column("permission_name", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
234 permission_longname = Column("permission_longname", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
234 permission_longname = Column("permission_longname", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
235
235
236 def __repr__(self):
236 def __repr__(self):
237 return "<%s('%s:%s')>" % (self.__class__.__name__,
237 return "<%s('%s:%s')>" % (self.__class__.__name__,
238 self.permission_id, self.permission_name)
238 self.permission_id, self.permission_name)
239
239
240 class RepoToPerm(Base, BaseModel):
240 class RepoToPerm(Base, BaseModel):
241 __tablename__ = 'repo_to_perm'
241 __tablename__ = 'repo_to_perm'
242 __table_args__ = (UniqueConstraint('user_id', 'repository_id'), {'useexisting':True})
242 __table_args__ = (UniqueConstraint('user_id', 'repository_id'), {'useexisting':True})
243 repo_to_perm_id = Column("repo_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
243 repo_to_perm_id = Column("repo_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
244 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None)
244 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None)
245 permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
245 permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
246 repository_id = Column("repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=False, unique=None, default=None)
246 repository_id = Column("repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=False, unique=None, default=None)
247
247
248 user = relationship('User')
248 user = relationship('User')
249 permission = relationship('Permission')
249 permission = relationship('Permission')
250 repository = relationship('Repository')
250 repository = relationship('Repository')
251
251
252 class UserToPerm(Base, BaseModel):
252 class UserToPerm(Base, BaseModel):
253 __tablename__ = 'user_to_perm'
253 __tablename__ = 'user_to_perm'
254 __table_args__ = (UniqueConstraint('user_id', 'permission_id'), {'useexisting':True})
254 __table_args__ = (UniqueConstraint('user_id', 'permission_id'), {'useexisting':True})
255 user_to_perm_id = Column("user_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
255 user_to_perm_id = Column("user_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
256 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None)
256 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None)
257 permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
257 permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
258
258
259 user = relationship('User')
259 user = relationship('User')
260 permission = relationship('Permission')
260 permission = relationship('Permission')
261
261
262 class UsersGroupToPerm(Base, BaseModel):
262 class UsersGroupToPerm(Base, BaseModel):
263 __tablename__ = 'users_group_to_perm'
263 __tablename__ = 'users_group_to_perm'
264 __table_args__ = (UniqueConstraint('users_group_id', 'permission_id'), {'useexisting':True})
264 __table_args__ = (UniqueConstraint('users_group_id', 'permission_id'), {'useexisting':True})
265 users_group_to_perm_id = Column("users_group_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
265 users_group_to_perm_id = Column("users_group_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
266 users_group_id = Column("users_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None)
266 users_group_id = Column("users_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None)
267 permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
267 permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
268
268
269 users_group = relationship('UsersGroup')
269 users_group = relationship('UsersGroup')
270 permission = relationship('Permission')
270 permission = relationship('Permission')
271
271
272 class GroupToPerm(Base, BaseModel):
272 class GroupToPerm(Base, BaseModel):
273 __tablename__ = 'group_to_perm'
273 __tablename__ = 'group_to_perm'
274 __table_args__ = (UniqueConstraint('group_id', 'permission_id'), {'useexisting':True})
274 __table_args__ = (UniqueConstraint('group_id', 'permission_id'), {'useexisting':True})
275
275
276 group_to_perm_id = Column("group_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
276 group_to_perm_id = Column("group_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
277 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None)
277 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None)
278 permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
278 permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
279 group_id = Column("group_id", Integer(), ForeignKey('groups.group_id'), nullable=False, unique=None, default=None)
279 group_id = Column("group_id", Integer(), ForeignKey('groups.group_id'), nullable=False, unique=None, default=None)
280
280
281 user = relationship('User')
281 user = relationship('User')
282 permission = relationship('Permission')
282 permission = relationship('Permission')
283 group = relationship('Group')
283 group = relationship('Group')
284
284
285 class Statistics(Base, BaseModel):
285 class Statistics(Base, BaseModel):
286 __tablename__ = 'statistics'
286 __tablename__ = 'statistics'
287 __table_args__ = (UniqueConstraint('repository_id'), {'useexisting':True})
287 __table_args__ = (UniqueConstraint('repository_id'), {'useexisting':True})
288 stat_id = Column("stat_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
288 stat_id = Column("stat_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
289 repository_id = Column("repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=False, unique=True, default=None)
289 repository_id = Column("repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=False, unique=True, default=None)
290 stat_on_revision = Column("stat_on_revision", Integer(), nullable=False)
290 stat_on_revision = Column("stat_on_revision", Integer(), nullable=False)
291 commit_activity = Column("commit_activity", LargeBinary(), nullable=False)#JSON data
291 commit_activity = Column("commit_activity", LargeBinary(), nullable=False)#JSON data
292 commit_activity_combined = Column("commit_activity_combined", LargeBinary(), nullable=False)#JSON data
292 commit_activity_combined = Column("commit_activity_combined", LargeBinary(), nullable=False)#JSON data
293 languages = Column("languages", LargeBinary(), nullable=False)#JSON data
293 languages = Column("languages", LargeBinary(), nullable=False)#JSON data
294
294
295 repository = relationship('Repository', single_parent=True)
295 repository = relationship('Repository', single_parent=True)
296
296
297 class UserFollowing(Base, BaseModel):
297 class UserFollowing(Base, BaseModel):
298 __tablename__ = 'user_followings'
298 __tablename__ = 'user_followings'
299 __table_args__ = (UniqueConstraint('user_id', 'follows_repository_id'),
299 __table_args__ = (UniqueConstraint('user_id', 'follows_repository_id'),
300 UniqueConstraint('user_id', 'follows_user_id')
300 UniqueConstraint('user_id', 'follows_user_id')
301 , {'useexisting':True})
301 , {'useexisting':True})
302
302
303 user_following_id = Column("user_following_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
303 user_following_id = Column("user_following_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
304 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None)
304 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None)
305 follows_repo_id = Column("follows_repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=True, unique=None, default=None)
305 follows_repo_id = Column("follows_repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=True, unique=None, default=None)
306 follows_user_id = Column("follows_user_id", Integer(), ForeignKey('users.user_id'), nullable=True, unique=None, default=None)
306 follows_user_id = Column("follows_user_id", Integer(), ForeignKey('users.user_id'), nullable=True, unique=None, default=None)
307
307
308 user = relationship('User', primaryjoin='User.user_id==UserFollowing.user_id')
308 user = relationship('User', primaryjoin='User.user_id==UserFollowing.user_id')
309
309
310 follows_user = relationship('User', primaryjoin='User.user_id==UserFollowing.follows_user_id')
310 follows_user = relationship('User', primaryjoin='User.user_id==UserFollowing.follows_user_id')
311 follows_repository = relationship('Repository')
311 follows_repository = relationship('Repository')
312
312
313 class CacheInvalidation(Base, BaseModel):
313 class CacheInvalidation(Base, BaseModel):
314 __tablename__ = 'cache_invalidation'
314 __tablename__ = 'cache_invalidation'
315 __table_args__ = (UniqueConstraint('cache_key'), {'useexisting':True})
315 __table_args__ = (UniqueConstraint('cache_key'), {'useexisting':True})
316 cache_id = Column("cache_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
316 cache_id = Column("cache_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
317 cache_key = Column("cache_key", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
317 cache_key = Column("cache_key", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
318 cache_args = Column("cache_args", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
318 cache_args = Column("cache_args", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
319 cache_active = Column("cache_active", Boolean(), nullable=True, unique=None, default=False)
319 cache_active = Column("cache_active", Boolean(), nullable=True, unique=None, default=False)
320
320
321
321
322 def __init__(self, cache_key, cache_args=''):
322 def __init__(self, cache_key, cache_args=''):
323 self.cache_key = cache_key
323 self.cache_key = cache_key
324 self.cache_args = cache_args
324 self.cache_args = cache_args
325 self.cache_active = False
325 self.cache_active = False
326
326
327 def __repr__(self):
327 def __repr__(self):
328 return "<%s('%s:%s')>" % (self.__class__.__name__,
328 return "<%s('%s:%s')>" % (self.__class__.__name__,
329 self.cache_id, self.cache_key)
329 self.cache_id, self.cache_key)
330
330
331 class DbMigrateVersion(Base, BaseModel):
331 class DbMigrateVersion(Base, BaseModel):
332 __tablename__ = 'db_migrate_version'
332 __tablename__ = 'db_migrate_version'
333 __table_args__ = {'useexisting':True}
333 __table_args__ = {'useexisting':True}
334 repository_id = Column('repository_id', String(250), primary_key=True)
334 repository_id = Column('repository_id', String(250), primary_key=True)
335 repository_path = Column('repository_path', Text)
335 repository_path = Column('repository_path', Text)
336 version = Column('version', Integer)
336 version = Column('version', Integer)
337
337
General Comments 0
You need to be logged in to leave comments. Login now