##// END OF EJS Templates
updated config files, and changed model repo_followers to followers
marcink -
r1034:9e59b16d beta
parent child Browse files
Show More
@@ -1,205 +1,218 b''
1 1 ################################################################################
2 2 ################################################################################
3 # rhodecode - Pylons environment configuration #
3 # RhodeCode - Pylons environment configuration #
4 4 # #
5 5 # The %(here)s variable will be replaced with the parent directory of this file#
6 6 ################################################################################
7 7
8 8 [DEFAULT]
9 9 debug = true
10 10 ################################################################################
11 11 ## Uncomment and replace with the address which should receive ##
12 12 ## any error reports after application crash ##
13 ## Additionally those settings will be used by rhodecode mailing system ##
13 ## Additionally those settings will be used by RhodeCode mailing system ##
14 14 ################################################################################
15 15 #email_to = admin@localhost
16 16 #error_email_from = paste_error@localhost
17 17 #app_email_from = rhodecode-noreply@localhost
18 18 #error_message =
19 19
20 20 #smtp_server = mail.server.com
21 21 #smtp_username =
22 22 #smtp_password =
23 23 #smtp_port =
24 24 #smtp_use_tls = false
25 25 #smtp_use_ssl = true
26 26
27 27 [server:main]
28 28 ##nr of threads to spawn
29 29 threadpool_workers = 5
30 30
31 31 ##max request before thread respawn
32 32 threadpool_max_requests = 2
33 33
34 34 ##option to use threads of process
35 35 use_threadpool = true
36 36
37 37 use = egg:Paste#http
38 38 host = 127.0.0.1
39 39 port = 8001
40 40
41 41 [app:main]
42 42 use = egg:rhodecode
43 43 full_stack = true
44 44 static_files = false
45 45 lang=en
46 46 cache_dir = %(here)s/data
47 47 index_dir = %(here)s/data/index
48 48 cut_off_limit = 256000
49 49 force_https = false
50 50
51 51 ####################################
52 52 ### CELERY CONFIG ####
53 53 ####################################
54 54 use_celery = false
55 55 broker.host = localhost
56 56 broker.vhost = rabbitmqhost
57 57 broker.port = 5672
58 58 broker.user = rabbitmq
59 59 broker.password = qweqwe
60 60
61 61 celery.imports = rhodecode.lib.celerylib.tasks
62 62
63 63 celery.result.backend = amqp
64 64 celery.result.dburi = amqp://
65 65 celery.result.serialier = json
66 66
67 67 #celery.send.task.error.emails = true
68 68 #celery.amqp.task.result.expires = 18000
69 69
70 70 celeryd.concurrency = 2
71 71 #celeryd.log.file = celeryd.log
72 72 celeryd.log.level = debug
73 73 celeryd.max.tasks.per.child = 3
74 74
75 75 #tasks will never be sent to the queue, but executed locally instead.
76 76 celery.always.eager = false
77 77
78 78 ####################################
79 79 ### BEAKER CACHE ####
80 80 ####################################
81 beaker.cache.data_dir=/%(here)s/data/cache/data
82 beaker.cache.lock_dir=/%(here)s/data/cache/lock
81 beaker.cache.data_dir=%(here)s/data/cache/data
82 beaker.cache.lock_dir=%(here)s/data/cache/lock
83
83 84 beaker.cache.regions=super_short_term,short_term,long_term,sql_cache_short,sql_cache_med,sql_cache_long
84 85
85 86 beaker.cache.super_short_term.type=memory
86 87 beaker.cache.super_short_term.expire=10
87 88
88 89 beaker.cache.short_term.type=memory
89 90 beaker.cache.short_term.expire=60
90 91
91 92 beaker.cache.long_term.type=memory
92 93 beaker.cache.long_term.expire=36000
93 94
94 95
95 96 beaker.cache.sql_cache_short.type=memory
96 beaker.cache.sql_cache_short.expire=5
97 beaker.cache.sql_cache_short.expire=10
97 98
98 99 beaker.cache.sql_cache_med.type=memory
99 100 beaker.cache.sql_cache_med.expire=360
100 101
101 102 beaker.cache.sql_cache_long.type=file
102 103 beaker.cache.sql_cache_long.expire=3600
103 104
104 105 ####################################
105 106 ### BEAKER SESSION ####
106 107 ####################################
107 108 ## Type of storage used for the session, current types are
108 109 ## dbm, file, memcached, database, and memory.
109 110 ## The storage uses the Container API
110 111 ##that is also used by the cache system.
111 112 beaker.session.type = file
112 113
113 114 beaker.session.key = rhodecode
114 115 beaker.session.secret = g654dcno0-9873jhgfreyu
115 116 beaker.session.timeout = 36000
116 117
117 118 ##auto save the session to not to use .save()
118 119 beaker.session.auto = False
119 120
120 121 ##true exire at browser close
121 122 #beaker.session.cookie_expires = 3600
122 123
123 124
124 125 ################################################################################
125 126 ## WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT* ##
126 127 ## Debug mode will enable the interactive debugging tool, allowing ANYONE to ##
127 128 ## execute malicious code after an exception is raised. ##
128 129 ################################################################################
129 130 set debug = false
130 131
131 132 ##################################
132 133 ### LOGVIEW CONFIG ###
133 134 ##################################
134 135 logview.sqlalchemy = #faa
135 136 logview.pylons.templating = #bfb
136 137 logview.pylons.util = #eee
137 138
138 139 #########################################################
139 140 ### DB CONFIGS - EACH DB WILL HAVE IT'S OWN CONFIG ###
140 141 #########################################################
141 142 sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db
142 143 #sqlalchemy.db1.echo = False
143 144 #sqlalchemy.db1.pool_recycle = 3600
144 145 sqlalchemy.convert_unicode = true
145 146
146 147 ################################
147 148 ### LOGGING CONFIGURATION ####
148 149 ################################
149 150 [loggers]
150 keys = root, routes, rhodecode, sqlalchemy
151 keys = root, routes, rhodecode, sqlalchemy,beaker,templates
151 152
152 153 [handlers]
153 154 keys = console
154 155
155 156 [formatters]
156 157 keys = generic,color_formatter
157 158
158 159 #############
159 160 ## LOGGERS ##
160 161 #############
161 162 [logger_root]
162 163 level = INFO
163 164 handlers = console
164 165
165 166 [logger_routes]
166 167 level = INFO
167 168 handlers = console
168 169 qualname = routes.middleware
169 170 # "level = DEBUG" logs the route matched and routing variables.
170 171 propagate = 0
171 172
173 [logger_beaker]
174 level = ERROR
175 handlers = console
176 qualname = beaker.container
177 propagate = 0
178
179 [logger_templates]
180 level = INFO
181 handlers = console
182 qualname = pylons.templating
183 propagate = 0
184
172 185 [logger_rhodecode]
173 186 level = DEBUG
174 187 handlers = console
175 188 qualname = rhodecode
176 189 propagate = 0
177 190
178 191 [logger_sqlalchemy]
179 192 level = ERROR
180 193 handlers = console
181 194 qualname = sqlalchemy.engine
182 195 propagate = 0
183 196
184 197 ##############
185 198 ## HANDLERS ##
186 199 ##############
187 200
188 201 [handler_console]
189 202 class = StreamHandler
190 203 args = (sys.stderr,)
191 204 level = NOTSET
192 205 formatter = color_formatter
193 206
194 207 ################
195 208 ## FORMATTERS ##
196 209 ################
197 210
198 211 [formatter_generic]
199 212 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
200 213 datefmt = %Y-%m-%d %H:%M:%S
201 214
202 215 [formatter_color_formatter]
203 216 class=rhodecode.lib.colored_formatter.ColorFormatter
204 217 format= %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
205 218 datefmt = %Y-%m-%d %H:%M:%S No newline at end of file
@@ -1,205 +1,218 b''
1 1 ################################################################################
2 2 ################################################################################
3 3 # RhodeCode - Pylons environment configuration #
4 4 # #
5 5 # The %(here)s variable will be replaced with the parent directory of this file#
6 6 ################################################################################
7 7
8 8 [DEFAULT]
9 9 debug = true
10 10 ################################################################################
11 11 ## Uncomment and replace with the address which should receive ##
12 12 ## any error reports after application crash ##
13 13 ## Additionally those settings will be used by RhodeCode mailing system ##
14 14 ################################################################################
15 15 #email_to = admin@localhost
16 16 #error_email_from = paste_error@localhost
17 17 #app_email_from = rhodecode-noreply@localhost
18 18 #error_message =
19 19
20 20 #smtp_server = mail.server.com
21 21 #smtp_username =
22 22 #smtp_password =
23 23 #smtp_port =
24 24 #smtp_use_tls = false
25 25 #smtp_use_ssl = true
26 26
27 27 [server:main]
28 28 ##nr of threads to spawn
29 29 threadpool_workers = 5
30 30
31 31 ##max request before thread respawn
32 32 threadpool_max_requests = 10
33 33
34 34 ##option to use threads of process
35 35 use_threadpool = true
36 36
37 37 use = egg:Paste#http
38 38 host = 127.0.0.1
39 39 port = 5000
40 40
41 41 [app:main]
42 42 use = egg:rhodecode
43 43 full_stack = true
44 44 static_files = true
45 45 lang=en
46 46 cache_dir = %(here)s/data
47 47 index_dir = %(here)s/data/index
48 48 app_instance_uuid = ${app_instance_uuid}
49 49 cut_off_limit = 256000
50 50 force_https = false
51 51
52 52 ####################################
53 53 ### CELERY CONFIG ####
54 54 ####################################
55 55 use_celery = false
56 56 broker.host = localhost
57 57 broker.vhost = rabbitmqhost
58 58 broker.port = 5672
59 59 broker.user = rabbitmq
60 60 broker.password = qweqwe
61 61
62 62 celery.imports = rhodecode.lib.celerylib.tasks
63 63
64 64 celery.result.backend = amqp
65 65 celery.result.dburi = amqp://
66 66 celery.result.serialier = json
67 67
68 68 #celery.send.task.error.emails = true
69 69 #celery.amqp.task.result.expires = 18000
70 70
71 71 celeryd.concurrency = 2
72 72 #celeryd.log.file = celeryd.log
73 73 celeryd.log.level = debug
74 74 celeryd.max.tasks.per.child = 3
75 75
76 76 #tasks will never be sent to the queue, but executed locally instead.
77 77 celery.always.eager = false
78 78
79 79 ####################################
80 80 ### BEAKER CACHE ####
81 81 ####################################
82 beaker.cache.data_dir=/%(here)s/data/cache/data
83 beaker.cache.lock_dir=/%(here)s/data/cache/lock
82 beaker.cache.data_dir=%(here)s/data/cache/data
83 beaker.cache.lock_dir=%(here)s/data/cache/lock
84
84 85 beaker.cache.regions=super_short_term,short_term,long_term,sql_cache_short,sql_cache_med,sql_cache_long
85 86
86 87 beaker.cache.super_short_term.type=memory
87 88 beaker.cache.super_short_term.expire=10
88 89
89 90 beaker.cache.short_term.type=memory
90 91 beaker.cache.short_term.expire=60
91 92
92 93 beaker.cache.long_term.type=memory
93 94 beaker.cache.long_term.expire=36000
94 95
95 96 beaker.cache.sql_cache_short.type=memory
96 97 beaker.cache.sql_cache_short.expire=10
97 98
98 99 beaker.cache.sql_cache_med.type=memory
99 100 beaker.cache.sql_cache_med.expire=360
100 101
101 102 beaker.cache.sql_cache_long.type=file
102 103 beaker.cache.sql_cache_long.expire=3600
103 104
104 105 ####################################
105 106 ### BEAKER SESSION ####
106 107 ####################################
107 108 ## Type of storage used for the session, current types are
108 109 ## dbm, file, memcached, database, and memory.
109 110 ## The storage uses the Container API
110 111 ##that is also used by the cache system.
111 112 beaker.session.type = file
112 113
113 114 beaker.session.key = rhodecode
114 115 beaker.session.secret = ${app_instance_secret}
115 116 beaker.session.timeout = 36000
116 117
117 118 ##auto save the session to not to use .save()
118 119 beaker.session.auto = False
119 120
120 121 ##true exire at browser close
121 122 #beaker.session.cookie_expires = 3600
122 123
123 124
124 125 ################################################################################
125 126 ## WARNING: *THE LINE BELOW MUST BE UNCOMMENTED ON A PRODUCTION ENVIRONMENT* ##
126 127 ## Debug mode will enable the interactive debugging tool, allowing ANYONE to ##
127 128 ## execute malicious code after an exception is raised. ##
128 129 ################################################################################
129 130 set debug = false
130 131
131 132 ##################################
132 133 ### LOGVIEW CONFIG ###
133 134 ##################################
134 135 logview.sqlalchemy = #faa
135 136 logview.pylons.templating = #bfb
136 137 logview.pylons.util = #eee
137 138
138 139 #########################################################
139 140 ### DB CONFIGS - EACH DB WILL HAVE IT'S OWN CONFIG ###
140 141 #########################################################
141 142 sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db
142 143 #sqlalchemy.db1.echo = False
143 144 #sqlalchemy.db1.pool_recycle = 3600
144 145 sqlalchemy.convert_unicode = true
145 146
146 147 ################################
147 148 ### LOGGING CONFIGURATION ####
148 149 ################################
149 150 [loggers]
150 keys = root, routes, rhodecode, sqlalchemy
151 keys = root, routes, rhodecode, sqlalchemy,beaker,templates
151 152
152 153 [handlers]
153 154 keys = console
154 155
155 156 [formatters]
156 157 keys = generic,color_formatter
157 158
158 159 #############
159 160 ## LOGGERS ##
160 161 #############
161 162 [logger_root]
162 163 level = INFO
163 164 handlers = console
164 165
165 166 [logger_routes]
166 167 level = INFO
167 168 handlers = console
168 169 qualname = routes.middleware
169 170 # "level = DEBUG" logs the route matched and routing variables.
170 171 propagate = 0
171 172
173 [logger_beaker]
174 level = ERROR
175 handlers = console
176 qualname = beaker.container
177 propagate = 0
178
179 [logger_templates]
180 level = INFO
181 handlers = console
182 qualname = pylons.templating
183 propagate = 0
184
172 185 [logger_rhodecode]
173 186 level = DEBUG
174 187 handlers = console
175 188 qualname = rhodecode
176 189 propagate = 0
177 190
178 191 [logger_sqlalchemy]
179 192 level = ERROR
180 193 handlers = console
181 194 qualname = sqlalchemy.engine
182 195 propagate = 0
183 196
184 197 ##############
185 198 ## HANDLERS ##
186 199 ##############
187 200
188 201 [handler_console]
189 202 class = StreamHandler
190 203 args = (sys.stderr,)
191 204 level = NOTSET
192 205 formatter = color_formatter
193 206
194 207 ################
195 208 ## FORMATTERS ##
196 209 ################
197 210
198 211 [formatter_generic]
199 212 format = %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
200 213 datefmt = %Y-%m-%d %H:%M:%S
201 214
202 215 [formatter_color_formatter]
203 216 class=rhodecode.lib.colored_formatter.ColorFormatter
204 217 format= %(asctime)s.%(msecs)03d %(levelname)-5.5s [%(name)s] %(message)s
205 218 datefmt = %Y-%m-%d %H:%M:%S No newline at end of file
@@ -1,346 +1,346 b''
1 1 # -*- coding: utf-8 -*-
2 2 """
3 3 rhodecode.model.db
4 4 ~~~~~~~~~~~~~~~~~~
5 5
6 6 Database Models for RhodeCode
7 7
8 8 :created_on: Apr 08, 2010
9 9 :author: marcink
10 10 :copyright: (C) 2009-2011 Marcin Kuzminski <marcin@python-works.com>
11 11 :license: GPLv3, see COPYING for more details.
12 12 """
13 13 # This program is free software; you can redistribute it and/or
14 14 # modify it under the terms of the GNU General Public License
15 15 # as published by the Free Software Foundation; version 2
16 16 # of the License or (at your opinion) any later version of the license.
17 17 #
18 18 # This program is distributed in the hope that it will be useful,
19 19 # but WITHOUT ANY WARRANTY; without even the implied warranty of
20 20 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 21 # GNU General Public License for more details.
22 22 #
23 23 # You should have received a copy of the GNU General Public License
24 24 # along with this program; if not, write to the Free Software
25 25 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
26 26 # MA 02110-1301, USA.
27 27 import logging
28 28 import datetime
29 29 from datetime import date
30 30
31 31 from sqlalchemy import *
32 32 from sqlalchemy.exc import DatabaseError
33 33 from sqlalchemy.orm import relationship, backref, class_mapper
34 34 from sqlalchemy.orm.session import Session
35 35
36 36 from rhodecode.model.meta import Base
37 37
38 38 log = logging.getLogger(__name__)
39 39
40 40 class BaseModel(object):
41 41
42 42 @classmethod
43 43 def _get_keys(cls):
44 44 """return column names for this model """
45 45 return class_mapper(cls).c.keys()
46 46
47 47 def get_dict(self):
48 48 """return dict with keys and values corresponding
49 49 to this model data """
50 50
51 51 d = {}
52 52 for k in self._get_keys():
53 53 d[k] = getattr(self, k)
54 54 return d
55 55
56 56 def get_appstruct(self):
57 57 """return list with keys and values tupples corresponding
58 58 to this model data """
59 59
60 60 l = []
61 61 for k in self._get_keys():
62 62 l.append((k, getattr(self, k),))
63 63 return l
64 64
65 65 def populate_obj(self, populate_dict):
66 66 """populate model with data from given populate_dict"""
67 67
68 68 for k in self._get_keys():
69 69 if k in populate_dict:
70 70 setattr(self, k, populate_dict[k])
71 71
72 72 class RhodeCodeSettings(Base, BaseModel):
73 73 __tablename__ = 'rhodecode_settings'
74 74 __table_args__ = (UniqueConstraint('app_settings_name'), {'useexisting':True})
75 75 app_settings_id = Column("app_settings_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
76 76 app_settings_name = Column("app_settings_name", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
77 77 app_settings_value = Column("app_settings_value", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
78 78
79 79 def __init__(self, k='', v=''):
80 80 self.app_settings_name = k
81 81 self.app_settings_value = v
82 82
83 83 def __repr__(self):
84 84 return "<%s('%s:%s')>" % (self.__class__.__name__,
85 85 self.app_settings_name, self.app_settings_value)
86 86
87 87 class RhodeCodeUi(Base, BaseModel):
88 88 __tablename__ = 'rhodecode_ui'
89 89 __table_args__ = {'useexisting':True}
90 90 ui_id = Column("ui_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
91 91 ui_section = Column("ui_section", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
92 92 ui_key = Column("ui_key", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
93 93 ui_value = Column("ui_value", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
94 94 ui_active = Column("ui_active", Boolean(), nullable=True, unique=None, default=True)
95 95
96 96
97 97 class User(Base, BaseModel):
98 98 __tablename__ = 'users'
99 99 __table_args__ = (UniqueConstraint('username'), UniqueConstraint('email'), {'useexisting':True})
100 100 user_id = Column("user_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
101 101 username = Column("username", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
102 102 password = Column("password", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
103 103 active = Column("active", Boolean(), nullable=True, unique=None, default=None)
104 104 admin = Column("admin", Boolean(), nullable=True, unique=None, default=False)
105 105 name = Column("name", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
106 106 lastname = Column("lastname", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
107 107 email = Column("email", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
108 108 last_login = Column("last_login", DateTime(timezone=False), nullable=True, unique=None, default=None)
109 109 ldap_dn = Column("ldap_dn", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
110 110
111 111 user_log = relationship('UserLog', cascade='all')
112 112 user_perms = relationship('UserToPerm', primaryjoin="User.user_id==UserToPerm.user_id", cascade='all')
113 113
114 114 repositories = relationship('Repository')
115 115 user_followers = relationship('UserFollowing', primaryjoin='UserFollowing.follows_user_id==User.user_id', cascade='all')
116 116
117 117 @property
118 118 def full_contact(self):
119 119 return '%s %s <%s>' % (self.name, self.lastname, self.email)
120 120
121 121
122 122 @property
123 123 def is_admin(self):
124 124 return self.admin
125 125
126 126 def __repr__(self):
127 127 return "<%s('id:%s:%s')>" % (self.__class__.__name__,
128 128 self.user_id, self.username)
129 129
130 130 def update_lastlogin(self):
131 131 """Update user lastlogin"""
132 132
133 133 try:
134 134 session = Session.object_session(self)
135 135 self.last_login = datetime.datetime.now()
136 136 session.add(self)
137 137 session.commit()
138 138 log.debug('updated user %s lastlogin', self.username)
139 139 except (DatabaseError,):
140 140 session.rollback()
141 141
142 142
143 143 class UserLog(Base, BaseModel):
144 144 __tablename__ = 'user_logs'
145 145 __table_args__ = {'useexisting':True}
146 146 user_log_id = Column("user_log_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
147 147 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None)
148 148 repository_id = Column("repository_id", Integer(length=None, convert_unicode=False, assert_unicode=None), ForeignKey('repositories.repo_id'), nullable=False, unique=None, default=None)
149 149 repository_name = Column("repository_name", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
150 150 user_ip = Column("user_ip", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
151 151 action = Column("action", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
152 152 action_date = Column("action_date", DateTime(timezone=False), nullable=True, unique=None, default=None)
153 153
154 154 @property
155 155 def action_as_day(self):
156 156 return date(*self.action_date.timetuple()[:3])
157 157
158 158 user = relationship('User')
159 159 repository = relationship('Repository')
160 160
161 161
162 162 class UsersGroup(Base, BaseModel):
163 163 __tablename__ = 'users_groups'
164 164 __table_args__ = {'useexisting':True}
165 165
166 166 users_group_id = Column("users_group_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
167 167 users_group_name = Column("users_group_name", String(length=None, convert_unicode=False, assert_unicode=None), nullable=False, unique=True, default=None)
168 168 users_group_active = Column("users_group_active", Boolean(), nullable=True, unique=None, default=None)
169 169
170 170 members = relationship('UsersGroupMember', cascade="all, delete, delete-orphan", lazy="joined")
171 171
172 172 class UsersGroupMember(Base, BaseModel):
173 173 __tablename__ = 'users_groups_members'
174 174 __table_args__ = {'useexisting':True}
175 175
176 176 users_group_member_id = Column("users_group_member_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
177 177 users_group_id = Column("users_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None)
178 178 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None)
179 179
180 180 user = relationship('User', lazy='joined')
181 181 users_group = relationship('UsersGroup')
182 182
183 183 def __init__(self, gr_id='', u_id=''):
184 184 self.users_group_id = gr_id
185 185 self.user_id = u_id
186 186
187 187 class Repository(Base, BaseModel):
188 188 __tablename__ = 'repositories'
189 189 __table_args__ = (UniqueConstraint('repo_name'), {'useexisting':True},)
190 190 repo_id = Column("repo_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
191 191 repo_name = Column("repo_name", String(length=None, convert_unicode=False, assert_unicode=None), nullable=False, unique=True, default=None)
192 192 repo_type = Column("repo_type", String(length=None, convert_unicode=False, assert_unicode=None), nullable=False, unique=False, default='hg')
193 193 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=False, default=None)
194 194 private = Column("private", Boolean(), nullable=True, unique=None, default=None)
195 195 enable_statistics = Column("statistics", Boolean(), nullable=True, unique=None, default=True)
196 196 enable_downloads = Column("downloads", Boolean(), nullable=True, unique=None, default=True)
197 197 description = Column("description", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
198 198 fork_id = Column("fork_id", Integer(), ForeignKey('repositories.repo_id'), nullable=True, unique=False, default=None)
199 199 group_id = Column("group_id", Integer(), ForeignKey('groups.group_id'), nullable=True, unique=False, default=None)
200 200
201 201 user = relationship('User')
202 202 fork = relationship('Repository', remote_side=repo_id)
203 203 group = relationship('Group')
204 204 repo_to_perm = relationship('RepoToPerm', cascade='all', order_by='RepoToPerm.repo_to_perm_id')
205 205 users_group_to_perm = relationship('UsersGroupToPerm', cascade='all')
206 206 stats = relationship('Statistics', cascade='all', uselist=False)
207 207
208 repo_followers = relationship('UserFollowing', primaryjoin='UserFollowing.follows_repo_id==Repository.repo_id', cascade='all')
208 followers = relationship('UserFollowing', primaryjoin='UserFollowing.follows_repo_id==Repository.repo_id', cascade='all')
209 209
210 210 logs = relationship('UserLog', cascade='all')
211 211
212 212 def __repr__(self):
213 213 return "<%s('%s:%s')>" % (self.__class__.__name__,
214 214 self.repo_id, self.repo_name)
215 215
216 216 class Group(Base, BaseModel):
217 217 __tablename__ = 'groups'
218 218 __table_args__ = (UniqueConstraint('group_name'), {'useexisting':True},)
219 219
220 220 group_id = Column("group_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
221 221 group_name = Column("group_name", String(length=None, convert_unicode=False, assert_unicode=None), nullable=False, unique=True, default=None)
222 222 group_parent_id = Column("group_parent_id", Integer(), ForeignKey('groups.group_id'), nullable=True, unique=None, default=None)
223 223
224 224 parent_group = relationship('Group', remote_side=group_id)
225 225
226 226
227 227 def __init__(self, group_name='', parent_group=None):
228 228 self.group_name = group_name
229 229 self.parent_group = parent_group
230 230
231 231 def __repr__(self):
232 232 return "<%s('%s:%s')>" % (self.__class__.__name__, self.group_id,
233 233 self.group_name)
234 234
235 235 class Permission(Base, BaseModel):
236 236 __tablename__ = 'permissions'
237 237 __table_args__ = {'useexisting':True}
238 238 permission_id = Column("permission_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
239 239 permission_name = Column("permission_name", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
240 240 permission_longname = Column("permission_longname", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
241 241
242 242 def __repr__(self):
243 243 return "<%s('%s:%s')>" % (self.__class__.__name__,
244 244 self.permission_id, self.permission_name)
245 245
246 246 class RepoToPerm(Base, BaseModel):
247 247 __tablename__ = 'repo_to_perm'
248 248 __table_args__ = (UniqueConstraint('user_id', 'repository_id'), {'useexisting':True})
249 249 repo_to_perm_id = Column("repo_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
250 250 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None)
251 251 permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
252 252 repository_id = Column("repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=False, unique=None, default=None)
253 253
254 254 user = relationship('User')
255 255 permission = relationship('Permission')
256 256 repository = relationship('Repository')
257 257
258 258 class UserToPerm(Base, BaseModel):
259 259 __tablename__ = 'user_to_perm'
260 260 __table_args__ = (UniqueConstraint('user_id', 'permission_id'), {'useexisting':True})
261 261 user_to_perm_id = Column("user_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
262 262 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None)
263 263 permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
264 264
265 265 user = relationship('User')
266 266 permission = relationship('Permission')
267 267
268 268
269 269 class UsersGroupToPerm(Base, BaseModel):
270 270 __tablename__ = 'users_group_to_perm'
271 271 __table_args__ = (UniqueConstraint('users_group_id', 'permission_id'), {'useexisting':True})
272 272 users_group_to_perm_id = Column("users_group_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
273 273 users_group_id = Column("users_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None)
274 274 permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
275 275 repository_id = Column("repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=False, unique=None, default=None)
276 276
277 277 users_group = relationship('UsersGroup')
278 278 permission = relationship('Permission')
279 279 repository = relationship('Repository')
280 280
281 281 class GroupToPerm(Base, BaseModel):
282 282 __tablename__ = 'group_to_perm'
283 283 __table_args__ = (UniqueConstraint('group_id', 'permission_id'), {'useexisting':True})
284 284
285 285 group_to_perm_id = Column("group_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
286 286 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None)
287 287 permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
288 288 group_id = Column("group_id", Integer(), ForeignKey('groups.group_id'), nullable=False, unique=None, default=None)
289 289
290 290 user = relationship('User')
291 291 permission = relationship('Permission')
292 292 group = relationship('Group')
293 293
294 294 class Statistics(Base, BaseModel):
295 295 __tablename__ = 'statistics'
296 296 __table_args__ = (UniqueConstraint('repository_id'), {'useexisting':True})
297 297 stat_id = Column("stat_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
298 298 repository_id = Column("repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=False, unique=True, default=None)
299 299 stat_on_revision = Column("stat_on_revision", Integer(), nullable=False)
300 300 commit_activity = Column("commit_activity", LargeBinary(), nullable=False)#JSON data
301 301 commit_activity_combined = Column("commit_activity_combined", LargeBinary(), nullable=False)#JSON data
302 302 languages = Column("languages", LargeBinary(), nullable=False)#JSON data
303 303
304 304 repository = relationship('Repository', single_parent=True)
305 305
306 306 class UserFollowing(Base, BaseModel):
307 307 __tablename__ = 'user_followings'
308 308 __table_args__ = (UniqueConstraint('user_id', 'follows_repository_id'),
309 309 UniqueConstraint('user_id', 'follows_user_id')
310 310 , {'useexisting':True})
311 311
312 312 user_following_id = Column("user_following_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
313 313 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None)
314 314 follows_repo_id = Column("follows_repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=True, unique=None, default=None)
315 315 follows_user_id = Column("follows_user_id", Integer(), ForeignKey('users.user_id'), nullable=True, unique=None, default=None)
316 316
317 317 user = relationship('User', primaryjoin='User.user_id==UserFollowing.user_id')
318 318
319 319 follows_user = relationship('User', primaryjoin='User.user_id==UserFollowing.follows_user_id')
320 320 follows_repository = relationship('Repository', order_by='Repository.repo_name')
321 321
322 322 class CacheInvalidation(Base, BaseModel):
323 323 __tablename__ = 'cache_invalidation'
324 324 __table_args__ = (UniqueConstraint('cache_key'), {'useexisting':True})
325 325 cache_id = Column("cache_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
326 326 cache_key = Column("cache_key", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
327 327 cache_args = Column("cache_args", String(length=None, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
328 328 cache_active = Column("cache_active", Boolean(), nullable=True, unique=None, default=False)
329 329
330 330
331 331 def __init__(self, cache_key, cache_args=''):
332 332 self.cache_key = cache_key
333 333 self.cache_args = cache_args
334 334 self.cache_active = False
335 335
336 336 def __repr__(self):
337 337 return "<%s('%s:%s')>" % (self.__class__.__name__,
338 338 self.cache_id, self.cache_key)
339 339
340 340 class DbMigrateVersion(Base, BaseModel):
341 341 __tablename__ = 'db_migrate_version'
342 342 __table_args__ = {'useexisting':True}
343 343 repository_id = Column('repository_id', String(250), primary_key=True)
344 344 repository_path = Column('repository_path', Text)
345 345 version = Column('version', Integer)
346 346
General Comments 0
You need to be logged in to leave comments. Login now