annotate rhodecode/model/db.py @ 2937:d439d408b415 beta

Update last_change from VCS data on request. - lightweight dashboard shows now last_date also taken from db and it is fast !
author Marcin Kuzminski <marcin@python-works.com>
date Thu, 18 Oct 2012 20:54:25 +0200
parents 62e493c7f436
children f53faff4487e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
4ecb2ffcc110 fixed imports
Marcin Kuzminski <marcin@python-works.com>
parents: 657
diff changeset
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
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
36 from sqlalchemy.orm import relationship, joinedload, class_mapper, validates
2357
ea079c9b62b5 merge with beta
Marcin Kuzminski <marcin@python-works.com>
parents: 2346 2356
diff changeset
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
8ecfed1d8f8b utils/conf
Marcin Kuzminski <marcin@python-works.com>
parents: 2079
diff changeset
48 from rhodecode.lib.utils2 import str2bool, safe_str, get_changeset_safe, \
8ecfed1d8f8b utils/conf
Marcin Kuzminski <marcin@python-works.com>
parents: 2079
diff changeset
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
256e729a94cd Extended API
Marcin Kuzminski <marcin@python-works.com>
parents: 1466
diff changeset
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
256e729a94cd Extended API
Marcin Kuzminski <marcin@python-works.com>
parents: 1466
diff changeset
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
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
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
6c86c987cf93 pep8ify
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
64
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
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
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
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
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
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
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
82 d[k] = getattr(self, k)
1800
6c86c987cf93 pep8ify
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
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
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
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
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
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
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
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
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
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
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
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
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
115 def get(cls, id_):
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
116 if id_:
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
117 return cls.query().get(id_)
1466
ad5a543a9b2f Code cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1460
diff changeset
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
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
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
ad5a543a9b2f Code cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1460
diff changeset
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
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
132 def delete(cls, id_):
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
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
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
148 'mysql_charset': 'utf8'}
1958
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
149 )
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
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
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
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
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
158 @validates('_app_settings_value')
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
159 def validate_settings_value(self, key, val):
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
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
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
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
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
167 v = str2bool(v)
1591
0b63a0d2cede Merge with upstream
Nicolas VINOT <aeris@imirhil.fr>
parents: 1576 1590
diff changeset
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
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
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
0b63a0d2cede Merge with upstream
Nicolas VINOT <aeris@imirhil.fr>
parents: 1576 1590
diff changeset
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
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
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
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
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
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
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
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
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
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
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
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
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
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
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
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
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
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
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
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
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
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
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
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
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
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
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
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
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
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
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
2821
9c90be87ae05 fixed issue #560 require push ssl checkbox wasn't shown when option was enabled
Marcin Kuzminski <marcin@python-works.com>
parents: 2809
diff changeset
281 def __repr__(self):
9c90be87ae05 fixed issue #560 require push ssl checkbox wasn't shown when option was enabled
Marcin Kuzminski <marcin@python-works.com>
parents: 2809
diff changeset
282 return '<DB:%s[%s:%s]>' % (self.__class__.__name__, self.ui_key,
9c90be87ae05 fixed issue #560 require push ssl checkbox wasn't shown when option was enabled
Marcin Kuzminski <marcin@python-works.com>
parents: 2809
diff changeset
283 self.ui_value)
9c90be87ae05 fixed issue #560 require push ssl checkbox wasn't shown when option was enabled
Marcin Kuzminski <marcin@python-works.com>
parents: 2809
diff changeset
284
1460
b50348816a80 Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents: 1436
diff changeset
285
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
286 class User(Base, BaseModel):
49
3ada2f409c1c Added sqlalchemy support
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
287 __tablename__ = 'users'
1958
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
288 __table_args__ = (
1963
9bbde54232dc white space cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1960
diff changeset
289 UniqueConstraint('username'), UniqueConstraint('email'),
2726
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
290 Index('u_username_idx', 'username'),
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
291 Index('u_email_idx', 'email'),
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
292 {'extend_existing': True, 'mysql_engine': 'InnoDB',
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
293 'mysql_charset': 'utf8'}
1958
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
294 )
2726
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
295 DEFAULT_USER = 'default'
2798
091e99b29fd4 auto-healing of permissions for default user after upgrading from some old versions.
Marcin Kuzminski <marcin@python-works.com>
parents: 2797
diff changeset
296 DEFAULT_PERMISSIONS = [
091e99b29fd4 auto-healing of permissions for default user after upgrading from some old versions.
Marcin Kuzminski <marcin@python-works.com>
parents: 2797
diff changeset
297 'hg.register.manual_activate', 'hg.create.repository',
091e99b29fd4 auto-healing of permissions for default user after upgrading from some old versions.
Marcin Kuzminski <marcin@python-works.com>
parents: 2797
diff changeset
298 'hg.fork.repository', 'repository.read'
091e99b29fd4 auto-healing of permissions for default user after upgrading from some old versions.
Marcin Kuzminski <marcin@python-works.com>
parents: 2797
diff changeset
299 ]
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
300 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
301 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
302 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
303 active = Column("active", Boolean(), nullable=True, unique=None, default=True)
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
304 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
305 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
306 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
307 _email = Column("email", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
308 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
309 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
310 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
311 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
312
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
313 user_log = relationship('UserLog', cascade='all')
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
314 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
315
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
316 repositories = relationship('Repository')
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
317 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
318 repo_to_perm = relationship('UserRepoToPerm', primaryjoin='UserRepoToPerm.user_id==User.user_id', cascade='all')
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
319 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
320
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
321 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
322
2157
6a2c0cfb018d Cascade delete comments and notifications when removing user.
Marcin Kuzminski <marcin@python-works.com>
parents: 2156
diff changeset
323 notifications = relationship('UserNotification', cascade='all')
6a2c0cfb018d Cascade delete comments and notifications when removing user.
Marcin Kuzminski <marcin@python-works.com>
parents: 2156
diff changeset
324 # notifications assigned to this user
6a2c0cfb018d Cascade delete comments and notifications when removing user.
Marcin Kuzminski <marcin@python-works.com>
parents: 2156
diff changeset
325 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
326 # comments created by this user
6a2c0cfb018d Cascade delete comments and notifications when removing user.
Marcin Kuzminski <marcin@python-works.com>
parents: 2156
diff changeset
327 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
328 #extra emails for this user
78f96d7bb23b cascade delete extra emails on user delete
Marcin Kuzminski <marcin@python-works.com>
parents: 2544
diff changeset
329 user_emails = relationship('UserEmailMap', cascade='all')
1702
8cb7f5c4d494 #302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents: 1693
diff changeset
330
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
331 @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
332 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
333 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
334
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
335 @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
336 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
337 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
338
759
a7f50911a945 Models code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 734
diff changeset
339 @property
2731
09d8fec02954 Implemented #532.
Marcin Kuzminski <marcin@python-works.com>
parents: 2726
diff changeset
340 def firstname(self):
09d8fec02954 Implemented #532.
Marcin Kuzminski <marcin@python-works.com>
parents: 2726
diff changeset
341 # alias for future
09d8fec02954 Implemented #532.
Marcin Kuzminski <marcin@python-works.com>
parents: 2726
diff changeset
342 return self.name
09d8fec02954 Implemented #532.
Marcin Kuzminski <marcin@python-works.com>
parents: 2726
diff changeset
343
09d8fec02954 Implemented #532.
Marcin Kuzminski <marcin@python-works.com>
parents: 2726
diff changeset
344 @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
345 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
346 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
347 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
348
7e3e9d0c5575 Add list of all emails that user may have into get_user call
Marcin Kuzminski <marcin@python-works.com>
parents: 2496
diff changeset
349 @property
2731
09d8fec02954 Implemented #532.
Marcin Kuzminski <marcin@python-works.com>
parents: 2726
diff changeset
350 def username_and_name(self):
09d8fec02954 Implemented #532.
Marcin Kuzminski <marcin@python-works.com>
parents: 2726
diff changeset
351 return '%s (%s %s)' % (self.username, self.firstname, self.lastname)
09d8fec02954 Implemented #532.
Marcin Kuzminski <marcin@python-works.com>
parents: 2726
diff changeset
352
09d8fec02954 Implemented #532.
Marcin Kuzminski <marcin@python-works.com>
parents: 2726
diff changeset
353 @property
1731
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
354 def full_name(self):
2731
09d8fec02954 Implemented #532.
Marcin Kuzminski <marcin@python-works.com>
parents: 2726
diff changeset
355 return '%s %s' % (self.firstname, self.lastname)
1731
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
356
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
357 @property
1950
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1948
diff changeset
358 def full_name_or_username(self):
2731
09d8fec02954 Implemented #532.
Marcin Kuzminski <marcin@python-works.com>
parents: 2726
diff changeset
359 return ('%s %s' % (self.firstname, self.lastname)
09d8fec02954 Implemented #532.
Marcin Kuzminski <marcin@python-works.com>
parents: 2726
diff changeset
360 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
361
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1948
diff changeset
362 @property
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
363 def full_contact(self):
2731
09d8fec02954 Implemented #532.
Marcin Kuzminski <marcin@python-works.com>
parents: 2726
diff changeset
364 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
365
895
62c04c5cc971 Added some more details into user edit permissions view
Marcin Kuzminski <marcin@python-works.com>
parents: 880
diff changeset
366 @property
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
367 def short_contact(self):
2731
09d8fec02954 Implemented #532.
Marcin Kuzminski <marcin@python-works.com>
parents: 2726
diff changeset
368 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
369
fee472613dfa made simple global rss and atom feed
Marcin Kuzminski <marcin@python-works.com>
parents: 1081
diff changeset
370 @property
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
371 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
372 return self.admin
62c04c5cc971 Added some more details into user edit permissions view
Marcin Kuzminski <marcin@python-works.com>
parents: 880
diff changeset
373
2156
a27e4d44237e Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents: 2152
diff changeset
374 def __unicode__(self):
a27e4d44237e Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents: 2152
diff changeset
375 return u"<%s('id:%s:%s')>" % (self.__class__.__name__,
1712
cac5109ac3b6 Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1703
diff changeset
376 self.user_id, self.username)
cac5109ac3b6 Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1703
diff changeset
377
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
378 @classmethod
1665
36f77a46f291 Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents: 1634
diff changeset
379 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
380 if case_insensitive:
1665
36f77a46f291 Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents: 1634
diff changeset
381 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
382 else:
1665
36f77a46f291 Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents: 1634
diff changeset
383 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
384
36f77a46f291 Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents: 1634
diff changeset
385 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
386 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
387 "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
388 "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
389 )
bf8ed0adbc66 fixes #371 fixed issues with beaker/sqlalchemy and non-ascii cache keys
Marcin Kuzminski <marcin@python-works.com>
parents: 2058
diff changeset
390 )
1665
36f77a46f291 Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents: 1634
diff changeset
391 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
392
1417
5875955def39 fixes #223 improve password reset form
Marcin Kuzminski <marcin@python-works.com>
parents: 1401
diff changeset
393 @classmethod
1665
36f77a46f291 Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents: 1634
diff changeset
394 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
395 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
396
36f77a46f291 Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents: 1634
diff changeset
397 if cache:
36f77a46f291 Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents: 1634
diff changeset
398 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
399 "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
400 return q.scalar()
1417
5875955def39 fixes #223 improve password reset form
Marcin Kuzminski <marcin@python-works.com>
parents: 1401
diff changeset
401
1716
7d1fc253549e notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents: 1713
diff changeset
402 @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
403 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
404 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
405 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
406 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
407 q = cls.query().filter(cls.email == email)
1716
7d1fc253549e notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents: 1713
diff changeset
408
7d1fc253549e notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents: 1713
diff changeset
409 if cache:
7d1fc253549e notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents: 1713
diff changeset
410 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
411 "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
412
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
413 ret = q.scalar()
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
414 if ret is None:
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
415 q = UserEmailMap.query()
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
416 # 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
417 if case_insensitive:
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
418 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
419 else:
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
420 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
421 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
422 if cache:
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
423 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
424 "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
425 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
426
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
427 return ret
1716
7d1fc253549e notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents: 1713
diff changeset
428
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
429 def update_lastlogin(self):
442
d66a7fa7689b moved loged in user propagation out of forms,
Marcin Kuzminski <marcin@python-works.com>
parents: 417
diff changeset
430 """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
431 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
432 Session().add(self)
1976
Marcin Kuzminski <marcin@python-works.com>
parents: 1963
diff changeset
433 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
434
2508
43cb5b6047fd Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents: 2506
diff changeset
435 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
436 """
43cb5b6047fd Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents: 2506
diff changeset
437 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
438 """
43cb5b6047fd Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents: 2506
diff changeset
439 user = self
43cb5b6047fd Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents: 2506
diff changeset
440 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
441 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
442 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
443 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
444 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
445 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
446 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
447 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
448 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
449 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
450 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
451 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
452 )
43cb5b6047fd Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents: 2506
diff changeset
453 return data
43cb5b6047fd Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents: 2506
diff changeset
454
1758
a87aa385f21c fixed repo_create permission by adding missing commit statements
Marcin Kuzminski <marcin@python-works.com>
parents: 1757
diff changeset
455 def __json__(self):
2544
6ce3387bf0ce Renamed name to firstname in forms
Marcin Kuzminski <marcin@python-works.com>
parents: 2542
diff changeset
456 data = dict(
1950
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1948
diff changeset
457 full_name=self.full_name,
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1948
diff changeset
458 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
459 short_contact=self.short_contact,
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1948
diff changeset
460 full_contact=self.full_contact
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1948
diff changeset
461 )
2544
6ce3387bf0ce Renamed name to firstname in forms
Marcin Kuzminski <marcin@python-works.com>
parents: 2542
diff changeset
462 data.update(self.get_api_data())
6ce3387bf0ce Renamed name to firstname in forms
Marcin Kuzminski <marcin@python-works.com>
parents: 2542
diff changeset
463 return data
1758
a87aa385f21c fixed repo_create permission by adding missing commit statements
Marcin Kuzminski <marcin@python-works.com>
parents: 1757
diff changeset
464
a87aa385f21c fixed repo_create permission by adding missing commit statements
Marcin Kuzminski <marcin@python-works.com>
parents: 1757
diff changeset
465
2329
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
466 class UserEmailMap(Base, BaseModel):
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
467 __tablename__ = 'user_email_map'
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
468 __table_args__ = (
2463
b426ecc30319 Added some DB indexes to optimize queries
Marcin Kuzminski <marcin@python-works.com>
parents: 2462
diff changeset
469 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
470 UniqueConstraint('email'),
2463
b426ecc30319 Added some DB indexes to optimize queries
Marcin Kuzminski <marcin@python-works.com>
parents: 2462
diff changeset
471 {'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
472 'mysql_charset': 'utf8'}
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 __mapper_args__ = {}
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
475
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
476 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
477 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
478 _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
479 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
480
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
481 @validates('_email')
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
482 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
483 # 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
484 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
485 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
486 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
487 return email
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
488
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
489 @hybrid_property
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
490 def email(self):
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
491 return self._email
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
492
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
493 @email.setter
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
494 def email(self, val):
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
495 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
496
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
497
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
498 class UserLog(Base, BaseModel):
49
3ada2f409c1c Added sqlalchemy support
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
499 __tablename__ = 'user_logs'
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
500 __table_args__ = (
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
501 {'extend_existing': True, 'mysql_engine': 'InnoDB',
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
502 'mysql_charset': 'utf8'},
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
503 )
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
504 user_log_id = Column("user_log_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
505 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
506 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
507 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
508 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
509 action = Column("action", UnicodeText(1200000, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
510 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
511
994
7f9d23f6a526 Added grouping by days in journal
Marcin Kuzminski <marcin@python-works.com>
parents: 991
diff changeset
512 @property
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
513 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
514 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
515
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
516 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
517 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
518
956
83d35d716a02 started working on issue #56
Marcin Kuzminski <marcin@python-works.com>
parents: 907
diff changeset
519
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
520 class UsersGroup(Base, BaseModel):
956
83d35d716a02 started working on issue #56
Marcin Kuzminski <marcin@python-works.com>
parents: 907
diff changeset
521 __tablename__ = 'users_groups'
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
522 __table_args__ = (
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
523 {'extend_existing': True, 'mysql_engine': 'InnoDB',
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
524 'mysql_charset': 'utf8'},
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
525 )
956
83d35d716a02 started working on issue #56
Marcin Kuzminski <marcin@python-works.com>
parents: 907
diff changeset
526
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
527 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
528 users_group_name = Column("users_group_name", String(255, convert_unicode=False, assert_unicode=None), nullable=False, unique=True, default=None)
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
529 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
530 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
531
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
532 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
533 users_group_to_perm = relationship('UsersGroupToPerm', cascade='all')
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
534 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
535
2156
a27e4d44237e Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents: 2152
diff changeset
536 def __unicode__(self):
a27e4d44237e Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents: 2152
diff changeset
537 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
538
aa7e45ad0cea Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents: 1266
diff changeset
539 @classmethod
1728
07e56179633e - fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents: 1727
diff changeset
540 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
541 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
542 if case_insensitive:
1728
07e56179633e - fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents: 1727
diff changeset
543 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
544 else:
1728
07e56179633e - fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents: 1727
diff changeset
545 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
546 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
547 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
548 "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
549 "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
550 )
bf8ed0adbc66 fixes #371 fixed issues with beaker/sqlalchemy and non-ascii cache keys
Marcin Kuzminski <marcin@python-works.com>
parents: 2058
diff changeset
551 )
1728
07e56179633e - fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents: 1727
diff changeset
552 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
553
1436
88d13c1c6a55 removed users_group controller in replace for model methods,
Marcin Kuzminski <marcin@python-works.com>
parents: 1435
diff changeset
554 @classmethod
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
555 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
556 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
557 if cache:
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
558 users_group = users_group.options(FromCache("sql_cache_short",
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
559 "get_users_group_%s" % users_group_id))
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
560 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
561
2523
788ae4f7d8df added get_api_data into UsersGroup
Marcin Kuzminski <marcin@python-works.com>
parents: 2520
diff changeset
562 def get_api_data(self):
788ae4f7d8df added get_api_data into UsersGroup
Marcin Kuzminski <marcin@python-works.com>
parents: 2520
diff changeset
563 users_group = self
788ae4f7d8df added get_api_data into UsersGroup
Marcin Kuzminski <marcin@python-works.com>
parents: 2520
diff changeset
564
788ae4f7d8df added get_api_data into UsersGroup
Marcin Kuzminski <marcin@python-works.com>
parents: 2520
diff changeset
565 data = dict(
2531
d80a68e2ebcc return proper id from users_group
Marcin Kuzminski <marcin@python-works.com>
parents: 2523
diff changeset
566 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
567 group_name=users_group.users_group_name,
788ae4f7d8df added get_api_data into UsersGroup
Marcin Kuzminski <marcin@python-works.com>
parents: 2520
diff changeset
568 active=users_group.users_group_active,
788ae4f7d8df added get_api_data into UsersGroup
Marcin Kuzminski <marcin@python-works.com>
parents: 2520
diff changeset
569 )
788ae4f7d8df added get_api_data into UsersGroup
Marcin Kuzminski <marcin@python-works.com>
parents: 2520
diff changeset
570
788ae4f7d8df added get_api_data into UsersGroup
Marcin Kuzminski <marcin@python-works.com>
parents: 2520
diff changeset
571 return data
788ae4f7d8df added get_api_data into UsersGroup
Marcin Kuzminski <marcin@python-works.com>
parents: 2520
diff changeset
572
1800
6c86c987cf93 pep8ify
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
573
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
574 class UsersGroupMember(Base, BaseModel):
956
83d35d716a02 started working on issue #56
Marcin Kuzminski <marcin@python-works.com>
parents: 907
diff changeset
575 __tablename__ = 'users_groups_members'
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
576 __table_args__ = (
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
577 {'extend_existing': True, 'mysql_engine': 'InnoDB',
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
578 'mysql_charset': 'utf8'},
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
579 )
956
83d35d716a02 started working on issue #56
Marcin Kuzminski <marcin@python-works.com>
parents: 907
diff changeset
580
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
581 users_group_member_id = Column("users_group_member_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
582 users_group_id = Column("users_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None)
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
583 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
584
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
585 user = relationship('User', lazy='joined')
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
586 users_group = relationship('UsersGroup')
972
2c8fd84935a4 #56 implemented users groups editing,
Marcin Kuzminski <marcin@python-works.com>
parents: 962
diff changeset
587
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
588 def __init__(self, gr_id='', u_id=''):
972
2c8fd84935a4 #56 implemented users groups editing,
Marcin Kuzminski <marcin@python-works.com>
parents: 962
diff changeset
589 self.users_group_id = gr_id
2c8fd84935a4 #56 implemented users groups editing,
Marcin Kuzminski <marcin@python-works.com>
parents: 962
diff changeset
590 self.user_id = u_id
956
83d35d716a02 started working on issue #56
Marcin Kuzminski <marcin@python-works.com>
parents: 907
diff changeset
591
2013
8530c3cd9d04 fixed issue with hybrid property for ldap_active
Marcin Kuzminski <marcin@python-works.com>
parents: 2007
diff changeset
592
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
593 class Repository(Base, BaseModel):
234
a0116e944da1 changed naming convention for db modules.
Marcin Kuzminski <marcin@python-works.com>
parents: 232
diff changeset
594 __tablename__ = 'repositories'
1958
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
595 __table_args__ = (
1963
9bbde54232dc white space cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1960
diff changeset
596 UniqueConstraint('repo_name'),
2726
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
597 Index('r_repo_name_idx', 'repo_name'),
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
598 {'extend_existing': True, 'mysql_engine': 'InnoDB',
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
599 'mysql_charset': 'utf8'},
1958
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
600 )
1081
70bf0be59653 fixed Session problems in model class functions
Marcin Kuzminski <marcin@python-works.com>
parents: 1065
diff changeset
601
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
602 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
603 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
604 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
605 repo_type = Column("repo_type", String(255, convert_unicode=False, assert_unicode=None), nullable=False, unique=False, default=None)
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
606 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=False, default=None)
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
607 private = Column("private", Boolean(), nullable=True, unique=None, default=None)
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
608 enable_statistics = Column("statistics", Boolean(), nullable=True, unique=None, default=True)
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
609 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
610 description = Column("description", String(10000, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
611 created_on = Column('created_on', DateTime(timezone=False), nullable=True, unique=None, default=datetime.datetime.now)
2797
c9baaacb670a Remove null from revision column as for comments inside pull requests to work properly
Marcin Kuzminski <marcin@python-works.com>
parents: 2791
diff changeset
612 updated_on = Column('updated_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
613 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
614 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
615 _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
616
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
617 fork_id = Column("fork_id", Integer(), ForeignKey('repositories.repo_id'), nullable=True, unique=False, default=None)
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
618 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
619
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
620 user = relationship('User')
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
621 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
622 group = relationship('RepoGroup')
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1607
diff changeset
623 repo_to_perm = relationship('UserRepoToPerm', cascade='all', order_by='UserRepoToPerm.repo_to_perm_id')
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
624 users_group_to_perm = relationship('UsersGroupRepoToPerm', cascade='all')
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
625 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
626
2674
a221706dab50 merged + fixed pull request #62: Implemented metatags and visualisation options.
Marcin Kuzminski <marcin@python-works.com>
parents: 2668
diff changeset
627 followers = relationship('UserFollowing',
a221706dab50 merged + fixed pull request #62: Implemented metatags and visualisation options.
Marcin Kuzminski <marcin@python-works.com>
parents: 2668
diff changeset
628 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
629 cascade='all')
734
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 713
diff changeset
630
1747
8804715404c9 implements #193 journal stores information about deleting of repos
Marcin Kuzminski <marcin@python-works.com>
parents: 1744
diff changeset
631 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
632 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
633
2666
c51fb1da6df2 cascade fixes for comments/pull-requests/reviewers
Marcin Kuzminski <marcin@python-works.com>
parents: 2665
diff changeset
634 pull_requests_org = relationship('PullRequest',
c51fb1da6df2 cascade fixes for comments/pull-requests/reviewers
Marcin Kuzminski <marcin@python-works.com>
parents: 2665
diff changeset
635 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
636 cascade="all, delete, delete-orphan")
c51fb1da6df2 cascade fixes for comments/pull-requests/reviewers
Marcin Kuzminski <marcin@python-works.com>
parents: 2665
diff changeset
637
c51fb1da6df2 cascade fixes for comments/pull-requests/reviewers
Marcin Kuzminski <marcin@python-works.com>
parents: 2665
diff changeset
638 pull_requests_other = relationship('PullRequest',
c51fb1da6df2 cascade fixes for comments/pull-requests/reviewers
Marcin Kuzminski <marcin@python-works.com>
parents: 2665
diff changeset
639 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
640 cascade="all, delete, delete-orphan")
c51fb1da6df2 cascade fixes for comments/pull-requests/reviewers
Marcin Kuzminski <marcin@python-works.com>
parents: 2665
diff changeset
641
2156
a27e4d44237e Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents: 2152
diff changeset
642 def __unicode__(self):
2459
9492ab68331f Initial version of landing revisions ref #483
Marcin Kuzminski <marcin@python-works.com>
parents: 2407
diff changeset
643 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
644 self.repo_name)
878
859bc9e7a15d Extended repo2db mapper with group creation via directory structures
Marcin Kuzminski <marcin@python-works.com>
parents: 836
diff changeset
645
2726
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
646 @hybrid_property
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
647 def locked(self):
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
648 # always should return [user_id, timelocked]
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
649 if self._locked:
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
650 _lock_info = self._locked.split(':')
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
651 return int(_lock_info[0]), _lock_info[1]
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
652 return [None, None]
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
653
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
654 @locked.setter
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
655 def locked(self, val):
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
656 if val and isinstance(val, (list, tuple)):
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
657 self._locked = ':'.join(map(str, val))
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
658 else:
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
659 self._locked = None
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
660
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
661 @classmethod
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
662 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
663 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
664
1554
e7c6341ad3cb fixes #245 Rescan of the repositories on Windows
Marcin Kuzminski <marcin@python-works.com>
parents: 1547
diff changeset
665 @classmethod
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
666 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
667 q = Session().query(cls).filter(cls.repo_name == repo_name)
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
668 q = q.options(joinedload(Repository.fork))\
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
669 .options(joinedload(Repository.user))\
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
670 .options(joinedload(Repository.group))
1749
8ecc6b8229a5 commit less models
Marcin Kuzminski <marcin@python-works.com>
parents: 1747
diff changeset
671 return q.scalar()
1301
7e75af301842 Added simple forks page, resolves issue #179
Marcin Kuzminski <marcin@python-works.com>
parents: 1292
diff changeset
672
7e75af301842 Added simple forks page, resolves issue #179
Marcin Kuzminski <marcin@python-works.com>
parents: 1292
diff changeset
673 @classmethod
2400
e87c6aa9c5e7 Add method for fetching repos by full path
Marcin Kuzminski <marcin@python-works.com>
parents: 2356
diff changeset
674 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
675 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
676 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
677
e87c6aa9c5e7 Add method for fetching repos by full path
Marcin Kuzminski <marcin@python-works.com>
parents: 2356
diff changeset
678 @classmethod
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
679 def get_repo_forks(cls, repo_id):
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
680 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
681
1508
4aba7be311e8 API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents: 1500
diff changeset
682 @classmethod
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
683 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
684 """
4aba7be311e8 API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents: 1500
diff changeset
685 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
686
1508
4aba7be311e8 API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents: 1500
diff changeset
687 :param cls:
4aba7be311e8 API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents: 1500
diff changeset
688 """
2520
a1e156503afe Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents: 2510
diff changeset
689 q = Session().query(RhodeCodeUi)\
1728
07e56179633e - fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents: 1727
diff changeset
690 .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
691 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
692 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
693
1113
c1eda8ec4a46 added clone_uri,api_key into models. Fixed models for mysql compatibilty
Marcin Kuzminski <marcin@python-works.com>
parents: 1088
diff changeset
694 @property
2395
b262e349a7a5 created pull-request overview
Marcin Kuzminski <marcin@python-works.com>
parents: 2392
diff changeset
695 def forks(self):
b262e349a7a5 created pull-request overview
Marcin Kuzminski <marcin@python-works.com>
parents: 2392
diff changeset
696 """
b262e349a7a5 created pull-request overview
Marcin Kuzminski <marcin@python-works.com>
parents: 2392
diff changeset
697 Return forks of this repo
b262e349a7a5 created pull-request overview
Marcin Kuzminski <marcin@python-works.com>
parents: 2392
diff changeset
698 """
b262e349a7a5 created pull-request overview
Marcin Kuzminski <marcin@python-works.com>
parents: 2392
diff changeset
699 return Repository.get_repo_forks(self.repo_id)
b262e349a7a5 created pull-request overview
Marcin Kuzminski <marcin@python-works.com>
parents: 2392
diff changeset
700
b262e349a7a5 created pull-request overview
Marcin Kuzminski <marcin@python-works.com>
parents: 2392
diff changeset
701 @property
b262e349a7a5 created pull-request overview
Marcin Kuzminski <marcin@python-works.com>
parents: 2392
diff changeset
702 def parent(self):
b262e349a7a5 created pull-request overview
Marcin Kuzminski <marcin@python-works.com>
parents: 2392
diff changeset
703 """
b262e349a7a5 created pull-request overview
Marcin Kuzminski <marcin@python-works.com>
parents: 2392
diff changeset
704 Returns fork parent
b262e349a7a5 created pull-request overview
Marcin Kuzminski <marcin@python-works.com>
parents: 2392
diff changeset
705 """
b262e349a7a5 created pull-request overview
Marcin Kuzminski <marcin@python-works.com>
parents: 2392
diff changeset
706 return self.fork
b262e349a7a5 created pull-request overview
Marcin Kuzminski <marcin@python-works.com>
parents: 2392
diff changeset
707
b262e349a7a5 created pull-request overview
Marcin Kuzminski <marcin@python-works.com>
parents: 2392
diff changeset
708 @property
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
709 def just_name(self):
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
710 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
711
37a9421f32a0 Added handy methods to Repository model for fetching groups with parents
Marcin Kuzminski <marcin@python-works.com>
parents: 1113
diff changeset
712 @property
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
713 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
714 groups = []
37a9421f32a0 Added handy methods to Repository model for fetching groups with parents
Marcin Kuzminski <marcin@python-works.com>
parents: 1113
diff changeset
715 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
716 return groups
37a9421f32a0 Added handy methods to Repository model for fetching groups with parents
Marcin Kuzminski <marcin@python-works.com>
parents: 1113
diff changeset
717
37a9421f32a0 Added handy methods to Repository model for fetching groups with parents
Marcin Kuzminski <marcin@python-works.com>
parents: 1113
diff changeset
718 cur_gr = self.group
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
719 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
720 while 1:
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
721 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
722 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
723 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
724 break
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
725 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
726
37a9421f32a0 Added handy methods to Repository model for fetching groups with parents
Marcin Kuzminski <marcin@python-works.com>
parents: 1113
diff changeset
727 return groups
37a9421f32a0 Added handy methods to Repository model for fetching groups with parents
Marcin Kuzminski <marcin@python-works.com>
parents: 1113
diff changeset
728
37a9421f32a0 Added handy methods to Repository model for fetching groups with parents
Marcin Kuzminski <marcin@python-works.com>
parents: 1113
diff changeset
729 @property
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
730 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
731 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
732
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
733 @LazyProperty
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
734 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
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 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
737 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
738 """
2520
a1e156503afe Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents: 2510
diff changeset
739 q = Session().query(RhodeCodeUi).filter(RhodeCodeUi.ui_key ==
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
740 Repository.url_sep())
1727
8e9f51091229 fixed caching query on repos path
Marcin Kuzminski <marcin@python-works.com>
parents: 1723
diff changeset
741 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
742 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
743
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 @property
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
745 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
746 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
747 # 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
748 # 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
749 # into a valid system path
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
750 p += self.repo_name.split(Repository.url_sep())
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
751 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
752
2809
070d2eacd48b Show cache keys in admin settings of repository
Marcin Kuzminski <marcin@python-works.com>
parents: 2808
diff changeset
753 @property
070d2eacd48b Show cache keys in admin settings of repository
Marcin Kuzminski <marcin@python-works.com>
parents: 2808
diff changeset
754 def cache_keys(self):
070d2eacd48b Show cache keys in admin settings of repository
Marcin Kuzminski <marcin@python-works.com>
parents: 2808
diff changeset
755 """
070d2eacd48b Show cache keys in admin settings of repository
Marcin Kuzminski <marcin@python-works.com>
parents: 2808
diff changeset
756 Returns associated cache keys for that repo
070d2eacd48b Show cache keys in admin settings of repository
Marcin Kuzminski <marcin@python-works.com>
parents: 2808
diff changeset
757 """
070d2eacd48b Show cache keys in admin settings of repository
Marcin Kuzminski <marcin@python-works.com>
parents: 2808
diff changeset
758 return CacheInvalidation.query()\
070d2eacd48b Show cache keys in admin settings of repository
Marcin Kuzminski <marcin@python-works.com>
parents: 2808
diff changeset
759 .filter(CacheInvalidation.cache_args == self.repo_name)\
070d2eacd48b Show cache keys in admin settings of repository
Marcin Kuzminski <marcin@python-works.com>
parents: 2808
diff changeset
760 .order_by(CacheInvalidation.cache_key)\
070d2eacd48b Show cache keys in admin settings of repository
Marcin Kuzminski <marcin@python-works.com>
parents: 2808
diff changeset
761 .all()
070d2eacd48b Show cache keys in admin settings of repository
Marcin Kuzminski <marcin@python-works.com>
parents: 2808
diff changeset
762
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
763 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
764 """
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
765 returns new full repository name based on assigned group and new new
1591
0b63a0d2cede Merge with upstream
Nicolas VINOT <aeris@imirhil.fr>
parents: 1576 1590
diff changeset
766
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
767 :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
768 """
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
769 path_prefix = self.group.full_path_splitted if self.group else []
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
770 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
771
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
772 @property
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
773 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
774 """
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
775 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
776 """
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
777 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
778 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
779 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
780
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 #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
782 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
783 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
784 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
785
1584
3338a0994472 Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents: 1508
diff changeset
786 ret = RhodeCodeUi.query()\
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
787 .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
788
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
789 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
790 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
791 if ui_.ui_active:
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
792 log.debug('settings ui from db[%s]%s:%s', ui_.ui_section,
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
793 ui_.ui_key, ui_.ui_value)
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
794 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
795 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
796 # 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
797 # handles that
2726
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
798 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
799
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
800 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
801
1508
4aba7be311e8 API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents: 1500
diff changeset
802 @classmethod
2520
a1e156503afe Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents: 2510
diff changeset
803 def inject_ui(cls, repo, extras={}):
a1e156503afe Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents: 2510
diff changeset
804 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
805 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
806 required = (MercurialRepository, GitRepository)
a1e156503afe Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents: 2510
diff changeset
807 if not isinstance(repo, required):
a1e156503afe Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents: 2510
diff changeset
808 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
809
a1e156503afe Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents: 2510
diff changeset
810 # 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
811 for k, v in extras.items():
a1e156503afe Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents: 2510
diff changeset
812 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
813
a1e156503afe Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents: 2510
diff changeset
814 @classmethod
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
815 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
816 """
4aba7be311e8 API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents: 1500
diff changeset
817 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
818
1819
9451a569aee5 sphinx doc cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
819 :param cls:
9451a569aee5 sphinx doc cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
820 :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
821 """
4aba7be311e8 API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents: 1500
diff changeset
822 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
823
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
824 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
825
2508
43cb5b6047fd Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents: 2506
diff changeset
826 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
827 """
43cb5b6047fd Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents: 2506
diff changeset
828 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
829
43cb5b6047fd Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents: 2506
diff changeset
830 """
43cb5b6047fd Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents: 2506
diff changeset
831 repo = self
43cb5b6047fd Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents: 2506
diff changeset
832 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
833 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
834 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
835 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
836 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
837 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
838 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
839 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
840 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
841 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
842 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
843 )
43cb5b6047fd Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents: 2506
diff changeset
844
43cb5b6047fd Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents: 2506
diff changeset
845 return data
43cb5b6047fd Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents: 2506
diff changeset
846
2726
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
847 @classmethod
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
848 def lock(cls, repo, user_id):
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
849 repo.locked = [user_id, time.time()]
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
850 Session().add(repo)
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
851 Session().commit()
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
852
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
853 @classmethod
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
854 def unlock(cls, repo):
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
855 repo.locked = None
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
856 Session().add(repo)
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
857 Session().commit()
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
858
2936
62e493c7f436 Added lightweight dashboard option. ref #500
Marcin Kuzminski <marcin@python-works.com>
parents: 2835
diff changeset
859 @property
62e493c7f436 Added lightweight dashboard option. ref #500
Marcin Kuzminski <marcin@python-works.com>
parents: 2835
diff changeset
860 def last_db_change(self):
62e493c7f436 Added lightweight dashboard option. ref #500
Marcin Kuzminski <marcin@python-works.com>
parents: 2835
diff changeset
861 return self.updated_on
62e493c7f436 Added lightweight dashboard option. ref #500
Marcin Kuzminski <marcin@python-works.com>
parents: 2835
diff changeset
862
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
863 #==========================================================================
1466
ad5a543a9b2f Code cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1460
diff changeset
864 # SCM PROPERTIES
ad5a543a9b2f Code cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1460
diff changeset
865 #==========================================================================
ad5a543a9b2f Code cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1460
diff changeset
866
2251
986430cde505 fixed issue with getting README files from git repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 2248
diff changeset
867 def get_changeset(self, rev=None):
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
868 return get_changeset_safe(self.scm_instance, rev)
1466
ad5a543a9b2f Code cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1460
diff changeset
869
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
870 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
871 """
370ed7829168 Readme renderer now uses landing_rev parameter to render the readme based on
Marcin Kuzminski <marcin@python-works.com>
parents: 2588
diff changeset
872 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
873 """
370ed7829168 Readme renderer now uses landing_rev parameter to render the readme based on
Marcin Kuzminski <marcin@python-works.com>
parents: 2588
diff changeset
874 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
875 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
876
2937
d439d408b415 Update last_change from VCS data on request.
Marcin Kuzminski <marcin@python-works.com>
parents: 2936
diff changeset
877 def update_last_change(self, last_change=None):
d439d408b415 Update last_change from VCS data on request.
Marcin Kuzminski <marcin@python-works.com>
parents: 2936
diff changeset
878 if last_change is None:
d439d408b415 Update last_change from VCS data on request.
Marcin Kuzminski <marcin@python-works.com>
parents: 2936
diff changeset
879 last_change = datetime.datetime.now()
d439d408b415 Update last_change from VCS data on request.
Marcin Kuzminski <marcin@python-works.com>
parents: 2936
diff changeset
880 if self.updated_on is None or self.updated_on != last_change:
d439d408b415 Update last_change from VCS data on request.
Marcin Kuzminski <marcin@python-works.com>
parents: 2936
diff changeset
881 log.debug('updated repo %s with new date %s' % (self, last_change))
d439d408b415 Update last_change from VCS data on request.
Marcin Kuzminski <marcin@python-works.com>
parents: 2936
diff changeset
882 self.updated_on = last_change
d439d408b415 Update last_change from VCS data on request.
Marcin Kuzminski <marcin@python-works.com>
parents: 2936
diff changeset
883 Session().add(self)
d439d408b415 Update last_change from VCS data on request.
Marcin Kuzminski <marcin@python-works.com>
parents: 2936
diff changeset
884 Session().commit()
d439d408b415 Update last_change from VCS data on request.
Marcin Kuzminski <marcin@python-works.com>
parents: 2936
diff changeset
885
1466
ad5a543a9b2f Code cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1460
diff changeset
886 @property
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
887 def tip(self):
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
888 return self.get_changeset('tip')
1466
ad5a543a9b2f Code cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1460
diff changeset
889
ad5a543a9b2f Code cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1460
diff changeset
890 @property
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
891 def author(self):
1466
ad5a543a9b2f Code cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1460
diff changeset
892 return self.tip.author
ad5a543a9b2f Code cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1460
diff changeset
893
ad5a543a9b2f Code cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1460
diff changeset
894 @property
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
895 def last_change(self):
1466
ad5a543a9b2f Code cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1460
diff changeset
896 return self.scm_instance.last_change
ad5a543a9b2f Code cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1460
diff changeset
897
2520
a1e156503afe Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents: 2510
diff changeset
898 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
899 """
0614862a20ec Added number of comments in changelog for each changeset
Marcin Kuzminski <marcin@python-works.com>
parents: 1824
diff changeset
900 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
901
0614862a20ec Added number of comments in changelog for each changeset
Marcin Kuzminski <marcin@python-works.com>
parents: 1824
diff changeset
902 :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
903 """
0614862a20ec Added number of comments in changelog for each changeset
Marcin Kuzminski <marcin@python-works.com>
parents: 1824
diff changeset
904 cmts = ChangesetComment.query()\
0614862a20ec Added number of comments in changelog for each changeset
Marcin Kuzminski <marcin@python-works.com>
parents: 1824
diff changeset
905 .filter(ChangesetComment.repo == self)
0614862a20ec Added number of comments in changelog for each changeset
Marcin Kuzminski <marcin@python-works.com>
parents: 1824
diff changeset
906 if revisions:
0614862a20ec Added number of comments in changelog for each changeset
Marcin Kuzminski <marcin@python-works.com>
parents: 1824
diff changeset
907 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
908 grouped = defaultdict(list)
0614862a20ec Added number of comments in changelog for each changeset
Marcin Kuzminski <marcin@python-works.com>
parents: 1824
diff changeset
909 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
910 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
911 return grouped
0614862a20ec Added number of comments in changelog for each changeset
Marcin Kuzminski <marcin@python-works.com>
parents: 1824
diff changeset
912
2215
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
913 def statuses(self, revisions=None):
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
914 """
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
915 Returns statuses for this repository
2217
76947224bf27 Implemented initial code-review status of changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 2215
diff changeset
916
2215
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
917 :param revisions: list of revisions to get statuses for
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
918 :type revisions: list
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
919 """
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
920
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
921 statuses = ChangesetStatus.query()\
2287
8447d35b674e Added simple versioning for changeset status
Marcin Kuzminski <marcin@python-works.com>
parents: 2286
diff changeset
922 .filter(ChangesetStatus.repo == self)\
8447d35b674e Added simple versioning for changeset status
Marcin Kuzminski <marcin@python-works.com>
parents: 2286
diff changeset
923 .filter(ChangesetStatus.version == 0)
2215
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
924 if revisions:
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
925 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
926 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
927
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
928 #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
929 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
930 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
931 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
932 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
933 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
934 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
935 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
936
2215
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
937 for stat in statuses.all():
2443
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
938 pr_id = pr_repo = None
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
939 if stat.pull_request:
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
940 pr_id = stat.pull_request.pull_request_id
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
941 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
942 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
943 pr_id, pr_repo]
2215
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
944 return grouped
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
945
1466
ad5a543a9b2f Code cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1460
diff changeset
946 #==========================================================================
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
947 # 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
948 #==========================================================================
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
949
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
950 @property
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
951 def invalidate(self):
1607
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
952 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
953
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
954 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
955 """
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
956 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
957 """
1607
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
958 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
959
1466
ad5a543a9b2f Code cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1460
diff changeset
960 @LazyProperty
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
961 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
962 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
963
2352
90e06f53af8c Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents: 2339
diff changeset
964 def scm_instance_cached(self, cache_map=None):
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
965 @cache_region('long_term')
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
966 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
967 return self.__get_instance()
1607
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
968 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
969 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
970
90e06f53af8c Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents: 2339
diff changeset
971 if cache_map:
90e06f53af8c Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents: 2339
diff changeset
972 # 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
973 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
974 if invalidate_repo:
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
975 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
976 else invalidate_repo)
90e06f53af8c Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents: 2339
diff changeset
977 else:
90e06f53af8c Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents: 2339
diff changeset
978 # get from invalidate
90e06f53af8c Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents: 2339
diff changeset
979 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
980
90e06f53af8c Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents: 2339
diff changeset
981 if invalidate_repo is not None:
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
982 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
983 # 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
984 CacheInvalidation.set_valid(invalidate_repo.cache_key)
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
985 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
986
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
987 def __get_instance(self):
1368
04b43168742d adde short cache for repo_path
Marcin Kuzminski <marcin@python-works.com>
parents: 1366
diff changeset
988 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
989 try:
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
990 alias = get_scm(repo_full_path)[0]
1976
Marcin Kuzminski <marcin@python-works.com>
parents: 1963
diff changeset
991 log.debug('Creating instance of %s repository' % alias)
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
992 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
993 except VCSError:
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
994 log.error(traceback.format_exc())
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
995 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
996 'filesystem run rescan repositories with '
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
997 '"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
998 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
999
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
1000 if alias == 'hg':
2000
72c525a7e7ad added migrations from 1.2.X to 1.3
Marcin Kuzminski <marcin@python-works.com>
parents: 1990
diff changeset
1001
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1002 repo = backend(safe_str(repo_full_path), create=False,
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1003 baseui=self._ui)
1607
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
1004 # 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
1005 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
1006 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
1007 else:
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1008 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
1009
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
1010 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
1011
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
1012
1633
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1607
diff changeset
1013 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
1014 __tablename__ = 'groups'
1958
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
1015 __table_args__ = (
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
1016 UniqueConstraint('group_name', 'group_parent_id'),
1963
9bbde54232dc white space cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1960
diff changeset
1017 CheckConstraint('group_id != group_parent_id'),
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
1018 {'extend_existing': True, 'mysql_engine': 'InnoDB',
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1019 'mysql_charset': 'utf8'},
1958
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
1020 )
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
1021 __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
1022
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1023 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
1024 group_name = Column("group_name", String(255, convert_unicode=False, assert_unicode=None), nullable=False, unique=True, default=None)
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1025 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
1026 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
1027 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
1028
1982
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
1029 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
1030 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
1031
1633
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1607
diff changeset
1032 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
1033
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1034 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
1035 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
1036 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
1037
2156
a27e4d44237e Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents: 2152
diff changeset
1038 def __unicode__(self):
a27e4d44237e Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents: 2152
diff changeset
1039 return u"<%s('%s:%s')>" % (self.__class__.__name__, self.group_id,
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1040 self.group_name)
631
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 549
diff changeset
1041
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
1042 @classmethod
2835
faffec4abbda Implemented permissions for writing to repo
Marcin Kuzminski <marcin@python-works.com>
parents: 2821
diff changeset
1043 def groups_choices(cls, check_perms=False):
1547
fbc762ae3496 unified generation of repo groups choices
Marcin Kuzminski <marcin@python-works.com>
parents: 1546
diff changeset
1044 from webhelpers.html import literal as _literal
2835
faffec4abbda Implemented permissions for writing to repo
Marcin Kuzminski <marcin@python-works.com>
parents: 2821
diff changeset
1045 from rhodecode.model.scm import ScmModel
faffec4abbda Implemented permissions for writing to repo
Marcin Kuzminski <marcin@python-works.com>
parents: 2821
diff changeset
1046 groups = cls.query().all()
faffec4abbda Implemented permissions for writing to repo
Marcin Kuzminski <marcin@python-works.com>
parents: 2821
diff changeset
1047 if check_perms:
faffec4abbda Implemented permissions for writing to repo
Marcin Kuzminski <marcin@python-works.com>
parents: 2821
diff changeset
1048 #filter group user have access to, it's done
faffec4abbda Implemented permissions for writing to repo
Marcin Kuzminski <marcin@python-works.com>
parents: 2821
diff changeset
1049 #magically inside ScmModel based on current user
faffec4abbda Implemented permissions for writing to repo
Marcin Kuzminski <marcin@python-works.com>
parents: 2821
diff changeset
1050 groups = ScmModel().get_repos_groups(groups)
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1051 repo_groups = [('', '')]
1547
fbc762ae3496 unified generation of repo groups choices
Marcin Kuzminski <marcin@python-works.com>
parents: 1546
diff changeset
1052 sep = ' &raquo; '
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1053 _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
1054
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1055 repo_groups.extend([(x.group_id, _name(x.full_path_splitted))
2835
faffec4abbda Implemented permissions for writing to repo
Marcin Kuzminski <marcin@python-works.com>
parents: 2821
diff changeset
1056 for x in groups])
1591
0b63a0d2cede Merge with upstream
Nicolas VINOT <aeris@imirhil.fr>
parents: 1576 1590
diff changeset
1057
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1058 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
1059 return repo_groups
1591
0b63a0d2cede Merge with upstream
Nicolas VINOT <aeris@imirhil.fr>
parents: 1576 1590
diff changeset
1060
1547
fbc762ae3496 unified generation of repo groups choices
Marcin Kuzminski <marcin@python-works.com>
parents: 1546
diff changeset
1061 @classmethod
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1062 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
1063 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
1064
1538
27be8f94c207 implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents: 1530
diff changeset
1065 @classmethod
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1066 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
1067 if case_insensitive:
3338a0994472 Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents: 1508
diff changeset
1068 gr = cls.query()\
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1069 .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
1070 else:
3338a0994472 Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents: 1508
diff changeset
1071 gr = cls.query()\
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1072 .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
1073 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
1074 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
1075 "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
1076 "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
1077 )
bf8ed0adbc66 fixes #371 fixed issues with beaker/sqlalchemy and non-ascii cache keys
Marcin Kuzminski <marcin@python-works.com>
parents: 2058
diff changeset
1078 )
1584
3338a0994472 Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents: 1508
diff changeset
1079 return gr.scalar()
1538
27be8f94c207 implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents: 1530
diff changeset
1080
1159
187a924ed653 Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1155
diff changeset
1081 @property
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1082 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
1083 parents_recursion_limit = 5
1159
187a924ed653 Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1155
diff changeset
1084 groups = []
187a924ed653 Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1155
diff changeset
1085 if self.parent_group is None:
187a924ed653 Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1155
diff changeset
1086 return groups
187a924ed653 Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1155
diff changeset
1087 cur_gr = self.parent_group
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1088 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
1089 cnt = 0
1159
187a924ed653 Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1155
diff changeset
1090 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
1091 cnt += 1
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1092 gr = getattr(cur_gr, 'parent_group', None)
1159
187a924ed653 Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1155
diff changeset
1093 cur_gr = cur_gr.parent_group
187a924ed653 Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1155
diff changeset
1094 if gr is None:
187a924ed653 Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1155
diff changeset
1095 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
1096 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
1097 # this will prevent accidental infinit loops
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1098 log.error('group nested more than %s' %
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1099 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
1100 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
1101
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1102 groups.insert(0, gr)
1159
187a924ed653 Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1155
diff changeset
1103 return groups
187a924ed653 Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1155
diff changeset
1104
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
1105 @property
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1106 def children(self):
1633
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1607
diff changeset
1107 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
1108
a7a772ea7b95 fixed saving settings on repositories inside groups, also fixes #187
Marcin Kuzminski <marcin@python-works.com>
parents: 1301
diff changeset
1109 @property
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1110 def name(self):
1633
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1607
diff changeset
1111 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
1112
27be8f94c207 implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents: 1530
diff changeset
1113 @property
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1114 def full_path(self):
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1115 return self.group_name
1538
27be8f94c207 implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents: 1530
diff changeset
1116
27be8f94c207 implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents: 1530
diff changeset
1117 @property
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1118 def full_path_splitted(self):
1633
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1607
diff changeset
1119 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
1120
1193
523382549c45 Added repo group page showing what reposiories are inside a group
Marcin Kuzminski <marcin@python-works.com>
parents: 1159
diff changeset
1121 @property
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1122 def repositories(self):
2079
477fe54b8af8 fixed sorting of repos in group
Marcin Kuzminski <marcin@python-works.com>
parents: 2063
diff changeset
1123 return Repository.query()\
477fe54b8af8 fixed sorting of repos in group
Marcin Kuzminski <marcin@python-works.com>
parents: 2063
diff changeset
1124 .filter(Repository.group == self)\
477fe54b8af8 fixed sorting of repos in group
Marcin Kuzminski <marcin@python-works.com>
parents: 2063
diff changeset
1125 .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
1126
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
1127 @property
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1128 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
1129 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
1130
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1131 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
1132 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
1133 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
1134 cnt += child.repositories.count()
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1135 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
1136 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
1137
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1138 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
1139
2749
3ed4dae499d0 Recursive set locking on all children of a group.
Marcin Kuzminski <marcin@python-works.com>
parents: 2731
diff changeset
1140 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
1141 """
3ed4dae499d0 Recursive set locking on all children of a group.
Marcin Kuzminski <marcin@python-works.com>
parents: 2731
diff changeset
1142 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
1143 """
3ed4dae499d0 Recursive set locking on all children of a group.
Marcin Kuzminski <marcin@python-works.com>
parents: 2731
diff changeset
1144 all_ = []
3ed4dae499d0 Recursive set locking on all children of a group.
Marcin Kuzminski <marcin@python-works.com>
parents: 2731
diff changeset
1145
3ed4dae499d0 Recursive set locking on all children of a group.
Marcin Kuzminski <marcin@python-works.com>
parents: 2731
diff changeset
1146 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
1147 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
1148 all_.append(r)
3ed4dae499d0 Recursive set locking on all children of a group.
Marcin Kuzminski <marcin@python-works.com>
parents: 2731
diff changeset
1149 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
1150 if childs:
3ed4dae499d0 Recursive set locking on all children of a group.
Marcin Kuzminski <marcin@python-works.com>
parents: 2731
diff changeset
1151 for gr in childs:
3ed4dae499d0 Recursive set locking on all children of a group.
Marcin Kuzminski <marcin@python-works.com>
parents: 2731
diff changeset
1152 all_.append(gr)
3ed4dae499d0 Recursive set locking on all children of a group.
Marcin Kuzminski <marcin@python-works.com>
parents: 2731
diff changeset
1153 _get_members(gr)
3ed4dae499d0 Recursive set locking on all children of a group.
Marcin Kuzminski <marcin@python-works.com>
parents: 2731
diff changeset
1154
3ed4dae499d0 Recursive set locking on all children of a group.
Marcin Kuzminski <marcin@python-works.com>
parents: 2731
diff changeset
1155 _get_members(self)
3ed4dae499d0 Recursive set locking on all children of a group.
Marcin Kuzminski <marcin@python-works.com>
parents: 2731
diff changeset
1156 return [self] + all_
3ed4dae499d0 Recursive set locking on all children of a group.
Marcin Kuzminski <marcin@python-works.com>
parents: 2731
diff changeset
1157
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1158 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
1159 """
27be8f94c207 implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents: 1530
diff changeset
1160 returns new full group name based on parent and new name
1591
0b63a0d2cede Merge with upstream
Nicolas VINOT <aeris@imirhil.fr>
parents: 1576 1590
diff changeset
1161
1538
27be8f94c207 implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents: 1530
diff changeset
1162 :param group_name:
27be8f94c207 implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents: 1530
diff changeset
1163 """
1607
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
1164 path_prefix = (self.parent_group.full_path_splitted if
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1165 self.parent_group else [])
1633
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1607
diff changeset
1166 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
1167
27be8f94c207 implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents: 1530
diff changeset
1168
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1169 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
1170 __tablename__ = 'permissions'
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1171 __table_args__ = (
2463
b426ecc30319 Added some DB indexes to optimize queries
Marcin Kuzminski <marcin@python-works.com>
parents: 2462
diff changeset
1172 Index('p_perm_name_idx', 'permission_name'),
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
1173 {'extend_existing': True, 'mysql_engine': 'InnoDB',
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1174 'mysql_charset': 'utf8'},
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1175 )
2532
19de74e33fb0 Better descriptions of given permission overview in edit user view
Marcin Kuzminski <marcin@python-works.com>
parents: 2531
diff changeset
1176 PERMS = [
19de74e33fb0 Better descriptions of given permission overview in edit user view
Marcin Kuzminski <marcin@python-works.com>
parents: 2531
diff changeset
1177 ('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
1178 ('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
1179 ('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
1180 ('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
1181
19de74e33fb0 Better descriptions of given permission overview in edit user view
Marcin Kuzminski <marcin@python-works.com>
parents: 2531
diff changeset
1182 ('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
1183 ('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
1184 ('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
1185 ('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
1186
19de74e33fb0 Better descriptions of given permission overview in edit user view
Marcin Kuzminski <marcin@python-works.com>
parents: 2531
diff changeset
1187 ('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
1188 ('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
1189 ('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
1190 ('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
1191 ('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
1192 ('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
1193 ('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
1194 'with manual activation')),
19de74e33fb0 Better descriptions of given permission overview in edit user view
Marcin Kuzminski <marcin@python-works.com>
parents: 2531
diff changeset
1195
19de74e33fb0 Better descriptions of given permission overview in edit user view
Marcin Kuzminski <marcin@python-works.com>
parents: 2531
diff changeset
1196 ('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
1197 'with auto activation')),
19de74e33fb0 Better descriptions of given permission overview in edit user view
Marcin Kuzminski <marcin@python-works.com>
parents: 2531
diff changeset
1198 ]
19de74e33fb0 Better descriptions of given permission overview in edit user view
Marcin Kuzminski <marcin@python-works.com>
parents: 2531
diff changeset
1199
2709
d2d35cf2b351 RhodeCode now has a option to explicitly set forking permissions. ref #508
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
1200 # 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
1201 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
1202 '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
1203 '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
1204 '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
1205 '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
1206
d2d35cf2b351 RhodeCode now has a option to explicitly set forking permissions. ref #508
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
1207 '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
1208 '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
1209 '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
1210 '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
1211
d2d35cf2b351 RhodeCode now has a option to explicitly set forking permissions. ref #508
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
1212 '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
1213 '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
1214 '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
1215 '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
1216 }
d2d35cf2b351 RhodeCode now has a option to explicitly set forking permissions. ref #508
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
1217
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1218 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
1219 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
1220 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
1221
2156
a27e4d44237e Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents: 2152
diff changeset
1222 def __unicode__(self):
a27e4d44237e Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents: 2152
diff changeset
1223 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
1224 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
1225 )
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
1226
1266
a1bcfe58a1ab Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
1227 @classmethod
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1228 def get_by_key(cls, key):
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1229 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
1230
1728
07e56179633e - fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents: 1727
diff changeset
1231 @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
1232 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
1233 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
1234 .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
1235 .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
1236 .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
1237
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
1238 return q.all()
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
1239
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
1240 @classmethod
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
1241 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
1242 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
1243 .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
1244 .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
1245 .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
1246
07e56179633e - fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents: 1727
diff changeset
1247 return q.all()
07e56179633e - fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents: 1727
diff changeset
1248
07e56179633e - fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents: 1727
diff changeset
1249
1633
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1607
diff changeset
1250 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
1251 __tablename__ = 'repo_to_perm'
1958
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
1252 __table_args__ = (
2000
72c525a7e7ad added migrations from 1.2.X to 1.3
Marcin Kuzminski <marcin@python-works.com>
parents: 1990
diff changeset
1253 UniqueConstraint('user_id', 'repository_id', 'permission_id'),
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
1254 {'extend_existing': True, 'mysql_engine': 'InnoDB',
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1255 'mysql_charset': 'utf8'}
1958
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
1256 )
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1257 repo_to_perm_id = Column("repo_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1258 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None)
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1259 permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1260 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
1261
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1262 user = relationship('User')
2000
72c525a7e7ad added migrations from 1.2.X to 1.3
Marcin Kuzminski <marcin@python-works.com>
parents: 1990
diff changeset
1263 repository = relationship('Repository')
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1264 permission = relationship('Permission')
399
f5c1eec9f376 rename repo2perm into repo_to_perm
Marcin Kuzminski <marcin@python-works.com>
parents: 392
diff changeset
1265
1729
da8ee2ef7f6d implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents: 1728
diff changeset
1266 @classmethod
da8ee2ef7f6d implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents: 1728
diff changeset
1267 def create(cls, user, repository, permission):
da8ee2ef7f6d implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents: 1728
diff changeset
1268 n = cls()
da8ee2ef7f6d implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents: 1728
diff changeset
1269 n.user = user
da8ee2ef7f6d implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents: 1728
diff changeset
1270 n.repository = repository
da8ee2ef7f6d implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents: 1728
diff changeset
1271 n.permission = permission
2520
a1e156503afe Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents: 2510
diff changeset
1272 Session().add(n)
1729
da8ee2ef7f6d implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents: 1728
diff changeset
1273 return n
da8ee2ef7f6d implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents: 1728
diff changeset
1274
2156
a27e4d44237e Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents: 2152
diff changeset
1275 def __unicode__(self):
a27e4d44237e Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents: 2152
diff changeset
1276 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
1277
1800
6c86c987cf93 pep8ify
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
1278
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1279 class UserToPerm(Base, BaseModel):
399
f5c1eec9f376 rename repo2perm into repo_to_perm
Marcin Kuzminski <marcin@python-works.com>
parents: 392
diff changeset
1280 __tablename__ = 'user_to_perm'
1988
5eae67552695 db unique constraints fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 1982
diff changeset
1281 __table_args__ = (
5eae67552695 db unique constraints fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 1982
diff changeset
1282 UniqueConstraint('user_id', 'permission_id'),
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
1283 {'extend_existing': True, 'mysql_engine': 'InnoDB',
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1284 'mysql_charset': 'utf8'}
1988
5eae67552695 db unique constraints fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 1982
diff changeset
1285 )
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1286 user_to_perm_id = Column("user_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1287 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None)
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1288 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
1289
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1290 user = relationship('User')
1728
07e56179633e - fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents: 1727
diff changeset
1291 permission = relationship('Permission', lazy='joined')
399
f5c1eec9f376 rename repo2perm into repo_to_perm
Marcin Kuzminski <marcin@python-works.com>
parents: 392
diff changeset
1292
1014
6fdc3ff65fce #56 added assignments of users groups into repository
Marcin Kuzminski <marcin@python-works.com>
parents: 1000
diff changeset
1293
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1294 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
1295 __tablename__ = 'users_group_repo_to_perm'
1958
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
1296 __table_args__ = (
2000
72c525a7e7ad added migrations from 1.2.X to 1.3
Marcin Kuzminski <marcin@python-works.com>
parents: 1990
diff changeset
1297 UniqueConstraint('repository_id', 'users_group_id', 'permission_id'),
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
1298 {'extend_existing': True, 'mysql_engine': 'InnoDB',
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1299 'mysql_charset': 'utf8'}
1958
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
1300 )
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1301 users_group_to_perm_id = Column("users_group_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1302 users_group_id = Column("users_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None)
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1303 permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1304 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
1305
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1306 users_group = relationship('UsersGroup')
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1307 permission = relationship('Permission')
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1308 repository = relationship('Repository')
958
7d1483f3170b added user group to perm table
Marcin Kuzminski <marcin@python-works.com>
parents: 956
diff changeset
1309
1729
da8ee2ef7f6d implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents: 1728
diff changeset
1310 @classmethod
da8ee2ef7f6d implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents: 1728
diff changeset
1311 def create(cls, users_group, repository, permission):
da8ee2ef7f6d implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents: 1728
diff changeset
1312 n = cls()
da8ee2ef7f6d implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents: 1728
diff changeset
1313 n.users_group = users_group
da8ee2ef7f6d implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents: 1728
diff changeset
1314 n.repository = repository
da8ee2ef7f6d implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents: 1728
diff changeset
1315 n.permission = permission
2520
a1e156503afe Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents: 2510
diff changeset
1316 Session().add(n)
1729
da8ee2ef7f6d implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents: 1728
diff changeset
1317 return n
da8ee2ef7f6d implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents: 1728
diff changeset
1318
2156
a27e4d44237e Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents: 2152
diff changeset
1319 def __unicode__(self):
a27e4d44237e Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents: 2152
diff changeset
1320 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
1321
1800
6c86c987cf93 pep8ify
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
1322
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1323 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
1324 __tablename__ = 'users_group_to_perm'
1988
5eae67552695 db unique constraints fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 1982
diff changeset
1325 __table_args__ = (
5eae67552695 db unique constraints fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 1982
diff changeset
1326 UniqueConstraint('users_group_id', 'permission_id',),
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
1327 {'extend_existing': True, 'mysql_engine': 'InnoDB',
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1328 'mysql_charset': 'utf8'}
1988
5eae67552695 db unique constraints fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 1982
diff changeset
1329 )
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1330 users_group_to_perm_id = Column("users_group_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1331 users_group_id = Column("users_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None)
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1332 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
1333
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1334 users_group = relationship('UsersGroup')
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1335 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
1336
aa7e45ad0cea Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents: 1266
diff changeset
1337
1633
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1607
diff changeset
1338 class UserRepoGroupToPerm(Base, BaseModel):
1958
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
1339 __tablename__ = 'user_repo_group_to_perm'
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
1340 __table_args__ = (
2000
72c525a7e7ad added migrations from 1.2.X to 1.3
Marcin Kuzminski <marcin@python-works.com>
parents: 1990
diff changeset
1341 UniqueConstraint('user_id', 'group_id', 'permission_id'),
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
1342 {'extend_existing': True, 'mysql_engine': 'InnoDB',
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1343 'mysql_charset': 'utf8'}
1958
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
1344 )
879
b19341623d48 added group to perm mapping table
Marcin Kuzminski <marcin@python-works.com>
parents: 878
diff changeset
1345
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1346 group_to_perm_id = Column("group_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1347 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
1348 group_id = Column("group_id", Integer(), ForeignKey('groups.group_id'), nullable=False, unique=None, default=None)
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1349 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
1350
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1351 user = relationship('User')
2000
72c525a7e7ad added migrations from 1.2.X to 1.3
Marcin Kuzminski <marcin@python-works.com>
parents: 1990
diff changeset
1352 group = relationship('RepoGroup')
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1353 permission = relationship('Permission')
1633
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1607
diff changeset
1354
1800
6c86c987cf93 pep8ify
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
1355
1633
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1607
diff changeset
1356 class UsersGroupRepoGroupToPerm(Base, BaseModel):
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1607
diff changeset
1357 __tablename__ = 'users_group_repo_group_to_perm'
1958
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
1358 __table_args__ = (
1988
5eae67552695 db unique constraints fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 1982
diff changeset
1359 UniqueConstraint('users_group_id', 'group_id'),
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
1360 {'extend_existing': True, 'mysql_engine': 'InnoDB',
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1361 'mysql_charset': 'utf8'}
1958
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
1362 )
1633
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1607
diff changeset
1363
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1607
diff changeset
1364 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
1365 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
1366 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
1367 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
1368
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1607
diff changeset
1369 users_group = relationship('UsersGroup')
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1607
diff changeset
1370 permission = relationship('Permission')
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1607
diff changeset
1371 group = relationship('RepoGroup')
879
b19341623d48 added group to perm mapping table
Marcin Kuzminski <marcin@python-works.com>
parents: 878
diff changeset
1372
1800
6c86c987cf93 pep8ify
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
1373
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1374 class Statistics(Base, BaseModel):
493
2256c78afe53 implemented basic autoupdating statistics fetched from database
Marcin Kuzminski <marcin@python-works.com>
parents: 473
diff changeset
1375 __tablename__ = 'statistics'
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1376 __table_args__ = (
2150
a8c9c0094ddf White space cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 2149
diff changeset
1377 UniqueConstraint('repository_id'),
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
1378 {'extend_existing': True, 'mysql_engine': 'InnoDB',
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1379 'mysql_charset': 'utf8'}
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1380 )
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1381 stat_id = Column("stat_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1382 repository_id = Column("repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=False, unique=True, default=None)
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1383 stat_on_revision = Column("stat_on_revision", Integer(), nullable=False)
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1384 commit_activity = Column("commit_activity", LargeBinary(1000000), nullable=False)#JSON data
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1385 commit_activity_combined = Column("commit_activity_combined", LargeBinary(), nullable=False)#JSON data
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1386 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
1387
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1388 repository = relationship('Repository', single_parent=True)
399
f5c1eec9f376 rename repo2perm into repo_to_perm
Marcin Kuzminski <marcin@python-works.com>
parents: 392
diff changeset
1389
1800
6c86c987cf93 pep8ify
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
1390
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1391 class UserFollowing(Base, BaseModel):
734
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 713
diff changeset
1392 __tablename__ = 'user_followings'
1958
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
1393 __table_args__ = (
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
1394 UniqueConstraint('user_id', 'follows_repository_id'),
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
1395 UniqueConstraint('user_id', 'follows_user_id'),
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
1396 {'extend_existing': True, 'mysql_engine': 'InnoDB',
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1397 'mysql_charset': 'utf8'}
1958
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
1398 )
734
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 713
diff changeset
1399
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1400 user_following_id = Column("user_following_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1401 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None)
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1402 follows_repo_id = Column("follows_repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=True, unique=None, default=None)
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1403 follows_user_id = Column("follows_user_id", Integer(), ForeignKey('users.user_id'), nullable=True, unique=None, default=None)
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1404 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
1405
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1406 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
1407
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1408 follows_user = relationship('User', primaryjoin='User.user_id==UserFollowing.follows_user_id')
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1409 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
1410
1279
cb216757a62d #179 Added followers page
Marcin Kuzminski <marcin@python-works.com>
parents: 1271
diff changeset
1411 @classmethod
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1412 def get_repo_followers(cls, repo_id):
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1413 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
1414
1800
6c86c987cf93 pep8ify
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
1415
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1416 class CacheInvalidation(Base, BaseModel):
670
e7c670cc03cb Adde table for cache invalidation
Marcin Kuzminski <marcin@python-works.com>
parents: 667
diff changeset
1417 __tablename__ = 'cache_invalidation'
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1418 __table_args__ = (
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1419 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
1420 Index('key_idx', 'cache_key'),
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
1421 {'extend_existing': True, 'mysql_engine': 'InnoDB',
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1422 'mysql_charset': 'utf8'},
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1423 )
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1424 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
1425 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
1426 cache_args = Column("cache_args", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1427 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
1428
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1429 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
1430 self.cache_key = cache_key
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 670
diff changeset
1431 self.cache_args = cache_args
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 670
diff changeset
1432 self.cache_active = False
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 670
diff changeset
1433
2156
a27e4d44237e Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents: 2152
diff changeset
1434 def __unicode__(self):
a27e4d44237e Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents: 2152
diff changeset
1435 return u"<%s('%s:%s')>" % (self.__class__.__name__,
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1436 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
1437
2809
070d2eacd48b Show cache keys in admin settings of repository
Marcin Kuzminski <marcin@python-works.com>
parents: 2808
diff changeset
1438 @property
070d2eacd48b Show cache keys in admin settings of repository
Marcin Kuzminski <marcin@python-works.com>
parents: 2808
diff changeset
1439 def prefix(self):
070d2eacd48b Show cache keys in admin settings of repository
Marcin Kuzminski <marcin@python-works.com>
parents: 2808
diff changeset
1440 _split = self.cache_key.split(self.cache_args, 1)
070d2eacd48b Show cache keys in admin settings of repository
Marcin Kuzminski <marcin@python-works.com>
parents: 2808
diff changeset
1441 if _split and len(_split) == 2:
070d2eacd48b Show cache keys in admin settings of repository
Marcin Kuzminski <marcin@python-works.com>
parents: 2808
diff changeset
1442 return _split[0]
070d2eacd48b Show cache keys in admin settings of repository
Marcin Kuzminski <marcin@python-works.com>
parents: 2808
diff changeset
1443 return ''
070d2eacd48b Show cache keys in admin settings of repository
Marcin Kuzminski <marcin@python-works.com>
parents: 2808
diff changeset
1444
2147
d25bd432bc3e - #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
1445 @classmethod
d25bd432bc3e - #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
1446 def clear_cache(cls):
d25bd432bc3e - #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
1447 cls.query().delete()
834
8924ed0e4f36 added current db version into rhodecode,
Marcin Kuzminski <marcin@python-works.com>
parents: 832
diff changeset
1448
1607
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
1449 @classmethod
2013
8530c3cd9d04 fixed issue with hybrid property for ldap_active
Marcin Kuzminski <marcin@python-works.com>
parents: 2007
diff changeset
1450 def _get_key(cls, key):
8530c3cd9d04 fixed issue with hybrid property for ldap_active
Marcin Kuzminski <marcin@python-works.com>
parents: 2007
diff changeset
1451 """
2147
d25bd432bc3e - #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
1452 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
1453
8530c3cd9d04 fixed issue with hybrid property for ldap_active
Marcin Kuzminski <marcin@python-works.com>
parents: 2007
diff changeset
1454 :param key:
8530c3cd9d04 fixed issue with hybrid property for ldap_active
Marcin Kuzminski <marcin@python-works.com>
parents: 2007
diff changeset
1455 """
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
1456 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
1457 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
1458 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
1459 if iid:
2058
fb51a6fc10ae updated CONTRIBUTORS
Marcin Kuzminski <marcin@python-works.com>
parents: 2016
diff changeset
1460 prefix = iid
2147
d25bd432bc3e - #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
1461 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
1462
8530c3cd9d04 fixed issue with hybrid property for ldap_active
Marcin Kuzminski <marcin@python-works.com>
parents: 2007
diff changeset
1463 @classmethod
8530c3cd9d04 fixed issue with hybrid property for ldap_active
Marcin Kuzminski <marcin@python-works.com>
parents: 2007
diff changeset
1464 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
1465 return cls.query().filter(cls.cache_key == key).scalar()
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1466
2147
d25bd432bc3e - #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
1467 @classmethod
2808
3a007d806f0f Fixing issues of cache invalidation for multiple instances running in rhodecode.
Marcin Kuzminski <marcin@python-works.com>
parents: 2798
diff changeset
1468 def _get_or_create_key(cls, key, prefix, org_key, commit=True):
2520
a1e156503afe Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents: 2510
diff changeset
1469 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
1470 if not inv_obj:
d25bd432bc3e - #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
1471 try:
d25bd432bc3e - #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
1472 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
1473 Session().add(inv_obj)
2808
3a007d806f0f Fixing issues of cache invalidation for multiple instances running in rhodecode.
Marcin Kuzminski <marcin@python-works.com>
parents: 2798
diff changeset
1474 if commit:
3a007d806f0f Fixing issues of cache invalidation for multiple instances running in rhodecode.
Marcin Kuzminski <marcin@python-works.com>
parents: 2798
diff changeset
1475 Session().commit()
2147
d25bd432bc3e - #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
1476 except Exception:
d25bd432bc3e - #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
1477 log.error(traceback.format_exc())
2520
a1e156503afe Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents: 2510
diff changeset
1478 Session().rollback()
2147
d25bd432bc3e - #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
1479 return inv_obj
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1480
2013
8530c3cd9d04 fixed issue with hybrid property for ldap_active
Marcin Kuzminski <marcin@python-works.com>
parents: 2007
diff changeset
1481 @classmethod
1607
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
1482 def invalidate(cls, key):
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
1483 """
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
1484 Returns Invalidation object if this given key should be invalidated
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
1485 None otherwise. `cache_active = False` means that this cache
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
1486 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
1487
1607
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
1488 :param key:
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
1489 """
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1490
2147
d25bd432bc3e - #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
1491 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
1492 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
1493
d25bd432bc3e - #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
1494 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
1495 return inv
1607
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
1496
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
1497 @classmethod
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
1498 def set_invalidate(cls, key):
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
1499 """
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
1500 Mark this Cache key for invalidation
1818
cf51bbfb120e auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents: 1800
diff changeset
1501
1607
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
1502 :param key:
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
1503 """
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
1504
2147
d25bd432bc3e - #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
1505 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
1506 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
1507 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
1508 _org_key))
d25bd432bc3e - #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
1509 try:
d25bd432bc3e - #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
1510 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
1511 if inv_obj:
d25bd432bc3e - #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
1512 inv_obj.cache_active = False
1607
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
1513
2520
a1e156503afe Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents: 2510
diff changeset
1514 Session().add(inv_obj)
a1e156503afe Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents: 2510
diff changeset
1515 Session().commit()
1607
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
1516 except Exception:
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
1517 log.error(traceback.format_exc())
2520
a1e156503afe Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents: 2510
diff changeset
1518 Session().rollback()
1607
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
1519
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
1520 @classmethod
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
1521 def set_valid(cls, key):
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
1522 """
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
1523 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
1524
1607
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
1525 :param key:
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
1526 """
2013
8530c3cd9d04 fixed issue with hybrid property for ldap_active
Marcin Kuzminski <marcin@python-works.com>
parents: 2007
diff changeset
1527 inv_obj = cls.get_by_key(key)
1607
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
1528 inv_obj.cache_active = True
2520
a1e156503afe Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents: 2510
diff changeset
1529 Session().add(inv_obj)
a1e156503afe Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents: 2510
diff changeset
1530 Session().commit()
1607
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
1531
2352
90e06f53af8c Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents: 2339
diff changeset
1532 @classmethod
90e06f53af8c Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents: 2339
diff changeset
1533 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
1534
90e06f53af8c Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents: 2339
diff changeset
1535 class cachemapdict(dict):
90e06f53af8c Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents: 2339
diff changeset
1536
90e06f53af8c Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents: 2339
diff changeset
1537 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
1538 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
1539 if fixkey:
90e06f53af8c Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents: 2339
diff changeset
1540 del kwargs['fixkey']
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
1541 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
1542 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
1543
90e06f53af8c Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents: 2339
diff changeset
1544 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
1545 key = name
90e06f53af8c Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents: 2339
diff changeset
1546 if self.fixkey:
90e06f53af8c Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents: 2339
diff changeset
1547 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
1548 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
1549 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
1550 else:
90e06f53af8c Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents: 2339
diff changeset
1551 return self[key]
90e06f53af8c Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents: 2339
diff changeset
1552
90e06f53af8c Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents: 2339
diff changeset
1553 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
1554 if self.fixkey:
90e06f53af8c Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents: 2339
diff changeset
1555 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
1556 try:
90e06f53af8c Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents: 2339
diff changeset
1557 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
1558 except KeyError:
90e06f53af8c Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents: 2339
diff changeset
1559 return
90e06f53af8c Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents: 2339
diff changeset
1560
90e06f53af8c Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents: 2339
diff changeset
1561 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
1562 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
1563 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
1564 return cache_map
90e06f53af8c Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents: 2339
diff changeset
1565
1665
36f77a46f291 Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents: 1634
diff changeset
1566
1670
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents: 1669
diff changeset
1567 class ChangesetComment(Base, BaseModel):
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents: 1669
diff changeset
1568 __tablename__ = 'changeset_comments'
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1569 __table_args__ = (
2463
b426ecc30319 Added some DB indexes to optimize queries
Marcin Kuzminski <marcin@python-works.com>
parents: 2462
diff changeset
1570 Index('cc_revision_idx', 'revision'),
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
1571 {'extend_existing': True, 'mysql_engine': 'InnoDB',
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1572 'mysql_charset': 'utf8'},
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1573 )
1670
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents: 1669
diff changeset
1574 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
1575 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
1576 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
1577 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
1578 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
1579 hl_lines = Column('hl_lines', Unicode(512), nullable=True)
1677
7276b170ce8b #71 code-review
Marcin Kuzminski <marcin@python-works.com>
parents: 1675
diff changeset
1580 f_path = Column('f_path', Unicode(1000), nullable=True)
1670
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents: 1669
diff changeset
1581 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
1582 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
1583 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
1584 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
1585
1703
f23828b00b21 notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1702
diff changeset
1586 author = relationship('User', lazy='joined')
1670
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents: 1669
diff changeset
1587 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
1588 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
1589 pull_request = relationship('PullRequest', lazy='joined')
1670
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents: 1669
diff changeset
1590
1703
f23828b00b21 notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1702
diff changeset
1591 @classmethod
2443
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
1592 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
1593 """
2443
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
1594 Returns user associated with this ChangesetComment. ie those
1703
f23828b00b21 notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1702
diff changeset
1595 who actually commented
1818
cf51bbfb120e auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents: 1800
diff changeset
1596
1703
f23828b00b21 notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1702
diff changeset
1597 :param cls:
f23828b00b21 notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1702
diff changeset
1598 :param revision:
f23828b00b21 notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1702
diff changeset
1599 """
2520
a1e156503afe Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents: 2510
diff changeset
1600 q = Session().query(User)\
2443
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
1601 .join(ChangesetComment.author)
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
1602 if revision:
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
1603 q = q.filter(cls.revision == revision)
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
1604 elif pull_request_id:
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
1605 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
1606 return q.all()
1886
50e32940e464 code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 1884
diff changeset
1607
1703
f23828b00b21 notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1702
diff changeset
1608
2215
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
1609 class ChangesetStatus(Base, BaseModel):
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
1610 __tablename__ = 'changeset_statuses'
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
1611 __table_args__ = (
2463
b426ecc30319 Added some DB indexes to optimize queries
Marcin Kuzminski <marcin@python-works.com>
parents: 2462
diff changeset
1612 Index('cs_revision_idx', 'revision'),
b426ecc30319 Added some DB indexes to optimize queries
Marcin Kuzminski <marcin@python-works.com>
parents: 2462
diff changeset
1613 Index('cs_version_idx', 'version'),
2287
8447d35b674e Added simple versioning for changeset status
Marcin Kuzminski <marcin@python-works.com>
parents: 2286
diff changeset
1614 UniqueConstraint('repo_id', 'revision', 'version'),
2215
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
1615 {'extend_existing': True, 'mysql_engine': 'InnoDB',
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
1616 'mysql_charset': 'utf8'}
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
1617 )
2481
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2480
diff changeset
1618 STATUS_NOT_REVIEWED = DEFAULT = 'not_reviewed'
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2480
diff changeset
1619 STATUS_APPROVED = 'approved'
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2480
diff changeset
1620 STATUS_REJECTED = 'rejected'
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2480
diff changeset
1621 STATUS_UNDER_REVIEW = 'under_review'
2215
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
1622
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
1623 STATUSES = [
2481
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2480
diff changeset
1624 (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
1625 (STATUS_APPROVED, _("Approved")),
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2480
diff changeset
1626 (STATUS_REJECTED, _("Rejected")),
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2480
diff changeset
1627 (STATUS_UNDER_REVIEW, _("Under Review")),
2215
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
1628 ]
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
1629
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
1630 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
1631 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
1632 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
1633 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
1634 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
1635 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
1636 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
1637 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
1638 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
1639
2215
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
1640 author = relationship('User', lazy='joined')
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
1641 repo = relationship('Repository')
2286
9265958e33bb Show changes of status inside comments
Marcin Kuzminski <marcin@python-works.com>
parents: 2280
diff changeset
1642 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
1643 pull_request = relationship('PullRequest', lazy='joined')
2215
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
1644
2481
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2480
diff changeset
1645 def __unicode__(self):
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2480
diff changeset
1646 return u"<%s('%s:%s')>" % (
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2480
diff changeset
1647 self.__class__.__name__,
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2480
diff changeset
1648 self.status, self.author
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2480
diff changeset
1649 )
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2480
diff changeset
1650
2296
e5c0f201ca0b Add changeset status change into emails
Marcin Kuzminski <marcin@python-works.com>
parents: 2287
diff changeset
1651 @classmethod
e5c0f201ca0b Add changeset status change into emails
Marcin Kuzminski <marcin@python-works.com>
parents: 2287
diff changeset
1652 def get_status_lbl(cls, value):
e5c0f201ca0b Add changeset status change into emails
Marcin Kuzminski <marcin@python-works.com>
parents: 2287
diff changeset
1653 return dict(cls.STATUSES).get(value)
e5c0f201ca0b Add changeset status change into emails
Marcin Kuzminski <marcin@python-works.com>
parents: 2287
diff changeset
1654
2217
76947224bf27 Implemented initial code-review status of changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 2215
diff changeset
1655 @property
76947224bf27 Implemented initial code-review status of changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 2215
diff changeset
1656 def status_lbl(self):
2296
e5c0f201ca0b Add changeset status change into emails
Marcin Kuzminski <marcin@python-works.com>
parents: 2287
diff changeset
1657 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
1658
2215
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
1659
2434
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
1660 class PullRequest(Base, BaseModel):
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
1661 __tablename__ = 'pull_requests'
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
1662 __table_args__ = (
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
1663 {'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
1664 'mysql_charset': 'utf8'},
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
1665 )
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
1666
2588
32dd6896abcf added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents: 2585
diff changeset
1667 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
1668 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
1669 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
1670
2434
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
1671 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
1672 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
1673 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
1674 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
1675 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
1676 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
1677 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
1678 _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
1679 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
1680 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
1681 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
1682 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
1683
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
1684 @hybrid_property
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
1685 def revisions(self):
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
1686 return self._revisions.split(':')
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
1687
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
1688 @revisions.setter
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
1689 def revisions(self, val):
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
1690 self._revisions = ':'.join(val)
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
1691
2440
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
1692 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
1693 reviewers = relationship('PullRequestReviewers',
2666
c51fb1da6df2 cascade fixes for comments/pull-requests/reviewers
Marcin Kuzminski <marcin@python-works.com>
parents: 2665
diff changeset
1694 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
1695 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
1696 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
1697 statuses = relationship('ChangesetStatus')
c51fb1da6df2 cascade fixes for comments/pull-requests/reviewers
Marcin Kuzminski <marcin@python-works.com>
parents: 2665
diff changeset
1698 comments = relationship('ChangesetComment',
c51fb1da6df2 cascade fixes for comments/pull-requests/reviewers
Marcin Kuzminski <marcin@python-works.com>
parents: 2665
diff changeset
1699 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
1700
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
1701 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
1702 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
1703
2434
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
1704 def __json__(self):
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
1705 return dict(
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
1706 revisions=self.revisions
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
1707 )
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
1708
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
1709
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
1710 class PullRequestReviewers(Base, BaseModel):
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
1711 __tablename__ = 'pull_request_reviewers'
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
1712 __table_args__ = (
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
1713 {'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
1714 'mysql_charset': 'utf8'},
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
1715 )
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
1716
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
1717 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
1718 self.user = user
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
1719 self.pull_request = pull_request
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
1720
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
1721 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
1722 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
1723 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
1724
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
1725 user = relationship('User')
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
1726 pull_request = relationship('PullRequest')
1886
50e32940e464 code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 1884
diff changeset
1727
1703
f23828b00b21 notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1702
diff changeset
1728
1702
8cb7f5c4d494 #302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents: 1693
diff changeset
1729 class Notification(Base, BaseModel):
8cb7f5c4d494 #302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents: 1693
diff changeset
1730 __tablename__ = 'notifications'
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1731 __table_args__ = (
2463
b426ecc30319 Added some DB indexes to optimize queries
Marcin Kuzminski <marcin@python-works.com>
parents: 2462
diff changeset
1732 Index('notification_type_idx', 'type'),
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
1733 {'extend_existing': True, 'mysql_engine': 'InnoDB',
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1734 'mysql_charset': 'utf8'},
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1735 )
1703
f23828b00b21 notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1702
diff changeset
1736
1712
cac5109ac3b6 Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1703
diff changeset
1737 TYPE_CHANGESET_COMMENT = u'cs_comment'
cac5109ac3b6 Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1703
diff changeset
1738 TYPE_MESSAGE = u'message'
cac5109ac3b6 Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1703
diff changeset
1739 TYPE_MENTION = u'mention'
1731
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
1740 TYPE_REGISTRATION = u'registration'
2244
77e376fdc4c6 pull requests draft UI
Marcin Kuzminski <marcin@python-works.com>
parents: 2218
diff changeset
1741 TYPE_PULL_REQUEST = u'pull_request'
2443
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
1742 TYPE_PULL_REQUEST_COMMENT = u'pull_request_comment'
1703
f23828b00b21 notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1702
diff changeset
1743
1702
8cb7f5c4d494 #302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents: 1693
diff changeset
1744 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
1745 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
1746 body = Column('body', UnicodeText(50000), nullable=True)
1703
f23828b00b21 notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1702
diff changeset
1747 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
1748 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
1749 type_ = Column('type', Unicode(256))
1702
8cb7f5c4d494 #302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents: 1693
diff changeset
1750
1712
cac5109ac3b6 Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1703
diff changeset
1751 created_by_user = relationship('User')
1717
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
1752 notifications_to_users = relationship('UserNotification', lazy='joined',
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
1753 cascade="all, delete, delete-orphan")
1702
8cb7f5c4d494 #302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents: 1693
diff changeset
1754
8cb7f5c4d494 #302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents: 1693
diff changeset
1755 @property
8cb7f5c4d494 #302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents: 1693
diff changeset
1756 def recipients(self):
8cb7f5c4d494 #302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents: 1693
diff changeset
1757 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
1758 .filter(UserNotification.notification == self)\
2585
a52cee88d612 fixed sorting in recipients query of notifications
Marcin Kuzminski <marcin@python-works.com>
parents: 2562
diff changeset
1759 .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
1760
8cb7f5c4d494 #302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents: 1693
diff changeset
1761 @classmethod
1703
f23828b00b21 notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1702
diff changeset
1762 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
1763 if type_ is None:
f23828b00b21 notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1702
diff changeset
1764 type_ = Notification.TYPE_MESSAGE
f23828b00b21 notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1702
diff changeset
1765
1702
8cb7f5c4d494 #302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents: 1693
diff changeset
1766 notification = cls()
1712
cac5109ac3b6 Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1703
diff changeset
1767 notification.created_by_user = created_by
1702
8cb7f5c4d494 #302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents: 1693
diff changeset
1768 notification.subject = subject
8cb7f5c4d494 #302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents: 1693
diff changeset
1769 notification.body = body
1703
f23828b00b21 notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1702
diff changeset
1770 notification.type_ = type_
1717
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
1771 notification.created_on = datetime.datetime.now()
1713
54687aa00724 Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents: 1712
diff changeset
1772
1702
8cb7f5c4d494 #302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents: 1693
diff changeset
1773 for u in recipients:
1713
54687aa00724 Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents: 1712
diff changeset
1774 assoc = UserNotification()
54687aa00724 Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents: 1712
diff changeset
1775 assoc.notification = notification
54687aa00724 Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents: 1712
diff changeset
1776 u.notifications.append(assoc)
2520
a1e156503afe Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents: 2510
diff changeset
1777 Session().add(notification)
1702
8cb7f5c4d494 #302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents: 1693
diff changeset
1778 return notification
8cb7f5c4d494 #302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents: 1693
diff changeset
1779
1712
cac5109ac3b6 Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1703
diff changeset
1780 @property
cac5109ac3b6 Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1703
diff changeset
1781 def description(self):
cac5109ac3b6 Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1703
diff changeset
1782 from rhodecode.model.notification import NotificationModel
cac5109ac3b6 Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1703
diff changeset
1783 return NotificationModel().make_description(self)
cac5109ac3b6 Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1703
diff changeset
1784
1800
6c86c987cf93 pep8ify
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
1785
1702
8cb7f5c4d494 #302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents: 1693
diff changeset
1786 class UserNotification(Base, BaseModel):
8cb7f5c4d494 #302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents: 1693
diff changeset
1787 __tablename__ = 'user_to_notification'
1958
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
1788 __table_args__ = (
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
1789 UniqueConstraint('user_id', 'notification_id'),
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
1790 {'extend_existing': True, 'mysql_engine': 'InnoDB',
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1791 'mysql_charset': 'utf8'}
1958
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
1792 )
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
1793 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
1794 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
1795 read = Column('read', Boolean, default=False)
1702
8cb7f5c4d494 #302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents: 1693
diff changeset
1796 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
1797
1713
54687aa00724 Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents: 1712
diff changeset
1798 user = relationship('User', lazy="joined")
1717
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
1799 notification = relationship('Notification', lazy="joined",
1960
3daa7093fbbb fix typo in db models
Marcin Kuzminski <marcin@python-works.com>
parents: 1958
diff changeset
1800 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
1801
1712
cac5109ac3b6 Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1703
diff changeset
1802 def mark_as_read(self):
cac5109ac3b6 Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1703
diff changeset
1803 self.read = True
2520
a1e156503afe Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents: 2510
diff changeset
1804 Session().add(self)
1702
8cb7f5c4d494 #302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents: 1693
diff changeset
1805
1800
6c86c987cf93 pep8ify
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
1806
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1807 class DbMigrateVersion(Base, BaseModel):
834
8924ed0e4f36 added current db version into rhodecode,
Marcin Kuzminski <marcin@python-works.com>
parents: 832
diff changeset
1808 __tablename__ = 'db_migrate_version'
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1809 __table_args__ = (
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
1810 {'extend_existing': True, 'mysql_engine': 'InnoDB',
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1811 'mysql_charset': 'utf8'},
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1812 )
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1813 repository_id = Column('repository_id', String(250), primary_key=True)
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1814 repository_path = Column('repository_path', Text)
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1815 version = Column('version', Integer)