Mercurial > kallithea
annotate rhodecode/model/db.py @ 2792:9ae95fdeca18 rhodecode-0.0.1.4.0
merge with beta
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Mon, 03 Sep 2012 21:59:31 +0200 |
parents | 63e58ef80ef1 85bb0866d444 |
children | f7a52d548fd0 |
rev | line source |
---|---|
759
a7f50911a945
Models code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
734
diff
changeset
|
1 # -*- coding: utf-8 -*- |
a7f50911a945
Models code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
734
diff
changeset
|
2 """ |
832
634596f81cfd
new improved models with helper functions for easier data fetching
Marcin Kuzminski <marcin@python-works.com>
parents:
810
diff
changeset
|
3 rhodecode.model.db |
634596f81cfd
new improved models with helper functions for easier data fetching
Marcin Kuzminski <marcin@python-works.com>
parents:
810
diff
changeset
|
4 ~~~~~~~~~~~~~~~~~~ |
1203
6832ef664673
source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents:
1199
diff
changeset
|
5 |
834
8924ed0e4f36
added current db version into rhodecode,
Marcin Kuzminski <marcin@python-works.com>
parents:
832
diff
changeset
|
6 Database Models for RhodeCode |
1203
6832ef664673
source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents:
1199
diff
changeset
|
7 |
759
a7f50911a945
Models code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
734
diff
changeset
|
8 :created_on: Apr 08, 2010 |
a7f50911a945
Models code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
734
diff
changeset
|
9 :author: marcink |
1824
89efedac4e6c
2012 copyrights
Marcin Kuzminski <marcin@python-works.com>
parents:
1819
diff
changeset
|
10 :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com> |
759
a7f50911a945
Models code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
734
diff
changeset
|
11 :license: GPLv3, see COPYING for more details. |
a7f50911a945
Models code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
734
diff
changeset
|
12 """ |
1206
a671db5bdd58
fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents:
1203
diff
changeset
|
13 # This program is free software: you can redistribute it and/or modify |
a671db5bdd58
fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents:
1203
diff
changeset
|
14 # it under the terms of the GNU General Public License as published by |
a671db5bdd58
fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents:
1203
diff
changeset
|
15 # the Free Software Foundation, either version 3 of the License, or |
a671db5bdd58
fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents:
1203
diff
changeset
|
16 # (at your option) any later version. |
1203
6832ef664673
source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents:
1199
diff
changeset
|
17 # |
759
a7f50911a945
Models code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
734
diff
changeset
|
18 # This program is distributed in the hope that it will be useful, |
a7f50911a945
Models code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
734
diff
changeset
|
19 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
a7f50911a945
Models code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
734
diff
changeset
|
20 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
a7f50911a945
Models code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
734
diff
changeset
|
21 # GNU General Public License for more details. |
1203
6832ef664673
source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents:
1199
diff
changeset
|
22 # |
759
a7f50911a945
Models code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
734
diff
changeset
|
23 # You should have received a copy of the GNU General Public License |
1206
a671db5bdd58
fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents:
1203
diff
changeset
|
24 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
1199
268fa0b6b2ef
Added os.sep in models for better win support
Marcin Kuzminski <marcin@python-works.com>
parents:
1193
diff
changeset
|
25 |
268fa0b6b2ef
Added os.sep in models for better win support
Marcin Kuzminski <marcin@python-works.com>
parents:
1193
diff
changeset
|
26 import os |
759
a7f50911a945
Models code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
734
diff
changeset
|
27 import logging |
a7f50911a945
Models code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
734
diff
changeset
|
28 import datetime |
1366
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
29 import traceback |
2356
2da7b5984ae5
typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents:
2352
diff
changeset
|
30 import hashlib |
2726
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
31 import time |
1884
0614862a20ec
Added number of comments in changelog for each changeset
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
32 from collections import defaultdict |
759
a7f50911a945
Models code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
734
diff
changeset
|
33 |
658 | 34 from sqlalchemy import * |
1546
c363267bbec7
fixes #265 ldap save fails sometimes on converting attributes to booleans, added getter and setter
Marcin Kuzminski <marcin@python-works.com>
parents:
1539
diff
changeset
|
35 from sqlalchemy.ext.hybrid import hybrid_property |
1594 | 36 from sqlalchemy.orm import relationship, joinedload, class_mapper, validates |
2357 | 37 from sqlalchemy.exc import DatabaseError |
1366
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
38 from beaker.cache import cache_region, region_invalidate |
2496
fddd8e3fc157
use get_or_404 where possible
Marcin Kuzminski <marcin@python-works.com>
parents:
2481
diff
changeset
|
39 from webob.exc import HTTPNotFound |
1366
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
40 |
2218
6e5d686084f1
fixed translation function for models
Marcin Kuzminski <marcin@python-works.com>
parents:
2217
diff
changeset
|
41 from pylons.i18n.translation import lazy_ugettext as _ |
2215
2c2bdaeca912
code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents:
2161
diff
changeset
|
42 |
2007
324ac367a4da
Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
2000
diff
changeset
|
43 from rhodecode.lib.vcs import get_backend |
324ac367a4da
Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
2000
diff
changeset
|
44 from rhodecode.lib.vcs.utils.helpers import get_scm |
324ac367a4da
Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
2000
diff
changeset
|
45 from rhodecode.lib.vcs.exceptions import VCSError |
324ac367a4da
Added VCS into rhodecode core for faster and easier deployments of new versions
Marcin Kuzminski <marcin@python-works.com>
parents:
2000
diff
changeset
|
46 from rhodecode.lib.vcs.utils.lazy import LazyProperty |
1366
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
47 |
2109 | 48 from rhodecode.lib.utils2 import str2bool, safe_str, get_changeset_safe, \ |
49 safe_unicode | |
1514
87ec80c280bb
fixed issues with python2.5
Marcin Kuzminski <marcin@python-works.com>
parents:
1508
diff
changeset
|
50 from rhodecode.lib.compat import json |
1669
f522f4d3bf93
moved caching query to libs
Marcin Kuzminski <marcin@python-works.com>
parents:
1665
diff
changeset
|
51 from rhodecode.lib.caching_query import FromCache |
1500 | 52 |
2356
2da7b5984ae5
typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents:
2352
diff
changeset
|
53 from rhodecode.model.meta import Base, Session |
1500 | 54 |
2339
79b3c9c66c54
Added optional repo_name into issue tracker url to get just the name of repo without group prefix
Marcin Kuzminski <marcin@python-works.com>
parents:
2251
diff
changeset
|
55 URL_SEP = '/' |
1593 | 56 log = logging.getLogger(__name__) |
49
3ada2f409c1c
Added sqlalchemy support
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff
changeset
|
57 |
1081
70bf0be59653
fixed Session problems in model class functions
Marcin Kuzminski <marcin@python-works.com>
parents:
1065
diff
changeset
|
58 #============================================================================== |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
59 # BASE CLASSES |
1081
70bf0be59653
fixed Session problems in model class functions
Marcin Kuzminski <marcin@python-works.com>
parents:
1065
diff
changeset
|
60 #============================================================================== |
70bf0be59653
fixed Session problems in model class functions
Marcin Kuzminski <marcin@python-works.com>
parents:
1065
diff
changeset
|
61 |
2062
bf8ed0adbc66
fixes #371 fixed issues with beaker/sqlalchemy and non-ascii cache keys
Marcin Kuzminski <marcin@python-works.com>
parents:
2058
diff
changeset
|
62 _hash_key = lambda k: hashlib.md5(safe_str(k)).hexdigest() |
bf8ed0adbc66
fixes #371 fixed issues with beaker/sqlalchemy and non-ascii cache keys
Marcin Kuzminski <marcin@python-works.com>
parents:
2058
diff
changeset
|
63 |
1800 | 64 |
1593 | 65 class BaseModel(object): |
1758
a87aa385f21c
fixed repo_create permission by adding missing commit statements
Marcin Kuzminski <marcin@python-works.com>
parents:
1757
diff
changeset
|
66 """ |
a87aa385f21c
fixed repo_create permission by adding missing commit statements
Marcin Kuzminski <marcin@python-works.com>
parents:
1757
diff
changeset
|
67 Base Model for all classess |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
68 """ |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
69 |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
70 @classmethod |
1593 | 71 def _get_keys(cls): |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
72 """return column names for this model """ |
1593 | 73 return class_mapper(cls).c.keys() |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
74 |
1948
4582e6b9e2f6
get_dict function garden
Marcin Kuzminski <marcin@python-works.com>
parents:
1886
diff
changeset
|
75 def get_dict(self): |
1758
a87aa385f21c
fixed repo_create permission by adding missing commit statements
Marcin Kuzminski <marcin@python-works.com>
parents:
1757
diff
changeset
|
76 """ |
a87aa385f21c
fixed repo_create permission by adding missing commit statements
Marcin Kuzminski <marcin@python-works.com>
parents:
1757
diff
changeset
|
77 return dict with keys and values corresponding |
1948
4582e6b9e2f6
get_dict function garden
Marcin Kuzminski <marcin@python-works.com>
parents:
1886
diff
changeset
|
78 to this model data """ |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
79 |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
80 d = {} |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
81 for k in self._get_keys(): |
1593 | 82 d[k] = getattr(self, k) |
1800 | 83 |
1758
a87aa385f21c
fixed repo_create permission by adding missing commit statements
Marcin Kuzminski <marcin@python-works.com>
parents:
1757
diff
changeset
|
84 # also use __json__() if present to get additional fields |
2588
32dd6896abcf
added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents:
2585
diff
changeset
|
85 _json_attr = getattr(self, '__json__', None) |
32dd6896abcf
added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents:
2585
diff
changeset
|
86 if _json_attr: |
32dd6896abcf
added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents:
2585
diff
changeset
|
87 # update with attributes from __json__ |
32dd6896abcf
added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents:
2585
diff
changeset
|
88 if callable(_json_attr): |
32dd6896abcf
added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents:
2585
diff
changeset
|
89 _json_attr = _json_attr() |
32dd6896abcf
added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents:
2585
diff
changeset
|
90 for k, val in _json_attr.iteritems(): |
32dd6896abcf
added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents:
2585
diff
changeset
|
91 d[k] = val |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
92 return d |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
93 |
1593 | 94 def get_appstruct(self): |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
95 """return list with keys and values tupples corresponding |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
96 to this model data """ |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
97 |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
98 l = [] |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
99 for k in self._get_keys(): |
1593 | 100 l.append((k, getattr(self, k),)) |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
101 return l |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
102 |
1593 | 103 def populate_obj(self, populate_dict): |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
104 """populate model with data from given populate_dict""" |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
105 |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
106 for k in self._get_keys(): |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
107 if k in populate_dict: |
1593 | 108 setattr(self, k, populate_dict[k]) |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
109 |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
110 @classmethod |
1593 | 111 def query(cls): |
2520
a1e156503afe
Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents:
2510
diff
changeset
|
112 return Session().query(cls) |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
113 |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
114 @classmethod |
1593 | 115 def get(cls, id_): |
1594 | 116 if id_: |
117 return cls.query().get(id_) | |
1466 | 118 |
1460
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
119 @classmethod |
2496
fddd8e3fc157
use get_or_404 where possible
Marcin Kuzminski <marcin@python-works.com>
parents:
2481
diff
changeset
|
120 def get_or_404(cls, id_): |
fddd8e3fc157
use get_or_404 where possible
Marcin Kuzminski <marcin@python-works.com>
parents:
2481
diff
changeset
|
121 if id_: |
fddd8e3fc157
use get_or_404 where possible
Marcin Kuzminski <marcin@python-works.com>
parents:
2481
diff
changeset
|
122 res = cls.query().get(id_) |
fddd8e3fc157
use get_or_404 where possible
Marcin Kuzminski <marcin@python-works.com>
parents:
2481
diff
changeset
|
123 if not res: |
fddd8e3fc157
use get_or_404 where possible
Marcin Kuzminski <marcin@python-works.com>
parents:
2481
diff
changeset
|
124 raise HTTPNotFound |
fddd8e3fc157
use get_or_404 where possible
Marcin Kuzminski <marcin@python-works.com>
parents:
2481
diff
changeset
|
125 return res |
fddd8e3fc157
use get_or_404 where possible
Marcin Kuzminski <marcin@python-works.com>
parents:
2481
diff
changeset
|
126 |
fddd8e3fc157
use get_or_404 where possible
Marcin Kuzminski <marcin@python-works.com>
parents:
2481
diff
changeset
|
127 @classmethod |
1593 | 128 def getAll(cls): |
1584
3338a0994472
Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents:
1508
diff
changeset
|
129 return cls.query().all() |
1466 | 130 |
1460
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
131 @classmethod |
1593 | 132 def delete(cls, id_): |
133 obj = cls.query().get(id_) | |
2520
a1e156503afe
Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents:
2510
diff
changeset
|
134 Session().delete(obj) |
2161
e8c016815ab9
added hidden fulldiff GET param for disabling big diff cut off limit.
Marcin Kuzminski <marcin@python-works.com>
parents:
2157
diff
changeset
|
135 |
2156
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
136 def __repr__(self): |
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
137 if hasattr(self, '__unicode__'): |
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
138 # python repr needs to return str |
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
139 return safe_str(self.__unicode__()) |
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
140 return '<DB:%s>' % (self.__class__.__name__) |
1081
70bf0be59653
fixed Session problems in model class functions
Marcin Kuzminski <marcin@python-works.com>
parents:
1065
diff
changeset
|
141 |
2356
2da7b5984ae5
typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents:
2352
diff
changeset
|
142 |
1633
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
143 class RhodeCodeSetting(Base, BaseModel): |
548
b75b77ef649d
renamed hg_app to rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents:
547
diff
changeset
|
144 __tablename__ = 'rhodecode_settings' |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
145 __table_args__ = ( |
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
146 UniqueConstraint('app_settings_name'), |
2356
2da7b5984ae5
typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents:
2352
diff
changeset
|
147 {'extend_existing': True, 'mysql_engine': 'InnoDB', |
2149 | 148 'mysql_charset': 'utf8'} |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
149 ) |
1594 | 150 app_settings_id = Column("app_settings_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
2588
32dd6896abcf
added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents:
2585
diff
changeset
|
151 app_settings_name = Column("app_settings_name", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) |
32dd6896abcf
added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents:
2585
diff
changeset
|
152 _app_settings_value = Column("app_settings_value", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) |
341
1ef52a70f3b7
Made config file free configuration based on database and capable of beeing manage via application settings + some code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
328
diff
changeset
|
153 |
1594 | 154 def __init__(self, k='', v=''): |
704
26237de9b613
Added settings model, and Exceptions lib.
Marcin Kuzminski <marcin@python-works.com>
parents:
692
diff
changeset
|
155 self.app_settings_name = k |
26237de9b613
Added settings model, and Exceptions lib.
Marcin Kuzminski <marcin@python-works.com>
parents:
692
diff
changeset
|
156 self.app_settings_value = v |
26237de9b613
Added settings model, and Exceptions lib.
Marcin Kuzminski <marcin@python-works.com>
parents:
692
diff
changeset
|
157 |
1593 | 158 @validates('_app_settings_value') |
159 def validate_settings_value(self, key, val): | |
160 assert type(val) == unicode | |
1561
4d841e565237
added validation of params on settings table
Marcin Kuzminski <marcin@python-works.com>
parents:
1556
diff
changeset
|
161 return val |
4d841e565237
added validation of params on settings table
Marcin Kuzminski <marcin@python-works.com>
parents:
1556
diff
changeset
|
162 |
1546
c363267bbec7
fixes #265 ldap save fails sometimes on converting attributes to booleans, added getter and setter
Marcin Kuzminski <marcin@python-works.com>
parents:
1539
diff
changeset
|
163 @hybrid_property |
1593 | 164 def app_settings_value(self): |
1546
c363267bbec7
fixes #265 ldap save fails sometimes on converting attributes to booleans, added getter and setter
Marcin Kuzminski <marcin@python-works.com>
parents:
1539
diff
changeset
|
165 v = self._app_settings_value |
2013
8530c3cd9d04
fixed issue with hybrid property for ldap_active
Marcin Kuzminski <marcin@python-works.com>
parents:
2007
diff
changeset
|
166 if self.app_settings_name == 'ldap_active': |
1593 | 167 v = str2bool(v) |
1591 | 168 return v |
1546
c363267bbec7
fixes #265 ldap save fails sometimes on converting attributes to booleans, added getter and setter
Marcin Kuzminski <marcin@python-works.com>
parents:
1539
diff
changeset
|
169 |
c363267bbec7
fixes #265 ldap save fails sometimes on converting attributes to booleans, added getter and setter
Marcin Kuzminski <marcin@python-works.com>
parents:
1539
diff
changeset
|
170 @app_settings_value.setter |
1593 | 171 def app_settings_value(self, val): |
1546
c363267bbec7
fixes #265 ldap save fails sometimes on converting attributes to booleans, added getter and setter
Marcin Kuzminski <marcin@python-works.com>
parents:
1539
diff
changeset
|
172 """ |
c363267bbec7
fixes #265 ldap save fails sometimes on converting attributes to booleans, added getter and setter
Marcin Kuzminski <marcin@python-works.com>
parents:
1539
diff
changeset
|
173 Setter that will always make sure we use unicode in app_settings_value |
1591 | 174 |
1546
c363267bbec7
fixes #265 ldap save fails sometimes on converting attributes to booleans, added getter and setter
Marcin Kuzminski <marcin@python-works.com>
parents:
1539
diff
changeset
|
175 :param val: |
c363267bbec7
fixes #265 ldap save fails sometimes on converting attributes to booleans, added getter and setter
Marcin Kuzminski <marcin@python-works.com>
parents:
1539
diff
changeset
|
176 """ |
1593 | 177 self._app_settings_value = safe_unicode(val) |
1546
c363267bbec7
fixes #265 ldap save fails sometimes on converting attributes to booleans, added getter and setter
Marcin Kuzminski <marcin@python-works.com>
parents:
1539
diff
changeset
|
178 |
2156
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
179 def __unicode__(self): |
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
180 return u"<%s('%s:%s')>" % ( |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
181 self.__class__.__name__, |
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
182 self.app_settings_name, self.app_settings_value |
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
183 ) |
704
26237de9b613
Added settings model, and Exceptions lib.
Marcin Kuzminski <marcin@python-works.com>
parents:
692
diff
changeset
|
184 |
1266
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
185 @classmethod |
2674
a221706dab50
merged + fixed pull request #62: Implemented metatags and visualisation options.
Marcin Kuzminski <marcin@python-works.com>
parents:
2668
diff
changeset
|
186 def get_by_name(cls, key): |
1584
3338a0994472
Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents:
1508
diff
changeset
|
187 return cls.query()\ |
2674
a221706dab50
merged + fixed pull request #62: Implemented metatags and visualisation options.
Marcin Kuzminski <marcin@python-works.com>
parents:
2668
diff
changeset
|
188 .filter(cls.app_settings_name == key).scalar() |
a221706dab50
merged + fixed pull request #62: Implemented metatags and visualisation options.
Marcin Kuzminski <marcin@python-works.com>
parents:
2668
diff
changeset
|
189 |
a221706dab50
merged + fixed pull request #62: Implemented metatags and visualisation options.
Marcin Kuzminski <marcin@python-works.com>
parents:
2668
diff
changeset
|
190 @classmethod |
a221706dab50
merged + fixed pull request #62: Implemented metatags and visualisation options.
Marcin Kuzminski <marcin@python-works.com>
parents:
2668
diff
changeset
|
191 def get_by_name_or_create(cls, key): |
a221706dab50
merged + fixed pull request #62: Implemented metatags and visualisation options.
Marcin Kuzminski <marcin@python-works.com>
parents:
2668
diff
changeset
|
192 res = cls.get_by_name(key) |
a221706dab50
merged + fixed pull request #62: Implemented metatags and visualisation options.
Marcin Kuzminski <marcin@python-works.com>
parents:
2668
diff
changeset
|
193 if not res: |
a221706dab50
merged + fixed pull request #62: Implemented metatags and visualisation options.
Marcin Kuzminski <marcin@python-works.com>
parents:
2668
diff
changeset
|
194 res = cls(key) |
a221706dab50
merged + fixed pull request #62: Implemented metatags and visualisation options.
Marcin Kuzminski <marcin@python-works.com>
parents:
2668
diff
changeset
|
195 return res |
1292
c0335c1dee36
added some fixes to LDAP form re-submition, new simples ldap-settings getter.
Marcin Kuzminski <marcin@python-works.com>
parents:
1279
diff
changeset
|
196 |
c0335c1dee36
added some fixes to LDAP form re-submition, new simples ldap-settings getter.
Marcin Kuzminski <marcin@python-works.com>
parents:
1279
diff
changeset
|
197 @classmethod |
1594 | 198 def get_app_settings(cls, cache=False): |
1266
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
199 |
1584
3338a0994472
Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents:
1508
diff
changeset
|
200 ret = cls.query() |
1266
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
201 |
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
202 if cache: |
1593 | 203 ret = ret.options(FromCache("sql_cache_short", "get_hg_settings")) |
1266
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
204 |
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
205 if not ret: |
1593 | 206 raise Exception('Could not get application settings !') |
1266
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
207 settings = {} |
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
208 for each in ret: |
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
209 settings['rhodecode_' + each.app_settings_name] = \ |
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
210 each.app_settings_value |
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
211 |
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
212 return settings |
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
213 |
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
214 @classmethod |
1594 | 215 def get_ldap_settings(cls, cache=False): |
1584
3338a0994472
Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents:
1508
diff
changeset
|
216 ret = cls.query()\ |
1593 | 217 .filter(cls.app_settings_name.startswith('ldap_')).all() |
1266
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
218 fd = {} |
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
219 for row in ret: |
2356
2da7b5984ae5
typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents:
2352
diff
changeset
|
220 fd.update({row.app_settings_name: row.app_settings_value}) |
1381
a1ab3e9c7e82
fixes #204, ldap active checkbox, credits goes to Matt Little.
Marcin Kuzminski <marcin@python-works.com>
parents:
1376
diff
changeset
|
221 |
1266
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
222 return fd |
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
223 |
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
224 |
1593 | 225 class RhodeCodeUi(Base, BaseModel): |
548
b75b77ef649d
renamed hg_app to rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents:
547
diff
changeset
|
226 __tablename__ = 'rhodecode_ui' |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
227 __table_args__ = ( |
1963
9bbde54232dc
white space cleanup
Marcin Kuzminski <marcin@python-works.com>
parents:
1960
diff
changeset
|
228 UniqueConstraint('ui_key'), |
2356
2da7b5984ae5
typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents:
2352
diff
changeset
|
229 {'extend_existing': True, 'mysql_engine': 'InnoDB', |
2149 | 230 'mysql_charset': 'utf8'} |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
231 ) |
1460
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
232 |
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
233 HOOK_UPDATE = 'changegroup.update' |
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
234 HOOK_REPO_SIZE = 'changegroup.repo_size' |
2407
8a68e0292232
Change git & hg hooks to post. They shouldn't block as they are used just for logging actions. Futhermore post hooks have access to changesets, so it's much better flexible
Marcin Kuzminski <marcin@python-works.com>
parents:
2401
diff
changeset
|
235 HOOK_PUSH = 'changegroup.push_logger' |
2726
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
236 HOOK_PRE_PUSH = 'prechangegroup.pre_push' |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
237 HOOK_PULL = 'outgoing.pull_logger' |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
238 HOOK_PRE_PULL = 'preoutgoing.pre_pull' |
1460
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
239 |
1594 | 240 ui_id = Column("ui_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
2588
32dd6896abcf
added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents:
2585
diff
changeset
|
241 ui_section = Column("ui_section", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) |
32dd6896abcf
added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents:
2585
diff
changeset
|
242 ui_key = Column("ui_key", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) |
32dd6896abcf
added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents:
2585
diff
changeset
|
243 ui_value = Column("ui_value", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) |
1594 | 244 ui_active = Column("ui_active", Boolean(), nullable=True, unique=None, default=True) |
631
05528ad948c4
Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents:
549
diff
changeset
|
245 |
1345
3bce31f026b8
#47 implemented Adding of new repo_groups+forms+validators. Fixed sorting of repo groups by main names in multiple locations. Removed some unneeded calls to self.sa for exchange to .query() methods.
Marcin Kuzminski <marcin@python-works.com>
parents:
1343
diff
changeset
|
246 @classmethod |
1593 | 247 def get_by_key(cls, key): |
2708
9bce679a3f49
Added form for controlling mercurial extensions
Marcin Kuzminski <marcin@python-works.com>
parents:
2689
diff
changeset
|
248 return cls.query().filter(cls.ui_key == key).scalar() |
1345
3bce31f026b8
#47 implemented Adding of new repo_groups+forms+validators. Fixed sorting of repo groups by main names in multiple locations. Removed some unneeded calls to self.sa for exchange to .query() methods.
Marcin Kuzminski <marcin@python-works.com>
parents:
1343
diff
changeset
|
249 |
1460
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
250 @classmethod |
1593 | 251 def get_builtin_hooks(cls): |
1460
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
252 q = cls.query() |
2726
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
253 q = q.filter(cls.ui_key.in_([cls.HOOK_UPDATE, cls.HOOK_REPO_SIZE, |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
254 cls.HOOK_PUSH, cls.HOOK_PRE_PUSH, |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
255 cls.HOOK_PULL, cls.HOOK_PRE_PULL])) |
1460
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
256 return q.all() |
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
257 |
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
258 @classmethod |
1593 | 259 def get_custom_hooks(cls): |
1460
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
260 q = cls.query() |
2726
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
261 q = q.filter(~cls.ui_key.in_([cls.HOOK_UPDATE, cls.HOOK_REPO_SIZE, |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
262 cls.HOOK_PUSH, cls.HOOK_PRE_PUSH, |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
263 cls.HOOK_PULL, cls.HOOK_PRE_PULL])) |
1593 | 264 q = q.filter(cls.ui_section == 'hooks') |
1460
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
265 return q.all() |
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
266 |
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
267 @classmethod |
2401
e2af60e480ce
Removed hardcoded hooks names from settings.
Marcin Kuzminski <marcin@python-works.com>
parents:
2400
diff
changeset
|
268 def get_repos_location(cls): |
2708
9bce679a3f49
Added form for controlling mercurial extensions
Marcin Kuzminski <marcin@python-works.com>
parents:
2689
diff
changeset
|
269 return cls.get_by_key('/').ui_value |
2401
e2af60e480ce
Removed hardcoded hooks names from settings.
Marcin Kuzminski <marcin@python-works.com>
parents:
2400
diff
changeset
|
270 |
e2af60e480ce
Removed hardcoded hooks names from settings.
Marcin Kuzminski <marcin@python-works.com>
parents:
2400
diff
changeset
|
271 @classmethod |
1593 | 272 def create_or_update_hook(cls, key, val): |
2708
9bce679a3f49
Added form for controlling mercurial extensions
Marcin Kuzminski <marcin@python-works.com>
parents:
2689
diff
changeset
|
273 new_ui = cls.get_by_key(key) or cls() |
1460
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
274 new_ui.ui_section = 'hooks' |
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
275 new_ui.ui_active = True |
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
276 new_ui.ui_key = key |
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
277 new_ui.ui_value = val |
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
278 |
2520
a1e156503afe
Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents:
2510
diff
changeset
|
279 Session().add(new_ui) |
1460
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
280 |
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
281 |
1593 | 282 class User(Base, BaseModel): |
49
3ada2f409c1c
Added sqlalchemy support
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff
changeset
|
283 __tablename__ = 'users' |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
284 __table_args__ = ( |
1963
9bbde54232dc
white space cleanup
Marcin Kuzminski <marcin@python-works.com>
parents:
1960
diff
changeset
|
285 UniqueConstraint('username'), UniqueConstraint('email'), |
2726
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
286 Index('u_username_idx', 'username'), |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
287 Index('u_email_idx', 'email'), |
2356
2da7b5984ae5
typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents:
2352
diff
changeset
|
288 {'extend_existing': True, 'mysql_engine': 'InnoDB', |
2149 | 289 'mysql_charset': 'utf8'} |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
290 ) |
2726
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
291 DEFAULT_USER = 'default' |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
292 |
1594 | 293 user_id = Column("user_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
2588
32dd6896abcf
added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents:
2585
diff
changeset
|
294 username = Column("username", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) |
32dd6896abcf
added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents:
2585
diff
changeset
|
295 password = Column("password", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) |
2480
cb9e73b29a87
User active flag should be default to True
Marcin Kuzminski <marcin@python-works.com>
parents:
2463
diff
changeset
|
296 active = Column("active", Boolean(), nullable=True, unique=None, default=True) |
1594 | 297 admin = Column("admin", Boolean(), nullable=True, unique=None, default=False) |
2588
32dd6896abcf
added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents:
2585
diff
changeset
|
298 name = Column("firstname", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) |
32dd6896abcf
added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents:
2585
diff
changeset
|
299 lastname = Column("lastname", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) |
32dd6896abcf
added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents:
2585
diff
changeset
|
300 _email = Column("email", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) |
1594 | 301 last_login = Column("last_login", DateTime(timezone=False), nullable=True, unique=None, default=None) |
2588
32dd6896abcf
added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents:
2585
diff
changeset
|
302 ldap_dn = Column("ldap_dn", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) |
32dd6896abcf
added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents:
2585
diff
changeset
|
303 api_key = Column("api_key", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) |
2709
d2d35cf2b351
RhodeCode now has a option to explicitly set forking permissions. ref #508
Marcin Kuzminski <marcin@python-works.com>
parents:
2708
diff
changeset
|
304 inherit_default_permissions = Column("inherit_default_permissions", Boolean(), nullable=False, unique=None, default=True) |
631
05528ad948c4
Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents:
549
diff
changeset
|
305 |
1594 | 306 user_log = relationship('UserLog', cascade='all') |
307 user_perms = relationship('UserToPerm', primaryjoin="User.user_id==UserToPerm.user_id", cascade='all') | |
631
05528ad948c4
Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents:
549
diff
changeset
|
308 |
1593 | 309 repositories = relationship('Repository') |
1594 | 310 user_followers = relationship('UserFollowing', primaryjoin='UserFollowing.follows_user_id==User.user_id', cascade='all') |
1633
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
311 repo_to_perm = relationship('UserRepoToPerm', primaryjoin='UserRepoToPerm.user_id==User.user_id', cascade='all') |
2149 | 312 repo_group_to_perm = relationship('UserRepoGroupToPerm', primaryjoin='UserRepoGroupToPerm.user_id==User.user_id', cascade='all') |
2150
a8c9c0094ddf
White space cleanup
Marcin Kuzminski <marcin@python-works.com>
parents:
2149
diff
changeset
|
313 |
1594 | 314 group_member = relationship('UsersGroupMember', cascade='all') |
1065
5d676b6ab71c
Moved BaseModel into base class for declarative base. Added some handy methods into
Marcin Kuzminski <marcin@python-works.com>
parents:
1039
diff
changeset
|
315 |
2157
6a2c0cfb018d
Cascade delete comments and notifications when removing user.
Marcin Kuzminski <marcin@python-works.com>
parents:
2156
diff
changeset
|
316 notifications = relationship('UserNotification', cascade='all') |
6a2c0cfb018d
Cascade delete comments and notifications when removing user.
Marcin Kuzminski <marcin@python-works.com>
parents:
2156
diff
changeset
|
317 # notifications assigned to this user |
6a2c0cfb018d
Cascade delete comments and notifications when removing user.
Marcin Kuzminski <marcin@python-works.com>
parents:
2156
diff
changeset
|
318 user_created_notifications = relationship('Notification', cascade='all') |
6a2c0cfb018d
Cascade delete comments and notifications when removing user.
Marcin Kuzminski <marcin@python-works.com>
parents:
2156
diff
changeset
|
319 # comments created by this user |
6a2c0cfb018d
Cascade delete comments and notifications when removing user.
Marcin Kuzminski <marcin@python-works.com>
parents:
2156
diff
changeset
|
320 user_comments = relationship('ChangesetComment', cascade='all') |
2562
78f96d7bb23b
cascade delete extra emails on user delete
Marcin Kuzminski <marcin@python-works.com>
parents:
2544
diff
changeset
|
321 #extra emails for this user |
78f96d7bb23b
cascade delete extra emails on user delete
Marcin Kuzminski <marcin@python-works.com>
parents:
2544
diff
changeset
|
322 user_emails = relationship('UserEmailMap', cascade='all') |
1702
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
323 |
1757
2aa7f454204e
fixes #298, ldap email addresses created by rhodecode automatically during first login didn't get converted to lower case, which lead to lookup failures and than wrong checks for uniqueness. Fixed that by putting a setter on db model column that will enforce converting to lowercase.
Marcin Kuzminski <marcin@python-works.com>
parents:
1749
diff
changeset
|
324 @hybrid_property |
2aa7f454204e
fixes #298, ldap email addresses created by rhodecode automatically during first login didn't get converted to lower case, which lead to lookup failures and than wrong checks for uniqueness. Fixed that by putting a setter on db model column that will enforce converting to lowercase.
Marcin Kuzminski <marcin@python-works.com>
parents:
1749
diff
changeset
|
325 def email(self): |
2aa7f454204e
fixes #298, ldap email addresses created by rhodecode automatically during first login didn't get converted to lower case, which lead to lookup failures and than wrong checks for uniqueness. Fixed that by putting a setter on db model column that will enforce converting to lowercase.
Marcin Kuzminski <marcin@python-works.com>
parents:
1749
diff
changeset
|
326 return self._email |
2aa7f454204e
fixes #298, ldap email addresses created by rhodecode automatically during first login didn't get converted to lower case, which lead to lookup failures and than wrong checks for uniqueness. Fixed that by putting a setter on db model column that will enforce converting to lowercase.
Marcin Kuzminski <marcin@python-works.com>
parents:
1749
diff
changeset
|
327 |
2aa7f454204e
fixes #298, ldap email addresses created by rhodecode automatically during first login didn't get converted to lower case, which lead to lookup failures and than wrong checks for uniqueness. Fixed that by putting a setter on db model column that will enforce converting to lowercase.
Marcin Kuzminski <marcin@python-works.com>
parents:
1749
diff
changeset
|
328 @email.setter |
2aa7f454204e
fixes #298, ldap email addresses created by rhodecode automatically during first login didn't get converted to lower case, which lead to lookup failures and than wrong checks for uniqueness. Fixed that by putting a setter on db model column that will enforce converting to lowercase.
Marcin Kuzminski <marcin@python-works.com>
parents:
1749
diff
changeset
|
329 def email(self, val): |
2aa7f454204e
fixes #298, ldap email addresses created by rhodecode automatically during first login didn't get converted to lower case, which lead to lookup failures and than wrong checks for uniqueness. Fixed that by putting a setter on db model column that will enforce converting to lowercase.
Marcin Kuzminski <marcin@python-works.com>
parents:
1749
diff
changeset
|
330 self._email = val.lower() if val else None |
2aa7f454204e
fixes #298, ldap email addresses created by rhodecode automatically during first login didn't get converted to lower case, which lead to lookup failures and than wrong checks for uniqueness. Fixed that by putting a setter on db model column that will enforce converting to lowercase.
Marcin Kuzminski <marcin@python-works.com>
parents:
1749
diff
changeset
|
331 |
759
a7f50911a945
Models code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
734
diff
changeset
|
332 @property |
2731
09d8fec02954
Implemented #532.
Marcin Kuzminski <marcin@python-works.com>
parents:
2726
diff
changeset
|
333 def firstname(self): |
09d8fec02954
Implemented #532.
Marcin Kuzminski <marcin@python-works.com>
parents:
2726
diff
changeset
|
334 # alias for future |
09d8fec02954
Implemented #532.
Marcin Kuzminski <marcin@python-works.com>
parents:
2726
diff
changeset
|
335 return self.name |
09d8fec02954
Implemented #532.
Marcin Kuzminski <marcin@python-works.com>
parents:
2726
diff
changeset
|
336 |
09d8fec02954
Implemented #532.
Marcin Kuzminski <marcin@python-works.com>
parents:
2726
diff
changeset
|
337 @property |
2506
7e3e9d0c5575
Add list of all emails that user may have into get_user call
Marcin Kuzminski <marcin@python-works.com>
parents:
2496
diff
changeset
|
338 def emails(self): |
7e3e9d0c5575
Add list of all emails that user may have into get_user call
Marcin Kuzminski <marcin@python-works.com>
parents:
2496
diff
changeset
|
339 other = UserEmailMap.query().filter(UserEmailMap.user==self).all() |
7e3e9d0c5575
Add list of all emails that user may have into get_user call
Marcin Kuzminski <marcin@python-works.com>
parents:
2496
diff
changeset
|
340 return [self.email] + [x.email for x in other] |
7e3e9d0c5575
Add list of all emails that user may have into get_user call
Marcin Kuzminski <marcin@python-works.com>
parents:
2496
diff
changeset
|
341 |
7e3e9d0c5575
Add list of all emails that user may have into get_user call
Marcin Kuzminski <marcin@python-works.com>
parents:
2496
diff
changeset
|
342 @property |
2731
09d8fec02954
Implemented #532.
Marcin Kuzminski <marcin@python-works.com>
parents:
2726
diff
changeset
|
343 def username_and_name(self): |
09d8fec02954
Implemented #532.
Marcin Kuzminski <marcin@python-works.com>
parents:
2726
diff
changeset
|
344 return '%s (%s %s)' % (self.username, self.firstname, self.lastname) |
09d8fec02954
Implemented #532.
Marcin Kuzminski <marcin@python-works.com>
parents:
2726
diff
changeset
|
345 |
09d8fec02954
Implemented #532.
Marcin Kuzminski <marcin@python-works.com>
parents:
2726
diff
changeset
|
346 @property |
1731
31e6eb2fb4b2
implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents:
1729
diff
changeset
|
347 def full_name(self): |
2731
09d8fec02954
Implemented #532.
Marcin Kuzminski <marcin@python-works.com>
parents:
2726
diff
changeset
|
348 return '%s %s' % (self.firstname, self.lastname) |
1731
31e6eb2fb4b2
implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents:
1729
diff
changeset
|
349 |
31e6eb2fb4b2
implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents:
1729
diff
changeset
|
350 @property |
1950
4ae17f819ee8
#344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents:
1948
diff
changeset
|
351 def full_name_or_username(self): |
2731
09d8fec02954
Implemented #532.
Marcin Kuzminski <marcin@python-works.com>
parents:
2726
diff
changeset
|
352 return ('%s %s' % (self.firstname, self.lastname) |
09d8fec02954
Implemented #532.
Marcin Kuzminski <marcin@python-works.com>
parents:
2726
diff
changeset
|
353 if (self.firstname and self.lastname) else self.username) |
1950
4ae17f819ee8
#344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents:
1948
diff
changeset
|
354 |
4ae17f819ee8
#344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents:
1948
diff
changeset
|
355 @property |
1593 | 356 def full_contact(self): |
2731
09d8fec02954
Implemented #532.
Marcin Kuzminski <marcin@python-works.com>
parents:
2726
diff
changeset
|
357 return '%s %s <%s>' % (self.firstname, self.lastname, self.email) |
631
05528ad948c4
Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents:
549
diff
changeset
|
358 |
895
62c04c5cc971
Added some more details into user edit permissions view
Marcin Kuzminski <marcin@python-works.com>
parents:
880
diff
changeset
|
359 @property |
1593 | 360 def short_contact(self): |
2731
09d8fec02954
Implemented #532.
Marcin Kuzminski <marcin@python-works.com>
parents:
2726
diff
changeset
|
361 return '%s %s' % (self.firstname, self.lastname) |
1088
fee472613dfa
made simple global rss and atom feed
Marcin Kuzminski <marcin@python-works.com>
parents:
1081
diff
changeset
|
362 |
fee472613dfa
made simple global rss and atom feed
Marcin Kuzminski <marcin@python-works.com>
parents:
1081
diff
changeset
|
363 @property |
1593 | 364 def is_admin(self): |
895
62c04c5cc971
Added some more details into user edit permissions view
Marcin Kuzminski <marcin@python-works.com>
parents:
880
diff
changeset
|
365 return self.admin |
62c04c5cc971
Added some more details into user edit permissions view
Marcin Kuzminski <marcin@python-works.com>
parents:
880
diff
changeset
|
366 |
2156
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
367 def __unicode__(self): |
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
368 return u"<%s('id:%s:%s')>" % (self.__class__.__name__, |
1712
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1703
diff
changeset
|
369 self.user_id, self.username) |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1703
diff
changeset
|
370 |
1065
5d676b6ab71c
Moved BaseModel into base class for declarative base. Added some handy methods into
Marcin Kuzminski <marcin@python-works.com>
parents:
1039
diff
changeset
|
371 @classmethod |
1665
36f77a46f291
Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents:
1634
diff
changeset
|
372 def get_by_username(cls, username, case_insensitive=False, cache=False): |
1400
0d7b56b97953
Simplified last_login call on user, and changed login to use User model directly
Marcin Kuzminski <marcin@python-works.com>
parents:
1388
diff
changeset
|
373 if case_insensitive: |
1665
36f77a46f291
Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents:
1634
diff
changeset
|
374 q = cls.query().filter(cls.username.ilike(username)) |
1400
0d7b56b97953
Simplified last_login call on user, and changed login to use User model directly
Marcin Kuzminski <marcin@python-works.com>
parents:
1388
diff
changeset
|
375 else: |
1665
36f77a46f291
Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents:
1634
diff
changeset
|
376 q = cls.query().filter(cls.username == username) |
36f77a46f291
Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents:
1634
diff
changeset
|
377 |
36f77a46f291
Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents:
1634
diff
changeset
|
378 if cache: |
2062
bf8ed0adbc66
fixes #371 fixed issues with beaker/sqlalchemy and non-ascii cache keys
Marcin Kuzminski <marcin@python-works.com>
parents:
2058
diff
changeset
|
379 q = q.options(FromCache( |
bf8ed0adbc66
fixes #371 fixed issues with beaker/sqlalchemy and non-ascii cache keys
Marcin Kuzminski <marcin@python-works.com>
parents:
2058
diff
changeset
|
380 "sql_cache_short", |
bf8ed0adbc66
fixes #371 fixed issues with beaker/sqlalchemy and non-ascii cache keys
Marcin Kuzminski <marcin@python-works.com>
parents:
2058
diff
changeset
|
381 "get_user_%s" % _hash_key(username) |
bf8ed0adbc66
fixes #371 fixed issues with beaker/sqlalchemy and non-ascii cache keys
Marcin Kuzminski <marcin@python-works.com>
parents:
2058
diff
changeset
|
382 ) |
bf8ed0adbc66
fixes #371 fixed issues with beaker/sqlalchemy and non-ascii cache keys
Marcin Kuzminski <marcin@python-works.com>
parents:
2058
diff
changeset
|
383 ) |
1665
36f77a46f291
Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents:
1634
diff
changeset
|
384 return q.scalar() |
1065
5d676b6ab71c
Moved BaseModel into base class for declarative base. Added some handy methods into
Marcin Kuzminski <marcin@python-works.com>
parents:
1039
diff
changeset
|
385 |
1417
5875955def39
fixes #223 improve password reset form
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
386 @classmethod |
1665
36f77a46f291
Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents:
1634
diff
changeset
|
387 def get_by_api_key(cls, api_key, cache=False): |
36f77a46f291
Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents:
1634
diff
changeset
|
388 q = cls.query().filter(cls.api_key == api_key) |
36f77a46f291
Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents:
1634
diff
changeset
|
389 |
36f77a46f291
Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents:
1634
diff
changeset
|
390 if cache: |
36f77a46f291
Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents:
1634
diff
changeset
|
391 q = q.options(FromCache("sql_cache_short", |
36f77a46f291
Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents:
1634
diff
changeset
|
392 "get_api_key_%s" % api_key)) |
1693
60249224be04
fix for api key lookup, reuse same function in user model
Marcin Kuzminski <marcin@python-works.com>
parents:
1677
diff
changeset
|
393 return q.scalar() |
1417
5875955def39
fixes #223 improve password reset form
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
394 |
1716
7d1fc253549e
notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents:
1713
diff
changeset
|
395 @classmethod |
1757
2aa7f454204e
fixes #298, ldap email addresses created by rhodecode automatically during first login didn't get converted to lower case, which lead to lookup failures and than wrong checks for uniqueness. Fixed that by putting a setter on db model column that will enforce converting to lowercase.
Marcin Kuzminski <marcin@python-works.com>
parents:
1749
diff
changeset
|
396 def get_by_email(cls, email, case_insensitive=False, cache=False): |
2aa7f454204e
fixes #298, ldap email addresses created by rhodecode automatically during first login didn't get converted to lower case, which lead to lookup failures and than wrong checks for uniqueness. Fixed that by putting a setter on db model column that will enforce converting to lowercase.
Marcin Kuzminski <marcin@python-works.com>
parents:
1749
diff
changeset
|
397 if case_insensitive: |
2aa7f454204e
fixes #298, ldap email addresses created by rhodecode automatically during first login didn't get converted to lower case, which lead to lookup failures and than wrong checks for uniqueness. Fixed that by putting a setter on db model column that will enforce converting to lowercase.
Marcin Kuzminski <marcin@python-works.com>
parents:
1749
diff
changeset
|
398 q = cls.query().filter(cls.email.ilike(email)) |
2aa7f454204e
fixes #298, ldap email addresses created by rhodecode automatically during first login didn't get converted to lower case, which lead to lookup failures and than wrong checks for uniqueness. Fixed that by putting a setter on db model column that will enforce converting to lowercase.
Marcin Kuzminski <marcin@python-works.com>
parents:
1749
diff
changeset
|
399 else: |
2aa7f454204e
fixes #298, ldap email addresses created by rhodecode automatically during first login didn't get converted to lower case, which lead to lookup failures and than wrong checks for uniqueness. Fixed that by putting a setter on db model column that will enforce converting to lowercase.
Marcin Kuzminski <marcin@python-works.com>
parents:
1749
diff
changeset
|
400 q = cls.query().filter(cls.email == email) |
1716
7d1fc253549e
notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents:
1713
diff
changeset
|
401 |
7d1fc253549e
notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents:
1713
diff
changeset
|
402 if cache: |
7d1fc253549e
notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents:
1713
diff
changeset
|
403 q = q.options(FromCache("sql_cache_short", |
2329
20e307d5250f
Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents:
2296
diff
changeset
|
404 "get_email_key_%s" % email)) |
20e307d5250f
Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents:
2296
diff
changeset
|
405 |
20e307d5250f
Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents:
2296
diff
changeset
|
406 ret = q.scalar() |
20e307d5250f
Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents:
2296
diff
changeset
|
407 if ret is None: |
20e307d5250f
Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents:
2296
diff
changeset
|
408 q = UserEmailMap.query() |
20e307d5250f
Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents:
2296
diff
changeset
|
409 # try fetching in alternate email map |
20e307d5250f
Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents:
2296
diff
changeset
|
410 if case_insensitive: |
20e307d5250f
Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents:
2296
diff
changeset
|
411 q = q.filter(UserEmailMap.email.ilike(email)) |
20e307d5250f
Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents:
2296
diff
changeset
|
412 else: |
20e307d5250f
Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents:
2296
diff
changeset
|
413 q = q.filter(UserEmailMap.email == email) |
20e307d5250f
Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents:
2296
diff
changeset
|
414 q = q.options(joinedload(UserEmailMap.user)) |
20e307d5250f
Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents:
2296
diff
changeset
|
415 if cache: |
20e307d5250f
Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents:
2296
diff
changeset
|
416 q = q.options(FromCache("sql_cache_short", |
20e307d5250f
Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents:
2296
diff
changeset
|
417 "get_email_map_key_%s" % email)) |
20e307d5250f
Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents:
2296
diff
changeset
|
418 ret = getattr(q.scalar(), 'user', None) |
20e307d5250f
Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents:
2296
diff
changeset
|
419 |
20e307d5250f
Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents:
2296
diff
changeset
|
420 return ret |
1716
7d1fc253549e
notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents:
1713
diff
changeset
|
421 |
1593 | 422 def update_lastlogin(self): |
442
d66a7fa7689b
moved loged in user propagation out of forms,
Marcin Kuzminski <marcin@python-works.com>
parents:
417
diff
changeset
|
423 """Update user lastlogin""" |
1400
0d7b56b97953
Simplified last_login call on user, and changed login to use User model directly
Marcin Kuzminski <marcin@python-works.com>
parents:
1388
diff
changeset
|
424 self.last_login = datetime.datetime.now() |
2520
a1e156503afe
Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents:
2510
diff
changeset
|
425 Session().add(self) |
1976 | 426 log.debug('updated user %s lastlogin' % self.username) |
631
05528ad948c4
Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents:
549
diff
changeset
|
427 |
2508
43cb5b6047fd
Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents:
2506
diff
changeset
|
428 def get_api_data(self): |
43cb5b6047fd
Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents:
2506
diff
changeset
|
429 """ |
43cb5b6047fd
Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents:
2506
diff
changeset
|
430 Common function for generating user related data for API |
43cb5b6047fd
Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents:
2506
diff
changeset
|
431 """ |
43cb5b6047fd
Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents:
2506
diff
changeset
|
432 user = self |
43cb5b6047fd
Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents:
2506
diff
changeset
|
433 data = dict( |
2510
9059b2d91303
Change return paremeters for get_api_data in user and repo
Marcin Kuzminski <marcin@python-works.com>
parents:
2508
diff
changeset
|
434 user_id=user.user_id, |
2508
43cb5b6047fd
Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents:
2506
diff
changeset
|
435 username=user.username, |
43cb5b6047fd
Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents:
2506
diff
changeset
|
436 firstname=user.name, |
43cb5b6047fd
Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents:
2506
diff
changeset
|
437 lastname=user.lastname, |
43cb5b6047fd
Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents:
2506
diff
changeset
|
438 email=user.email, |
43cb5b6047fd
Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents:
2506
diff
changeset
|
439 emails=user.emails, |
2510
9059b2d91303
Change return paremeters for get_api_data in user and repo
Marcin Kuzminski <marcin@python-works.com>
parents:
2508
diff
changeset
|
440 api_key=user.api_key, |
2508
43cb5b6047fd
Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents:
2506
diff
changeset
|
441 active=user.active, |
43cb5b6047fd
Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents:
2506
diff
changeset
|
442 admin=user.admin, |
43cb5b6047fd
Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents:
2506
diff
changeset
|
443 ldap_dn=user.ldap_dn, |
43cb5b6047fd
Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents:
2506
diff
changeset
|
444 last_login=user.last_login, |
43cb5b6047fd
Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents:
2506
diff
changeset
|
445 ) |
43cb5b6047fd
Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents:
2506
diff
changeset
|
446 return data |
43cb5b6047fd
Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents:
2506
diff
changeset
|
447 |
1758
a87aa385f21c
fixed repo_create permission by adding missing commit statements
Marcin Kuzminski <marcin@python-works.com>
parents:
1757
diff
changeset
|
448 def __json__(self): |
2544
6ce3387bf0ce
Renamed name to firstname in forms
Marcin Kuzminski <marcin@python-works.com>
parents:
2542
diff
changeset
|
449 data = dict( |
1950
4ae17f819ee8
#344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents:
1948
diff
changeset
|
450 full_name=self.full_name, |
4ae17f819ee8
#344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents:
1948
diff
changeset
|
451 full_name_or_username=self.full_name_or_username, |
4ae17f819ee8
#344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents:
1948
diff
changeset
|
452 short_contact=self.short_contact, |
4ae17f819ee8
#344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents:
1948
diff
changeset
|
453 full_contact=self.full_contact |
4ae17f819ee8
#344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents:
1948
diff
changeset
|
454 ) |
2544
6ce3387bf0ce
Renamed name to firstname in forms
Marcin Kuzminski <marcin@python-works.com>
parents:
2542
diff
changeset
|
455 data.update(self.get_api_data()) |
6ce3387bf0ce
Renamed name to firstname in forms
Marcin Kuzminski <marcin@python-works.com>
parents:
2542
diff
changeset
|
456 return data |
1758
a87aa385f21c
fixed repo_create permission by adding missing commit statements
Marcin Kuzminski <marcin@python-works.com>
parents:
1757
diff
changeset
|
457 |
a87aa385f21c
fixed repo_create permission by adding missing commit statements
Marcin Kuzminski <marcin@python-works.com>
parents:
1757
diff
changeset
|
458 |
2329
20e307d5250f
Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents:
2296
diff
changeset
|
459 class UserEmailMap(Base, BaseModel): |
20e307d5250f
Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents:
2296
diff
changeset
|
460 __tablename__ = 'user_email_map' |
20e307d5250f
Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents:
2296
diff
changeset
|
461 __table_args__ = ( |
2463
b426ecc30319
Added some DB indexes to optimize queries
Marcin Kuzminski <marcin@python-works.com>
parents:
2462
diff
changeset
|
462 Index('uem_email_idx', 'email'), |
2329
20e307d5250f
Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents:
2296
diff
changeset
|
463 UniqueConstraint('email'), |
2463
b426ecc30319
Added some DB indexes to optimize queries
Marcin Kuzminski <marcin@python-works.com>
parents:
2462
diff
changeset
|
464 {'extend_existing': True, 'mysql_engine': 'InnoDB', |
2329
20e307d5250f
Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents:
2296
diff
changeset
|
465 'mysql_charset': 'utf8'} |
20e307d5250f
Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents:
2296
diff
changeset
|
466 ) |
20e307d5250f
Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents:
2296
diff
changeset
|
467 __mapper_args__ = {} |
20e307d5250f
Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents:
2296
diff
changeset
|
468 |
20e307d5250f
Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents:
2296
diff
changeset
|
469 email_id = Column("email_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
20e307d5250f
Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents:
2296
diff
changeset
|
470 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=True, unique=None, default=None) |
2588
32dd6896abcf
added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents:
2585
diff
changeset
|
471 _email = Column("email", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=False, default=None) |
2463
b426ecc30319
Added some DB indexes to optimize queries
Marcin Kuzminski <marcin@python-works.com>
parents:
2462
diff
changeset
|
472 user = relationship('User', lazy='joined') |
2329
20e307d5250f
Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents:
2296
diff
changeset
|
473 |
20e307d5250f
Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents:
2296
diff
changeset
|
474 @validates('_email') |
20e307d5250f
Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents:
2296
diff
changeset
|
475 def validate_email(self, key, email): |
20e307d5250f
Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents:
2296
diff
changeset
|
476 # check if this email is not main one |
2520
a1e156503afe
Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents:
2510
diff
changeset
|
477 main_email = Session().query(User).filter(User.email == email).scalar() |
2329
20e307d5250f
Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents:
2296
diff
changeset
|
478 if main_email is not None: |
20e307d5250f
Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents:
2296
diff
changeset
|
479 raise AttributeError('email %s is present is user table' % email) |
20e307d5250f
Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents:
2296
diff
changeset
|
480 return email |
20e307d5250f
Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents:
2296
diff
changeset
|
481 |
20e307d5250f
Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents:
2296
diff
changeset
|
482 @hybrid_property |
20e307d5250f
Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents:
2296
diff
changeset
|
483 def email(self): |
20e307d5250f
Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents:
2296
diff
changeset
|
484 return self._email |
20e307d5250f
Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents:
2296
diff
changeset
|
485 |
20e307d5250f
Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents:
2296
diff
changeset
|
486 @email.setter |
20e307d5250f
Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents:
2296
diff
changeset
|
487 def email(self, val): |
20e307d5250f
Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents:
2296
diff
changeset
|
488 self._email = val.lower() if val else None |
20e307d5250f
Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents:
2296
diff
changeset
|
489 |
20e307d5250f
Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents:
2296
diff
changeset
|
490 |
1593 | 491 class UserLog(Base, BaseModel): |
49
3ada2f409c1c
Added sqlalchemy support
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff
changeset
|
492 __tablename__ = 'user_logs' |
2149 | 493 __table_args__ = ( |
2356
2da7b5984ae5
typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents:
2352
diff
changeset
|
494 {'extend_existing': True, 'mysql_engine': 'InnoDB', |
2149 | 495 'mysql_charset': 'utf8'}, |
496 ) | |
1594 | 497 user_log_id = Column("user_log_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
498 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None) | |
1747
8804715404c9
implements #193 journal stores information about deleting of repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1744
diff
changeset
|
499 repository_id = Column("repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=True) |
2588
32dd6896abcf
added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents:
2585
diff
changeset
|
500 repository_name = Column("repository_name", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) |
32dd6896abcf
added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents:
2585
diff
changeset
|
501 user_ip = Column("user_ip", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) |
32dd6896abcf
added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents:
2585
diff
changeset
|
502 action = Column("action", UnicodeText(1200000, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) |
1594 | 503 action_date = Column("action_date", DateTime(timezone=False), nullable=True, unique=None, default=None) |
631
05528ad948c4
Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents:
549
diff
changeset
|
504 |
994
7f9d23f6a526
Added grouping by days in journal
Marcin Kuzminski <marcin@python-works.com>
parents:
991
diff
changeset
|
505 @property |
1593 | 506 def action_as_day(self): |
1723
64e91067b996
- refactoring to overcome poor usage of global pylons config
Marcin Kuzminski <marcin@python-works.com>
parents:
1717
diff
changeset
|
507 return datetime.date(*self.action_date.timetuple()[:3]) |
994
7f9d23f6a526
Added grouping by days in journal
Marcin Kuzminski <marcin@python-works.com>
parents:
991
diff
changeset
|
508 |
1593 | 509 user = relationship('User') |
2063
d9ba58526712
fixed #373 missing cascade drop on user_group_to_perm table
Marcin Kuzminski <marcin@python-works.com>
parents:
2062
diff
changeset
|
510 repository = relationship('Repository', cascade='') |
631
05528ad948c4
Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents:
549
diff
changeset
|
511 |
956
83d35d716a02
started working on issue #56
Marcin Kuzminski <marcin@python-works.com>
parents:
907
diff
changeset
|
512 |
1593 | 513 class UsersGroup(Base, BaseModel): |
956
83d35d716a02
started working on issue #56
Marcin Kuzminski <marcin@python-works.com>
parents:
907
diff
changeset
|
514 __tablename__ = 'users_groups' |
2149 | 515 __table_args__ = ( |
2356
2da7b5984ae5
typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents:
2352
diff
changeset
|
516 {'extend_existing': True, 'mysql_engine': 'InnoDB', |
2149 | 517 'mysql_charset': 'utf8'}, |
518 ) | |
956
83d35d716a02
started working on issue #56
Marcin Kuzminski <marcin@python-works.com>
parents:
907
diff
changeset
|
519 |
1594 | 520 users_group_id = Column("users_group_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
2588
32dd6896abcf
added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents:
2585
diff
changeset
|
521 users_group_name = Column("users_group_name", String(255, convert_unicode=False, assert_unicode=None), nullable=False, unique=True, default=None) |
1594 | 522 users_group_active = Column("users_group_active", Boolean(), nullable=True, unique=None, default=None) |
2709
d2d35cf2b351
RhodeCode now has a option to explicitly set forking permissions. ref #508
Marcin Kuzminski <marcin@python-works.com>
parents:
2708
diff
changeset
|
523 inherit_default_permissions = Column("users_group_inherit_default_permissions", Boolean(), nullable=False, unique=None, default=True) |
956
83d35d716a02
started working on issue #56
Marcin Kuzminski <marcin@python-works.com>
parents:
907
diff
changeset
|
524 |
1594 | 525 members = relationship('UsersGroupMember', cascade="all, delete, delete-orphan", lazy="joined") |
2063
d9ba58526712
fixed #373 missing cascade drop on user_group_to_perm table
Marcin Kuzminski <marcin@python-works.com>
parents:
2062
diff
changeset
|
526 users_group_to_perm = relationship('UsersGroupToPerm', cascade='all') |
2149 | 527 users_group_repo_to_perm = relationship('UsersGroupRepoToPerm', cascade='all') |
956
83d35d716a02
started working on issue #56
Marcin Kuzminski <marcin@python-works.com>
parents:
907
diff
changeset
|
528 |
2156
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
529 def __unicode__(self): |
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
530 return u'<userGroup(%s)>' % (self.users_group_name) |
1271
aa7e45ad0cea
Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents:
1266
diff
changeset
|
531 |
aa7e45ad0cea
Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents:
1266
diff
changeset
|
532 @classmethod |
1728
07e56179633e
- fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents:
1727
diff
changeset
|
533 def get_by_group_name(cls, group_name, cache=False, |
07e56179633e
- fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents:
1727
diff
changeset
|
534 case_insensitive=False): |
1271
aa7e45ad0cea
Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents:
1266
diff
changeset
|
535 if case_insensitive: |
1728
07e56179633e
- fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents:
1727
diff
changeset
|
536 q = cls.query().filter(cls.users_group_name.ilike(group_name)) |
1271
aa7e45ad0cea
Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents:
1266
diff
changeset
|
537 else: |
1728
07e56179633e
- fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents:
1727
diff
changeset
|
538 q = cls.query().filter(cls.users_group_name == group_name) |
1271
aa7e45ad0cea
Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents:
1266
diff
changeset
|
539 if cache: |
2062
bf8ed0adbc66
fixes #371 fixed issues with beaker/sqlalchemy and non-ascii cache keys
Marcin Kuzminski <marcin@python-works.com>
parents:
2058
diff
changeset
|
540 q = q.options(FromCache( |
bf8ed0adbc66
fixes #371 fixed issues with beaker/sqlalchemy and non-ascii cache keys
Marcin Kuzminski <marcin@python-works.com>
parents:
2058
diff
changeset
|
541 "sql_cache_short", |
bf8ed0adbc66
fixes #371 fixed issues with beaker/sqlalchemy and non-ascii cache keys
Marcin Kuzminski <marcin@python-works.com>
parents:
2058
diff
changeset
|
542 "get_user_%s" % _hash_key(group_name) |
bf8ed0adbc66
fixes #371 fixed issues with beaker/sqlalchemy and non-ascii cache keys
Marcin Kuzminski <marcin@python-works.com>
parents:
2058
diff
changeset
|
543 ) |
bf8ed0adbc66
fixes #371 fixed issues with beaker/sqlalchemy and non-ascii cache keys
Marcin Kuzminski <marcin@python-works.com>
parents:
2058
diff
changeset
|
544 ) |
1728
07e56179633e
- fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents:
1727
diff
changeset
|
545 return q.scalar() |
1271
aa7e45ad0cea
Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents:
1266
diff
changeset
|
546 |
1436
88d13c1c6a55
removed users_group controller in replace for model methods,
Marcin Kuzminski <marcin@python-works.com>
parents:
1435
diff
changeset
|
547 @classmethod |
1594 | 548 def get(cls, users_group_id, cache=False): |
1584
3338a0994472
Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents:
1508
diff
changeset
|
549 users_group = cls.query() |
1436
88d13c1c6a55
removed users_group controller in replace for model methods,
Marcin Kuzminski <marcin@python-works.com>
parents:
1435
diff
changeset
|
550 if cache: |
1593 | 551 users_group = users_group.options(FromCache("sql_cache_short", |
552 "get_users_group_%s" % users_group_id)) | |
553 return users_group.get(users_group_id) | |
1436
88d13c1c6a55
removed users_group controller in replace for model methods,
Marcin Kuzminski <marcin@python-works.com>
parents:
1435
diff
changeset
|
554 |
2523
788ae4f7d8df
added get_api_data into UsersGroup
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
555 def get_api_data(self): |
788ae4f7d8df
added get_api_data into UsersGroup
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
556 users_group = self |
788ae4f7d8df
added get_api_data into UsersGroup
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
557 |
788ae4f7d8df
added get_api_data into UsersGroup
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
558 data = dict( |
2531
d80a68e2ebcc
return proper id from users_group
Marcin Kuzminski <marcin@python-works.com>
parents:
2523
diff
changeset
|
559 users_group_id=users_group.users_group_id, |
2523
788ae4f7d8df
added get_api_data into UsersGroup
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
560 group_name=users_group.users_group_name, |
788ae4f7d8df
added get_api_data into UsersGroup
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
561 active=users_group.users_group_active, |
788ae4f7d8df
added get_api_data into UsersGroup
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
562 ) |
788ae4f7d8df
added get_api_data into UsersGroup
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
563 |
788ae4f7d8df
added get_api_data into UsersGroup
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
564 return data |
788ae4f7d8df
added get_api_data into UsersGroup
Marcin Kuzminski <marcin@python-works.com>
parents:
2520
diff
changeset
|
565 |
1800 | 566 |
1593 | 567 class UsersGroupMember(Base, BaseModel): |
956
83d35d716a02
started working on issue #56
Marcin Kuzminski <marcin@python-works.com>
parents:
907
diff
changeset
|
568 __tablename__ = 'users_groups_members' |
2149 | 569 __table_args__ = ( |
2356
2da7b5984ae5
typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents:
2352
diff
changeset
|
570 {'extend_existing': True, 'mysql_engine': 'InnoDB', |
2149 | 571 'mysql_charset': 'utf8'}, |
572 ) | |
956
83d35d716a02
started working on issue #56
Marcin Kuzminski <marcin@python-works.com>
parents:
907
diff
changeset
|
573 |
1594 | 574 users_group_member_id = Column("users_group_member_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
575 users_group_id = Column("users_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None) | |
576 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None) | |
956
83d35d716a02
started working on issue #56
Marcin Kuzminski <marcin@python-works.com>
parents:
907
diff
changeset
|
577 |
1594 | 578 user = relationship('User', lazy='joined') |
1593 | 579 users_group = relationship('UsersGroup') |
972
2c8fd84935a4
#56 implemented users groups editing,
Marcin Kuzminski <marcin@python-works.com>
parents:
962
diff
changeset
|
580 |
1594 | 581 def __init__(self, gr_id='', u_id=''): |
972
2c8fd84935a4
#56 implemented users groups editing,
Marcin Kuzminski <marcin@python-works.com>
parents:
962
diff
changeset
|
582 self.users_group_id = gr_id |
2c8fd84935a4
#56 implemented users groups editing,
Marcin Kuzminski <marcin@python-works.com>
parents:
962
diff
changeset
|
583 self.user_id = u_id |
956
83d35d716a02
started working on issue #56
Marcin Kuzminski <marcin@python-works.com>
parents:
907
diff
changeset
|
584 |
2013
8530c3cd9d04
fixed issue with hybrid property for ldap_active
Marcin Kuzminski <marcin@python-works.com>
parents:
2007
diff
changeset
|
585 |
1593 | 586 class Repository(Base, BaseModel): |
234
a0116e944da1
changed naming convention for db modules.
Marcin Kuzminski <marcin@python-works.com>
parents:
232
diff
changeset
|
587 __tablename__ = 'repositories' |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
588 __table_args__ = ( |
1963
9bbde54232dc
white space cleanup
Marcin Kuzminski <marcin@python-works.com>
parents:
1960
diff
changeset
|
589 UniqueConstraint('repo_name'), |
2726
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
590 Index('r_repo_name_idx', 'repo_name'), |
2356
2da7b5984ae5
typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents:
2352
diff
changeset
|
591 {'extend_existing': True, 'mysql_engine': 'InnoDB', |
2149 | 592 'mysql_charset': 'utf8'}, |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
593 ) |
1081
70bf0be59653
fixed Session problems in model class functions
Marcin Kuzminski <marcin@python-works.com>
parents:
1065
diff
changeset
|
594 |
1594 | 595 repo_id = Column("repo_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
2588
32dd6896abcf
added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents:
2585
diff
changeset
|
596 repo_name = Column("repo_name", String(255, convert_unicode=False, assert_unicode=None), nullable=False, unique=True, default=None) |
32dd6896abcf
added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents:
2585
diff
changeset
|
597 clone_uri = Column("clone_uri", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=False, default=None) |
32dd6896abcf
added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents:
2585
diff
changeset
|
598 repo_type = Column("repo_type", String(255, convert_unicode=False, assert_unicode=None), nullable=False, unique=False, default=None) |
1594 | 599 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=False, default=None) |
600 private = Column("private", Boolean(), nullable=True, unique=None, default=None) | |
601 enable_statistics = Column("statistics", Boolean(), nullable=True, unique=None, default=True) | |
602 enable_downloads = Column("downloads", Boolean(), nullable=True, unique=None, default=True) | |
2588
32dd6896abcf
added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents:
2585
diff
changeset
|
603 description = Column("description", String(10000, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) |
1594 | 604 created_on = Column('created_on', DateTime(timezone=False), nullable=True, unique=None, default=datetime.datetime.now) |
2588
32dd6896abcf
added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents:
2585
diff
changeset
|
605 landing_rev = Column("landing_revision", String(255, convert_unicode=False, assert_unicode=None), nullable=False, unique=False, default=None) |
2726
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
606 enable_locking = Column("enable_locking", Boolean(), nullable=False, unique=None, default=False) |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
607 _locked = Column("locked", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=False, default=None) |
1301
7e75af301842
Added simple forks page, resolves issue #179
Marcin Kuzminski <marcin@python-works.com>
parents:
1292
diff
changeset
|
608 |
1594 | 609 fork_id = Column("fork_id", Integer(), ForeignKey('repositories.repo_id'), nullable=True, unique=False, default=None) |
610 group_id = Column("group_id", Integer(), ForeignKey('groups.group_id'), nullable=True, unique=False, default=None) | |
631
05528ad948c4
Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents:
549
diff
changeset
|
611 |
1593 | 612 user = relationship('User') |
1594 | 613 fork = relationship('Repository', remote_side=repo_id) |
1633
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
614 group = relationship('RepoGroup') |
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
615 repo_to_perm = relationship('UserRepoToPerm', cascade='all', order_by='UserRepoToPerm.repo_to_perm_id') |
1594 | 616 users_group_to_perm = relationship('UsersGroupRepoToPerm', cascade='all') |
617 stats = relationship('Statistics', cascade='all', uselist=False) | |
667
56a8434a88cc
fixes #51 deleting a repo didn't delete it's dependent db entries.
Marcin Kuzminski <marcin@python-works.com>
parents:
658
diff
changeset
|
618 |
2674
a221706dab50
merged + fixed pull request #62: Implemented metatags and visualisation options.
Marcin Kuzminski <marcin@python-works.com>
parents:
2668
diff
changeset
|
619 followers = relationship('UserFollowing', |
a221706dab50
merged + fixed pull request #62: Implemented metatags and visualisation options.
Marcin Kuzminski <marcin@python-works.com>
parents:
2668
diff
changeset
|
620 primaryjoin='UserFollowing.follows_repo_id==Repository.repo_id', |
2666
c51fb1da6df2
cascade fixes for comments/pull-requests/reviewers
Marcin Kuzminski <marcin@python-works.com>
parents:
2665
diff
changeset
|
621 cascade='all') |
734
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
713
diff
changeset
|
622 |
1747
8804715404c9
implements #193 journal stores information about deleting of repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1744
diff
changeset
|
623 logs = relationship('UserLog') |
2665
81a17ef4afc0
cascade delete comments when deleting repo, else it's a error preventing deletion
Marcin Kuzminski <marcin@python-works.com>
parents:
2639
diff
changeset
|
624 comments = relationship('ChangesetComment', cascade="all, delete, delete-orphan") |
970
1a5c41e4bb02
fixees for #106 relation issues on databases different than sqlite
Marcin Kuzminski <marcin@python-works.com>
parents:
962
diff
changeset
|
625 |
2666
c51fb1da6df2
cascade fixes for comments/pull-requests/reviewers
Marcin Kuzminski <marcin@python-works.com>
parents:
2665
diff
changeset
|
626 pull_requests_org = relationship('PullRequest', |
c51fb1da6df2
cascade fixes for comments/pull-requests/reviewers
Marcin Kuzminski <marcin@python-works.com>
parents:
2665
diff
changeset
|
627 primaryjoin='PullRequest.org_repo_id==Repository.repo_id', |
c51fb1da6df2
cascade fixes for comments/pull-requests/reviewers
Marcin Kuzminski <marcin@python-works.com>
parents:
2665
diff
changeset
|
628 cascade="all, delete, delete-orphan") |
c51fb1da6df2
cascade fixes for comments/pull-requests/reviewers
Marcin Kuzminski <marcin@python-works.com>
parents:
2665
diff
changeset
|
629 |
c51fb1da6df2
cascade fixes for comments/pull-requests/reviewers
Marcin Kuzminski <marcin@python-works.com>
parents:
2665
diff
changeset
|
630 pull_requests_other = relationship('PullRequest', |
c51fb1da6df2
cascade fixes for comments/pull-requests/reviewers
Marcin Kuzminski <marcin@python-works.com>
parents:
2665
diff
changeset
|
631 primaryjoin='PullRequest.other_repo_id==Repository.repo_id', |
c51fb1da6df2
cascade fixes for comments/pull-requests/reviewers
Marcin Kuzminski <marcin@python-works.com>
parents:
2665
diff
changeset
|
632 cascade="all, delete, delete-orphan") |
c51fb1da6df2
cascade fixes for comments/pull-requests/reviewers
Marcin Kuzminski <marcin@python-works.com>
parents:
2665
diff
changeset
|
633 |
2156
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
634 def __unicode__(self): |
2459
9492ab68331f
Initial version of landing revisions ref #483
Marcin Kuzminski <marcin@python-works.com>
parents:
2407
diff
changeset
|
635 return u"<%s('%s:%s')>" % (self.__class__.__name__, self.repo_id, |
2156
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
636 self.repo_name) |
878
859bc9e7a15d
Extended repo2db mapper with group creation via directory structures
Marcin Kuzminski <marcin@python-works.com>
parents:
836
diff
changeset
|
637 |
2726
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
638 @hybrid_property |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
639 def locked(self): |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
640 # always should return [user_id, timelocked] |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
641 if self._locked: |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
642 _lock_info = self._locked.split(':') |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
643 return int(_lock_info[0]), _lock_info[1] |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
644 return [None, None] |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
645 |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
646 @locked.setter |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
647 def locked(self, val): |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
648 if val and isinstance(val, (list, tuple)): |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
649 self._locked = ':'.join(map(str, val)) |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
650 else: |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
651 self._locked = None |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
652 |
1065
5d676b6ab71c
Moved BaseModel into base class for declarative base. Added some handy methods into
Marcin Kuzminski <marcin@python-works.com>
parents:
1039
diff
changeset
|
653 @classmethod |
1593 | 654 def url_sep(cls): |
2339
79b3c9c66c54
Added optional repo_name into issue tracker url to get just the name of repo without group prefix
Marcin Kuzminski <marcin@python-works.com>
parents:
2251
diff
changeset
|
655 return URL_SEP |
1065
5d676b6ab71c
Moved BaseModel into base class for declarative base. Added some handy methods into
Marcin Kuzminski <marcin@python-works.com>
parents:
1039
diff
changeset
|
656 |
1554
e7c6341ad3cb
fixes #245 Rescan of the repositories on Windows
Marcin Kuzminski <marcin@python-works.com>
parents:
1547
diff
changeset
|
657 @classmethod |
1593 | 658 def get_by_repo_name(cls, repo_name): |
2520
a1e156503afe
Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents:
2510
diff
changeset
|
659 q = Session().query(cls).filter(cls.repo_name == repo_name) |
1593 | 660 q = q.options(joinedload(Repository.fork))\ |
661 .options(joinedload(Repository.user))\ | |
662 .options(joinedload(Repository.group)) | |
1749
8ecc6b8229a5
commit less models
Marcin Kuzminski <marcin@python-works.com>
parents:
1747
diff
changeset
|
663 return q.scalar() |
1301
7e75af301842
Added simple forks page, resolves issue #179
Marcin Kuzminski <marcin@python-works.com>
parents:
1292
diff
changeset
|
664 |
7e75af301842
Added simple forks page, resolves issue #179
Marcin Kuzminski <marcin@python-works.com>
parents:
1292
diff
changeset
|
665 @classmethod |
2400
e87c6aa9c5e7
Add method for fetching repos by full path
Marcin Kuzminski <marcin@python-works.com>
parents:
2356
diff
changeset
|
666 def get_by_full_path(cls, repo_full_path): |
e87c6aa9c5e7
Add method for fetching repos by full path
Marcin Kuzminski <marcin@python-works.com>
parents:
2356
diff
changeset
|
667 repo_name = repo_full_path.split(cls.base_path(), 1)[-1] |
e87c6aa9c5e7
Add method for fetching repos by full path
Marcin Kuzminski <marcin@python-works.com>
parents:
2356
diff
changeset
|
668 return cls.get_by_repo_name(repo_name.strip(URL_SEP)) |
e87c6aa9c5e7
Add method for fetching repos by full path
Marcin Kuzminski <marcin@python-works.com>
parents:
2356
diff
changeset
|
669 |
e87c6aa9c5e7
Add method for fetching repos by full path
Marcin Kuzminski <marcin@python-works.com>
parents:
2356
diff
changeset
|
670 @classmethod |
1593 | 671 def get_repo_forks(cls, repo_id): |
672 return cls.query().filter(Repository.fork_id == repo_id) | |
1301
7e75af301842
Added simple forks page, resolves issue #179
Marcin Kuzminski <marcin@python-works.com>
parents:
1292
diff
changeset
|
673 |
1508
4aba7be311e8
API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents:
1500
diff
changeset
|
674 @classmethod |
1593 | 675 def base_path(cls): |
1508
4aba7be311e8
API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents:
1500
diff
changeset
|
676 """ |
4aba7be311e8
API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents:
1500
diff
changeset
|
677 Returns base path when all repos are stored |
1587
8898a79ac628
Implement all CRUD API operation for repo
Nicolas VINOT <aeris@imirhil.fr>
parents:
1586
diff
changeset
|
678 |
1508
4aba7be311e8
API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents:
1500
diff
changeset
|
679 :param cls: |
4aba7be311e8
API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents:
1500
diff
changeset
|
680 """ |
2520
a1e156503afe
Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents:
2510
diff
changeset
|
681 q = Session().query(RhodeCodeUi)\ |
1728
07e56179633e
- fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents:
1727
diff
changeset
|
682 .filter(RhodeCodeUi.ui_key == cls.url_sep()) |
07e56179633e
- fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents:
1727
diff
changeset
|
683 q = q.options(FromCache("sql_cache_short", "repository_repo_path")) |
1508
4aba7be311e8
API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents:
1500
diff
changeset
|
684 return q.one().ui_value |
4aba7be311e8
API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents:
1500
diff
changeset
|
685 |
1113
c1eda8ec4a46
added clone_uri,api_key into models. Fixed models for mysql compatibilty
Marcin Kuzminski <marcin@python-works.com>
parents:
1088
diff
changeset
|
686 @property |
2395
b262e349a7a5
created pull-request overview
Marcin Kuzminski <marcin@python-works.com>
parents:
2392
diff
changeset
|
687 def forks(self): |
b262e349a7a5
created pull-request overview
Marcin Kuzminski <marcin@python-works.com>
parents:
2392
diff
changeset
|
688 """ |
b262e349a7a5
created pull-request overview
Marcin Kuzminski <marcin@python-works.com>
parents:
2392
diff
changeset
|
689 Return forks of this repo |
b262e349a7a5
created pull-request overview
Marcin Kuzminski <marcin@python-works.com>
parents:
2392
diff
changeset
|
690 """ |
b262e349a7a5
created pull-request overview
Marcin Kuzminski <marcin@python-works.com>
parents:
2392
diff
changeset
|
691 return Repository.get_repo_forks(self.repo_id) |
b262e349a7a5
created pull-request overview
Marcin Kuzminski <marcin@python-works.com>
parents:
2392
diff
changeset
|
692 |
b262e349a7a5
created pull-request overview
Marcin Kuzminski <marcin@python-works.com>
parents:
2392
diff
changeset
|
693 @property |
b262e349a7a5
created pull-request overview
Marcin Kuzminski <marcin@python-works.com>
parents:
2392
diff
changeset
|
694 def parent(self): |
b262e349a7a5
created pull-request overview
Marcin Kuzminski <marcin@python-works.com>
parents:
2392
diff
changeset
|
695 """ |
b262e349a7a5
created pull-request overview
Marcin Kuzminski <marcin@python-works.com>
parents:
2392
diff
changeset
|
696 Returns fork parent |
b262e349a7a5
created pull-request overview
Marcin Kuzminski <marcin@python-works.com>
parents:
2392
diff
changeset
|
697 """ |
b262e349a7a5
created pull-request overview
Marcin Kuzminski <marcin@python-works.com>
parents:
2392
diff
changeset
|
698 return self.fork |
b262e349a7a5
created pull-request overview
Marcin Kuzminski <marcin@python-works.com>
parents:
2392
diff
changeset
|
699 |
b262e349a7a5
created pull-request overview
Marcin Kuzminski <marcin@python-works.com>
parents:
2392
diff
changeset
|
700 @property |
1593 | 701 def just_name(self): |
702 return self.repo_name.split(Repository.url_sep())[-1] | |
1155
37a9421f32a0
Added handy methods to Repository model for fetching groups with parents
Marcin Kuzminski <marcin@python-works.com>
parents:
1113
diff
changeset
|
703 |
37a9421f32a0
Added handy methods to Repository model for fetching groups with parents
Marcin Kuzminski <marcin@python-works.com>
parents:
1113
diff
changeset
|
704 @property |
1593 | 705 def groups_with_parents(self): |
1155
37a9421f32a0
Added handy methods to Repository model for fetching groups with parents
Marcin Kuzminski <marcin@python-works.com>
parents:
1113
diff
changeset
|
706 groups = [] |
37a9421f32a0
Added handy methods to Repository model for fetching groups with parents
Marcin Kuzminski <marcin@python-works.com>
parents:
1113
diff
changeset
|
707 if self.group is None: |
37a9421f32a0
Added handy methods to Repository model for fetching groups with parents
Marcin Kuzminski <marcin@python-works.com>
parents:
1113
diff
changeset
|
708 return groups |
37a9421f32a0
Added handy methods to Repository model for fetching groups with parents
Marcin Kuzminski <marcin@python-works.com>
parents:
1113
diff
changeset
|
709 |
37a9421f32a0
Added handy methods to Repository model for fetching groups with parents
Marcin Kuzminski <marcin@python-works.com>
parents:
1113
diff
changeset
|
710 cur_gr = self.group |
1593 | 711 groups.insert(0, cur_gr) |
1155
37a9421f32a0
Added handy methods to Repository model for fetching groups with parents
Marcin Kuzminski <marcin@python-works.com>
parents:
1113
diff
changeset
|
712 while 1: |
1593 | 713 gr = getattr(cur_gr, 'parent_group', None) |
1155
37a9421f32a0
Added handy methods to Repository model for fetching groups with parents
Marcin Kuzminski <marcin@python-works.com>
parents:
1113
diff
changeset
|
714 cur_gr = cur_gr.parent_group |
37a9421f32a0
Added handy methods to Repository model for fetching groups with parents
Marcin Kuzminski <marcin@python-works.com>
parents:
1113
diff
changeset
|
715 if gr is None: |
37a9421f32a0
Added handy methods to Repository model for fetching groups with parents
Marcin Kuzminski <marcin@python-works.com>
parents:
1113
diff
changeset
|
716 break |
1593 | 717 groups.insert(0, gr) |
1155
37a9421f32a0
Added handy methods to Repository model for fetching groups with parents
Marcin Kuzminski <marcin@python-works.com>
parents:
1113
diff
changeset
|
718 |
37a9421f32a0
Added handy methods to Repository model for fetching groups with parents
Marcin Kuzminski <marcin@python-works.com>
parents:
1113
diff
changeset
|
719 return groups |
37a9421f32a0
Added handy methods to Repository model for fetching groups with parents
Marcin Kuzminski <marcin@python-works.com>
parents:
1113
diff
changeset
|
720 |
37a9421f32a0
Added handy methods to Repository model for fetching groups with parents
Marcin Kuzminski <marcin@python-works.com>
parents:
1113
diff
changeset
|
721 @property |
1593 | 722 def groups_and_repo(self): |
1155
37a9421f32a0
Added handy methods to Repository model for fetching groups with parents
Marcin Kuzminski <marcin@python-works.com>
parents:
1113
diff
changeset
|
723 return self.groups_with_parents, self.just_name |
1113
c1eda8ec4a46
added clone_uri,api_key into models. Fixed models for mysql compatibilty
Marcin Kuzminski <marcin@python-works.com>
parents:
1088
diff
changeset
|
724 |
1366
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
725 @LazyProperty |
1593 | 726 def repo_path(self): |
1366
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
727 """ |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
728 Returns base full path for that repository means where it actually |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
729 exists on a filesystem |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
730 """ |
2520
a1e156503afe
Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents:
2510
diff
changeset
|
731 q = Session().query(RhodeCodeUi).filter(RhodeCodeUi.ui_key == |
1593 | 732 Repository.url_sep()) |
1727
8e9f51091229
fixed caching query on repos path
Marcin Kuzminski <marcin@python-works.com>
parents:
1723
diff
changeset
|
733 q = q.options(FromCache("sql_cache_short", "repository_repo_path")) |
1368
04b43168742d
adde short cache for repo_path
Marcin Kuzminski <marcin@python-works.com>
parents:
1366
diff
changeset
|
734 return q.one().ui_value |
1366
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
735 |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
736 @property |
1593 | 737 def repo_full_path(self): |
1366
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
738 p = [self.repo_path] |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
739 # we need to split the name by / since this is how we store the |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
740 # names in the database, but that eventually needs to be converted |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
741 # into a valid system path |
1593 | 742 p += self.repo_name.split(Repository.url_sep()) |
743 return os.path.join(*p) | |
1366
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
744 |
1593 | 745 def get_new_name(self, repo_name): |
1539
bd604cf75c5a
fixes #260 Put repo in group, then move group to another group -> repo becomes unavailable
Marcin Kuzminski <marcin@python-works.com>
parents:
1538
diff
changeset
|
746 """ |
bd604cf75c5a
fixes #260 Put repo in group, then move group to another group -> repo becomes unavailable
Marcin Kuzminski <marcin@python-works.com>
parents:
1538
diff
changeset
|
747 returns new full repository name based on assigned group and new new |
1591 | 748 |
1539
bd604cf75c5a
fixes #260 Put repo in group, then move group to another group -> repo becomes unavailable
Marcin Kuzminski <marcin@python-works.com>
parents:
1538
diff
changeset
|
749 :param group_name: |
bd604cf75c5a
fixes #260 Put repo in group, then move group to another group -> repo becomes unavailable
Marcin Kuzminski <marcin@python-works.com>
parents:
1538
diff
changeset
|
750 """ |
bd604cf75c5a
fixes #260 Put repo in group, then move group to another group -> repo becomes unavailable
Marcin Kuzminski <marcin@python-works.com>
parents:
1538
diff
changeset
|
751 path_prefix = self.group.full_path_splitted if self.group else [] |
1593 | 752 return Repository.url_sep().join(path_prefix + [repo_name]) |
1539
bd604cf75c5a
fixes #260 Put repo in group, then move group to another group -> repo becomes unavailable
Marcin Kuzminski <marcin@python-works.com>
parents:
1538
diff
changeset
|
753 |
1366
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
754 @property |
1593 | 755 def _ui(self): |
1366
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
756 """ |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
757 Creates an db based ui object for this repository |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
758 """ |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
759 from mercurial import ui |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
760 from mercurial import config |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
761 baseui = ui.ui() |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
762 |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
763 #clean the baseui object |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
764 baseui._ocfg = config.config() |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
765 baseui._ucfg = config.config() |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
766 baseui._tcfg = config.config() |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
767 |
1584
3338a0994472
Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents:
1508
diff
changeset
|
768 ret = RhodeCodeUi.query()\ |
1593 | 769 .options(FromCache("sql_cache_short", "repository_repo_ui")).all() |
1366
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
770 |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
771 hg_ui = ret |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
772 for ui_ in hg_ui: |
2689
73cfc54c87d5
fixed the push_ssl issues after mercurial 2.3 upgrade.
Marcin Kuzminski <marcin@python-works.com>
parents:
2677
diff
changeset
|
773 if ui_.ui_active: |
1593 | 774 log.debug('settings ui from db[%s]%s:%s', ui_.ui_section, |
775 ui_.ui_key, ui_.ui_value) | |
776 baseui.setconfig(ui_.ui_section, ui_.ui_key, ui_.ui_value) | |
2689
73cfc54c87d5
fixed the push_ssl issues after mercurial 2.3 upgrade.
Marcin Kuzminski <marcin@python-works.com>
parents:
2677
diff
changeset
|
777 if ui_.ui_key == 'push_ssl': |
73cfc54c87d5
fixed the push_ssl issues after mercurial 2.3 upgrade.
Marcin Kuzminski <marcin@python-works.com>
parents:
2677
diff
changeset
|
778 # force set push_ssl requirement to False, rhodecode |
73cfc54c87d5
fixed the push_ssl issues after mercurial 2.3 upgrade.
Marcin Kuzminski <marcin@python-works.com>
parents:
2677
diff
changeset
|
779 # handles that |
2726
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
780 baseui.setconfig(ui_.ui_section, ui_.ui_key, False) |
1366
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
781 |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
782 return baseui |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
783 |
1508
4aba7be311e8
API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents:
1500
diff
changeset
|
784 @classmethod |
2520
a1e156503afe
Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents:
2510
diff
changeset
|
785 def inject_ui(cls, repo, extras={}): |
a1e156503afe
Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents:
2510
diff
changeset
|
786 from rhodecode.lib.vcs.backends.hg import MercurialRepository |
a1e156503afe
Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents:
2510
diff
changeset
|
787 from rhodecode.lib.vcs.backends.git import GitRepository |
a1e156503afe
Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents:
2510
diff
changeset
|
788 required = (MercurialRepository, GitRepository) |
a1e156503afe
Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents:
2510
diff
changeset
|
789 if not isinstance(repo, required): |
a1e156503afe
Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents:
2510
diff
changeset
|
790 raise Exception('repo must be instance of %s' % required) |
a1e156503afe
Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents:
2510
diff
changeset
|
791 |
a1e156503afe
Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents:
2510
diff
changeset
|
792 # inject ui extra param to log this action via push logger |
a1e156503afe
Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents:
2510
diff
changeset
|
793 for k, v in extras.items(): |
a1e156503afe
Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents:
2510
diff
changeset
|
794 repo._repo.ui.setconfig('rhodecode_extras', k, v) |
a1e156503afe
Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents:
2510
diff
changeset
|
795 |
a1e156503afe
Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents:
2510
diff
changeset
|
796 @classmethod |
1593 | 797 def is_valid(cls, repo_name): |
1508
4aba7be311e8
API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents:
1500
diff
changeset
|
798 """ |
4aba7be311e8
API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents:
1500
diff
changeset
|
799 returns True if given repo name is a valid filesystem repository |
1587
8898a79ac628
Implement all CRUD API operation for repo
Nicolas VINOT <aeris@imirhil.fr>
parents:
1586
diff
changeset
|
800 |
1819
9451a569aee5
sphinx doc cleanup
Marcin Kuzminski <marcin@python-works.com>
parents:
1818
diff
changeset
|
801 :param cls: |
9451a569aee5
sphinx doc cleanup
Marcin Kuzminski <marcin@python-works.com>
parents:
1818
diff
changeset
|
802 :param repo_name: |
1508
4aba7be311e8
API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents:
1500
diff
changeset
|
803 """ |
4aba7be311e8
API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents:
1500
diff
changeset
|
804 from rhodecode.lib.utils import is_valid_repo |
4aba7be311e8
API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents:
1500
diff
changeset
|
805 |
1593 | 806 return is_valid_repo(repo_name, cls.base_path()) |
1508
4aba7be311e8
API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents:
1500
diff
changeset
|
807 |
2508
43cb5b6047fd
Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents:
2506
diff
changeset
|
808 def get_api_data(self): |
43cb5b6047fd
Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents:
2506
diff
changeset
|
809 """ |
43cb5b6047fd
Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents:
2506
diff
changeset
|
810 Common function for generating repo api data |
43cb5b6047fd
Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents:
2506
diff
changeset
|
811 |
43cb5b6047fd
Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents:
2506
diff
changeset
|
812 """ |
43cb5b6047fd
Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents:
2506
diff
changeset
|
813 repo = self |
43cb5b6047fd
Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents:
2506
diff
changeset
|
814 data = dict( |
2510
9059b2d91303
Change return paremeters for get_api_data in user and repo
Marcin Kuzminski <marcin@python-works.com>
parents:
2508
diff
changeset
|
815 repo_id=repo.repo_id, |
2508
43cb5b6047fd
Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents:
2506
diff
changeset
|
816 repo_name=repo.repo_name, |
43cb5b6047fd
Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents:
2506
diff
changeset
|
817 repo_type=repo.repo_type, |
43cb5b6047fd
Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents:
2506
diff
changeset
|
818 clone_uri=repo.clone_uri, |
43cb5b6047fd
Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents:
2506
diff
changeset
|
819 private=repo.private, |
43cb5b6047fd
Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents:
2506
diff
changeset
|
820 created_on=repo.created_on, |
43cb5b6047fd
Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents:
2506
diff
changeset
|
821 description=repo.description, |
43cb5b6047fd
Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents:
2506
diff
changeset
|
822 landing_rev=repo.landing_rev, |
43cb5b6047fd
Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents:
2506
diff
changeset
|
823 owner=repo.user.username, |
43cb5b6047fd
Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents:
2506
diff
changeset
|
824 fork_of=repo.fork.repo_name if repo.fork else None |
43cb5b6047fd
Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents:
2506
diff
changeset
|
825 ) |
43cb5b6047fd
Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents:
2506
diff
changeset
|
826 |
43cb5b6047fd
Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents:
2506
diff
changeset
|
827 return data |
43cb5b6047fd
Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents:
2506
diff
changeset
|
828 |
2726
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
829 @classmethod |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
830 def lock(cls, repo, user_id): |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
831 repo.locked = [user_id, time.time()] |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
832 Session().add(repo) |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
833 Session().commit() |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
834 |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
835 @classmethod |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
836 def unlock(cls, repo): |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
837 repo.locked = None |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
838 Session().add(repo) |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
839 Session().commit() |
aa17c7a1b8a5
Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents:
2724
diff
changeset
|
840 |
1366
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
841 #========================================================================== |
1466 | 842 # SCM PROPERTIES |
843 #========================================================================== | |
844 | |
2251
986430cde505
fixed issue with getting README files from git repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
2248
diff
changeset
|
845 def get_changeset(self, rev=None): |
1593 | 846 return get_changeset_safe(self.scm_instance, rev) |
1466 | 847 |
2603
370ed7829168
Readme renderer now uses landing_rev parameter to render the readme based on
Marcin Kuzminski <marcin@python-works.com>
parents:
2588
diff
changeset
|
848 def get_landing_changeset(self): |
370ed7829168
Readme renderer now uses landing_rev parameter to render the readme based on
Marcin Kuzminski <marcin@python-works.com>
parents:
2588
diff
changeset
|
849 """ |
370ed7829168
Readme renderer now uses landing_rev parameter to render the readme based on
Marcin Kuzminski <marcin@python-works.com>
parents:
2588
diff
changeset
|
850 Returns landing changeset, or if that doesn't exist returns the tip |
370ed7829168
Readme renderer now uses landing_rev parameter to render the readme based on
Marcin Kuzminski <marcin@python-works.com>
parents:
2588
diff
changeset
|
851 """ |
370ed7829168
Readme renderer now uses landing_rev parameter to render the readme based on
Marcin Kuzminski <marcin@python-works.com>
parents:
2588
diff
changeset
|
852 cs = self.get_changeset(self.landing_rev) or self.get_changeset() |
370ed7829168
Readme renderer now uses landing_rev parameter to render the readme based on
Marcin Kuzminski <marcin@python-works.com>
parents:
2588
diff
changeset
|
853 return cs |
370ed7829168
Readme renderer now uses landing_rev parameter to render the readme based on
Marcin Kuzminski <marcin@python-works.com>
parents:
2588
diff
changeset
|
854 |
1466 | 855 @property |
1593 | 856 def tip(self): |
857 return self.get_changeset('tip') | |
1466 | 858 |
859 @property | |
1593 | 860 def author(self): |
1466 | 861 return self.tip.author |
862 | |
863 @property | |
1593 | 864 def last_change(self): |
1466 | 865 return self.scm_instance.last_change |
866 | |
2520
a1e156503afe
Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents:
2510
diff
changeset
|
867 def get_comments(self, revisions=None): |
1884
0614862a20ec
Added number of comments in changelog for each changeset
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
868 """ |
0614862a20ec
Added number of comments in changelog for each changeset
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
869 Returns comments for this repository grouped by revisions |
0614862a20ec
Added number of comments in changelog for each changeset
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
870 |
0614862a20ec
Added number of comments in changelog for each changeset
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
871 :param revisions: filter query by revisions only |
0614862a20ec
Added number of comments in changelog for each changeset
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
872 """ |
0614862a20ec
Added number of comments in changelog for each changeset
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
873 cmts = ChangesetComment.query()\ |
0614862a20ec
Added number of comments in changelog for each changeset
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
874 .filter(ChangesetComment.repo == self) |
0614862a20ec
Added number of comments in changelog for each changeset
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
875 if revisions: |
0614862a20ec
Added number of comments in changelog for each changeset
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
876 cmts = cmts.filter(ChangesetComment.revision.in_(revisions)) |
0614862a20ec
Added number of comments in changelog for each changeset
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
877 grouped = defaultdict(list) |
0614862a20ec
Added number of comments in changelog for each changeset
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
878 for cmt in cmts.all(): |
0614862a20ec
Added number of comments in changelog for each changeset
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
879 grouped[cmt.revision].append(cmt) |
0614862a20ec
Added number of comments in changelog for each changeset
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
880 return grouped |
0614862a20ec
Added number of comments in changelog for each changeset
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
881 |
2215
2c2bdaeca912
code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents:
2161
diff
changeset
|
882 def statuses(self, revisions=None): |
2c2bdaeca912
code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents:
2161
diff
changeset
|
883 """ |
2c2bdaeca912
code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents:
2161
diff
changeset
|
884 Returns statuses for this repository |
2217
76947224bf27
Implemented initial code-review status of changesets
Marcin Kuzminski <marcin@python-works.com>
parents:
2215
diff
changeset
|
885 |
2215
2c2bdaeca912
code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents:
2161
diff
changeset
|
886 :param revisions: list of revisions to get statuses for |
2c2bdaeca912
code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents:
2161
diff
changeset
|
887 :type revisions: list |
2c2bdaeca912
code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents:
2161
diff
changeset
|
888 """ |
2c2bdaeca912
code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents:
2161
diff
changeset
|
889 |
2c2bdaeca912
code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents:
2161
diff
changeset
|
890 statuses = ChangesetStatus.query()\ |
2287
8447d35b674e
Added simple versioning for changeset status
Marcin Kuzminski <marcin@python-works.com>
parents:
2286
diff
changeset
|
891 .filter(ChangesetStatus.repo == self)\ |
8447d35b674e
Added simple versioning for changeset status
Marcin Kuzminski <marcin@python-works.com>
parents:
2286
diff
changeset
|
892 .filter(ChangesetStatus.version == 0) |
2215
2c2bdaeca912
code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents:
2161
diff
changeset
|
893 if revisions: |
2c2bdaeca912
code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents:
2161
diff
changeset
|
894 statuses = statuses.filter(ChangesetStatus.revision.in_(revisions)) |
2217
76947224bf27
Implemented initial code-review status of changesets
Marcin Kuzminski <marcin@python-works.com>
parents:
2215
diff
changeset
|
895 grouped = {} |
2542
4496d3119627
mock changeset status(to under review) if there's opened pull request but not yet with a status
Marcin Kuzminski <marcin@python-works.com>
parents:
2532
diff
changeset
|
896 |
4496d3119627
mock changeset status(to under review) if there's opened pull request but not yet with a status
Marcin Kuzminski <marcin@python-works.com>
parents:
2532
diff
changeset
|
897 #maybe we have open new pullrequest without a status ? |
4496d3119627
mock changeset status(to under review) if there's opened pull request but not yet with a status
Marcin Kuzminski <marcin@python-works.com>
parents:
2532
diff
changeset
|
898 stat = ChangesetStatus.STATUS_UNDER_REVIEW |
4496d3119627
mock changeset status(to under review) if there's opened pull request but not yet with a status
Marcin Kuzminski <marcin@python-works.com>
parents:
2532
diff
changeset
|
899 status_lbl = ChangesetStatus.get_status_lbl(stat) |
4496d3119627
mock changeset status(to under review) if there's opened pull request but not yet with a status
Marcin Kuzminski <marcin@python-works.com>
parents:
2532
diff
changeset
|
900 for pr in PullRequest.query().filter(PullRequest.org_repo == self).all(): |
4496d3119627
mock changeset status(to under review) if there's opened pull request but not yet with a status
Marcin Kuzminski <marcin@python-works.com>
parents:
2532
diff
changeset
|
901 for rev in pr.revisions: |
4496d3119627
mock changeset status(to under review) if there's opened pull request but not yet with a status
Marcin Kuzminski <marcin@python-works.com>
parents:
2532
diff
changeset
|
902 pr_id = pr.pull_request_id |
4496d3119627
mock changeset status(to under review) if there's opened pull request but not yet with a status
Marcin Kuzminski <marcin@python-works.com>
parents:
2532
diff
changeset
|
903 pr_repo = pr.other_repo.repo_name |
4496d3119627
mock changeset status(to under review) if there's opened pull request but not yet with a status
Marcin Kuzminski <marcin@python-works.com>
parents:
2532
diff
changeset
|
904 grouped[rev] = [stat, status_lbl, pr_id, pr_repo] |
4496d3119627
mock changeset status(to under review) if there's opened pull request but not yet with a status
Marcin Kuzminski <marcin@python-works.com>
parents:
2532
diff
changeset
|
905 |
2215
2c2bdaeca912
code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents:
2161
diff
changeset
|
906 for stat in statuses.all(): |
2443
fd0a822481ec
- added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2440
diff
changeset
|
907 pr_id = pr_repo = None |
fd0a822481ec
- added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2440
diff
changeset
|
908 if stat.pull_request: |
fd0a822481ec
- added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2440
diff
changeset
|
909 pr_id = stat.pull_request.pull_request_id |
fd0a822481ec
- added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2440
diff
changeset
|
910 pr_repo = stat.pull_request.other_repo.repo_name |
fd0a822481ec
- added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2440
diff
changeset
|
911 grouped[stat.revision] = [str(stat.status), stat.status_lbl, |
fd0a822481ec
- added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2440
diff
changeset
|
912 pr_id, pr_repo] |
2215
2c2bdaeca912
code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents:
2161
diff
changeset
|
913 return grouped |
2c2bdaeca912
code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents:
2161
diff
changeset
|
914 |
1466 | 915 #========================================================================== |
1366
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
916 # SCM CACHE INSTANCE |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
917 #========================================================================== |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
918 |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
919 @property |
1593 | 920 def invalidate(self): |
1607
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
921 return CacheInvalidation.invalidate(self.repo_name) |
1366
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
922 |
1593 | 923 def set_invalidate(self): |
1366
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
924 """ |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
925 set a cache for invalidation for this instance |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
926 """ |
1607
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
927 CacheInvalidation.set_invalidate(self.repo_name) |
1366
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
928 |
1466 | 929 @LazyProperty |
1593 | 930 def scm_instance(self): |
1400
0d7b56b97953
Simplified last_login call on user, and changed login to use User model directly
Marcin Kuzminski <marcin@python-works.com>
parents:
1388
diff
changeset
|
931 return self.__get_instance() |
1366
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
932 |
2352
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
933 def scm_instance_cached(self, cache_map=None): |
1593 | 934 @cache_region('long_term') |
935 def _c(repo_name): | |
1400
0d7b56b97953
Simplified last_login call on user, and changed login to use User model directly
Marcin Kuzminski <marcin@python-works.com>
parents:
1388
diff
changeset
|
936 return self.__get_instance() |
1607
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
937 rn = self.repo_name |
1744
d41a115d9a39
remove cache from default perms. In some cases of concurrent repo removal it crashed.
Marcin Kuzminski <marcin@python-works.com>
parents:
1733
diff
changeset
|
938 log.debug('Getting cached instance of repo') |
2352
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
939 |
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
940 if cache_map: |
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
941 # get using prefilled cache_map |
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
942 invalidate_repo = cache_map[self.repo_name] |
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
943 if invalidate_repo: |
2356
2da7b5984ae5
typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents:
2352
diff
changeset
|
944 invalidate_repo = (None if invalidate_repo.cache_active |
2352
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
945 else invalidate_repo) |
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
946 else: |
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
947 # get from invalidate |
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
948 invalidate_repo = self.invalidate |
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
949 |
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
950 if invalidate_repo is not None: |
1593 | 951 region_invalidate(_c, None, rn) |
1428
e5467730682b
fixed some issues with cache invalidation, and simplified invalidation codes
Marcin Kuzminski <marcin@python-works.com>
parents:
1427
diff
changeset
|
952 # update our cache |
2352
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
953 CacheInvalidation.set_valid(invalidate_repo.cache_key) |
1593 | 954 return _c(rn) |
1366
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
955 |
1593 | 956 def __get_instance(self): |
1368
04b43168742d
adde short cache for repo_path
Marcin Kuzminski <marcin@python-works.com>
parents:
1366
diff
changeset
|
957 repo_full_path = self.repo_full_path |
1366
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
958 try: |
1593 | 959 alias = get_scm(repo_full_path)[0] |
1976 | 960 log.debug('Creating instance of %s repository' % alias) |
1593 | 961 backend = get_backend(alias) |
1366
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
962 except VCSError: |
1593 | 963 log.error(traceback.format_exc()) |
964 log.error('Perhaps this repository is in db and not in ' | |
1366
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
965 'filesystem run rescan repositories with ' |
1593 | 966 '"destroy old data " option from admin panel') |
1366
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
967 return |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
968 |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
969 if alias == 'hg': |
2000
72c525a7e7ad
added migrations from 1.2.X to 1.3
Marcin Kuzminski <marcin@python-works.com>
parents:
1990
diff
changeset
|
970 |
1594 | 971 repo = backend(safe_str(repo_full_path), create=False, |
972 baseui=self._ui) | |
1607
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
973 # skip hidden web repository |
1366
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
974 if repo._get_hidden(): |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
975 return |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
976 else: |
1594 | 977 repo = backend(repo_full_path, create=False) |
1366
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
978 |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
979 return repo |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
980 |
1065
5d676b6ab71c
Moved BaseModel into base class for declarative base. Added some handy methods into
Marcin Kuzminski <marcin@python-works.com>
parents:
1039
diff
changeset
|
981 |
1633
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
982 class RepoGroup(Base, BaseModel): |
878
859bc9e7a15d
Extended repo2db mapper with group creation via directory structures
Marcin Kuzminski <marcin@python-works.com>
parents:
836
diff
changeset
|
983 __tablename__ = 'groups' |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
984 __table_args__ = ( |
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
985 UniqueConstraint('group_name', 'group_parent_id'), |
1963
9bbde54232dc
white space cleanup
Marcin Kuzminski <marcin@python-works.com>
parents:
1960
diff
changeset
|
986 CheckConstraint('group_id != group_parent_id'), |
2356
2da7b5984ae5
typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents:
2352
diff
changeset
|
987 {'extend_existing': True, 'mysql_engine': 'InnoDB', |
2149 | 988 'mysql_charset': 'utf8'}, |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
989 ) |
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
990 __mapper_args__ = {'order_by': 'group_name'} |
878
859bc9e7a15d
Extended repo2db mapper with group creation via directory structures
Marcin Kuzminski <marcin@python-works.com>
parents:
836
diff
changeset
|
991 |
1594 | 992 group_id = Column("group_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
2588
32dd6896abcf
added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents:
2585
diff
changeset
|
993 group_name = Column("group_name", String(255, convert_unicode=False, assert_unicode=None), nullable=False, unique=True, default=None) |
1594 | 994 group_parent_id = Column("group_parent_id", Integer(), ForeignKey('groups.group_id'), nullable=True, unique=None, default=None) |
2588
32dd6896abcf
added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents:
2585
diff
changeset
|
995 group_description = Column("group_description", String(10000, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) |
2749
3ed4dae499d0
Recursive set locking on all children of a group.
Marcin Kuzminski <marcin@python-works.com>
parents:
2731
diff
changeset
|
996 enable_locking = Column("enable_locking", Boolean(), nullable=False, unique=None, default=False) |
878
859bc9e7a15d
Extended repo2db mapper with group creation via directory structures
Marcin Kuzminski <marcin@python-works.com>
parents:
836
diff
changeset
|
997 |
1982
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1976
diff
changeset
|
998 repo_group_to_perm = relationship('UserRepoGroupToPerm', cascade='all', order_by='UserRepoGroupToPerm.group_to_perm_id') |
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1976
diff
changeset
|
999 users_group_to_perm = relationship('UsersGroupRepoGroupToPerm', cascade='all') |
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1976
diff
changeset
|
1000 |
1633
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
1001 parent_group = relationship('RepoGroup', remote_side=group_id) |
878
859bc9e7a15d
Extended repo2db mapper with group creation via directory structures
Marcin Kuzminski <marcin@python-works.com>
parents:
836
diff
changeset
|
1002 |
1594 | 1003 def __init__(self, group_name='', parent_group=None): |
878
859bc9e7a15d
Extended repo2db mapper with group creation via directory structures
Marcin Kuzminski <marcin@python-works.com>
parents:
836
diff
changeset
|
1004 self.group_name = group_name |
859bc9e7a15d
Extended repo2db mapper with group creation via directory structures
Marcin Kuzminski <marcin@python-works.com>
parents:
836
diff
changeset
|
1005 self.parent_group = parent_group |
859bc9e7a15d
Extended repo2db mapper with group creation via directory structures
Marcin Kuzminski <marcin@python-works.com>
parents:
836
diff
changeset
|
1006 |
2156
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
1007 def __unicode__(self): |
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
1008 return u"<%s('%s:%s')>" % (self.__class__.__name__, self.group_id, |
1593 | 1009 self.group_name) |
631
05528ad948c4
Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents:
549
diff
changeset
|
1010 |
1346
cf78d302d441
#47 implemented deleting of empty groups. Fixed problem with full paths on nested groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1345
diff
changeset
|
1011 @classmethod |
1593 | 1012 def groups_choices(cls): |
1547
fbc762ae3496
unified generation of repo groups choices
Marcin Kuzminski <marcin@python-works.com>
parents:
1546
diff
changeset
|
1013 from webhelpers.html import literal as _literal |
1593 | 1014 repo_groups = [('', '')] |
1547
fbc762ae3496
unified generation of repo groups choices
Marcin Kuzminski <marcin@python-works.com>
parents:
1546
diff
changeset
|
1015 sep = ' » ' |
1593 | 1016 _name = lambda k: _literal(sep.join(k)) |
1547
fbc762ae3496
unified generation of repo groups choices
Marcin Kuzminski <marcin@python-works.com>
parents:
1546
diff
changeset
|
1017 |
1593 | 1018 repo_groups.extend([(x.group_id, _name(x.full_path_splitted)) |
1019 for x in cls.query().all()]) | |
1591 | 1020 |
1594 | 1021 repo_groups = sorted(repo_groups, key=lambda t: t[1].split(sep)[0]) |
1547
fbc762ae3496
unified generation of repo groups choices
Marcin Kuzminski <marcin@python-works.com>
parents:
1546
diff
changeset
|
1022 return repo_groups |
1591 | 1023 |
1547
fbc762ae3496
unified generation of repo groups choices
Marcin Kuzminski <marcin@python-works.com>
parents:
1546
diff
changeset
|
1024 @classmethod |
1593 | 1025 def url_sep(cls): |
2339
79b3c9c66c54
Added optional repo_name into issue tracker url to get just the name of repo without group prefix
Marcin Kuzminski <marcin@python-works.com>
parents:
2251
diff
changeset
|
1026 return URL_SEP |
1346
cf78d302d441
#47 implemented deleting of empty groups. Fixed problem with full paths on nested groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1345
diff
changeset
|
1027 |
1538
27be8f94c207
implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents:
1530
diff
changeset
|
1028 @classmethod |
1594 | 1029 def get_by_group_name(cls, group_name, cache=False, case_insensitive=False): |
1584
3338a0994472
Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents:
1508
diff
changeset
|
1030 if case_insensitive: |
3338a0994472
Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents:
1508
diff
changeset
|
1031 gr = cls.query()\ |
1593 | 1032 .filter(cls.group_name.ilike(group_name)) |
1584
3338a0994472
Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents:
1508
diff
changeset
|
1033 else: |
3338a0994472
Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents:
1508
diff
changeset
|
1034 gr = cls.query()\ |
1593 | 1035 .filter(cls.group_name == group_name) |
1584
3338a0994472
Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents:
1508
diff
changeset
|
1036 if cache: |
2062
bf8ed0adbc66
fixes #371 fixed issues with beaker/sqlalchemy and non-ascii cache keys
Marcin Kuzminski <marcin@python-works.com>
parents:
2058
diff
changeset
|
1037 gr = gr.options(FromCache( |
bf8ed0adbc66
fixes #371 fixed issues with beaker/sqlalchemy and non-ascii cache keys
Marcin Kuzminski <marcin@python-works.com>
parents:
2058
diff
changeset
|
1038 "sql_cache_short", |
bf8ed0adbc66
fixes #371 fixed issues with beaker/sqlalchemy and non-ascii cache keys
Marcin Kuzminski <marcin@python-works.com>
parents:
2058
diff
changeset
|
1039 "get_group_%s" % _hash_key(group_name) |
bf8ed0adbc66
fixes #371 fixed issues with beaker/sqlalchemy and non-ascii cache keys
Marcin Kuzminski <marcin@python-works.com>
parents:
2058
diff
changeset
|
1040 ) |
bf8ed0adbc66
fixes #371 fixed issues with beaker/sqlalchemy and non-ascii cache keys
Marcin Kuzminski <marcin@python-works.com>
parents:
2058
diff
changeset
|
1041 ) |
1584
3338a0994472
Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents:
1508
diff
changeset
|
1042 return gr.scalar() |
1538
27be8f94c207
implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents:
1530
diff
changeset
|
1043 |
1159
187a924ed653
Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1155
diff
changeset
|
1044 @property |
1593 | 1045 def parents(self): |
1385
7e221629a3e5
#209 Added recursive count on repositories to calculate all repos within all nested groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1381
diff
changeset
|
1046 parents_recursion_limit = 5 |
1159
187a924ed653
Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1155
diff
changeset
|
1047 groups = [] |
187a924ed653
Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1155
diff
changeset
|
1048 if self.parent_group is None: |
187a924ed653
Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1155
diff
changeset
|
1049 return groups |
187a924ed653
Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1155
diff
changeset
|
1050 cur_gr = self.parent_group |
1593 | 1051 groups.insert(0, cur_gr) |
1349
526120c77a38
#47 added editing of groups, and moving them between. Added check constraint for groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1346
diff
changeset
|
1052 cnt = 0 |
1159
187a924ed653
Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1155
diff
changeset
|
1053 while 1: |
1349
526120c77a38
#47 added editing of groups, and moving them between. Added check constraint for groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1346
diff
changeset
|
1054 cnt += 1 |
1593 | 1055 gr = getattr(cur_gr, 'parent_group', None) |
1159
187a924ed653
Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1155
diff
changeset
|
1056 cur_gr = cur_gr.parent_group |
187a924ed653
Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1155
diff
changeset
|
1057 if gr is None: |
187a924ed653
Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1155
diff
changeset
|
1058 break |
1385
7e221629a3e5
#209 Added recursive count on repositories to calculate all repos within all nested groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1381
diff
changeset
|
1059 if cnt == parents_recursion_limit: |
1349
526120c77a38
#47 added editing of groups, and moving them between. Added check constraint for groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1346
diff
changeset
|
1060 # this will prevent accidental infinit loops |
1593 | 1061 log.error('group nested more than %s' % |
1062 parents_recursion_limit) | |
1349
526120c77a38
#47 added editing of groups, and moving them between. Added check constraint for groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1346
diff
changeset
|
1063 break |
526120c77a38
#47 added editing of groups, and moving them between. Added check constraint for groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1346
diff
changeset
|
1064 |
1593 | 1065 groups.insert(0, gr) |
1159
187a924ed653
Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1155
diff
changeset
|
1066 return groups |
187a924ed653
Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1155
diff
changeset
|
1067 |
1385
7e221629a3e5
#209 Added recursive count on repositories to calculate all repos within all nested groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1381
diff
changeset
|
1068 @property |
1593 | 1069 def children(self): |
1633
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
1070 return RepoGroup.query().filter(RepoGroup.parent_group == self) |
1323
a7a772ea7b95
fixed saving settings on repositories inside groups, also fixes #187
Marcin Kuzminski <marcin@python-works.com>
parents:
1301
diff
changeset
|
1071 |
a7a772ea7b95
fixed saving settings on repositories inside groups, also fixes #187
Marcin Kuzminski <marcin@python-works.com>
parents:
1301
diff
changeset
|
1072 @property |
1593 | 1073 def name(self): |
1633
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
1074 return self.group_name.split(RepoGroup.url_sep())[-1] |
1538
27be8f94c207
implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents:
1530
diff
changeset
|
1075 |
27be8f94c207
implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents:
1530
diff
changeset
|
1076 @property |
1593 | 1077 def full_path(self): |
1594 | 1078 return self.group_name |
1538
27be8f94c207
implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents:
1530
diff
changeset
|
1079 |
27be8f94c207
implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents:
1530
diff
changeset
|
1080 @property |
1593 | 1081 def full_path_splitted(self): |
1633
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
1082 return self.group_name.split(RepoGroup.url_sep()) |
1323
a7a772ea7b95
fixed saving settings on repositories inside groups, also fixes #187
Marcin Kuzminski <marcin@python-works.com>
parents:
1301
diff
changeset
|
1083 |
1193
523382549c45
Added repo group page showing what reposiories are inside a group
Marcin Kuzminski <marcin@python-works.com>
parents:
1159
diff
changeset
|
1084 @property |
1593 | 1085 def repositories(self): |
2079
477fe54b8af8
fixed sorting of repos in group
Marcin Kuzminski <marcin@python-works.com>
parents:
2063
diff
changeset
|
1086 return Repository.query()\ |
477fe54b8af8
fixed sorting of repos in group
Marcin Kuzminski <marcin@python-works.com>
parents:
2063
diff
changeset
|
1087 .filter(Repository.group == self)\ |
477fe54b8af8
fixed sorting of repos in group
Marcin Kuzminski <marcin@python-works.com>
parents:
2063
diff
changeset
|
1088 .order_by(Repository.repo_name) |
1193
523382549c45
Added repo group page showing what reposiories are inside a group
Marcin Kuzminski <marcin@python-works.com>
parents:
1159
diff
changeset
|
1089 |
1385
7e221629a3e5
#209 Added recursive count on repositories to calculate all repos within all nested groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1381
diff
changeset
|
1090 @property |
1593 | 1091 def repositories_recursive_count(self): |
1385
7e221629a3e5
#209 Added recursive count on repositories to calculate all repos within all nested groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1381
diff
changeset
|
1092 cnt = self.repositories.count() |
7e221629a3e5
#209 Added recursive count on repositories to calculate all repos within all nested groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1381
diff
changeset
|
1093 |
1593 | 1094 def children_count(group): |
1385
7e221629a3e5
#209 Added recursive count on repositories to calculate all repos within all nested groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1381
diff
changeset
|
1095 cnt = 0 |
7e221629a3e5
#209 Added recursive count on repositories to calculate all repos within all nested groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1381
diff
changeset
|
1096 for child in group.children: |
7e221629a3e5
#209 Added recursive count on repositories to calculate all repos within all nested groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1381
diff
changeset
|
1097 cnt += child.repositories.count() |
1593 | 1098 cnt += children_count(child) |
1385
7e221629a3e5
#209 Added recursive count on repositories to calculate all repos within all nested groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1381
diff
changeset
|
1099 return cnt |
7e221629a3e5
#209 Added recursive count on repositories to calculate all repos within all nested groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1381
diff
changeset
|
1100 |
1593 | 1101 return cnt + children_count(self) |
1385
7e221629a3e5
#209 Added recursive count on repositories to calculate all repos within all nested groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1381
diff
changeset
|
1102 |
2749
3ed4dae499d0
Recursive set locking on all children of a group.
Marcin Kuzminski <marcin@python-works.com>
parents:
2731
diff
changeset
|
1103 def recursive_groups_and_repos(self): |
3ed4dae499d0
Recursive set locking on all children of a group.
Marcin Kuzminski <marcin@python-works.com>
parents:
2731
diff
changeset
|
1104 """ |
3ed4dae499d0
Recursive set locking on all children of a group.
Marcin Kuzminski <marcin@python-works.com>
parents:
2731
diff
changeset
|
1105 Recursive return all groups, with repositories in those groups |
3ed4dae499d0
Recursive set locking on all children of a group.
Marcin Kuzminski <marcin@python-works.com>
parents:
2731
diff
changeset
|
1106 """ |
3ed4dae499d0
Recursive set locking on all children of a group.
Marcin Kuzminski <marcin@python-works.com>
parents:
2731
diff
changeset
|
1107 all_ = [] |
3ed4dae499d0
Recursive set locking on all children of a group.
Marcin Kuzminski <marcin@python-works.com>
parents:
2731
diff
changeset
|
1108 |
3ed4dae499d0
Recursive set locking on all children of a group.
Marcin Kuzminski <marcin@python-works.com>
parents:
2731
diff
changeset
|
1109 def _get_members(root_gr): |
3ed4dae499d0
Recursive set locking on all children of a group.
Marcin Kuzminski <marcin@python-works.com>
parents:
2731
diff
changeset
|
1110 for r in root_gr.repositories: |
3ed4dae499d0
Recursive set locking on all children of a group.
Marcin Kuzminski <marcin@python-works.com>
parents:
2731
diff
changeset
|
1111 all_.append(r) |
3ed4dae499d0
Recursive set locking on all children of a group.
Marcin Kuzminski <marcin@python-works.com>
parents:
2731
diff
changeset
|
1112 childs = root_gr.children.all() |
3ed4dae499d0
Recursive set locking on all children of a group.
Marcin Kuzminski <marcin@python-works.com>
parents:
2731
diff
changeset
|
1113 if childs: |
3ed4dae499d0
Recursive set locking on all children of a group.
Marcin Kuzminski <marcin@python-works.com>
parents:
2731
diff
changeset
|
1114 for gr in childs: |
3ed4dae499d0
Recursive set locking on all children of a group.
Marcin Kuzminski <marcin@python-works.com>
parents:
2731
diff
changeset
|
1115 all_.append(gr) |
3ed4dae499d0
Recursive set locking on all children of a group.
Marcin Kuzminski <marcin@python-works.com>
parents:
2731
diff
changeset
|
1116 _get_members(gr) |
3ed4dae499d0
Recursive set locking on all children of a group.
Marcin Kuzminski <marcin@python-works.com>
parents:
2731
diff
changeset
|
1117 |
3ed4dae499d0
Recursive set locking on all children of a group.
Marcin Kuzminski <marcin@python-works.com>
parents:
2731
diff
changeset
|
1118 _get_members(self) |
3ed4dae499d0
Recursive set locking on all children of a group.
Marcin Kuzminski <marcin@python-works.com>
parents:
2731
diff
changeset
|
1119 return [self] + all_ |
3ed4dae499d0
Recursive set locking on all children of a group.
Marcin Kuzminski <marcin@python-works.com>
parents:
2731
diff
changeset
|
1120 |
1593 | 1121 def get_new_name(self, group_name): |
1538
27be8f94c207
implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents:
1530
diff
changeset
|
1122 """ |
27be8f94c207
implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents:
1530
diff
changeset
|
1123 returns new full group name based on parent and new name |
1591 | 1124 |
1538
27be8f94c207
implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents:
1530
diff
changeset
|
1125 :param group_name: |
27be8f94c207
implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents:
1530
diff
changeset
|
1126 """ |
1607
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1127 path_prefix = (self.parent_group.full_path_splitted if |
1594 | 1128 self.parent_group else []) |
1633
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
1129 return RepoGroup.url_sep().join(path_prefix + [group_name]) |
1538
27be8f94c207
implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents:
1530
diff
changeset
|
1130 |
27be8f94c207
implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents:
1530
diff
changeset
|
1131 |
1593 | 1132 class Permission(Base, BaseModel): |
226
c6526b7531e9
rewritten db manage script to use sqlalchemy. Fixed sqlalchemy models to more generic.
Marcin Kuzminski <marcin@python-works.com>
parents:
89
diff
changeset
|
1133 __tablename__ = 'permissions' |
2149 | 1134 __table_args__ = ( |
2463
b426ecc30319
Added some DB indexes to optimize queries
Marcin Kuzminski <marcin@python-works.com>
parents:
2462
diff
changeset
|
1135 Index('p_perm_name_idx', 'permission_name'), |
2356
2da7b5984ae5
typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents:
2352
diff
changeset
|
1136 {'extend_existing': True, 'mysql_engine': 'InnoDB', |
2149 | 1137 'mysql_charset': 'utf8'}, |
1138 ) | |
2532
19de74e33fb0
Better descriptions of given permission overview in edit user view
Marcin Kuzminski <marcin@python-works.com>
parents:
2531
diff
changeset
|
1139 PERMS = [ |
19de74e33fb0
Better descriptions of given permission overview in edit user view
Marcin Kuzminski <marcin@python-works.com>
parents:
2531
diff
changeset
|
1140 ('repository.none', _('Repository no access')), |
19de74e33fb0
Better descriptions of given permission overview in edit user view
Marcin Kuzminski <marcin@python-works.com>
parents:
2531
diff
changeset
|
1141 ('repository.read', _('Repository read access')), |
19de74e33fb0
Better descriptions of given permission overview in edit user view
Marcin Kuzminski <marcin@python-works.com>
parents:
2531
diff
changeset
|
1142 ('repository.write', _('Repository write access')), |
19de74e33fb0
Better descriptions of given permission overview in edit user view
Marcin Kuzminski <marcin@python-works.com>
parents:
2531
diff
changeset
|
1143 ('repository.admin', _('Repository admin access')), |
19de74e33fb0
Better descriptions of given permission overview in edit user view
Marcin Kuzminski <marcin@python-works.com>
parents:
2531
diff
changeset
|
1144 |
19de74e33fb0
Better descriptions of given permission overview in edit user view
Marcin Kuzminski <marcin@python-works.com>
parents:
2531
diff
changeset
|
1145 ('group.none', _('Repositories Group no access')), |
19de74e33fb0
Better descriptions of given permission overview in edit user view
Marcin Kuzminski <marcin@python-works.com>
parents:
2531
diff
changeset
|
1146 ('group.read', _('Repositories Group read access')), |
19de74e33fb0
Better descriptions of given permission overview in edit user view
Marcin Kuzminski <marcin@python-works.com>
parents:
2531
diff
changeset
|
1147 ('group.write', _('Repositories Group write access')), |
19de74e33fb0
Better descriptions of given permission overview in edit user view
Marcin Kuzminski <marcin@python-works.com>
parents:
2531
diff
changeset
|
1148 ('group.admin', _('Repositories Group admin access')), |
19de74e33fb0
Better descriptions of given permission overview in edit user view
Marcin Kuzminski <marcin@python-works.com>
parents:
2531
diff
changeset
|
1149 |
19de74e33fb0
Better descriptions of given permission overview in edit user view
Marcin Kuzminski <marcin@python-works.com>
parents:
2531
diff
changeset
|
1150 ('hg.admin', _('RhodeCode Administrator')), |
19de74e33fb0
Better descriptions of given permission overview in edit user view
Marcin Kuzminski <marcin@python-works.com>
parents:
2531
diff
changeset
|
1151 ('hg.create.none', _('Repository creation disabled')), |
19de74e33fb0
Better descriptions of given permission overview in edit user view
Marcin Kuzminski <marcin@python-works.com>
parents:
2531
diff
changeset
|
1152 ('hg.create.repository', _('Repository creation enabled')), |
2709
d2d35cf2b351
RhodeCode now has a option to explicitly set forking permissions. ref #508
Marcin Kuzminski <marcin@python-works.com>
parents:
2708
diff
changeset
|
1153 ('hg.fork.none', _('Repository forking disabled')), |
d2d35cf2b351
RhodeCode now has a option to explicitly set forking permissions. ref #508
Marcin Kuzminski <marcin@python-works.com>
parents:
2708
diff
changeset
|
1154 ('hg.fork.repository', _('Repository forking enabled')), |
2532
19de74e33fb0
Better descriptions of given permission overview in edit user view
Marcin Kuzminski <marcin@python-works.com>
parents:
2531
diff
changeset
|
1155 ('hg.register.none', _('Register disabled')), |
19de74e33fb0
Better descriptions of given permission overview in edit user view
Marcin Kuzminski <marcin@python-works.com>
parents:
2531
diff
changeset
|
1156 ('hg.register.manual_activate', _('Register new user with RhodeCode ' |
19de74e33fb0
Better descriptions of given permission overview in edit user view
Marcin Kuzminski <marcin@python-works.com>
parents:
2531
diff
changeset
|
1157 'with manual activation')), |
19de74e33fb0
Better descriptions of given permission overview in edit user view
Marcin Kuzminski <marcin@python-works.com>
parents:
2531
diff
changeset
|
1158 |
19de74e33fb0
Better descriptions of given permission overview in edit user view
Marcin Kuzminski <marcin@python-works.com>
parents:
2531
diff
changeset
|
1159 ('hg.register.auto_activate', _('Register new user with RhodeCode ' |
19de74e33fb0
Better descriptions of given permission overview in edit user view
Marcin Kuzminski <marcin@python-works.com>
parents:
2531
diff
changeset
|
1160 'with auto activation')), |
19de74e33fb0
Better descriptions of given permission overview in edit user view
Marcin Kuzminski <marcin@python-works.com>
parents:
2531
diff
changeset
|
1161 ] |
19de74e33fb0
Better descriptions of given permission overview in edit user view
Marcin Kuzminski <marcin@python-works.com>
parents:
2531
diff
changeset
|
1162 |
2709
d2d35cf2b351
RhodeCode now has a option to explicitly set forking permissions. ref #508
Marcin Kuzminski <marcin@python-works.com>
parents:
2708
diff
changeset
|
1163 # defines which permissions are more important higher the more important |
d2d35cf2b351
RhodeCode now has a option to explicitly set forking permissions. ref #508
Marcin Kuzminski <marcin@python-works.com>
parents:
2708
diff
changeset
|
1164 PERM_WEIGHTS = { |
d2d35cf2b351
RhodeCode now has a option to explicitly set forking permissions. ref #508
Marcin Kuzminski <marcin@python-works.com>
parents:
2708
diff
changeset
|
1165 'repository.none': 0, |
d2d35cf2b351
RhodeCode now has a option to explicitly set forking permissions. ref #508
Marcin Kuzminski <marcin@python-works.com>
parents:
2708
diff
changeset
|
1166 'repository.read': 1, |
d2d35cf2b351
RhodeCode now has a option to explicitly set forking permissions. ref #508
Marcin Kuzminski <marcin@python-works.com>
parents:
2708
diff
changeset
|
1167 'repository.write': 3, |
d2d35cf2b351
RhodeCode now has a option to explicitly set forking permissions. ref #508
Marcin Kuzminski <marcin@python-works.com>
parents:
2708
diff
changeset
|
1168 'repository.admin': 4, |
d2d35cf2b351
RhodeCode now has a option to explicitly set forking permissions. ref #508
Marcin Kuzminski <marcin@python-works.com>
parents:
2708
diff
changeset
|
1169 |
d2d35cf2b351
RhodeCode now has a option to explicitly set forking permissions. ref #508
Marcin Kuzminski <marcin@python-works.com>
parents:
2708
diff
changeset
|
1170 'group.none': 0, |
d2d35cf2b351
RhodeCode now has a option to explicitly set forking permissions. ref #508
Marcin Kuzminski <marcin@python-works.com>
parents:
2708
diff
changeset
|
1171 'group.read': 1, |
d2d35cf2b351
RhodeCode now has a option to explicitly set forking permissions. ref #508
Marcin Kuzminski <marcin@python-works.com>
parents:
2708
diff
changeset
|
1172 'group.write': 3, |
d2d35cf2b351
RhodeCode now has a option to explicitly set forking permissions. ref #508
Marcin Kuzminski <marcin@python-works.com>
parents:
2708
diff
changeset
|
1173 'group.admin': 4, |
d2d35cf2b351
RhodeCode now has a option to explicitly set forking permissions. ref #508
Marcin Kuzminski <marcin@python-works.com>
parents:
2708
diff
changeset
|
1174 |
d2d35cf2b351
RhodeCode now has a option to explicitly set forking permissions. ref #508
Marcin Kuzminski <marcin@python-works.com>
parents:
2708
diff
changeset
|
1175 'hg.fork.none': 0, |
d2d35cf2b351
RhodeCode now has a option to explicitly set forking permissions. ref #508
Marcin Kuzminski <marcin@python-works.com>
parents:
2708
diff
changeset
|
1176 'hg.fork.repository': 1, |
d2d35cf2b351
RhodeCode now has a option to explicitly set forking permissions. ref #508
Marcin Kuzminski <marcin@python-works.com>
parents:
2708
diff
changeset
|
1177 'hg.create.none': 0, |
d2d35cf2b351
RhodeCode now has a option to explicitly set forking permissions. ref #508
Marcin Kuzminski <marcin@python-works.com>
parents:
2708
diff
changeset
|
1178 'hg.create.repository':1 |
d2d35cf2b351
RhodeCode now has a option to explicitly set forking permissions. ref #508
Marcin Kuzminski <marcin@python-works.com>
parents:
2708
diff
changeset
|
1179 } |
d2d35cf2b351
RhodeCode now has a option to explicitly set forking permissions. ref #508
Marcin Kuzminski <marcin@python-works.com>
parents:
2708
diff
changeset
|
1180 |
1594 | 1181 permission_id = Column("permission_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
2588
32dd6896abcf
added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents:
2585
diff
changeset
|
1182 permission_name = Column("permission_name", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) |
32dd6896abcf
added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents:
2585
diff
changeset
|
1183 permission_longname = Column("permission_longname", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) |
631
05528ad948c4
Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents:
549
diff
changeset
|
1184 |
2156
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
1185 def __unicode__(self): |
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
1186 return u"<%s('%s:%s')>" % ( |
1982
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1976
diff
changeset
|
1187 self.__class__.__name__, self.permission_id, self.permission_name |
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1976
diff
changeset
|
1188 ) |
296
29370bb76fa6
first permissions commit: added permission managment on repository edit. Changed db rmissions, validators.
Marcin Kuzminski <marcin@python-works.com>
parents:
265
diff
changeset
|
1189 |
1266
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
1190 @classmethod |
1593 | 1191 def get_by_key(cls, key): |
1192 return cls.query().filter(cls.permission_name == key).scalar() | |
1266
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
1193 |
1728
07e56179633e
- fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents:
1727
diff
changeset
|
1194 @classmethod |
1744
d41a115d9a39
remove cache from default perms. In some cases of concurrent repo removal it crashed.
Marcin Kuzminski <marcin@python-works.com>
parents:
1733
diff
changeset
|
1195 def get_default_perms(cls, default_user_id): |
2520
a1e156503afe
Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents:
2510
diff
changeset
|
1196 q = Session().query(UserRepoToPerm, Repository, cls)\ |
1982
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1976
diff
changeset
|
1197 .join((Repository, UserRepoToPerm.repository_id == Repository.repo_id))\ |
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1976
diff
changeset
|
1198 .join((cls, UserRepoToPerm.permission_id == cls.permission_id))\ |
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1976
diff
changeset
|
1199 .filter(UserRepoToPerm.user_id == default_user_id) |
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1976
diff
changeset
|
1200 |
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1976
diff
changeset
|
1201 return q.all() |
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1976
diff
changeset
|
1202 |
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1976
diff
changeset
|
1203 @classmethod |
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1976
diff
changeset
|
1204 def get_default_group_perms(cls, default_user_id): |
2520
a1e156503afe
Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents:
2510
diff
changeset
|
1205 q = Session().query(UserRepoGroupToPerm, RepoGroup, cls)\ |
1982
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1976
diff
changeset
|
1206 .join((RepoGroup, UserRepoGroupToPerm.group_id == RepoGroup.group_id))\ |
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1976
diff
changeset
|
1207 .join((cls, UserRepoGroupToPerm.permission_id == cls.permission_id))\ |
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1976
diff
changeset
|
1208 .filter(UserRepoGroupToPerm.user_id == default_user_id) |
1728
07e56179633e
- fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents:
1727
diff
changeset
|
1209 |
07e56179633e
- fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents:
1727
diff
changeset
|
1210 return q.all() |
07e56179633e
- fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents:
1727
diff
changeset
|
1211 |
07e56179633e
- fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents:
1727
diff
changeset
|
1212 |
1633
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
1213 class UserRepoToPerm(Base, BaseModel): |
296
29370bb76fa6
first permissions commit: added permission managment on repository edit. Changed db rmissions, validators.
Marcin Kuzminski <marcin@python-works.com>
parents:
265
diff
changeset
|
1214 __tablename__ = 'repo_to_perm' |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
1215 __table_args__ = ( |
2000
72c525a7e7ad
added migrations from 1.2.X to 1.3
Marcin Kuzminski <marcin@python-works.com>
parents:
1990
diff
changeset
|
1216 UniqueConstraint('user_id', 'repository_id', 'permission_id'), |
2356
2da7b5984ae5
typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents:
2352
diff
changeset
|
1217 {'extend_existing': True, 'mysql_engine': 'InnoDB', |
2149 | 1218 'mysql_charset': 'utf8'} |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
1219 ) |
1594 | 1220 repo_to_perm_id = Column("repo_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
1221 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None) | |
1222 permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None) | |
1223 repository_id = Column("repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=False, unique=None, default=None) | |
631
05528ad948c4
Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents:
549
diff
changeset
|
1224 |
1593 | 1225 user = relationship('User') |
2000
72c525a7e7ad
added migrations from 1.2.X to 1.3
Marcin Kuzminski <marcin@python-works.com>
parents:
1990
diff
changeset
|
1226 repository = relationship('Repository') |
1593 | 1227 permission = relationship('Permission') |
399
f5c1eec9f376
rename repo2perm into repo_to_perm
Marcin Kuzminski <marcin@python-works.com>
parents:
392
diff
changeset
|
1228 |
1729
da8ee2ef7f6d
implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents:
1728
diff
changeset
|
1229 @classmethod |
da8ee2ef7f6d
implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents:
1728
diff
changeset
|
1230 def create(cls, user, repository, permission): |
da8ee2ef7f6d
implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents:
1728
diff
changeset
|
1231 n = cls() |
da8ee2ef7f6d
implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents:
1728
diff
changeset
|
1232 n.user = user |
da8ee2ef7f6d
implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents:
1728
diff
changeset
|
1233 n.repository = repository |
da8ee2ef7f6d
implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents:
1728
diff
changeset
|
1234 n.permission = permission |
2520
a1e156503afe
Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents:
2510
diff
changeset
|
1235 Session().add(n) |
1729
da8ee2ef7f6d
implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents:
1728
diff
changeset
|
1236 return n |
da8ee2ef7f6d
implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents:
1728
diff
changeset
|
1237 |
2156
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
1238 def __unicode__(self): |
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
1239 return u'<user:%s => %s >' % (self.user, self.repository) |
1729
da8ee2ef7f6d
implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents:
1728
diff
changeset
|
1240 |
1800 | 1241 |
1593 | 1242 class UserToPerm(Base, BaseModel): |
399
f5c1eec9f376
rename repo2perm into repo_to_perm
Marcin Kuzminski <marcin@python-works.com>
parents:
392
diff
changeset
|
1243 __tablename__ = 'user_to_perm' |
1988
5eae67552695
db unique constraints fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
1982
diff
changeset
|
1244 __table_args__ = ( |
5eae67552695
db unique constraints fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
1982
diff
changeset
|
1245 UniqueConstraint('user_id', 'permission_id'), |
2356
2da7b5984ae5
typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents:
2352
diff
changeset
|
1246 {'extend_existing': True, 'mysql_engine': 'InnoDB', |
2149 | 1247 'mysql_charset': 'utf8'} |
1988
5eae67552695
db unique constraints fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
1982
diff
changeset
|
1248 ) |
1594 | 1249 user_to_perm_id = Column("user_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
1250 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None) | |
1251 permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None) | |
631
05528ad948c4
Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents:
549
diff
changeset
|
1252 |
1593 | 1253 user = relationship('User') |
1728
07e56179633e
- fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents:
1727
diff
changeset
|
1254 permission = relationship('Permission', lazy='joined') |
399
f5c1eec9f376
rename repo2perm into repo_to_perm
Marcin Kuzminski <marcin@python-works.com>
parents:
392
diff
changeset
|
1255 |
1014
6fdc3ff65fce
#56 added assignments of users groups into repository
Marcin Kuzminski <marcin@python-works.com>
parents:
1000
diff
changeset
|
1256 |
1593 | 1257 class UsersGroupRepoToPerm(Base, BaseModel): |
1271
aa7e45ad0cea
Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents:
1266
diff
changeset
|
1258 __tablename__ = 'users_group_repo_to_perm' |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
1259 __table_args__ = ( |
2000
72c525a7e7ad
added migrations from 1.2.X to 1.3
Marcin Kuzminski <marcin@python-works.com>
parents:
1990
diff
changeset
|
1260 UniqueConstraint('repository_id', 'users_group_id', 'permission_id'), |
2356
2da7b5984ae5
typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents:
2352
diff
changeset
|
1261 {'extend_existing': True, 'mysql_engine': 'InnoDB', |
2149 | 1262 'mysql_charset': 'utf8'} |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
1263 ) |
1594 | 1264 users_group_to_perm_id = Column("users_group_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
1265 users_group_id = Column("users_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None) | |
1266 permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None) | |
1267 repository_id = Column("repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=False, unique=None, default=None) | |
958
7d1483f3170b
added user group to perm table
Marcin Kuzminski <marcin@python-works.com>
parents:
956
diff
changeset
|
1268 |
1593 | 1269 users_group = relationship('UsersGroup') |
1270 permission = relationship('Permission') | |
1271 repository = relationship('Repository') | |
958
7d1483f3170b
added user group to perm table
Marcin Kuzminski <marcin@python-works.com>
parents:
956
diff
changeset
|
1272 |
1729
da8ee2ef7f6d
implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents:
1728
diff
changeset
|
1273 @classmethod |
da8ee2ef7f6d
implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents:
1728
diff
changeset
|
1274 def create(cls, users_group, repository, permission): |
da8ee2ef7f6d
implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents:
1728
diff
changeset
|
1275 n = cls() |
da8ee2ef7f6d
implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents:
1728
diff
changeset
|
1276 n.users_group = users_group |
da8ee2ef7f6d
implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents:
1728
diff
changeset
|
1277 n.repository = repository |
da8ee2ef7f6d
implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents:
1728
diff
changeset
|
1278 n.permission = permission |
2520
a1e156503afe
Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents:
2510
diff
changeset
|
1279 Session().add(n) |
1729
da8ee2ef7f6d
implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents:
1728
diff
changeset
|
1280 return n |
da8ee2ef7f6d
implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents:
1728
diff
changeset
|
1281 |
2156
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
1282 def __unicode__(self): |
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
1283 return u'<userGroup:%s => %s >' % (self.users_group, self.repository) |
1271
aa7e45ad0cea
Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents:
1266
diff
changeset
|
1284 |
1800 | 1285 |
1593 | 1286 class UsersGroupToPerm(Base, BaseModel): |
1271
aa7e45ad0cea
Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents:
1266
diff
changeset
|
1287 __tablename__ = 'users_group_to_perm' |
1988
5eae67552695
db unique constraints fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
1982
diff
changeset
|
1288 __table_args__ = ( |
5eae67552695
db unique constraints fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
1982
diff
changeset
|
1289 UniqueConstraint('users_group_id', 'permission_id',), |
2356
2da7b5984ae5
typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents:
2352
diff
changeset
|
1290 {'extend_existing': True, 'mysql_engine': 'InnoDB', |
2149 | 1291 'mysql_charset': 'utf8'} |
1988
5eae67552695
db unique constraints fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
1982
diff
changeset
|
1292 ) |
1594 | 1293 users_group_to_perm_id = Column("users_group_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
1294 users_group_id = Column("users_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None) | |
1295 permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None) | |
1271
aa7e45ad0cea
Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents:
1266
diff
changeset
|
1296 |
1593 | 1297 users_group = relationship('UsersGroup') |
1298 permission = relationship('Permission') | |
1271
aa7e45ad0cea
Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents:
1266
diff
changeset
|
1299 |
aa7e45ad0cea
Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents:
1266
diff
changeset
|
1300 |
1633
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
1301 class UserRepoGroupToPerm(Base, BaseModel): |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
1302 __tablename__ = 'user_repo_group_to_perm' |
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
1303 __table_args__ = ( |
2000
72c525a7e7ad
added migrations from 1.2.X to 1.3
Marcin Kuzminski <marcin@python-works.com>
parents:
1990
diff
changeset
|
1304 UniqueConstraint('user_id', 'group_id', 'permission_id'), |
2356
2da7b5984ae5
typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents:
2352
diff
changeset
|
1305 {'extend_existing': True, 'mysql_engine': 'InnoDB', |
2149 | 1306 'mysql_charset': 'utf8'} |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
1307 ) |
879
b19341623d48
added group to perm mapping table
Marcin Kuzminski <marcin@python-works.com>
parents:
878
diff
changeset
|
1308 |
1594 | 1309 group_to_perm_id = Column("group_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
1310 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None) | |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
1311 group_id = Column("group_id", Integer(), ForeignKey('groups.group_id'), nullable=False, unique=None, default=None) |
1594 | 1312 permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None) |
879
b19341623d48
added group to perm mapping table
Marcin Kuzminski <marcin@python-works.com>
parents:
878
diff
changeset
|
1313 |
1593 | 1314 user = relationship('User') |
2000
72c525a7e7ad
added migrations from 1.2.X to 1.3
Marcin Kuzminski <marcin@python-works.com>
parents:
1990
diff
changeset
|
1315 group = relationship('RepoGroup') |
1593 | 1316 permission = relationship('Permission') |
1633
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
1317 |
1800 | 1318 |
1633
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
1319 class UsersGroupRepoGroupToPerm(Base, BaseModel): |
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
1320 __tablename__ = 'users_group_repo_group_to_perm' |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
1321 __table_args__ = ( |
1988
5eae67552695
db unique constraints fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
1982
diff
changeset
|
1322 UniqueConstraint('users_group_id', 'group_id'), |
2356
2da7b5984ae5
typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents:
2352
diff
changeset
|
1323 {'extend_existing': True, 'mysql_engine': 'InnoDB', |
2149 | 1324 'mysql_charset': 'utf8'} |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
1325 ) |
1633
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
1326 |
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
1327 users_group_repo_group_to_perm_id = Column("users_group_repo_group_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
1328 users_group_id = Column("users_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None) |
1988
5eae67552695
db unique constraints fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
1982
diff
changeset
|
1329 group_id = Column("group_id", Integer(), ForeignKey('groups.group_id'), nullable=False, unique=None, default=None) |
1633
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
1330 permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None) |
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
1331 |
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
1332 users_group = relationship('UsersGroup') |
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
1333 permission = relationship('Permission') |
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
1334 group = relationship('RepoGroup') |
879
b19341623d48
added group to perm mapping table
Marcin Kuzminski <marcin@python-works.com>
parents:
878
diff
changeset
|
1335 |
1800 | 1336 |
1593 | 1337 class Statistics(Base, BaseModel): |
493
2256c78afe53
implemented basic autoupdating statistics fetched from database
Marcin Kuzminski <marcin@python-works.com>
parents:
473
diff
changeset
|
1338 __tablename__ = 'statistics' |
2149 | 1339 __table_args__ = ( |
2150
a8c9c0094ddf
White space cleanup
Marcin Kuzminski <marcin@python-works.com>
parents:
2149
diff
changeset
|
1340 UniqueConstraint('repository_id'), |
2356
2da7b5984ae5
typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents:
2352
diff
changeset
|
1341 {'extend_existing': True, 'mysql_engine': 'InnoDB', |
2149 | 1342 'mysql_charset': 'utf8'} |
1343 ) | |
1594 | 1344 stat_id = Column("stat_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
1345 repository_id = Column("repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=False, unique=True, default=None) | |
1346 stat_on_revision = Column("stat_on_revision", Integer(), nullable=False) | |
1347 commit_activity = Column("commit_activity", LargeBinary(1000000), nullable=False)#JSON data | |
1348 commit_activity_combined = Column("commit_activity_combined", LargeBinary(), nullable=False)#JSON data | |
1349 languages = Column("languages", LargeBinary(1000000), nullable=False)#JSON data | |
631
05528ad948c4
Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents:
549
diff
changeset
|
1350 |
1594 | 1351 repository = relationship('Repository', single_parent=True) |
399
f5c1eec9f376
rename repo2perm into repo_to_perm
Marcin Kuzminski <marcin@python-works.com>
parents:
392
diff
changeset
|
1352 |
1800 | 1353 |
1593 | 1354 class UserFollowing(Base, BaseModel): |
734
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
713
diff
changeset
|
1355 __tablename__ = 'user_followings' |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
1356 __table_args__ = ( |
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
1357 UniqueConstraint('user_id', 'follows_repository_id'), |
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
1358 UniqueConstraint('user_id', 'follows_user_id'), |
2356
2da7b5984ae5
typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents:
2352
diff
changeset
|
1359 {'extend_existing': True, 'mysql_engine': 'InnoDB', |
2149 | 1360 'mysql_charset': 'utf8'} |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
1361 ) |
734
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
713
diff
changeset
|
1362 |
1594 | 1363 user_following_id = Column("user_following_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
1364 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None) | |
1365 follows_repo_id = Column("follows_repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=True, unique=None, default=None) | |
1366 follows_user_id = Column("follows_user_id", Integer(), ForeignKey('users.user_id'), nullable=True, unique=None, default=None) | |
1367 follows_from = Column('follows_from', DateTime(timezone=False), nullable=True, unique=None, default=datetime.datetime.now) | |
734
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
713
diff
changeset
|
1368 |
1594 | 1369 user = relationship('User', primaryjoin='User.user_id==UserFollowing.user_id') |
734
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
713
diff
changeset
|
1370 |
1594 | 1371 follows_user = relationship('User', primaryjoin='User.user_id==UserFollowing.follows_user_id') |
1372 follows_repository = relationship('Repository', order_by='Repository.repo_name') | |
734
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
713
diff
changeset
|
1373 |
1279
cb216757a62d
#179 Added followers page
Marcin Kuzminski <marcin@python-works.com>
parents:
1271
diff
changeset
|
1374 @classmethod |
1593 | 1375 def get_repo_followers(cls, repo_id): |
1376 return cls.query().filter(cls.follows_repo_id == repo_id) | |
1279
cb216757a62d
#179 Added followers page
Marcin Kuzminski <marcin@python-works.com>
parents:
1271
diff
changeset
|
1377 |
1800 | 1378 |
1593 | 1379 class CacheInvalidation(Base, BaseModel): |
670
e7c670cc03cb
Adde table for cache invalidation
Marcin Kuzminski <marcin@python-works.com>
parents:
667
diff
changeset
|
1380 __tablename__ = 'cache_invalidation' |
2149 | 1381 __table_args__ = ( |
1382 UniqueConstraint('cache_key'), | |
2352
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
1383 Index('key_idx', 'cache_key'), |
2356
2da7b5984ae5
typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents:
2352
diff
changeset
|
1384 {'extend_existing': True, 'mysql_engine': 'InnoDB', |
2149 | 1385 'mysql_charset': 'utf8'}, |
1386 ) | |
1594 | 1387 cache_id = Column("cache_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
2588
32dd6896abcf
added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents:
2585
diff
changeset
|
1388 cache_key = Column("cache_key", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) |
32dd6896abcf
added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents:
2585
diff
changeset
|
1389 cache_args = Column("cache_args", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) |
1594 | 1390 cache_active = Column("cache_active", Boolean(), nullable=True, unique=None, default=False) |
670
e7c670cc03cb
Adde table for cache invalidation
Marcin Kuzminski <marcin@python-works.com>
parents:
667
diff
changeset
|
1391 |
1594 | 1392 def __init__(self, cache_key, cache_args=''): |
692
cb0d9ce6ac5c
#50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents:
670
diff
changeset
|
1393 self.cache_key = cache_key |
cb0d9ce6ac5c
#50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents:
670
diff
changeset
|
1394 self.cache_args = cache_args |
cb0d9ce6ac5c
#50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents:
670
diff
changeset
|
1395 self.cache_active = False |
cb0d9ce6ac5c
#50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents:
670
diff
changeset
|
1396 |
2156
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
1397 def __unicode__(self): |
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
1398 return u"<%s('%s:%s')>" % (self.__class__.__name__, |
1593 | 1399 self.cache_id, self.cache_key) |
2352
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
1400 |
2147
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1401 @classmethod |
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1402 def clear_cache(cls): |
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1403 cls.query().delete() |
834
8924ed0e4f36
added current db version into rhodecode,
Marcin Kuzminski <marcin@python-works.com>
parents:
832
diff
changeset
|
1404 |
1607
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1405 @classmethod |
2013
8530c3cd9d04
fixed issue with hybrid property for ldap_active
Marcin Kuzminski <marcin@python-works.com>
parents:
2007
diff
changeset
|
1406 def _get_key(cls, key): |
8530c3cd9d04
fixed issue with hybrid property for ldap_active
Marcin Kuzminski <marcin@python-works.com>
parents:
2007
diff
changeset
|
1407 """ |
2147
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1408 Wrapper for generating a key, together with a prefix |
2013
8530c3cd9d04
fixed issue with hybrid property for ldap_active
Marcin Kuzminski <marcin@python-works.com>
parents:
2007
diff
changeset
|
1409 |
8530c3cd9d04
fixed issue with hybrid property for ldap_active
Marcin Kuzminski <marcin@python-works.com>
parents:
2007
diff
changeset
|
1410 :param key: |
8530c3cd9d04
fixed issue with hybrid property for ldap_active
Marcin Kuzminski <marcin@python-works.com>
parents:
2007
diff
changeset
|
1411 """ |
2016
6020e3884a58
implements #212 moved default encoding variable into rhodecode-config. It's now possible to change
Marcin Kuzminski <marcin@python-works.com>
parents:
2013
diff
changeset
|
1412 import rhodecode |
6020e3884a58
implements #212 moved default encoding variable into rhodecode-config. It's now possible to change
Marcin Kuzminski <marcin@python-works.com>
parents:
2013
diff
changeset
|
1413 prefix = '' |
6020e3884a58
implements #212 moved default encoding variable into rhodecode-config. It's now possible to change
Marcin Kuzminski <marcin@python-works.com>
parents:
2013
diff
changeset
|
1414 iid = rhodecode.CONFIG.get('instance_id') |
6020e3884a58
implements #212 moved default encoding variable into rhodecode-config. It's now possible to change
Marcin Kuzminski <marcin@python-works.com>
parents:
2013
diff
changeset
|
1415 if iid: |
2058
fb51a6fc10ae
updated CONTRIBUTORS
Marcin Kuzminski <marcin@python-works.com>
parents:
2016
diff
changeset
|
1416 prefix = iid |
2147
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1417 return "%s%s" % (prefix, key), prefix, key.rstrip('_README') |
2013
8530c3cd9d04
fixed issue with hybrid property for ldap_active
Marcin Kuzminski <marcin@python-works.com>
parents:
2007
diff
changeset
|
1418 |
8530c3cd9d04
fixed issue with hybrid property for ldap_active
Marcin Kuzminski <marcin@python-works.com>
parents:
2007
diff
changeset
|
1419 @classmethod |
8530c3cd9d04
fixed issue with hybrid property for ldap_active
Marcin Kuzminski <marcin@python-works.com>
parents:
2007
diff
changeset
|
1420 def get_by_key(cls, key): |
8530c3cd9d04
fixed issue with hybrid property for ldap_active
Marcin Kuzminski <marcin@python-works.com>
parents:
2007
diff
changeset
|
1421 return cls.query().filter(cls.cache_key == key).scalar() |
2149 | 1422 |
2147
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1423 @classmethod |
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1424 def _get_or_create_key(cls, key, prefix, org_key): |
2520
a1e156503afe
Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents:
2510
diff
changeset
|
1425 inv_obj = Session().query(cls).filter(cls.cache_key == key).scalar() |
2147
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1426 if not inv_obj: |
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1427 try: |
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1428 inv_obj = CacheInvalidation(key, org_key) |
2520
a1e156503afe
Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents:
2510
diff
changeset
|
1429 Session().add(inv_obj) |
a1e156503afe
Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents:
2510
diff
changeset
|
1430 Session().commit() |
2147
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1431 except Exception: |
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1432 log.error(traceback.format_exc()) |
2520
a1e156503afe
Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents:
2510
diff
changeset
|
1433 Session().rollback() |
2147
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1434 return inv_obj |
2149 | 1435 |
2013
8530c3cd9d04
fixed issue with hybrid property for ldap_active
Marcin Kuzminski <marcin@python-works.com>
parents:
2007
diff
changeset
|
1436 @classmethod |
1607
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1437 def invalidate(cls, key): |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1438 """ |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1439 Returns Invalidation object if this given key should be invalidated |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1440 None otherwise. `cache_active = False` means that this cache |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1441 state is not valid and needs to be invalidated |
1818
cf51bbfb120e
auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents:
1800
diff
changeset
|
1442 |
1607
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1443 :param key: |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1444 """ |
2149 | 1445 |
2147
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1446 key, _prefix, _org_key = cls._get_key(key) |
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1447 inv = cls._get_or_create_key(key, _prefix, _org_key) |
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1448 |
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1449 if inv and inv.cache_active is False: |
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1450 return inv |
1607
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1451 |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1452 @classmethod |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1453 def set_invalidate(cls, key): |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1454 """ |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1455 Mark this Cache key for invalidation |
1818
cf51bbfb120e
auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents:
1800
diff
changeset
|
1456 |
1607
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1457 :param key: |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1458 """ |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1459 |
2147
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1460 key, _prefix, _org_key = cls._get_key(key) |
2520
a1e156503afe
Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents:
2510
diff
changeset
|
1461 inv_objs = Session().query(cls).filter(cls.cache_args == _org_key).all() |
2147
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1462 log.debug('marking %s key[s] %s for invalidation' % (len(inv_objs), |
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1463 _org_key)) |
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1464 try: |
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1465 for inv_obj in inv_objs: |
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1466 if inv_obj: |
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1467 inv_obj.cache_active = False |
1607
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1468 |
2520
a1e156503afe
Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents:
2510
diff
changeset
|
1469 Session().add(inv_obj) |
a1e156503afe
Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents:
2510
diff
changeset
|
1470 Session().commit() |
1607
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1471 except Exception: |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1472 log.error(traceback.format_exc()) |
2520
a1e156503afe
Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents:
2510
diff
changeset
|
1473 Session().rollback() |
1607
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1474 |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1475 @classmethod |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1476 def set_valid(cls, key): |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1477 """ |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1478 Mark this cache key as active and currently cached |
1818
cf51bbfb120e
auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents:
1800
diff
changeset
|
1479 |
1607
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1480 :param key: |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1481 """ |
2013
8530c3cd9d04
fixed issue with hybrid property for ldap_active
Marcin Kuzminski <marcin@python-works.com>
parents:
2007
diff
changeset
|
1482 inv_obj = cls.get_by_key(key) |
1607
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1483 inv_obj.cache_active = True |
2520
a1e156503afe
Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents:
2510
diff
changeset
|
1484 Session().add(inv_obj) |
a1e156503afe
Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents:
2510
diff
changeset
|
1485 Session().commit() |
1607
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1486 |
2352
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
1487 @classmethod |
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
1488 def get_cache_map(cls): |
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
1489 |
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
1490 class cachemapdict(dict): |
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
1491 |
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
1492 def __init__(self, *args, **kwargs): |
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
1493 fixkey = kwargs.get('fixkey') |
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
1494 if fixkey: |
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
1495 del kwargs['fixkey'] |
2356
2da7b5984ae5
typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents:
2352
diff
changeset
|
1496 self.fixkey = fixkey |
2352
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
1497 super(cachemapdict, self).__init__(*args, **kwargs) |
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
1498 |
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
1499 def __getattr__(self, name): |
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
1500 key = name |
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
1501 if self.fixkey: |
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
1502 key, _prefix, _org_key = cls._get_key(key) |
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
1503 if key in self.__dict__: |
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
1504 return self.__dict__[key] |
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
1505 else: |
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
1506 return self[key] |
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
1507 |
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
1508 def __getitem__(self, key): |
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
1509 if self.fixkey: |
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
1510 key, _prefix, _org_key = cls._get_key(key) |
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
1511 try: |
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
1512 return super(cachemapdict, self).__getitem__(key) |
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
1513 except KeyError: |
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
1514 return |
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
1515 |
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
1516 cache_map = cachemapdict(fixkey=True) |
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
1517 for obj in cls.query().all(): |
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
1518 cache_map[obj.cache_key] = cachemapdict(obj.get_dict()) |
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
1519 return cache_map |
90e06f53af8c
Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents:
2339
diff
changeset
|
1520 |
1665
36f77a46f291
Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents:
1634
diff
changeset
|
1521 |
1670
d2de0c2f02cd
#77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
1669
diff
changeset
|
1522 class ChangesetComment(Base, BaseModel): |
d2de0c2f02cd
#77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
1669
diff
changeset
|
1523 __tablename__ = 'changeset_comments' |
2149 | 1524 __table_args__ = ( |
2463
b426ecc30319
Added some DB indexes to optimize queries
Marcin Kuzminski <marcin@python-works.com>
parents:
2462
diff
changeset
|
1525 Index('cc_revision_idx', 'revision'), |
2356
2da7b5984ae5
typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents:
2352
diff
changeset
|
1526 {'extend_existing': True, 'mysql_engine': 'InnoDB', |
2149 | 1527 'mysql_charset': 'utf8'}, |
1528 ) | |
1670
d2de0c2f02cd
#77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
1669
diff
changeset
|
1529 comment_id = Column('comment_id', Integer(), nullable=False, primary_key=True) |
d2de0c2f02cd
#77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
1669
diff
changeset
|
1530 repo_id = Column('repo_id', Integer(), ForeignKey('repositories.repo_id'), nullable=False) |
2440
1bc579bcd67a
- pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents:
2434
diff
changeset
|
1531 revision = Column('revision', String(40), nullable=True) |
1bc579bcd67a
- pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents:
2434
diff
changeset
|
1532 pull_request_id = Column("pull_request_id", Integer(), ForeignKey('pull_requests.pull_request_id'), nullable=True) |
1677
7276b170ce8b
#71 code-review
Marcin Kuzminski <marcin@python-works.com>
parents:
1675
diff
changeset
|
1533 line_no = Column('line_no', Unicode(10), nullable=True) |
2724
29db53a79ab2
added highlight lines field in ChangesetComments, will be used
Marcin Kuzminski <marcin@python-works.com>
parents:
2709
diff
changeset
|
1534 hl_lines = Column('hl_lines', Unicode(512), nullable=True) |
1677
7276b170ce8b
#71 code-review
Marcin Kuzminski <marcin@python-works.com>
parents:
1675
diff
changeset
|
1535 f_path = Column('f_path', Unicode(1000), nullable=True) |
1670
d2de0c2f02cd
#77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
1669
diff
changeset
|
1536 user_id = Column('user_id', Integer(), ForeignKey('users.user_id'), nullable=False) |
2791
85bb0866d444
UnicodeText make mysql more happy
Marcin Kuzminski <marcin@python-works.com>
parents:
2766
diff
changeset
|
1537 text = Column('text', UnicodeText(25000), nullable=False) |
2639
f3e039e4dc49
Added created_on column to changeset comments for proper ordering.
Marcin Kuzminski <marcin@python-works.com>
parents:
2608
diff
changeset
|
1538 created_on = Column('created_on', DateTime(timezone=False), nullable=False, default=datetime.datetime.now) |
f3e039e4dc49
Added created_on column to changeset comments for proper ordering.
Marcin Kuzminski <marcin@python-works.com>
parents:
2608
diff
changeset
|
1539 modified_at = Column('modified_at', DateTime(timezone=False), nullable=False, default=datetime.datetime.now) |
1670
d2de0c2f02cd
#77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
1669
diff
changeset
|
1540 |
1703
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1541 author = relationship('User', lazy='joined') |
1670
d2de0c2f02cd
#77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
1669
diff
changeset
|
1542 repo = relationship('Repository') |
2677
4fbbc65e8cd5
Forbid changing changset status when it is associated with a closed pull request
Marcin Kuzminski <marcin@python-works.com>
parents:
2674
diff
changeset
|
1543 status_change = relationship('ChangesetStatus', cascade="all, delete, delete-orphan") |
2440
1bc579bcd67a
- pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents:
2434
diff
changeset
|
1544 pull_request = relationship('PullRequest', lazy='joined') |
1670
d2de0c2f02cd
#77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
1669
diff
changeset
|
1545 |
1703
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1546 @classmethod |
2443
fd0a822481ec
- added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2440
diff
changeset
|
1547 def get_users(cls, revision=None, pull_request_id=None): |
1703
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1548 """ |
2443
fd0a822481ec
- added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2440
diff
changeset
|
1549 Returns user associated with this ChangesetComment. ie those |
1703
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1550 who actually commented |
1818
cf51bbfb120e
auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents:
1800
diff
changeset
|
1551 |
1703
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1552 :param cls: |
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1553 :param revision: |
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1554 """ |
2520
a1e156503afe
Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents:
2510
diff
changeset
|
1555 q = Session().query(User)\ |
2443
fd0a822481ec
- added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2440
diff
changeset
|
1556 .join(ChangesetComment.author) |
fd0a822481ec
- added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2440
diff
changeset
|
1557 if revision: |
fd0a822481ec
- added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2440
diff
changeset
|
1558 q = q.filter(cls.revision == revision) |
fd0a822481ec
- added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2440
diff
changeset
|
1559 elif pull_request_id: |
fd0a822481ec
- added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2440
diff
changeset
|
1560 q = q.filter(cls.pull_request_id == pull_request_id) |
fd0a822481ec
- added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2440
diff
changeset
|
1561 return q.all() |
1886 | 1562 |
1703
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1563 |
2215
2c2bdaeca912
code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents:
2161
diff
changeset
|
1564 class ChangesetStatus(Base, BaseModel): |
2c2bdaeca912
code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents:
2161
diff
changeset
|
1565 __tablename__ = 'changeset_statuses' |
2c2bdaeca912
code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents:
2161
diff
changeset
|
1566 __table_args__ = ( |
2463
b426ecc30319
Added some DB indexes to optimize queries
Marcin Kuzminski <marcin@python-works.com>
parents:
2462
diff
changeset
|
1567 Index('cs_revision_idx', 'revision'), |
b426ecc30319
Added some DB indexes to optimize queries
Marcin Kuzminski <marcin@python-works.com>
parents:
2462
diff
changeset
|
1568 Index('cs_version_idx', 'version'), |
2287
8447d35b674e
Added simple versioning for changeset status
Marcin Kuzminski <marcin@python-works.com>
parents:
2286
diff
changeset
|
1569 UniqueConstraint('repo_id', 'revision', 'version'), |
2215
2c2bdaeca912
code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents:
2161
diff
changeset
|
1570 {'extend_existing': True, 'mysql_engine': 'InnoDB', |
2c2bdaeca912
code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents:
2161
diff
changeset
|
1571 'mysql_charset': 'utf8'} |
2c2bdaeca912
code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents:
2161
diff
changeset
|
1572 ) |
2481
4d3032431d4f
Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents:
2480
diff
changeset
|
1573 STATUS_NOT_REVIEWED = DEFAULT = 'not_reviewed' |
4d3032431d4f
Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents:
2480
diff
changeset
|
1574 STATUS_APPROVED = 'approved' |
4d3032431d4f
Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents:
2480
diff
changeset
|
1575 STATUS_REJECTED = 'rejected' |
4d3032431d4f
Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents:
2480
diff
changeset
|
1576 STATUS_UNDER_REVIEW = 'under_review' |
2215
2c2bdaeca912
code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents:
2161
diff
changeset
|
1577 |
2c2bdaeca912
code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents:
2161
diff
changeset
|
1578 STATUSES = [ |
2481
4d3032431d4f
Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents:
2480
diff
changeset
|
1579 (STATUS_NOT_REVIEWED, _("Not Reviewed")), # (no icon) and default |
4d3032431d4f
Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents:
2480
diff
changeset
|
1580 (STATUS_APPROVED, _("Approved")), |
4d3032431d4f
Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents:
2480
diff
changeset
|
1581 (STATUS_REJECTED, _("Rejected")), |
4d3032431d4f
Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents:
2480
diff
changeset
|
1582 (STATUS_UNDER_REVIEW, _("Under Review")), |
2215
2c2bdaeca912
code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents:
2161
diff
changeset
|
1583 ] |
2c2bdaeca912
code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents:
2161
diff
changeset
|
1584 |
2c2bdaeca912
code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents:
2161
diff
changeset
|
1585 changeset_status_id = Column('changeset_status_id', Integer(), nullable=False, primary_key=True) |
2c2bdaeca912
code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents:
2161
diff
changeset
|
1586 repo_id = Column('repo_id', Integer(), ForeignKey('repositories.repo_id'), nullable=False) |
2c2bdaeca912
code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents:
2161
diff
changeset
|
1587 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None) |
2c2bdaeca912
code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents:
2161
diff
changeset
|
1588 revision = Column('revision', String(40), nullable=False) |
2217
76947224bf27
Implemented initial code-review status of changesets
Marcin Kuzminski <marcin@python-works.com>
parents:
2215
diff
changeset
|
1589 status = Column('status', String(128), nullable=False, default=DEFAULT) |
2286
9265958e33bb
Show changes of status inside comments
Marcin Kuzminski <marcin@python-works.com>
parents:
2280
diff
changeset
|
1590 changeset_comment_id = Column('changeset_comment_id', Integer(), ForeignKey('changeset_comments.comment_id')) |
2215
2c2bdaeca912
code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents:
2161
diff
changeset
|
1591 modified_at = Column('modified_at', DateTime(), nullable=False, default=datetime.datetime.now) |
2287
8447d35b674e
Added simple versioning for changeset status
Marcin Kuzminski <marcin@python-works.com>
parents:
2286
diff
changeset
|
1592 version = Column('version', Integer(), nullable=False, default=0) |
2434
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1593 pull_request_id = Column("pull_request_id", Integer(), ForeignKey('pull_requests.pull_request_id'), nullable=True) |
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1594 |
2215
2c2bdaeca912
code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents:
2161
diff
changeset
|
1595 author = relationship('User', lazy='joined') |
2c2bdaeca912
code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents:
2161
diff
changeset
|
1596 repo = relationship('Repository') |
2286
9265958e33bb
Show changes of status inside comments
Marcin Kuzminski <marcin@python-works.com>
parents:
2280
diff
changeset
|
1597 comment = relationship('ChangesetComment', lazy='joined') |
2434
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1598 pull_request = relationship('PullRequest', lazy='joined') |
2215
2c2bdaeca912
code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents:
2161
diff
changeset
|
1599 |
2481
4d3032431d4f
Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents:
2480
diff
changeset
|
1600 def __unicode__(self): |
4d3032431d4f
Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents:
2480
diff
changeset
|
1601 return u"<%s('%s:%s')>" % ( |
4d3032431d4f
Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents:
2480
diff
changeset
|
1602 self.__class__.__name__, |
4d3032431d4f
Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents:
2480
diff
changeset
|
1603 self.status, self.author |
4d3032431d4f
Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents:
2480
diff
changeset
|
1604 ) |
4d3032431d4f
Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents:
2480
diff
changeset
|
1605 |
2296
e5c0f201ca0b
Add changeset status change into emails
Marcin Kuzminski <marcin@python-works.com>
parents:
2287
diff
changeset
|
1606 @classmethod |
e5c0f201ca0b
Add changeset status change into emails
Marcin Kuzminski <marcin@python-works.com>
parents:
2287
diff
changeset
|
1607 def get_status_lbl(cls, value): |
e5c0f201ca0b
Add changeset status change into emails
Marcin Kuzminski <marcin@python-works.com>
parents:
2287
diff
changeset
|
1608 return dict(cls.STATUSES).get(value) |
e5c0f201ca0b
Add changeset status change into emails
Marcin Kuzminski <marcin@python-works.com>
parents:
2287
diff
changeset
|
1609 |
2217
76947224bf27
Implemented initial code-review status of changesets
Marcin Kuzminski <marcin@python-works.com>
parents:
2215
diff
changeset
|
1610 @property |
76947224bf27
Implemented initial code-review status of changesets
Marcin Kuzminski <marcin@python-works.com>
parents:
2215
diff
changeset
|
1611 def status_lbl(self): |
2296
e5c0f201ca0b
Add changeset status change into emails
Marcin Kuzminski <marcin@python-works.com>
parents:
2287
diff
changeset
|
1612 return ChangesetStatus.get_status_lbl(self.status) |
2217
76947224bf27
Implemented initial code-review status of changesets
Marcin Kuzminski <marcin@python-works.com>
parents:
2215
diff
changeset
|
1613 |
2215
2c2bdaeca912
code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents:
2161
diff
changeset
|
1614 |
2434
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1615 class PullRequest(Base, BaseModel): |
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1616 __tablename__ = 'pull_requests' |
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1617 __table_args__ = ( |
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1618 {'extend_existing': True, 'mysql_engine': 'InnoDB', |
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1619 'mysql_charset': 'utf8'}, |
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1620 ) |
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1621 |
2588
32dd6896abcf
added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents:
2585
diff
changeset
|
1622 STATUS_NEW = u'new' |
32dd6896abcf
added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents:
2585
diff
changeset
|
1623 STATUS_OPEN = u'open' |
32dd6896abcf
added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents:
2585
diff
changeset
|
1624 STATUS_CLOSED = u'closed' |
32dd6896abcf
added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents:
2585
diff
changeset
|
1625 |
2434
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1626 pull_request_id = Column('pull_request_id', Integer(), nullable=False, primary_key=True) |
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1627 title = Column('title', Unicode(256), nullable=True) |
2588
32dd6896abcf
added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents:
2585
diff
changeset
|
1628 description = Column('description', UnicodeText(10240), nullable=True) |
32dd6896abcf
added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents:
2585
diff
changeset
|
1629 status = Column('status', Unicode(256), nullable=False, default=STATUS_NEW) |
2440
1bc579bcd67a
- pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents:
2434
diff
changeset
|
1630 created_on = Column('created_on', DateTime(timezone=False), nullable=False, default=datetime.datetime.now) |
2608
58c529332e7e
Added option to close pull requests, in future that will be close & merge
Marcin Kuzminski <marcin@python-works.com>
parents:
2603
diff
changeset
|
1631 updated_on = Column('updated_on', DateTime(timezone=False), nullable=False, default=datetime.datetime.now) |
2440
1bc579bcd67a
- pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents:
2434
diff
changeset
|
1632 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None) |
2434
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1633 _revisions = Column('revisions', UnicodeText(20500)) # 500 revisions max |
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1634 org_repo_id = Column('org_repo_id', Integer(), ForeignKey('repositories.repo_id'), nullable=False) |
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1635 org_ref = Column('org_ref', Unicode(256), nullable=False) |
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1636 other_repo_id = Column('other_repo_id', Integer(), ForeignKey('repositories.repo_id'), nullable=False) |
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1637 other_ref = Column('other_ref', Unicode(256), nullable=False) |
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1638 |
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1639 @hybrid_property |
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1640 def revisions(self): |
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1641 return self._revisions.split(':') |
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1642 |
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1643 @revisions.setter |
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1644 def revisions(self, val): |
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1645 self._revisions = ':'.join(val) |
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1646 |
2440
1bc579bcd67a
- pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents:
2434
diff
changeset
|
1647 author = relationship('User', lazy='joined') |
2674
a221706dab50
merged + fixed pull request #62: Implemented metatags and visualisation options.
Marcin Kuzminski <marcin@python-works.com>
parents:
2668
diff
changeset
|
1648 reviewers = relationship('PullRequestReviewers', |
2666
c51fb1da6df2
cascade fixes for comments/pull-requests/reviewers
Marcin Kuzminski <marcin@python-works.com>
parents:
2665
diff
changeset
|
1649 cascade="all, delete, delete-orphan") |
2434
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1650 org_repo = relationship('Repository', primaryjoin='PullRequest.org_repo_id==Repository.repo_id') |
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1651 other_repo = relationship('Repository', primaryjoin='PullRequest.other_repo_id==Repository.repo_id') |
2666
c51fb1da6df2
cascade fixes for comments/pull-requests/reviewers
Marcin Kuzminski <marcin@python-works.com>
parents:
2665
diff
changeset
|
1652 statuses = relationship('ChangesetStatus') |
c51fb1da6df2
cascade fixes for comments/pull-requests/reviewers
Marcin Kuzminski <marcin@python-works.com>
parents:
2665
diff
changeset
|
1653 comments = relationship('ChangesetComment', |
c51fb1da6df2
cascade fixes for comments/pull-requests/reviewers
Marcin Kuzminski <marcin@python-works.com>
parents:
2665
diff
changeset
|
1654 cascade="all, delete, delete-orphan") |
2434
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1655 |
2608
58c529332e7e
Added option to close pull requests, in future that will be close & merge
Marcin Kuzminski <marcin@python-works.com>
parents:
2603
diff
changeset
|
1656 def is_closed(self): |
58c529332e7e
Added option to close pull requests, in future that will be close & merge
Marcin Kuzminski <marcin@python-works.com>
parents:
2603
diff
changeset
|
1657 return self.status == self.STATUS_CLOSED |
58c529332e7e
Added option to close pull requests, in future that will be close & merge
Marcin Kuzminski <marcin@python-works.com>
parents:
2603
diff
changeset
|
1658 |
2434
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1659 def __json__(self): |
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1660 return dict( |
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1661 revisions=self.revisions |
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1662 ) |
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1663 |
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1664 |
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1665 class PullRequestReviewers(Base, BaseModel): |
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1666 __tablename__ = 'pull_request_reviewers' |
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1667 __table_args__ = ( |
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1668 {'extend_existing': True, 'mysql_engine': 'InnoDB', |
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1669 'mysql_charset': 'utf8'}, |
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1670 ) |
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1671 |
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1672 def __init__(self, user=None, pull_request=None): |
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1673 self.user = user |
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1674 self.pull_request = pull_request |
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1675 |
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1676 pull_requests_reviewers_id = Column('pull_requests_reviewers_id', Integer(), nullable=False, primary_key=True) |
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1677 pull_request_id = Column("pull_request_id", Integer(), ForeignKey('pull_requests.pull_request_id'), nullable=False) |
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1678 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=True) |
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1679 |
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1680 user = relationship('User') |
f29469677319
Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2430
diff
changeset
|
1681 pull_request = relationship('PullRequest') |
1886 | 1682 |
1703
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1683 |
1702
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1684 class Notification(Base, BaseModel): |
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1685 __tablename__ = 'notifications' |
2149 | 1686 __table_args__ = ( |
2463
b426ecc30319
Added some DB indexes to optimize queries
Marcin Kuzminski <marcin@python-works.com>
parents:
2462
diff
changeset
|
1687 Index('notification_type_idx', 'type'), |
2356
2da7b5984ae5
typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents:
2352
diff
changeset
|
1688 {'extend_existing': True, 'mysql_engine': 'InnoDB', |
2149 | 1689 'mysql_charset': 'utf8'}, |
1690 ) | |
1703
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1691 |
1712
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1703
diff
changeset
|
1692 TYPE_CHANGESET_COMMENT = u'cs_comment' |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1703
diff
changeset
|
1693 TYPE_MESSAGE = u'message' |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1703
diff
changeset
|
1694 TYPE_MENTION = u'mention' |
1731
31e6eb2fb4b2
implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents:
1729
diff
changeset
|
1695 TYPE_REGISTRATION = u'registration' |
2244
77e376fdc4c6
pull requests draft UI
Marcin Kuzminski <marcin@python-works.com>
parents:
2218
diff
changeset
|
1696 TYPE_PULL_REQUEST = u'pull_request' |
2443
fd0a822481ec
- added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents:
2440
diff
changeset
|
1697 TYPE_PULL_REQUEST_COMMENT = u'pull_request_comment' |
1703
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1698 |
1702
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1699 notification_id = Column('notification_id', Integer(), nullable=False, primary_key=True) |
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1700 subject = Column('subject', Unicode(512), nullable=True) |
2588
32dd6896abcf
added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents:
2585
diff
changeset
|
1701 body = Column('body', UnicodeText(50000), nullable=True) |
1703
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1702 created_by = Column("created_by", Integer(), ForeignKey('users.user_id'), nullable=True) |
1702
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1703 created_on = Column('created_on', DateTime(timezone=False), nullable=False, default=datetime.datetime.now) |
1703
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1704 type_ = Column('type', Unicode(256)) |
1702
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1705 |
1712
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1703
diff
changeset
|
1706 created_by_user = relationship('User') |
1717
7ff304d3028f
Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
1716
diff
changeset
|
1707 notifications_to_users = relationship('UserNotification', lazy='joined', |
7ff304d3028f
Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
1716
diff
changeset
|
1708 cascade="all, delete, delete-orphan") |
1702
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1709 |
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1710 @property |
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1711 def recipients(self): |
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1712 return [x.user for x in UserNotification.query()\ |
2248
72542dc597be
fixed issue with empty APIKEYS on registration #438
Marcin Kuzminski <marcin@python-works.com>
parents:
2161
diff
changeset
|
1713 .filter(UserNotification.notification == self)\ |
2585
a52cee88d612
fixed sorting in recipients query of notifications
Marcin Kuzminski <marcin@python-works.com>
parents:
2562
diff
changeset
|
1714 .order_by(UserNotification.user_id.asc()).all()] |
1702
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1715 |
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1716 @classmethod |
1703
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1717 def create(cls, created_by, subject, body, recipients, type_=None): |
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1718 if type_ is None: |
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1719 type_ = Notification.TYPE_MESSAGE |
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1720 |
1702
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1721 notification = cls() |
1712
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1703
diff
changeset
|
1722 notification.created_by_user = created_by |
1702
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1723 notification.subject = subject |
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1724 notification.body = body |
1703
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1725 notification.type_ = type_ |
1717
7ff304d3028f
Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
1716
diff
changeset
|
1726 notification.created_on = datetime.datetime.now() |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
1727 |
1702
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1728 for u in recipients: |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
1729 assoc = UserNotification() |
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
1730 assoc.notification = notification |
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
1731 u.notifications.append(assoc) |
2520
a1e156503afe
Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents:
2510
diff
changeset
|
1732 Session().add(notification) |
1702
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1733 return notification |
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1734 |
1712
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1703
diff
changeset
|
1735 @property |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1703
diff
changeset
|
1736 def description(self): |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1703
diff
changeset
|
1737 from rhodecode.model.notification import NotificationModel |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1703
diff
changeset
|
1738 return NotificationModel().make_description(self) |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1703
diff
changeset
|
1739 |
1800 | 1740 |
1702
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1741 class UserNotification(Base, BaseModel): |
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1742 __tablename__ = 'user_to_notification' |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
1743 __table_args__ = ( |
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
1744 UniqueConstraint('user_id', 'notification_id'), |
2356
2da7b5984ae5
typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents:
2352
diff
changeset
|
1745 {'extend_existing': True, 'mysql_engine': 'InnoDB', |
2149 | 1746 'mysql_charset': 'utf8'} |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
1747 ) |
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
1748 user_id = Column('user_id', Integer(), ForeignKey('users.user_id'), primary_key=True) |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
1749 notification_id = Column("notification_id", Integer(), ForeignKey('notifications.notification_id'), primary_key=True) |
1703
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1750 read = Column('read', Boolean, default=False) |
1702
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1751 sent_on = Column('sent_on', DateTime(timezone=False), nullable=True, unique=None) |
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1752 |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
1753 user = relationship('User', lazy="joined") |
1717
7ff304d3028f
Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
1716
diff
changeset
|
1754 notification = relationship('Notification', lazy="joined", |
1960
3daa7093fbbb
fix typo in db models
Marcin Kuzminski <marcin@python-works.com>
parents:
1958
diff
changeset
|
1755 order_by=lambda: Notification.created_on.desc(),) |
1702
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1756 |
1712
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1703
diff
changeset
|
1757 def mark_as_read(self): |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1703
diff
changeset
|
1758 self.read = True |
2520
a1e156503afe
Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents:
2510
diff
changeset
|
1759 Session().add(self) |
1702
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1760 |
1800 | 1761 |
1593 | 1762 class DbMigrateVersion(Base, BaseModel): |
834
8924ed0e4f36
added current db version into rhodecode,
Marcin Kuzminski <marcin@python-works.com>
parents:
832
diff
changeset
|
1763 __tablename__ = 'db_migrate_version' |
2149 | 1764 __table_args__ = ( |
2356
2da7b5984ae5
typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents:
2352
diff
changeset
|
1765 {'extend_existing': True, 'mysql_engine': 'InnoDB', |
2149 | 1766 'mysql_charset': 'utf8'}, |
1767 ) | |
1594 | 1768 repository_id = Column('repository_id', String(250), primary_key=True) |
1593 | 1769 repository_path = Column('repository_path', Text) |
1770 version = Column('version', Integer) |