annotate rhodecode/model/db.py @ 4049:3b5f32aeed36

comments: clarify in ui whether comments are for changeset or PR
author Mads Kiilerich <madski@unity3d.com>
date Wed, 12 Jun 2013 02:13:05 +0200
parents 7f71d22a1794
children ffd45b185016
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
3850
7a4df261a375 added alias configuration option for gists.
Marcin Kuzminski <marcin@python-works.com>
parents: 3842
diff changeset
27 import time
759
a7f50911a945 Models code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 734
diff changeset
28 import logging
a7f50911a945 Models code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 734
diff changeset
29 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
30 import traceback
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
31 import hashlib
3850
7a4df261a375 added alias configuration option for gists.
Marcin Kuzminski <marcin@python-works.com>
parents: 3842
diff changeset
32 import collections
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
3420
a6bef3e8a361 Update changeset cache should use non-cache version of repo if given attribute is empty, it's easier to controll how changesets are udpated
Marcin Kuzminski <marcin@python-works.com>
parents: 3417
diff changeset
47 from rhodecode.lib.vcs.backends.base import EmptyChangeset
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
48
2109
8ecfed1d8f8b utils/conf
Marcin Kuzminski <marcin@python-works.com>
parents: 2079
diff changeset
49 from rhodecode.lib.utils2 import str2bool, safe_str, get_changeset_safe, \
3577
238486bb71ab Switched handling of RhodeCode extra params in consistent way
Marcin Kuzminski <marcin@python-works.com>
parents: 3567
diff changeset
50 safe_unicode, remove_suffix, remove_prefix, time_to_datetime, _set_extras
1514
87ec80c280bb fixed issues with python2.5
Marcin Kuzminski <marcin@python-works.com>
parents: 1508
diff changeset
51 from rhodecode.lib.compat import json
1669
f522f4d3bf93 moved caching query to libs
Marcin Kuzminski <marcin@python-works.com>
parents: 1665
diff changeset
52 from rhodecode.lib.caching_query import FromCache
1500
256e729a94cd Extended API
Marcin Kuzminski <marcin@python-works.com>
parents: 1466
diff changeset
53
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
54 from rhodecode.model.meta import Base, Session
1500
256e729a94cd Extended API
Marcin Kuzminski <marcin@python-works.com>
parents: 1466
diff changeset
55
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
56 URL_SEP = '/'
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
57 log = logging.getLogger(__name__)
49
3ada2f409c1c Added sqlalchemy support
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
58
1081
70bf0be59653 fixed Session problems in model class functions
Marcin Kuzminski <marcin@python-works.com>
parents: 1065
diff changeset
59 #==============================================================================
1388
2029c17cc6c6 Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents: 1385
diff changeset
60 # BASE CLASSES
1081
70bf0be59653 fixed Session problems in model class functions
Marcin Kuzminski <marcin@python-works.com>
parents: 1065
diff changeset
61 #==============================================================================
70bf0be59653 fixed Session problems in model class functions
Marcin Kuzminski <marcin@python-works.com>
parents: 1065
diff changeset
62
2062
bf8ed0adbc66 fixes #371 fixed issues with beaker/sqlalchemy and non-ascii cache keys
Marcin Kuzminski <marcin@python-works.com>
parents: 2058
diff changeset
63 _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
64
1800
6c86c987cf93 pep8ify
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
65
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
66 class BaseModel(object):
1758
a87aa385f21c fixed repo_create permission by adding missing commit statements
Marcin Kuzminski <marcin@python-works.com>
parents: 1757
diff changeset
67 """
a87aa385f21c fixed repo_create permission by adding missing commit statements
Marcin Kuzminski <marcin@python-works.com>
parents: 1757
diff changeset
68 Base Model for all classess
1388
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
2029c17cc6c6 Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents: 1385
diff changeset
71 @classmethod
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
72 def _get_keys(cls):
1388
2029c17cc6c6 Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents: 1385
diff changeset
73 """return column names for this model """
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
74 return class_mapper(cls).c.keys()
1388
2029c17cc6c6 Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents: 1385
diff changeset
75
1948
4582e6b9e2f6 get_dict function garden
Marcin Kuzminski <marcin@python-works.com>
parents: 1886
diff changeset
76 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
77 """
a87aa385f21c fixed repo_create permission by adding missing commit statements
Marcin Kuzminski <marcin@python-works.com>
parents: 1757
diff changeset
78 return dict with keys and values corresponding
1948
4582e6b9e2f6 get_dict function garden
Marcin Kuzminski <marcin@python-works.com>
parents: 1886
diff changeset
79 to this model data """
1388
2029c17cc6c6 Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents: 1385
diff changeset
80
2029c17cc6c6 Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents: 1385
diff changeset
81 d = {}
2029c17cc6c6 Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents: 1385
diff changeset
82 for k in self._get_keys():
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
83 d[k] = getattr(self, k)
1800
6c86c987cf93 pep8ify
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
84
1758
a87aa385f21c fixed repo_create permission by adding missing commit statements
Marcin Kuzminski <marcin@python-works.com>
parents: 1757
diff changeset
85 # 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
86 _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
87 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
88 # 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
89 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
90 _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
91 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
92 d[k] = val
1388
2029c17cc6c6 Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents: 1385
diff changeset
93 return d
2029c17cc6c6 Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents: 1385
diff changeset
94
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
95 def get_appstruct(self):
1388
2029c17cc6c6 Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents: 1385
diff changeset
96 """return list with keys and values tupples corresponding
2029c17cc6c6 Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents: 1385
diff changeset
97 to this model data """
2029c17cc6c6 Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents: 1385
diff changeset
98
2029c17cc6c6 Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents: 1385
diff changeset
99 l = []
2029c17cc6c6 Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents: 1385
diff changeset
100 for k in self._get_keys():
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
101 l.append((k, getattr(self, k),))
1388
2029c17cc6c6 Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents: 1385
diff changeset
102 return l
2029c17cc6c6 Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents: 1385
diff changeset
103
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
104 def populate_obj(self, populate_dict):
1388
2029c17cc6c6 Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents: 1385
diff changeset
105 """populate model with data from given populate_dict"""
2029c17cc6c6 Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents: 1385
diff changeset
106
2029c17cc6c6 Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents: 1385
diff changeset
107 for k in self._get_keys():
2029c17cc6c6 Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents: 1385
diff changeset
108 if k in populate_dict:
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
109 setattr(self, k, populate_dict[k])
1388
2029c17cc6c6 Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents: 1385
diff changeset
110
2029c17cc6c6 Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents: 1385
diff changeset
111 @classmethod
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
112 def query(cls):
2520
a1e156503afe Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents: 2510
diff changeset
113 return Session().query(cls)
1388
2029c17cc6c6 Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents: 1385
diff changeset
114
2029c17cc6c6 Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents: 1385
diff changeset
115 @classmethod
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
116 def get(cls, id_):
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
117 if id_:
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
118 return cls.query().get(id_)
1466
ad5a543a9b2f Code cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1460
diff changeset
119
1460
b50348816a80 Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents: 1436
diff changeset
120 @classmethod
2496
fddd8e3fc157 use get_or_404 where possible
Marcin Kuzminski <marcin@python-works.com>
parents: 2481
diff changeset
121 def get_or_404(cls, id_):
2942
f53faff4487e get_or_404 method does validation for ID beeing an INT
Marcin Kuzminski <marcin@python-works.com>
parents: 2937
diff changeset
122 try:
f53faff4487e get_or_404 method does validation for ID beeing an INT
Marcin Kuzminski <marcin@python-works.com>
parents: 2937
diff changeset
123 id_ = int(id_)
f53faff4487e get_or_404 method does validation for ID beeing an INT
Marcin Kuzminski <marcin@python-works.com>
parents: 2937
diff changeset
124 except (TypeError, ValueError):
f53faff4487e get_or_404 method does validation for ID beeing an INT
Marcin Kuzminski <marcin@python-works.com>
parents: 2937
diff changeset
125 raise HTTPNotFound
f53faff4487e get_or_404 method does validation for ID beeing an INT
Marcin Kuzminski <marcin@python-works.com>
parents: 2937
diff changeset
126
f53faff4487e get_or_404 method does validation for ID beeing an INT
Marcin Kuzminski <marcin@python-works.com>
parents: 2937
diff changeset
127 res = cls.query().get(id_)
f53faff4487e get_or_404 method does validation for ID beeing an INT
Marcin Kuzminski <marcin@python-works.com>
parents: 2937
diff changeset
128 if not res:
f53faff4487e get_or_404 method does validation for ID beeing an INT
Marcin Kuzminski <marcin@python-works.com>
parents: 2937
diff changeset
129 raise HTTPNotFound
f53faff4487e get_or_404 method does validation for ID beeing an INT
Marcin Kuzminski <marcin@python-works.com>
parents: 2937
diff changeset
130 return res
2496
fddd8e3fc157 use get_or_404 where possible
Marcin Kuzminski <marcin@python-works.com>
parents: 2481
diff changeset
131
fddd8e3fc157 use get_or_404 where possible
Marcin Kuzminski <marcin@python-works.com>
parents: 2481
diff changeset
132 @classmethod
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
133 def getAll(cls):
3714
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
134 # deprecated and left for backward compatibility
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
135 return cls.get_all()
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
136
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
137 @classmethod
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
138 def get_all(cls):
1584
3338a0994472 Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents: 1508
diff changeset
139 return cls.query().all()
1466
ad5a543a9b2f Code cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1460
diff changeset
140
1460
b50348816a80 Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents: 1436
diff changeset
141 @classmethod
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
142 def delete(cls, id_):
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
143 obj = cls.query().get(id_)
2520
a1e156503afe Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents: 2510
diff changeset
144 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
145
2156
a27e4d44237e Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents: 2152
diff changeset
146 def __repr__(self):
a27e4d44237e Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents: 2152
diff changeset
147 if hasattr(self, '__unicode__'):
a27e4d44237e Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents: 2152
diff changeset
148 # python repr needs to return str
a27e4d44237e Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents: 2152
diff changeset
149 return safe_str(self.__unicode__())
a27e4d44237e Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents: 2152
diff changeset
150 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
151
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
152
1633
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1607
diff changeset
153 class RhodeCodeSetting(Base, BaseModel):
548
b75b77ef649d renamed hg_app to rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
154 __tablename__ = 'rhodecode_settings'
1958
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
155 __table_args__ = (
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
156 UniqueConstraint('app_settings_name'),
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
157 {'extend_existing': True, 'mysql_engine': 'InnoDB',
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
158 'mysql_charset': 'utf8'}
1958
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
159 )
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
160 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
161 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
162 _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
163
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
164 def __init__(self, k='', v=''):
704
26237de9b613 Added settings model, and Exceptions lib.
Marcin Kuzminski <marcin@python-works.com>
parents: 692
diff changeset
165 self.app_settings_name = k
26237de9b613 Added settings model, and Exceptions lib.
Marcin Kuzminski <marcin@python-works.com>
parents: 692
diff changeset
166 self.app_settings_value = v
26237de9b613 Added settings model, and Exceptions lib.
Marcin Kuzminski <marcin@python-works.com>
parents: 692
diff changeset
167
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
168 @validates('_app_settings_value')
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
169 def validate_settings_value(self, key, val):
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
170 assert type(val) == unicode
1561
4d841e565237 added validation of params on settings table
Marcin Kuzminski <marcin@python-works.com>
parents: 1556
diff changeset
171 return val
4d841e565237 added validation of params on settings table
Marcin Kuzminski <marcin@python-works.com>
parents: 1556
diff changeset
172
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
173 @hybrid_property
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
174 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
175 v = self._app_settings_value
3056
6104dfd35b16 Implemented #379 defaults settings page for creation of repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 3052
diff changeset
176 if self.app_settings_name in ["ldap_active",
6104dfd35b16 Implemented #379 defaults settings page for creation of repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 3052
diff changeset
177 "default_repo_enable_statistics",
6104dfd35b16 Implemented #379 defaults settings page for creation of repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 3052
diff changeset
178 "default_repo_enable_locking",
6104dfd35b16 Implemented #379 defaults settings page for creation of repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 3052
diff changeset
179 "default_repo_private",
6104dfd35b16 Implemented #379 defaults settings page for creation of repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 3052
diff changeset
180 "default_repo_enable_downloads"]:
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
181 v = str2bool(v)
1591
0b63a0d2cede Merge with upstream
Nicolas VINOT <aeris@imirhil.fr>
parents: 1576 1590
diff changeset
182 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
183
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
184 @app_settings_value.setter
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
185 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
186 """
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
187 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
188
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
189 :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
190 """
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
191 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
192
2156
a27e4d44237e Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents: 2152
diff changeset
193 def __unicode__(self):
a27e4d44237e Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents: 2152
diff changeset
194 return u"<%s('%s:%s')>" % (
1958
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
195 self.__class__.__name__,
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
196 self.app_settings_name, self.app_settings_value
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
197 )
704
26237de9b613 Added settings model, and Exceptions lib.
Marcin Kuzminski <marcin@python-works.com>
parents: 692
diff changeset
198
1266
a1bcfe58a1ab Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
199 @classmethod
2674
a221706dab50 merged + fixed pull request #62: Implemented metatags and visualisation options.
Marcin Kuzminski <marcin@python-works.com>
parents: 2668
diff changeset
200 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
201 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
202 .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
203
a221706dab50 merged + fixed pull request #62: Implemented metatags and visualisation options.
Marcin Kuzminski <marcin@python-works.com>
parents: 2668
diff changeset
204 @classmethod
a221706dab50 merged + fixed pull request #62: Implemented metatags and visualisation options.
Marcin Kuzminski <marcin@python-works.com>
parents: 2668
diff changeset
205 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
206 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
207 if not res:
a221706dab50 merged + fixed pull request #62: Implemented metatags and visualisation options.
Marcin Kuzminski <marcin@python-works.com>
parents: 2668
diff changeset
208 res = cls(key)
a221706dab50 merged + fixed pull request #62: Implemented metatags and visualisation options.
Marcin Kuzminski <marcin@python-works.com>
parents: 2668
diff changeset
209 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
210
c0335c1dee36 added some fixes to LDAP form re-submition, new simples ldap-settings getter.
Marcin Kuzminski <marcin@python-works.com>
parents: 1279
diff changeset
211 @classmethod
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
212 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
213
1584
3338a0994472 Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents: 1508
diff changeset
214 ret = cls.query()
1266
a1bcfe58a1ab Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
215
a1bcfe58a1ab Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
216 if cache:
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
217 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
218
a1bcfe58a1ab Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
219 if not ret:
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
220 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
221 settings = {}
a1bcfe58a1ab Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
222 for each in ret:
a1bcfe58a1ab Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
223 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
224 each.app_settings_value
a1bcfe58a1ab Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
225
a1bcfe58a1ab Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
226 return settings
a1bcfe58a1ab Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
227
a1bcfe58a1ab Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
228 @classmethod
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
229 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
230 ret = cls.query()\
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
231 .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
232 fd = {}
a1bcfe58a1ab Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
233 for row in ret:
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
234 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
235
1266
a1bcfe58a1ab Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
236 return fd
a1bcfe58a1ab Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
237
3056
6104dfd35b16 Implemented #379 defaults settings page for creation of repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 3052
diff changeset
238 @classmethod
6104dfd35b16 Implemented #379 defaults settings page for creation of repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 3052
diff changeset
239 def get_default_repo_settings(cls, cache=False, strip_prefix=False):
6104dfd35b16 Implemented #379 defaults settings page for creation of repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 3052
diff changeset
240 ret = cls.query()\
6104dfd35b16 Implemented #379 defaults settings page for creation of repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 3052
diff changeset
241 .filter(cls.app_settings_name.startswith('default_')).all()
6104dfd35b16 Implemented #379 defaults settings page for creation of repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 3052
diff changeset
242 fd = {}
6104dfd35b16 Implemented #379 defaults settings page for creation of repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 3052
diff changeset
243 for row in ret:
6104dfd35b16 Implemented #379 defaults settings page for creation of repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 3052
diff changeset
244 key = row.app_settings_name
6104dfd35b16 Implemented #379 defaults settings page for creation of repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 3052
diff changeset
245 if strip_prefix:
6104dfd35b16 Implemented #379 defaults settings page for creation of repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 3052
diff changeset
246 key = remove_prefix(key, prefix='default_')
6104dfd35b16 Implemented #379 defaults settings page for creation of repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 3052
diff changeset
247 fd.update({key: row.app_settings_value})
6104dfd35b16 Implemented #379 defaults settings page for creation of repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 3052
diff changeset
248
6104dfd35b16 Implemented #379 defaults settings page for creation of repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 3052
diff changeset
249 return fd
6104dfd35b16 Implemented #379 defaults settings page for creation of repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 3052
diff changeset
250
1266
a1bcfe58a1ab Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
251
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
252 class RhodeCodeUi(Base, BaseModel):
548
b75b77ef649d renamed hg_app to rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents: 547
diff changeset
253 __tablename__ = 'rhodecode_ui'
1958
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
254 __table_args__ = (
1963
9bbde54232dc white space cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1960
diff changeset
255 UniqueConstraint('ui_key'),
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
256 {'extend_existing': True, 'mysql_engine': 'InnoDB',
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
257 'mysql_charset': 'utf8'}
1958
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
258 )
1460
b50348816a80 Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents: 1436
diff changeset
259
b50348816a80 Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents: 1436
diff changeset
260 HOOK_UPDATE = 'changegroup.update'
b50348816a80 Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents: 1436
diff changeset
261 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
262 HOOK_PUSH = 'changegroup.push_logger'
2726
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
263 HOOK_PRE_PUSH = 'prechangegroup.pre_push'
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
264 HOOK_PULL = 'outgoing.pull_logger'
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
265 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
266
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
267 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
268 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
269 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
270 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
271 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
272
3909
e87298ccdfdb Add default for dashbord items and create default
Marcin Kuzminski <marcin@python-works.com>
parents: 3870
diff changeset
273 # def __init__(self, section='', key='', value=''):
e87298ccdfdb Add default for dashbord items and create default
Marcin Kuzminski <marcin@python-works.com>
parents: 3870
diff changeset
274 # self.ui_section = section
e87298ccdfdb Add default for dashbord items and create default
Marcin Kuzminski <marcin@python-works.com>
parents: 3870
diff changeset
275 # self.ui_key = key
e87298ccdfdb Add default for dashbord items and create default
Marcin Kuzminski <marcin@python-works.com>
parents: 3870
diff changeset
276 # self.ui_value = value
e87298ccdfdb Add default for dashbord items and create default
Marcin Kuzminski <marcin@python-works.com>
parents: 3870
diff changeset
277
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
278 @classmethod
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
279 def get_by_key(cls, key):
2708
9bce679a3f49 Added form for controlling mercurial extensions
Marcin Kuzminski <marcin@python-works.com>
parents: 2689
diff changeset
280 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
281
1460
b50348816a80 Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents: 1436
diff changeset
282 @classmethod
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
283 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
284 q = cls.query()
2726
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
285 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
286 cls.HOOK_PUSH, cls.HOOK_PRE_PUSH,
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
287 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
288 return q.all()
b50348816a80 Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents: 1436
diff changeset
289
b50348816a80 Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents: 1436
diff changeset
290 @classmethod
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
291 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
292 q = cls.query()
2726
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
293 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
294 cls.HOOK_PUSH, cls.HOOK_PRE_PUSH,
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
295 cls.HOOK_PULL, cls.HOOK_PRE_PULL]))
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
296 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
297 return q.all()
b50348816a80 Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents: 1436
diff changeset
298
b50348816a80 Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents: 1436
diff changeset
299 @classmethod
2401
e2af60e480ce Removed hardcoded hooks names from settings.
Marcin Kuzminski <marcin@python-works.com>
parents: 2400
diff changeset
300 def get_repos_location(cls):
2708
9bce679a3f49 Added form for controlling mercurial extensions
Marcin Kuzminski <marcin@python-works.com>
parents: 2689
diff changeset
301 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
302
e2af60e480ce Removed hardcoded hooks names from settings.
Marcin Kuzminski <marcin@python-works.com>
parents: 2400
diff changeset
303 @classmethod
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
304 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
305 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
306 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
307 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
308 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
309 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
310
2520
a1e156503afe Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents: 2510
diff changeset
311 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
312
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
313 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
314 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
315 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
316
1460
b50348816a80 Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents: 1436
diff changeset
317
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
318 class User(Base, BaseModel):
49
3ada2f409c1c Added sqlalchemy support
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
319 __tablename__ = 'users'
1958
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
320 __table_args__ = (
1963
9bbde54232dc white space cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1960
diff changeset
321 UniqueConstraint('username'), UniqueConstraint('email'),
2726
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
322 Index('u_username_idx', 'username'),
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
323 Index('u_email_idx', 'email'),
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
324 {'extend_existing': True, 'mysql_engine': 'InnoDB',
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
325 'mysql_charset': 'utf8'}
1958
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
326 )
2726
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
327 DEFAULT_USER = 'default'
3733
af049a957506 fixed default permissions population during upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 3729
diff changeset
328
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
329 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
330 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
331 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
332 active = Column("active", Boolean(), nullable=True, unique=None, default=True)
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
333 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
334 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
335 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
336 _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
337 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
338 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
339 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
340 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
341
3065
09e8623362ef remove not null from user_id column for users log archiving
Marcin Kuzminski <marcin@python-works.com>
parents: 3063
diff changeset
342 user_log = relationship('UserLog')
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
343 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
344
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
345 repositories = relationship('Repository')
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
346 user_followers = relationship('UserFollowing', primaryjoin='UserFollowing.follows_user_id==User.user_id', cascade='all')
3067
9b0636e9b16b fixed issue with cascade deleting of following entries
Marcin Kuzminski <marcin@python-works.com>
parents: 3065
diff changeset
347 followings = relationship('UserFollowing', primaryjoin='UserFollowing.user_id==User.user_id', cascade='all')
9b0636e9b16b fixed issue with cascade deleting of following entries
Marcin Kuzminski <marcin@python-works.com>
parents: 3065
diff changeset
348
1633
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1607
diff changeset
349 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
350 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
351
3417
fa6ba6727475 further cleanup of UsersGroup
Mads Kiilerich <madski@unity3d.com>
parents: 3416
diff changeset
352 group_member = relationship('UserGroupMember', 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
353
2157
6a2c0cfb018d Cascade delete comments and notifications when removing user.
Marcin Kuzminski <marcin@python-works.com>
parents: 2156
diff changeset
354 notifications = relationship('UserNotification', cascade='all')
6a2c0cfb018d Cascade delete comments and notifications when removing user.
Marcin Kuzminski <marcin@python-works.com>
parents: 2156
diff changeset
355 # notifications assigned to this user
6a2c0cfb018d Cascade delete comments and notifications when removing user.
Marcin Kuzminski <marcin@python-works.com>
parents: 2156
diff changeset
356 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
357 # comments created by this user
6a2c0cfb018d Cascade delete comments and notifications when removing user.
Marcin Kuzminski <marcin@python-works.com>
parents: 2156
diff changeset
358 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
359 #extra emails for this user
78f96d7bb23b cascade delete extra emails on user delete
Marcin Kuzminski <marcin@python-works.com>
parents: 2544
diff changeset
360 user_emails = relationship('UserEmailMap', cascade='all')
1702
8cb7f5c4d494 #302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents: 1693
diff changeset
361
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
362 @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
363 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
364 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
365
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
366 @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
367 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
368 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
369
759
a7f50911a945 Models code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents: 734
diff changeset
370 @property
2731
09d8fec02954 Implemented #532.
Marcin Kuzminski <marcin@python-works.com>
parents: 2726
diff changeset
371 def firstname(self):
09d8fec02954 Implemented #532.
Marcin Kuzminski <marcin@python-works.com>
parents: 2726
diff changeset
372 # alias for future
09d8fec02954 Implemented #532.
Marcin Kuzminski <marcin@python-works.com>
parents: 2726
diff changeset
373 return self.name
09d8fec02954 Implemented #532.
Marcin Kuzminski <marcin@python-works.com>
parents: 2726
diff changeset
374
09d8fec02954 Implemented #532.
Marcin Kuzminski <marcin@python-works.com>
parents: 2726
diff changeset
375 @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
376 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
377 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
378 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
379
7e3e9d0c5575 Add list of all emails that user may have into get_user call
Marcin Kuzminski <marcin@python-works.com>
parents: 2496
diff changeset
380 @property
3127
71ce052f8b6b add ipaddresses to repo data on API calls
Marcin Kuzminski <marcin@python-works.com>
parents: 3125
diff changeset
381 def ip_addresses(self):
71ce052f8b6b add ipaddresses to repo data on API calls
Marcin Kuzminski <marcin@python-works.com>
parents: 3125
diff changeset
382 ret = UserIpMap.query().filter(UserIpMap.user == self).all()
71ce052f8b6b add ipaddresses to repo data on API calls
Marcin Kuzminski <marcin@python-works.com>
parents: 3125
diff changeset
383 return [x.ip_addr for x in ret]
71ce052f8b6b add ipaddresses to repo data on API calls
Marcin Kuzminski <marcin@python-works.com>
parents: 3125
diff changeset
384
71ce052f8b6b add ipaddresses to repo data on API calls
Marcin Kuzminski <marcin@python-works.com>
parents: 3125
diff changeset
385 @property
2731
09d8fec02954 Implemented #532.
Marcin Kuzminski <marcin@python-works.com>
parents: 2726
diff changeset
386 def username_and_name(self):
09d8fec02954 Implemented #532.
Marcin Kuzminski <marcin@python-works.com>
parents: 2726
diff changeset
387 return '%s (%s %s)' % (self.username, self.firstname, self.lastname)
09d8fec02954 Implemented #532.
Marcin Kuzminski <marcin@python-works.com>
parents: 2726
diff changeset
388
09d8fec02954 Implemented #532.
Marcin Kuzminski <marcin@python-works.com>
parents: 2726
diff changeset
389 @property
1731
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
390 def full_name(self):
2731
09d8fec02954 Implemented #532.
Marcin Kuzminski <marcin@python-works.com>
parents: 2726
diff changeset
391 return '%s %s' % (self.firstname, self.lastname)
1731
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
392
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
393 @property
1950
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1948
diff changeset
394 def full_name_or_username(self):
2731
09d8fec02954 Implemented #532.
Marcin Kuzminski <marcin@python-works.com>
parents: 2726
diff changeset
395 return ('%s %s' % (self.firstname, self.lastname)
09d8fec02954 Implemented #532.
Marcin Kuzminski <marcin@python-works.com>
parents: 2726
diff changeset
396 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
397
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1948
diff changeset
398 @property
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
399 def full_contact(self):
2731
09d8fec02954 Implemented #532.
Marcin Kuzminski <marcin@python-works.com>
parents: 2726
diff changeset
400 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
401
895
62c04c5cc971 Added some more details into user edit permissions view
Marcin Kuzminski <marcin@python-works.com>
parents: 880
diff changeset
402 @property
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
403 def short_contact(self):
2731
09d8fec02954 Implemented #532.
Marcin Kuzminski <marcin@python-works.com>
parents: 2726
diff changeset
404 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
405
fee472613dfa made simple global rss and atom feed
Marcin Kuzminski <marcin@python-works.com>
parents: 1081
diff changeset
406 @property
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
407 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
408 return self.admin
62c04c5cc971 Added some more details into user edit permissions view
Marcin Kuzminski <marcin@python-works.com>
parents: 880
diff changeset
409
3370
fdb0f59b2189 fixes #762, LDAP and container created users are now activated based on
Marcin Kuzminski <marcin@python-works.com>
parents: 3361
diff changeset
410 @property
fdb0f59b2189 fixes #762, LDAP and container created users are now activated based on
Marcin Kuzminski <marcin@python-works.com>
parents: 3361
diff changeset
411 def AuthUser(self):
fdb0f59b2189 fixes #762, LDAP and container created users are now activated based on
Marcin Kuzminski <marcin@python-works.com>
parents: 3361
diff changeset
412 """
fdb0f59b2189 fixes #762, LDAP and container created users are now activated based on
Marcin Kuzminski <marcin@python-works.com>
parents: 3361
diff changeset
413 Returns instance of AuthUser for this user
fdb0f59b2189 fixes #762, LDAP and container created users are now activated based on
Marcin Kuzminski <marcin@python-works.com>
parents: 3361
diff changeset
414 """
fdb0f59b2189 fixes #762, LDAP and container created users are now activated based on
Marcin Kuzminski <marcin@python-works.com>
parents: 3361
diff changeset
415 from rhodecode.lib.auth import AuthUser
fdb0f59b2189 fixes #762, LDAP and container created users are now activated based on
Marcin Kuzminski <marcin@python-works.com>
parents: 3361
diff changeset
416 return AuthUser(user_id=self.user_id, api_key=self.api_key,
fdb0f59b2189 fixes #762, LDAP and container created users are now activated based on
Marcin Kuzminski <marcin@python-works.com>
parents: 3361
diff changeset
417 username=self.username)
fdb0f59b2189 fixes #762, LDAP and container created users are now activated based on
Marcin Kuzminski <marcin@python-works.com>
parents: 3361
diff changeset
418
2156
a27e4d44237e Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents: 2152
diff changeset
419 def __unicode__(self):
a27e4d44237e Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents: 2152
diff changeset
420 return u"<%s('id:%s:%s')>" % (self.__class__.__name__,
1712
cac5109ac3b6 Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1703
diff changeset
421 self.user_id, self.username)
cac5109ac3b6 Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1703
diff changeset
422
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
423 @classmethod
1665
36f77a46f291 Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents: 1634
diff changeset
424 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
425 if case_insensitive:
1665
36f77a46f291 Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents: 1634
diff changeset
426 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
427 else:
1665
36f77a46f291 Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents: 1634
diff changeset
428 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
429
36f77a46f291 Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents: 1634
diff changeset
430 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
431 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
432 "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
433 "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
434 )
bf8ed0adbc66 fixes #371 fixed issues with beaker/sqlalchemy and non-ascii cache keys
Marcin Kuzminski <marcin@python-works.com>
parents: 2058
diff changeset
435 )
1665
36f77a46f291 Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents: 1634
diff changeset
436 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
437
1417
5875955def39 fixes #223 improve password reset form
Marcin Kuzminski <marcin@python-works.com>
parents: 1401
diff changeset
438 @classmethod
1665
36f77a46f291 Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents: 1634
diff changeset
439 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
440 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
441
36f77a46f291 Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents: 1634
diff changeset
442 if cache:
36f77a46f291 Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents: 1634
diff changeset
443 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
444 "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
445 return q.scalar()
1417
5875955def39 fixes #223 improve password reset form
Marcin Kuzminski <marcin@python-works.com>
parents: 1401
diff changeset
446
1716
7d1fc253549e notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents: 1713
diff changeset
447 @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
448 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
449 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
450 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
451 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
452 q = cls.query().filter(cls.email == email)
1716
7d1fc253549e notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents: 1713
diff changeset
453
7d1fc253549e notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents: 1713
diff changeset
454 if cache:
7d1fc253549e notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents: 1713
diff changeset
455 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
456 "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
457
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
458 ret = q.scalar()
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
459 if ret is None:
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
460 q = UserEmailMap.query()
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
461 # 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
462 if case_insensitive:
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
463 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
464 else:
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
465 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
466 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
467 if cache:
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
468 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
469 "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
470 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
471
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
472 return ret
1716
7d1fc253549e notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents: 1713
diff changeset
473
3185
a665d8cdd351 improved extraction of user from changeset when sending notification.
Marcin Kuzminski <marcin@python-works.com>
parents: 3174
diff changeset
474 @classmethod
a665d8cdd351 improved extraction of user from changeset when sending notification.
Marcin Kuzminski <marcin@python-works.com>
parents: 3174
diff changeset
475 def get_from_cs_author(cls, author):
a665d8cdd351 improved extraction of user from changeset when sending notification.
Marcin Kuzminski <marcin@python-works.com>
parents: 3174
diff changeset
476 """
a665d8cdd351 improved extraction of user from changeset when sending notification.
Marcin Kuzminski <marcin@python-works.com>
parents: 3174
diff changeset
477 Tries to get User objects out of commit author string
a665d8cdd351 improved extraction of user from changeset when sending notification.
Marcin Kuzminski <marcin@python-works.com>
parents: 3174
diff changeset
478
a665d8cdd351 improved extraction of user from changeset when sending notification.
Marcin Kuzminski <marcin@python-works.com>
parents: 3174
diff changeset
479 :param author:
a665d8cdd351 improved extraction of user from changeset when sending notification.
Marcin Kuzminski <marcin@python-works.com>
parents: 3174
diff changeset
480 """
a665d8cdd351 improved extraction of user from changeset when sending notification.
Marcin Kuzminski <marcin@python-works.com>
parents: 3174
diff changeset
481 from rhodecode.lib.helpers import email, author_name
a665d8cdd351 improved extraction of user from changeset when sending notification.
Marcin Kuzminski <marcin@python-works.com>
parents: 3174
diff changeset
482 # Valid email in the attribute passed, see if they're in the system
a665d8cdd351 improved extraction of user from changeset when sending notification.
Marcin Kuzminski <marcin@python-works.com>
parents: 3174
diff changeset
483 _email = email(author)
a665d8cdd351 improved extraction of user from changeset when sending notification.
Marcin Kuzminski <marcin@python-works.com>
parents: 3174
diff changeset
484 if _email:
a665d8cdd351 improved extraction of user from changeset when sending notification.
Marcin Kuzminski <marcin@python-works.com>
parents: 3174
diff changeset
485 user = cls.get_by_email(_email, case_insensitive=True)
a665d8cdd351 improved extraction of user from changeset when sending notification.
Marcin Kuzminski <marcin@python-works.com>
parents: 3174
diff changeset
486 if user:
a665d8cdd351 improved extraction of user from changeset when sending notification.
Marcin Kuzminski <marcin@python-works.com>
parents: 3174
diff changeset
487 return user
a665d8cdd351 improved extraction of user from changeset when sending notification.
Marcin Kuzminski <marcin@python-works.com>
parents: 3174
diff changeset
488 # Maybe we can match by username?
a665d8cdd351 improved extraction of user from changeset when sending notification.
Marcin Kuzminski <marcin@python-works.com>
parents: 3174
diff changeset
489 _author = author_name(author)
a665d8cdd351 improved extraction of user from changeset when sending notification.
Marcin Kuzminski <marcin@python-works.com>
parents: 3174
diff changeset
490 user = cls.get_by_username(_author, case_insensitive=True)
a665d8cdd351 improved extraction of user from changeset when sending notification.
Marcin Kuzminski <marcin@python-works.com>
parents: 3174
diff changeset
491 if user:
a665d8cdd351 improved extraction of user from changeset when sending notification.
Marcin Kuzminski <marcin@python-works.com>
parents: 3174
diff changeset
492 return user
a665d8cdd351 improved extraction of user from changeset when sending notification.
Marcin Kuzminski <marcin@python-works.com>
parents: 3174
diff changeset
493
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
494 def update_lastlogin(self):
442
d66a7fa7689b moved loged in user propagation out of forms,
Marcin Kuzminski <marcin@python-works.com>
parents: 417
diff changeset
495 """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
496 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
497 Session().add(self)
1976
Marcin Kuzminski <marcin@python-works.com>
parents: 1963
diff changeset
498 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
499
3714
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
500 @classmethod
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
501 def get_first_admin(cls):
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
502 user = User.query().filter(User.admin == True).first()
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
503 if user is None:
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
504 raise Exception('Missing administrative account!')
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
505 return user
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
506
3733
af049a957506 fixed default permissions population during upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 3729
diff changeset
507 @classmethod
af049a957506 fixed default permissions population during upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 3729
diff changeset
508 def get_default_user(cls, cache=False):
af049a957506 fixed default permissions population during upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 3729
diff changeset
509 user = User.get_by_username(User.DEFAULT_USER, cache=cache)
af049a957506 fixed default permissions population during upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 3729
diff changeset
510 if user is None:
af049a957506 fixed default permissions population during upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 3729
diff changeset
511 raise Exception('Missing default account!')
af049a957506 fixed default permissions population during upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 3729
diff changeset
512 return user
af049a957506 fixed default permissions population during upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 3729
diff changeset
513
2508
43cb5b6047fd Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents: 2506
diff changeset
514 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
515 """
43cb5b6047fd Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents: 2506
diff changeset
516 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
517 """
43cb5b6047fd Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents: 2506
diff changeset
518 user = self
43cb5b6047fd Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents: 2506
diff changeset
519 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
520 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
521 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
522 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
523 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
524 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
525 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
526 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
527 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
528 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
529 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
530 last_login=user.last_login,
3127
71ce052f8b6b add ipaddresses to repo data on API calls
Marcin Kuzminski <marcin@python-works.com>
parents: 3125
diff changeset
531 ip_addresses=user.ip_addresses
2508
43cb5b6047fd Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents: 2506
diff changeset
532 )
43cb5b6047fd Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents: 2506
diff changeset
533 return data
43cb5b6047fd Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents: 2506
diff changeset
534
1758
a87aa385f21c fixed repo_create permission by adding missing commit statements
Marcin Kuzminski <marcin@python-works.com>
parents: 1757
diff changeset
535 def __json__(self):
2544
6ce3387bf0ce Renamed name to firstname in forms
Marcin Kuzminski <marcin@python-works.com>
parents: 2542
diff changeset
536 data = dict(
1950
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1948
diff changeset
537 full_name=self.full_name,
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1948
diff changeset
538 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
539 short_contact=self.short_contact,
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1948
diff changeset
540 full_contact=self.full_contact
4ae17f819ee8 #344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents: 1948
diff changeset
541 )
2544
6ce3387bf0ce Renamed name to firstname in forms
Marcin Kuzminski <marcin@python-works.com>
parents: 2542
diff changeset
542 data.update(self.get_api_data())
6ce3387bf0ce Renamed name to firstname in forms
Marcin Kuzminski <marcin@python-works.com>
parents: 2542
diff changeset
543 return data
1758
a87aa385f21c fixed repo_create permission by adding missing commit statements
Marcin Kuzminski <marcin@python-works.com>
parents: 1757
diff changeset
544
a87aa385f21c fixed repo_create permission by adding missing commit statements
Marcin Kuzminski <marcin@python-works.com>
parents: 1757
diff changeset
545
2329
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
546 class UserEmailMap(Base, BaseModel):
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
547 __tablename__ = 'user_email_map'
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
548 __table_args__ = (
2463
b426ecc30319 Added some DB indexes to optimize queries
Marcin Kuzminski <marcin@python-works.com>
parents: 2462
diff changeset
549 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
550 UniqueConstraint('email'),
2463
b426ecc30319 Added some DB indexes to optimize queries
Marcin Kuzminski <marcin@python-works.com>
parents: 2462
diff changeset
551 {'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
552 'mysql_charset': 'utf8'}
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
553 )
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
554 __mapper_args__ = {}
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
555
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
556 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
557 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
558 _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
559 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
560
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
561 @validates('_email')
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
562 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
563 # 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
564 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
565 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
566 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
567 return email
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
568
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
569 @hybrid_property
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
570 def email(self):
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
571 return self._email
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
572
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
573 @email.setter
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
574 def email(self, val):
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
575 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
576
20e307d5250f Added email-map for alternative email addresses for users
Marcin Kuzminski <marcin@python-works.com>
parents: 2296
diff changeset
577
3125
9b92cf5a0cca Added UserIpMap interface for allowed IP addresses and IP restriction access
Marcin Kuzminski <marcin@python-works.com>
parents: 3115
diff changeset
578 class UserIpMap(Base, BaseModel):
9b92cf5a0cca Added UserIpMap interface for allowed IP addresses and IP restriction access
Marcin Kuzminski <marcin@python-works.com>
parents: 3115
diff changeset
579 __tablename__ = 'user_ip_map'
9b92cf5a0cca Added UserIpMap interface for allowed IP addresses and IP restriction access
Marcin Kuzminski <marcin@python-works.com>
parents: 3115
diff changeset
580 __table_args__ = (
9b92cf5a0cca Added UserIpMap interface for allowed IP addresses and IP restriction access
Marcin Kuzminski <marcin@python-works.com>
parents: 3115
diff changeset
581 UniqueConstraint('user_id', 'ip_addr'),
9b92cf5a0cca Added UserIpMap interface for allowed IP addresses and IP restriction access
Marcin Kuzminski <marcin@python-works.com>
parents: 3115
diff changeset
582 {'extend_existing': True, 'mysql_engine': 'InnoDB',
9b92cf5a0cca Added UserIpMap interface for allowed IP addresses and IP restriction access
Marcin Kuzminski <marcin@python-works.com>
parents: 3115
diff changeset
583 'mysql_charset': 'utf8'}
9b92cf5a0cca Added UserIpMap interface for allowed IP addresses and IP restriction access
Marcin Kuzminski <marcin@python-works.com>
parents: 3115
diff changeset
584 )
9b92cf5a0cca Added UserIpMap interface for allowed IP addresses and IP restriction access
Marcin Kuzminski <marcin@python-works.com>
parents: 3115
diff changeset
585 __mapper_args__ = {}
9b92cf5a0cca Added UserIpMap interface for allowed IP addresses and IP restriction access
Marcin Kuzminski <marcin@python-works.com>
parents: 3115
diff changeset
586
9b92cf5a0cca Added UserIpMap interface for allowed IP addresses and IP restriction access
Marcin Kuzminski <marcin@python-works.com>
parents: 3115
diff changeset
587 ip_id = Column("ip_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
9b92cf5a0cca Added UserIpMap interface for allowed IP addresses and IP restriction access
Marcin Kuzminski <marcin@python-works.com>
parents: 3115
diff changeset
588 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=True, unique=None, default=None)
9b92cf5a0cca Added UserIpMap interface for allowed IP addresses and IP restriction access
Marcin Kuzminski <marcin@python-works.com>
parents: 3115
diff changeset
589 ip_addr = Column("ip_addr", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=False, default=None)
3146
c5169e445fb8 Full IP restrictions enabled
Marcin Kuzminski <marcin@python-works.com>
parents: 3127
diff changeset
590 active = Column("active", Boolean(), nullable=True, unique=None, default=True)
3125
9b92cf5a0cca Added UserIpMap interface for allowed IP addresses and IP restriction access
Marcin Kuzminski <marcin@python-works.com>
parents: 3115
diff changeset
591 user = relationship('User', lazy='joined')
9b92cf5a0cca Added UserIpMap interface for allowed IP addresses and IP restriction access
Marcin Kuzminski <marcin@python-works.com>
parents: 3115
diff changeset
592
9b92cf5a0cca Added UserIpMap interface for allowed IP addresses and IP restriction access
Marcin Kuzminski <marcin@python-works.com>
parents: 3115
diff changeset
593 @classmethod
9b92cf5a0cca Added UserIpMap interface for allowed IP addresses and IP restriction access
Marcin Kuzminski <marcin@python-works.com>
parents: 3115
diff changeset
594 def _get_ip_range(cls, ip_addr):
9b92cf5a0cca Added UserIpMap interface for allowed IP addresses and IP restriction access
Marcin Kuzminski <marcin@python-works.com>
parents: 3115
diff changeset
595 from rhodecode.lib import ipaddr
3212
6c28533d122c IP restrictions now also enabled for IPv6
Marcin Kuzminski <marcin@python-works.com>
parents: 3185
diff changeset
596 net = ipaddr.IPNetwork(address=ip_addr)
3125
9b92cf5a0cca Added UserIpMap interface for allowed IP addresses and IP restriction access
Marcin Kuzminski <marcin@python-works.com>
parents: 3115
diff changeset
597 return [str(net.network), str(net.broadcast)]
9b92cf5a0cca Added UserIpMap interface for allowed IP addresses and IP restriction access
Marcin Kuzminski <marcin@python-works.com>
parents: 3115
diff changeset
598
9b92cf5a0cca Added UserIpMap interface for allowed IP addresses and IP restriction access
Marcin Kuzminski <marcin@python-works.com>
parents: 3115
diff changeset
599 def __json__(self):
9b92cf5a0cca Added UserIpMap interface for allowed IP addresses and IP restriction access
Marcin Kuzminski <marcin@python-works.com>
parents: 3115
diff changeset
600 return dict(
9b92cf5a0cca Added UserIpMap interface for allowed IP addresses and IP restriction access
Marcin Kuzminski <marcin@python-works.com>
parents: 3115
diff changeset
601 ip_addr=self.ip_addr,
9b92cf5a0cca Added UserIpMap interface for allowed IP addresses and IP restriction access
Marcin Kuzminski <marcin@python-works.com>
parents: 3115
diff changeset
602 ip_range=self._get_ip_range(self.ip_addr)
9b92cf5a0cca Added UserIpMap interface for allowed IP addresses and IP restriction access
Marcin Kuzminski <marcin@python-works.com>
parents: 3115
diff changeset
603 )
9b92cf5a0cca Added UserIpMap interface for allowed IP addresses and IP restriction access
Marcin Kuzminski <marcin@python-works.com>
parents: 3115
diff changeset
604
9b92cf5a0cca Added UserIpMap interface for allowed IP addresses and IP restriction access
Marcin Kuzminski <marcin@python-works.com>
parents: 3115
diff changeset
605
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
606 class UserLog(Base, BaseModel):
49
3ada2f409c1c Added sqlalchemy support
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff changeset
607 __tablename__ = 'user_logs'
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
608 __table_args__ = (
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
609 {'extend_existing': True, 'mysql_engine': 'InnoDB',
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
610 'mysql_charset': 'utf8'},
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
611 )
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
612 user_log_id = Column("user_log_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
3065
09e8623362ef remove not null from user_id column for users log archiving
Marcin Kuzminski <marcin@python-works.com>
parents: 3063
diff changeset
613 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=True, unique=None, default=None)
3063
ca2b21819dfd Implemented better support for Wildcard queries
Marcin Kuzminski <marcin@python-works.com>
parents: 3056
diff changeset
614 username = Column("username", String(255, convert_unicode=False, assert_unicode=None), nullable=True, 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
615 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
616 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
617 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
618 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
619 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
620
3868
e262494ca099 store download archive actions in journal
Marcin Kuzminski <marcin@python-works.com>
parents: 3866
diff changeset
621 def __unicode__(self):
e262494ca099 store download archive actions in journal
Marcin Kuzminski <marcin@python-works.com>
parents: 3866
diff changeset
622 return u"<%s('id:%s:%s')>" % (self.__class__.__name__,
e262494ca099 store download archive actions in journal
Marcin Kuzminski <marcin@python-works.com>
parents: 3866
diff changeset
623 self.repository_name,
e262494ca099 store download archive actions in journal
Marcin Kuzminski <marcin@python-works.com>
parents: 3866
diff changeset
624 self.action)
e262494ca099 store download archive actions in journal
Marcin Kuzminski <marcin@python-works.com>
parents: 3866
diff changeset
625
994
7f9d23f6a526 Added grouping by days in journal
Marcin Kuzminski <marcin@python-works.com>
parents: 991
diff changeset
626 @property
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
627 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
628 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
629
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
630 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
631 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
632
956
83d35d716a02 started working on issue #56
Marcin Kuzminski <marcin@python-works.com>
parents: 907
diff changeset
633
3417
fa6ba6727475 further cleanup of UsersGroup
Mads Kiilerich <madski@unity3d.com>
parents: 3416
diff changeset
634 class UserGroup(Base, BaseModel):
956
83d35d716a02 started working on issue #56
Marcin Kuzminski <marcin@python-works.com>
parents: 907
diff changeset
635 __tablename__ = 'users_groups'
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
636 __table_args__ = (
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
637 {'extend_existing': True, 'mysql_engine': 'InnoDB',
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
638 'mysql_charset': 'utf8'},
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
639 )
956
83d35d716a02 started working on issue #56
Marcin Kuzminski <marcin@python-works.com>
parents: 907
diff changeset
640
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
641 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
642 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
643 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
644 inherit_default_permissions = Column("users_group_inherit_default_permissions", Boolean(), nullable=False, unique=None, default=True)
3714
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
645 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=False, default=None)
956
83d35d716a02 started working on issue #56
Marcin Kuzminski <marcin@python-works.com>
parents: 907
diff changeset
646
3417
fa6ba6727475 further cleanup of UsersGroup
Mads Kiilerich <madski@unity3d.com>
parents: 3416
diff changeset
647 members = relationship('UserGroupMember', cascade="all, delete, delete-orphan", lazy="joined")
fa6ba6727475 further cleanup of UsersGroup
Mads Kiilerich <madski@unity3d.com>
parents: 3416
diff changeset
648 users_group_to_perm = relationship('UserGroupToPerm', cascade='all')
fa6ba6727475 further cleanup of UsersGroup
Mads Kiilerich <madski@unity3d.com>
parents: 3416
diff changeset
649 users_group_repo_to_perm = relationship('UserGroupRepoToPerm', cascade='all')
3734
a8f520540ab0 New default permissions definition for user group create
Marcin Kuzminski <marcin@python-works.com>
parents: 3733
diff changeset
650 users_group_repo_group_to_perm = relationship('UserGroupRepoGroupToPerm', cascade='all')
3714
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
651 user_user_group_to_perm = relationship('UserUserGroupToPerm ', cascade='all')
3788
d9b89874edf9 UserGroup on UserGroup permissions implementation.
Marcin Kuzminski <marcin@python-works.com>
parents: 3786
diff changeset
652 user_group_user_group_to_perm = relationship('UserGroupUserGroupToPerm ', primaryjoin="UserGroupUserGroupToPerm.target_user_group_id==UserGroup.users_group_id", cascade='all')
d9b89874edf9 UserGroup on UserGroup permissions implementation.
Marcin Kuzminski <marcin@python-works.com>
parents: 3786
diff changeset
653
3714
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
654 user = relationship('User')
956
83d35d716a02 started working on issue #56
Marcin Kuzminski <marcin@python-works.com>
parents: 907
diff changeset
655
2156
a27e4d44237e Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents: 2152
diff changeset
656 def __unicode__(self):
3714
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
657 return u"<%s('id:%s:%s')>" % (self.__class__.__name__,
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
658 self.users_group_id,
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
659 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
660
aa7e45ad0cea Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents: 1266
diff changeset
661 @classmethod
1728
07e56179633e - fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents: 1727
diff changeset
662 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
663 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
664 if case_insensitive:
1728
07e56179633e - fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents: 1727
diff changeset
665 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
666 else:
1728
07e56179633e - fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents: 1727
diff changeset
667 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
668 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
669 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
670 "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
671 "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
672 )
bf8ed0adbc66 fixes #371 fixed issues with beaker/sqlalchemy and non-ascii cache keys
Marcin Kuzminski <marcin@python-works.com>
parents: 2058
diff changeset
673 )
1728
07e56179633e - fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents: 1727
diff changeset
674 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
675
1436
88d13c1c6a55 removed users_group controller in replace for model methods,
Marcin Kuzminski <marcin@python-works.com>
parents: 1435
diff changeset
676 @classmethod
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
677 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
678 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
679 if cache:
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
680 users_group = users_group.options(FromCache("sql_cache_short",
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
681 "get_users_group_%s" % users_group_id))
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
682 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
683
2523
788ae4f7d8df added get_api_data into UsersGroup
Marcin Kuzminski <marcin@python-works.com>
parents: 2520
diff changeset
684 def get_api_data(self):
788ae4f7d8df added get_api_data into UsersGroup
Marcin Kuzminski <marcin@python-works.com>
parents: 2520
diff changeset
685 users_group = self
788ae4f7d8df added get_api_data into UsersGroup
Marcin Kuzminski <marcin@python-works.com>
parents: 2520
diff changeset
686
788ae4f7d8df added get_api_data into UsersGroup
Marcin Kuzminski <marcin@python-works.com>
parents: 2520
diff changeset
687 data = dict(
2531
d80a68e2ebcc return proper id from users_group
Marcin Kuzminski <marcin@python-works.com>
parents: 2523
diff changeset
688 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
689 group_name=users_group.users_group_name,
788ae4f7d8df added get_api_data into UsersGroup
Marcin Kuzminski <marcin@python-works.com>
parents: 2520
diff changeset
690 active=users_group.users_group_active,
788ae4f7d8df added get_api_data into UsersGroup
Marcin Kuzminski <marcin@python-works.com>
parents: 2520
diff changeset
691 )
788ae4f7d8df added get_api_data into UsersGroup
Marcin Kuzminski <marcin@python-works.com>
parents: 2520
diff changeset
692
788ae4f7d8df added get_api_data into UsersGroup
Marcin Kuzminski <marcin@python-works.com>
parents: 2520
diff changeset
693 return data
788ae4f7d8df added get_api_data into UsersGroup
Marcin Kuzminski <marcin@python-works.com>
parents: 2520
diff changeset
694
1800
6c86c987cf93 pep8ify
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
695
3417
fa6ba6727475 further cleanup of UsersGroup
Mads Kiilerich <madski@unity3d.com>
parents: 3416
diff changeset
696 class UserGroupMember(Base, BaseModel):
956
83d35d716a02 started working on issue #56
Marcin Kuzminski <marcin@python-works.com>
parents: 907
diff changeset
697 __tablename__ = 'users_groups_members'
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
698 __table_args__ = (
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
699 {'extend_existing': True, 'mysql_engine': 'InnoDB',
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
700 'mysql_charset': 'utf8'},
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
701 )
956
83d35d716a02 started working on issue #56
Marcin Kuzminski <marcin@python-works.com>
parents: 907
diff changeset
702
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
703 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
704 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
705 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
706
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
707 user = relationship('User', lazy='joined')
3417
fa6ba6727475 further cleanup of UsersGroup
Mads Kiilerich <madski@unity3d.com>
parents: 3416
diff changeset
708 users_group = relationship('UserGroup')
972
2c8fd84935a4 #56 implemented users groups editing,
Marcin Kuzminski <marcin@python-works.com>
parents: 962
diff changeset
709
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
710 def __init__(self, gr_id='', u_id=''):
972
2c8fd84935a4 #56 implemented users groups editing,
Marcin Kuzminski <marcin@python-works.com>
parents: 962
diff changeset
711 self.users_group_id = gr_id
2c8fd84935a4 #56 implemented users groups editing,
Marcin Kuzminski <marcin@python-works.com>
parents: 962
diff changeset
712 self.user_id = u_id
956
83d35d716a02 started working on issue #56
Marcin Kuzminski <marcin@python-works.com>
parents: 907
diff changeset
713
2013
8530c3cd9d04 fixed issue with hybrid property for ldap_active
Marcin Kuzminski <marcin@python-works.com>
parents: 2007
diff changeset
714
3308
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3278
diff changeset
715 class RepositoryField(Base, BaseModel):
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3278
diff changeset
716 __tablename__ = 'repositories_fields'
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3278
diff changeset
717 __table_args__ = (
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3278
diff changeset
718 UniqueConstraint('repository_id', 'field_key'), # no-multi field
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3278
diff changeset
719 {'extend_existing': True, 'mysql_engine': 'InnoDB',
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3278
diff changeset
720 'mysql_charset': 'utf8'},
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3278
diff changeset
721 )
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3278
diff changeset
722 PREFIX = 'ex_' # prefix used in form to not conflict with already existing fields
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3278
diff changeset
723
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3278
diff changeset
724 repo_field_id = Column("repo_field_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3278
diff changeset
725 repository_id = Column("repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=False, unique=None, default=None)
3361
14556b463177 mysql indexed keys cannot be larger thatn 256 chars, but 250 is enough for this purpose
Marcin Kuzminski <marcin@python-works.com>
parents: 3308
diff changeset
726 field_key = Column("field_key", String(250, convert_unicode=False, assert_unicode=None))
3308
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3278
diff changeset
727 field_label = Column("field_label", String(1024, convert_unicode=False, assert_unicode=None), nullable=False)
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3278
diff changeset
728 field_value = Column("field_value", String(10000, convert_unicode=False, assert_unicode=None), nullable=False)
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3278
diff changeset
729 field_desc = Column("field_desc", String(1024, convert_unicode=False, assert_unicode=None), nullable=False)
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3278
diff changeset
730 field_type = Column("field_type", String(256), nullable=False, unique=None)
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3278
diff changeset
731 created_on = Column('created_on', DateTime(timezone=False), nullable=False, default=datetime.datetime.now)
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3278
diff changeset
732
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3278
diff changeset
733 repository = relationship('Repository')
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3278
diff changeset
734
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3278
diff changeset
735 @property
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3278
diff changeset
736 def field_key_prefixed(self):
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3278
diff changeset
737 return 'ex_%s' % self.field_key
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3278
diff changeset
738
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3278
diff changeset
739 @classmethod
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3278
diff changeset
740 def un_prefix_key(cls, key):
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3278
diff changeset
741 if key.startswith(cls.PREFIX):
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3278
diff changeset
742 return key[len(cls.PREFIX):]
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3278
diff changeset
743 return key
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3278
diff changeset
744
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3278
diff changeset
745 @classmethod
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3278
diff changeset
746 def get_by_key_name(cls, key, repo):
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3278
diff changeset
747 row = cls.query()\
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3278
diff changeset
748 .filter(cls.repository == repo)\
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3278
diff changeset
749 .filter(cls.field_key == key).scalar()
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3278
diff changeset
750 return row
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3278
diff changeset
751
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3278
diff changeset
752
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
753 class Repository(Base, BaseModel):
234
a0116e944da1 changed naming convention for db modules.
Marcin Kuzminski <marcin@python-works.com>
parents: 232
diff changeset
754 __tablename__ = 'repositories'
1958
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
755 __table_args__ = (
1963
9bbde54232dc white space cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1960
diff changeset
756 UniqueConstraint('repo_name'),
2726
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
757 Index('r_repo_name_idx', 'repo_name'),
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
758 {'extend_existing': True, 'mysql_engine': 'InnoDB',
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
759 'mysql_charset': 'utf8'},
1958
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
760 )
1081
70bf0be59653 fixed Session problems in model class functions
Marcin Kuzminski <marcin@python-works.com>
parents: 1065
diff changeset
761
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
762 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
763 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
764 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
765 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
766 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
767 private = Column("private", Boolean(), nullable=True, unique=None, default=None)
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
768 enable_statistics = Column("statistics", Boolean(), nullable=True, unique=None, default=True)
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
769 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
770 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
771 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
772 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
773 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
774 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
775 _locked = Column("locked", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=False, default=None)
3147
8182ebed2922 Added full last changeset info to lightweight dashboard
Marcin Kuzminski <marcin@python-works.com>
parents: 3146
diff changeset
776 _changeset_cache = Column("changeset_cache", LargeBinary(), nullable=True) #JSON data
1301
7e75af301842 Added simple forks page, resolves issue #179
Marcin Kuzminski <marcin@python-works.com>
parents: 1292
diff changeset
777
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
778 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
779 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
780
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
781 user = relationship('User')
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
782 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
783 group = relationship('RepoGroup')
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1607
diff changeset
784 repo_to_perm = relationship('UserRepoToPerm', cascade='all', order_by='UserRepoToPerm.repo_to_perm_id')
3417
fa6ba6727475 further cleanup of UsersGroup
Mads Kiilerich <madski@unity3d.com>
parents: 3416
diff changeset
785 users_group_to_perm = relationship('UserGroupRepoToPerm', cascade='all')
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
786 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
787
2674
a221706dab50 merged + fixed pull request #62: Implemented metatags and visualisation options.
Marcin Kuzminski <marcin@python-works.com>
parents: 2668
diff changeset
788 followers = relationship('UserFollowing',
a221706dab50 merged + fixed pull request #62: Implemented metatags and visualisation options.
Marcin Kuzminski <marcin@python-works.com>
parents: 2668
diff changeset
789 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
790 cascade='all')
3308
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3278
diff changeset
791 extra_fields = relationship('RepositoryField',
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3278
diff changeset
792 cascade="all, delete, delete-orphan")
734
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 713
diff changeset
793
1747
8804715404c9 implements #193 journal stores information about deleting of repos
Marcin Kuzminski <marcin@python-works.com>
parents: 1744
diff changeset
794 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
795 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
796
2666
c51fb1da6df2 cascade fixes for comments/pull-requests/reviewers
Marcin Kuzminski <marcin@python-works.com>
parents: 2665
diff changeset
797 pull_requests_org = relationship('PullRequest',
c51fb1da6df2 cascade fixes for comments/pull-requests/reviewers
Marcin Kuzminski <marcin@python-works.com>
parents: 2665
diff changeset
798 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
799 cascade="all, delete, delete-orphan")
c51fb1da6df2 cascade fixes for comments/pull-requests/reviewers
Marcin Kuzminski <marcin@python-works.com>
parents: 2665
diff changeset
800
c51fb1da6df2 cascade fixes for comments/pull-requests/reviewers
Marcin Kuzminski <marcin@python-works.com>
parents: 2665
diff changeset
801 pull_requests_other = relationship('PullRequest',
c51fb1da6df2 cascade fixes for comments/pull-requests/reviewers
Marcin Kuzminski <marcin@python-works.com>
parents: 2665
diff changeset
802 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
803 cascade="all, delete, delete-orphan")
c51fb1da6df2 cascade fixes for comments/pull-requests/reviewers
Marcin Kuzminski <marcin@python-works.com>
parents: 2665
diff changeset
804
2156
a27e4d44237e Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents: 2152
diff changeset
805 def __unicode__(self):
2459
9492ab68331f Initial version of landing revisions ref #483
Marcin Kuzminski <marcin@python-works.com>
parents: 2407
diff changeset
806 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
807 self.repo_name)
878
859bc9e7a15d Extended repo2db mapper with group creation via directory structures
Marcin Kuzminski <marcin@python-works.com>
parents: 836
diff changeset
808
2726
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
809 @hybrid_property
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
810 def locked(self):
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
811 # always should return [user_id, timelocked]
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
812 if self._locked:
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
813 _lock_info = self._locked.split(':')
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
814 return int(_lock_info[0]), _lock_info[1]
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
815 return [None, None]
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
816
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
817 @locked.setter
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
818 def locked(self, val):
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
819 if val and isinstance(val, (list, tuple)):
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
820 self._locked = ':'.join(map(str, val))
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
821 else:
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
822 self._locked = None
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
823
3147
8182ebed2922 Added full last changeset info to lightweight dashboard
Marcin Kuzminski <marcin@python-works.com>
parents: 3146
diff changeset
824 @hybrid_property
8182ebed2922 Added full last changeset info to lightweight dashboard
Marcin Kuzminski <marcin@python-works.com>
parents: 3146
diff changeset
825 def changeset_cache(self):
8182ebed2922 Added full last changeset info to lightweight dashboard
Marcin Kuzminski <marcin@python-works.com>
parents: 3146
diff changeset
826 from rhodecode.lib.vcs.backends.base import EmptyChangeset
8182ebed2922 Added full last changeset info to lightweight dashboard
Marcin Kuzminski <marcin@python-works.com>
parents: 3146
diff changeset
827 dummy = EmptyChangeset().__json__()
8182ebed2922 Added full last changeset info to lightweight dashboard
Marcin Kuzminski <marcin@python-works.com>
parents: 3146
diff changeset
828 if not self._changeset_cache:
8182ebed2922 Added full last changeset info to lightweight dashboard
Marcin Kuzminski <marcin@python-works.com>
parents: 3146
diff changeset
829 return dummy
8182ebed2922 Added full last changeset info to lightweight dashboard
Marcin Kuzminski <marcin@python-works.com>
parents: 3146
diff changeset
830 try:
8182ebed2922 Added full last changeset info to lightweight dashboard
Marcin Kuzminski <marcin@python-works.com>
parents: 3146
diff changeset
831 return json.loads(self._changeset_cache)
8182ebed2922 Added full last changeset info to lightweight dashboard
Marcin Kuzminski <marcin@python-works.com>
parents: 3146
diff changeset
832 except TypeError:
8182ebed2922 Added full last changeset info to lightweight dashboard
Marcin Kuzminski <marcin@python-works.com>
parents: 3146
diff changeset
833 return dummy
8182ebed2922 Added full last changeset info to lightweight dashboard
Marcin Kuzminski <marcin@python-works.com>
parents: 3146
diff changeset
834
8182ebed2922 Added full last changeset info to lightweight dashboard
Marcin Kuzminski <marcin@python-works.com>
parents: 3146
diff changeset
835 @changeset_cache.setter
8182ebed2922 Added full last changeset info to lightweight dashboard
Marcin Kuzminski <marcin@python-works.com>
parents: 3146
diff changeset
836 def changeset_cache(self, val):
8182ebed2922 Added full last changeset info to lightweight dashboard
Marcin Kuzminski <marcin@python-works.com>
parents: 3146
diff changeset
837 try:
8182ebed2922 Added full last changeset info to lightweight dashboard
Marcin Kuzminski <marcin@python-works.com>
parents: 3146
diff changeset
838 self._changeset_cache = json.dumps(val)
3631
10b4e34841a4 Don't catch all exceptions
Marcin Kuzminski <marcin@python-works.com>
parents: 3625
diff changeset
839 except Exception:
3147
8182ebed2922 Added full last changeset info to lightweight dashboard
Marcin Kuzminski <marcin@python-works.com>
parents: 3146
diff changeset
840 log.error(traceback.format_exc())
8182ebed2922 Added full last changeset info to lightweight dashboard
Marcin Kuzminski <marcin@python-works.com>
parents: 3146
diff changeset
841
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
842 @classmethod
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
843 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
844 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
845
1554
e7c6341ad3cb fixes #245 Rescan of the repositories on Windows
Marcin Kuzminski <marcin@python-works.com>
parents: 1547
diff changeset
846 @classmethod
3152
46234d2d388f fixed issues with getting repos by path on windows
Marcin Kuzminski <marcin@python-works.com>
parents: 3147
diff changeset
847 def normalize_repo_name(cls, repo_name):
46234d2d388f fixed issues with getting repos by path on windows
Marcin Kuzminski <marcin@python-works.com>
parents: 3147
diff changeset
848 """
46234d2d388f fixed issues with getting repos by path on windows
Marcin Kuzminski <marcin@python-works.com>
parents: 3147
diff changeset
849 Normalizes os specific repo_name to the format internally stored inside
46234d2d388f fixed issues with getting repos by path on windows
Marcin Kuzminski <marcin@python-works.com>
parents: 3147
diff changeset
850 dabatabase using URL_SEP
46234d2d388f fixed issues with getting repos by path on windows
Marcin Kuzminski <marcin@python-works.com>
parents: 3147
diff changeset
851
46234d2d388f fixed issues with getting repos by path on windows
Marcin Kuzminski <marcin@python-works.com>
parents: 3147
diff changeset
852 :param cls:
46234d2d388f fixed issues with getting repos by path on windows
Marcin Kuzminski <marcin@python-works.com>
parents: 3147
diff changeset
853 :param repo_name:
46234d2d388f fixed issues with getting repos by path on windows
Marcin Kuzminski <marcin@python-works.com>
parents: 3147
diff changeset
854 """
46234d2d388f fixed issues with getting repos by path on windows
Marcin Kuzminski <marcin@python-works.com>
parents: 3147
diff changeset
855 return cls.url_sep().join(repo_name.split(os.sep))
46234d2d388f fixed issues with getting repos by path on windows
Marcin Kuzminski <marcin@python-works.com>
parents: 3147
diff changeset
856
46234d2d388f fixed issues with getting repos by path on windows
Marcin Kuzminski <marcin@python-works.com>
parents: 3147
diff changeset
857 @classmethod
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
858 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
859 q = Session().query(cls).filter(cls.repo_name == repo_name)
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
860 q = q.options(joinedload(Repository.fork))\
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
861 .options(joinedload(Repository.user))\
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
862 .options(joinedload(Repository.group))
1749
8ecc6b8229a5 commit less models
Marcin Kuzminski <marcin@python-works.com>
parents: 1747
diff changeset
863 return q.scalar()
1301
7e75af301842 Added simple forks page, resolves issue #179
Marcin Kuzminski <marcin@python-works.com>
parents: 1292
diff changeset
864
7e75af301842 Added simple forks page, resolves issue #179
Marcin Kuzminski <marcin@python-works.com>
parents: 1292
diff changeset
865 @classmethod
2400
e87c6aa9c5e7 Add method for fetching repos by full path
Marcin Kuzminski <marcin@python-works.com>
parents: 2356
diff changeset
866 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
867 repo_name = repo_full_path.split(cls.base_path(), 1)[-1]
3152
46234d2d388f fixed issues with getting repos by path on windows
Marcin Kuzminski <marcin@python-works.com>
parents: 3147
diff changeset
868 repo_name = cls.normalize_repo_name(repo_name)
2400
e87c6aa9c5e7 Add method for fetching repos by full path
Marcin Kuzminski <marcin@python-works.com>
parents: 2356
diff changeset
869 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
870
e87c6aa9c5e7 Add method for fetching repos by full path
Marcin Kuzminski <marcin@python-works.com>
parents: 2356
diff changeset
871 @classmethod
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
872 def get_repo_forks(cls, repo_id):
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
873 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
874
1508
4aba7be311e8 API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents: 1500
diff changeset
875 @classmethod
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
876 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
877 """
4aba7be311e8 API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents: 1500
diff changeset
878 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
879
1508
4aba7be311e8 API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents: 1500
diff changeset
880 :param cls:
4aba7be311e8 API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents: 1500
diff changeset
881 """
2520
a1e156503afe Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents: 2510
diff changeset
882 q = Session().query(RhodeCodeUi)\
1728
07e56179633e - fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents: 1727
diff changeset
883 .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
884 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
885 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
886
1113
c1eda8ec4a46 added clone_uri,api_key into models. Fixed models for mysql compatibilty
Marcin Kuzminski <marcin@python-works.com>
parents: 1088
diff changeset
887 @property
2395
b262e349a7a5 created pull-request overview
Marcin Kuzminski <marcin@python-works.com>
parents: 2392
diff changeset
888 def forks(self):
b262e349a7a5 created pull-request overview
Marcin Kuzminski <marcin@python-works.com>
parents: 2392
diff changeset
889 """
b262e349a7a5 created pull-request overview
Marcin Kuzminski <marcin@python-works.com>
parents: 2392
diff changeset
890 Return forks of this repo
b262e349a7a5 created pull-request overview
Marcin Kuzminski <marcin@python-works.com>
parents: 2392
diff changeset
891 """
b262e349a7a5 created pull-request overview
Marcin Kuzminski <marcin@python-works.com>
parents: 2392
diff changeset
892 return Repository.get_repo_forks(self.repo_id)
b262e349a7a5 created pull-request overview
Marcin Kuzminski <marcin@python-works.com>
parents: 2392
diff changeset
893
b262e349a7a5 created pull-request overview
Marcin Kuzminski <marcin@python-works.com>
parents: 2392
diff changeset
894 @property
b262e349a7a5 created pull-request overview
Marcin Kuzminski <marcin@python-works.com>
parents: 2392
diff changeset
895 def parent(self):
b262e349a7a5 created pull-request overview
Marcin Kuzminski <marcin@python-works.com>
parents: 2392
diff changeset
896 """
b262e349a7a5 created pull-request overview
Marcin Kuzminski <marcin@python-works.com>
parents: 2392
diff changeset
897 Returns fork parent
b262e349a7a5 created pull-request overview
Marcin Kuzminski <marcin@python-works.com>
parents: 2392
diff changeset
898 """
b262e349a7a5 created pull-request overview
Marcin Kuzminski <marcin@python-works.com>
parents: 2392
diff changeset
899 return self.fork
b262e349a7a5 created pull-request overview
Marcin Kuzminski <marcin@python-works.com>
parents: 2392
diff changeset
900
b262e349a7a5 created pull-request overview
Marcin Kuzminski <marcin@python-works.com>
parents: 2392
diff changeset
901 @property
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
902 def just_name(self):
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
903 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
904
37a9421f32a0 Added handy methods to Repository model for fetching groups with parents
Marcin Kuzminski <marcin@python-works.com>
parents: 1113
diff changeset
905 @property
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
906 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
907 groups = []
37a9421f32a0 Added handy methods to Repository model for fetching groups with parents
Marcin Kuzminski <marcin@python-works.com>
parents: 1113
diff changeset
908 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
909 return groups
37a9421f32a0 Added handy methods to Repository model for fetching groups with parents
Marcin Kuzminski <marcin@python-works.com>
parents: 1113
diff changeset
910
37a9421f32a0 Added handy methods to Repository model for fetching groups with parents
Marcin Kuzminski <marcin@python-works.com>
parents: 1113
diff changeset
911 cur_gr = self.group
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
912 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
913 while 1:
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
914 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
915 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
916 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
917 break
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
918 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
919
37a9421f32a0 Added handy methods to Repository model for fetching groups with parents
Marcin Kuzminski <marcin@python-works.com>
parents: 1113
diff changeset
920 return groups
37a9421f32a0 Added handy methods to Repository model for fetching groups with parents
Marcin Kuzminski <marcin@python-works.com>
parents: 1113
diff changeset
921
37a9421f32a0 Added handy methods to Repository model for fetching groups with parents
Marcin Kuzminski <marcin@python-works.com>
parents: 1113
diff changeset
922 @property
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
923 def groups_and_repo(self):
3599
8087731920d8 breadcrumbs: make repo names link to summary pages
Mads Kiilerich <madski@unity3d.com>
parents: 3577
diff changeset
924 return self.groups_with_parents, self.just_name, self.repo_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
925
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
926 @LazyProperty
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
927 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
928 """
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
929 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
930 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
931 """
2520
a1e156503afe Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents: 2510
diff changeset
932 q = Session().query(RhodeCodeUi).filter(RhodeCodeUi.ui_key ==
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
933 Repository.url_sep())
1727
8e9f51091229 fixed caching query on repos path
Marcin Kuzminski <marcin@python-works.com>
parents: 1723
diff changeset
934 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
935 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
936
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
937 @property
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
938 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
939 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
940 # 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
941 # 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
942 # into a valid system path
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
943 p += self.repo_name.split(Repository.url_sep())
3636
ddc4c12f00fb fixed issues with importing non-ascii repo names
Marcin Kuzminski <marcin@python-works.com>
parents: 3631
diff changeset
944 return os.path.join(*map(safe_unicode, 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
945
2809
070d2eacd48b Show cache keys in admin settings of repository
Marcin Kuzminski <marcin@python-works.com>
parents: 2808
diff changeset
946 @property
070d2eacd48b Show cache keys in admin settings of repository
Marcin Kuzminski <marcin@python-works.com>
parents: 2808
diff changeset
947 def cache_keys(self):
070d2eacd48b Show cache keys in admin settings of repository
Marcin Kuzminski <marcin@python-works.com>
parents: 2808
diff changeset
948 """
070d2eacd48b Show cache keys in admin settings of repository
Marcin Kuzminski <marcin@python-works.com>
parents: 2808
diff changeset
949 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
950 """
070d2eacd48b Show cache keys in admin settings of repository
Marcin Kuzminski <marcin@python-works.com>
parents: 2808
diff changeset
951 return CacheInvalidation.query()\
070d2eacd48b Show cache keys in admin settings of repository
Marcin Kuzminski <marcin@python-works.com>
parents: 2808
diff changeset
952 .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
953 .order_by(CacheInvalidation.cache_key)\
070d2eacd48b Show cache keys in admin settings of repository
Marcin Kuzminski <marcin@python-works.com>
parents: 2808
diff changeset
954 .all()
070d2eacd48b Show cache keys in admin settings of repository
Marcin Kuzminski <marcin@python-works.com>
parents: 2808
diff changeset
955
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
956 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
957 """
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
958 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
959
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
960 :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
961 """
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
962 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
963 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
964
1366
9c0f5d558789 fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents: 1360
diff changeset
965 @property
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
966 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
967 """
9c0f5d558789 fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents: 1360
diff changeset
968 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
969 """
2982
78227b65a358 remove duplicated code for generating UI objects
Marcin Kuzminski <marcin@python-works.com>
parents: 2942
diff changeset
970 from rhodecode.lib.utils import make_ui
78227b65a358 remove duplicated code for generating UI objects
Marcin Kuzminski <marcin@python-works.com>
parents: 2942
diff changeset
971 return make_ui('db', clear_session=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
972
1508
4aba7be311e8 API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents: 1500
diff changeset
973 @classmethod
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
974 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
975 """
4aba7be311e8 API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents: 1500
diff changeset
976 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
977
1819
9451a569aee5 sphinx doc cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
978 :param cls:
9451a569aee5 sphinx doc cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1818
diff changeset
979 :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
980 """
4aba7be311e8 API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents: 1500
diff changeset
981 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
982
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
983 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
984
2508
43cb5b6047fd Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents: 2506
diff changeset
985 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
986 """
43cb5b6047fd Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents: 2506
diff changeset
987 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
988
43cb5b6047fd Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents: 2506
diff changeset
989 """
43cb5b6047fd Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents: 2506
diff changeset
990 repo = self
43cb5b6047fd Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents: 2506
diff changeset
991 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
992 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
993 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
994 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
995 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
996 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
997 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
998 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
999 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
1000 owner=repo.user.username,
3115
ebd76deee70d Default parameters are now also used for creating repos using API calls, and initial repo scanner
Marcin Kuzminski <marcin@python-works.com>
parents: 3067
diff changeset
1001 fork_of=repo.fork.repo_name if repo.fork else None,
ebd76deee70d Default parameters are now also used for creating repos using API calls, and initial repo scanner
Marcin Kuzminski <marcin@python-works.com>
parents: 3067
diff changeset
1002 enable_statistics=repo.enable_statistics,
ebd76deee70d Default parameters are now also used for creating repos using API calls, and initial repo scanner
Marcin Kuzminski <marcin@python-works.com>
parents: 3067
diff changeset
1003 enable_locking=repo.enable_locking,
3174
37c0ac5fe42f added last_changeset information in get_repo API function
Marcin Kuzminski <marcin@python-works.com>
parents: 3170
diff changeset
1004 enable_downloads=repo.enable_downloads,
3502
7cde75eac0fe get_locks API function draft
Marcin Kuzminski <marcin@python-works.com>
parents: 3488
diff changeset
1005 last_changeset=repo.changeset_cache,
7cde75eac0fe get_locks API function draft
Marcin Kuzminski <marcin@python-works.com>
parents: 3488
diff changeset
1006 locked_by=User.get(self.locked[0]).get_api_data() \
7cde75eac0fe get_locks API function draft
Marcin Kuzminski <marcin@python-works.com>
parents: 3488
diff changeset
1007 if self.locked[0] else None,
7cde75eac0fe get_locks API function draft
Marcin Kuzminski <marcin@python-works.com>
parents: 3488
diff changeset
1008 locked_date=time_to_datetime(self.locked[1]) \
7cde75eac0fe get_locks API function draft
Marcin Kuzminski <marcin@python-works.com>
parents: 3488
diff changeset
1009 if self.locked[1] else None
2508
43cb5b6047fd Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents: 2506
diff changeset
1010 )
3308
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3278
diff changeset
1011 rc_config = RhodeCodeSetting.get_app_settings()
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3278
diff changeset
1012 repository_fields = str2bool(rc_config.get('rhodecode_repository_fields'))
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3278
diff changeset
1013 if repository_fields:
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3278
diff changeset
1014 for f in self.extra_fields:
72a91632b731 repository extra fields implementation
Marcin Kuzminski <marcin@python-works.com>
parents: 3278
diff changeset
1015 data[f.field_key_prefixed] = f.field_value
2508
43cb5b6047fd Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents: 2506
diff changeset
1016
43cb5b6047fd Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents: 2506
diff changeset
1017 return data
43cb5b6047fd Added functions for getting API data to repo and user models
Marcin Kuzminski <marcin@python-works.com>
parents: 2506
diff changeset
1018
2726
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
1019 @classmethod
3808
2feb58495f34 locking API returns objects instead of string messages.
Marcin Kuzminski <marcin@python-works.com>
parents: 3788
diff changeset
1020 def lock(cls, repo, user_id, lock_time=None):
2feb58495f34 locking API returns objects instead of string messages.
Marcin Kuzminski <marcin@python-works.com>
parents: 3788
diff changeset
1021 if not lock_time:
2feb58495f34 locking API returns objects instead of string messages.
Marcin Kuzminski <marcin@python-works.com>
parents: 3788
diff changeset
1022 lock_time = time.time()
2feb58495f34 locking API returns objects instead of string messages.
Marcin Kuzminski <marcin@python-works.com>
parents: 3788
diff changeset
1023 repo.locked = [user_id, lock_time]
2726
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
1024 Session().add(repo)
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
1025 Session().commit()
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
1026
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
1027 @classmethod
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
1028 def unlock(cls, repo):
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
1029 repo.locked = None
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
1030 Session().add(repo)
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
1031 Session().commit()
aa17c7a1b8a5 Implemented basic locking functionality.
Marcin Kuzminski <marcin@python-works.com>
parents: 2724
diff changeset
1032
3457
08e8115585bd calling lock function without lock attribute, will return lock state
Marcin Kuzminski <marcin@python-works.com>
parents: 3420
diff changeset
1033 @classmethod
08e8115585bd calling lock function without lock attribute, will return lock state
Marcin Kuzminski <marcin@python-works.com>
parents: 3420
diff changeset
1034 def getlock(cls, repo):
08e8115585bd calling lock function without lock attribute, will return lock state
Marcin Kuzminski <marcin@python-works.com>
parents: 3420
diff changeset
1035 return repo.locked
08e8115585bd calling lock function without lock attribute, will return lock state
Marcin Kuzminski <marcin@python-works.com>
parents: 3420
diff changeset
1036
2936
62e493c7f436 Added lightweight dashboard option. ref #500
Marcin Kuzminski <marcin@python-works.com>
parents: 2835
diff changeset
1037 @property
62e493c7f436 Added lightweight dashboard option. ref #500
Marcin Kuzminski <marcin@python-works.com>
parents: 2835
diff changeset
1038 def last_db_change(self):
62e493c7f436 Added lightweight dashboard option. ref #500
Marcin Kuzminski <marcin@python-works.com>
parents: 2835
diff changeset
1039 return self.updated_on
62e493c7f436 Added lightweight dashboard option. ref #500
Marcin Kuzminski <marcin@python-works.com>
parents: 2835
diff changeset
1040
3170
2ab2eed4a70a implemented #725 Pull Request View - Show origin repo URL
Marcin Kuzminski <marcin@python-works.com>
parents: 3152
diff changeset
1041 def clone_url(self, **override):
2ab2eed4a70a implemented #725 Pull Request View - Show origin repo URL
Marcin Kuzminski <marcin@python-works.com>
parents: 3152
diff changeset
1042 from pylons import url
2ab2eed4a70a implemented #725 Pull Request View - Show origin repo URL
Marcin Kuzminski <marcin@python-works.com>
parents: 3152
diff changeset
1043 from urlparse import urlparse
2ab2eed4a70a implemented #725 Pull Request View - Show origin repo URL
Marcin Kuzminski <marcin@python-works.com>
parents: 3152
diff changeset
1044 import urllib
2ab2eed4a70a implemented #725 Pull Request View - Show origin repo URL
Marcin Kuzminski <marcin@python-works.com>
parents: 3152
diff changeset
1045 parsed_url = urlparse(url('home', qualified=True))
2ab2eed4a70a implemented #725 Pull Request View - Show origin repo URL
Marcin Kuzminski <marcin@python-works.com>
parents: 3152
diff changeset
1046 default_clone_uri = '%(scheme)s://%(user)s%(pass)s%(netloc)s%(prefix)s%(path)s'
2ab2eed4a70a implemented #725 Pull Request View - Show origin repo URL
Marcin Kuzminski <marcin@python-works.com>
parents: 3152
diff changeset
1047 decoded_path = safe_unicode(urllib.unquote(parsed_url.path))
2ab2eed4a70a implemented #725 Pull Request View - Show origin repo URL
Marcin Kuzminski <marcin@python-works.com>
parents: 3152
diff changeset
1048 args = {
2ab2eed4a70a implemented #725 Pull Request View - Show origin repo URL
Marcin Kuzminski <marcin@python-works.com>
parents: 3152
diff changeset
1049 'user': '',
2ab2eed4a70a implemented #725 Pull Request View - Show origin repo URL
Marcin Kuzminski <marcin@python-works.com>
parents: 3152
diff changeset
1050 'pass': '',
2ab2eed4a70a implemented #725 Pull Request View - Show origin repo URL
Marcin Kuzminski <marcin@python-works.com>
parents: 3152
diff changeset
1051 'scheme': parsed_url.scheme,
2ab2eed4a70a implemented #725 Pull Request View - Show origin repo URL
Marcin Kuzminski <marcin@python-works.com>
parents: 3152
diff changeset
1052 'netloc': parsed_url.netloc,
2ab2eed4a70a implemented #725 Pull Request View - Show origin repo URL
Marcin Kuzminski <marcin@python-works.com>
parents: 3152
diff changeset
1053 'prefix': decoded_path,
2ab2eed4a70a implemented #725 Pull Request View - Show origin repo URL
Marcin Kuzminski <marcin@python-works.com>
parents: 3152
diff changeset
1054 'path': self.repo_name
2ab2eed4a70a implemented #725 Pull Request View - Show origin repo URL
Marcin Kuzminski <marcin@python-works.com>
parents: 3152
diff changeset
1055 }
2ab2eed4a70a implemented #725 Pull Request View - Show origin repo URL
Marcin Kuzminski <marcin@python-works.com>
parents: 3152
diff changeset
1056
2ab2eed4a70a implemented #725 Pull Request View - Show origin repo URL
Marcin Kuzminski <marcin@python-works.com>
parents: 3152
diff changeset
1057 args.update(override)
2ab2eed4a70a implemented #725 Pull Request View - Show origin repo URL
Marcin Kuzminski <marcin@python-works.com>
parents: 3152
diff changeset
1058 return default_clone_uri % args
2ab2eed4a70a implemented #725 Pull Request View - Show origin repo URL
Marcin Kuzminski <marcin@python-works.com>
parents: 3152
diff changeset
1059
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
1060 #==========================================================================
1466
ad5a543a9b2f Code cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1460
diff changeset
1061 # SCM PROPERTIES
ad5a543a9b2f Code cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1460
diff changeset
1062 #==========================================================================
ad5a543a9b2f Code cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1460
diff changeset
1063
2251
986430cde505 fixed issue with getting README files from git repositories
Marcin Kuzminski <marcin@python-works.com>
parents: 2248
diff changeset
1064 def get_changeset(self, rev=None):
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1065 return get_changeset_safe(self.scm_instance, rev)
1466
ad5a543a9b2f Code cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1460
diff changeset
1066
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
1067 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
1068 """
370ed7829168 Readme renderer now uses landing_rev parameter to render the readme based on
Marcin Kuzminski <marcin@python-works.com>
parents: 2588
diff changeset
1069 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
1070 """
370ed7829168 Readme renderer now uses landing_rev parameter to render the readme based on
Marcin Kuzminski <marcin@python-works.com>
parents: 2588
diff changeset
1071 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
1072 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
1073
3147
8182ebed2922 Added full last changeset info to lightweight dashboard
Marcin Kuzminski <marcin@python-works.com>
parents: 3146
diff changeset
1074 def update_changeset_cache(self, cs_cache=None):
8182ebed2922 Added full last changeset info to lightweight dashboard
Marcin Kuzminski <marcin@python-works.com>
parents: 3146
diff changeset
1075 """
8182ebed2922 Added full last changeset info to lightweight dashboard
Marcin Kuzminski <marcin@python-works.com>
parents: 3146
diff changeset
1076 Update cache of last changeset for repository, keys should be::
8182ebed2922 Added full last changeset info to lightweight dashboard
Marcin Kuzminski <marcin@python-works.com>
parents: 3146
diff changeset
1077
8182ebed2922 Added full last changeset info to lightweight dashboard
Marcin Kuzminski <marcin@python-works.com>
parents: 3146
diff changeset
1078 short_id
8182ebed2922 Added full last changeset info to lightweight dashboard
Marcin Kuzminski <marcin@python-works.com>
parents: 3146
diff changeset
1079 raw_id
8182ebed2922 Added full last changeset info to lightweight dashboard
Marcin Kuzminski <marcin@python-works.com>
parents: 3146
diff changeset
1080 revision
8182ebed2922 Added full last changeset info to lightweight dashboard
Marcin Kuzminski <marcin@python-works.com>
parents: 3146
diff changeset
1081 message
8182ebed2922 Added full last changeset info to lightweight dashboard
Marcin Kuzminski <marcin@python-works.com>
parents: 3146
diff changeset
1082 date
8182ebed2922 Added full last changeset info to lightweight dashboard
Marcin Kuzminski <marcin@python-works.com>
parents: 3146
diff changeset
1083 author
8182ebed2922 Added full last changeset info to lightweight dashboard
Marcin Kuzminski <marcin@python-works.com>
parents: 3146
diff changeset
1084
8182ebed2922 Added full last changeset info to lightweight dashboard
Marcin Kuzminski <marcin@python-works.com>
parents: 3146
diff changeset
1085 :param cs_cache:
8182ebed2922 Added full last changeset info to lightweight dashboard
Marcin Kuzminski <marcin@python-works.com>
parents: 3146
diff changeset
1086 """
8182ebed2922 Added full last changeset info to lightweight dashboard
Marcin Kuzminski <marcin@python-works.com>
parents: 3146
diff changeset
1087 from rhodecode.lib.vcs.backends.base import BaseChangeset
8182ebed2922 Added full last changeset info to lightweight dashboard
Marcin Kuzminski <marcin@python-works.com>
parents: 3146
diff changeset
1088 if cs_cache is None:
3420
a6bef3e8a361 Update changeset cache should use non-cache version of repo if given attribute is empty, it's easier to controll how changesets are udpated
Marcin Kuzminski <marcin@python-works.com>
parents: 3417
diff changeset
1089 cs_cache = EmptyChangeset()
a6bef3e8a361 Update changeset cache should use non-cache version of repo if given attribute is empty, it's easier to controll how changesets are udpated
Marcin Kuzminski <marcin@python-works.com>
parents: 3417
diff changeset
1090 # use no-cache version here
3549
e4a4006faceb no_cache version of scm is now a function
Marcin Kuzminski <marcin@python-works.com>
parents: 3502
diff changeset
1091 scm_repo = self.scm_instance_no_cache()
3420
a6bef3e8a361 Update changeset cache should use non-cache version of repo if given attribute is empty, it's easier to controll how changesets are udpated
Marcin Kuzminski <marcin@python-works.com>
parents: 3417
diff changeset
1092 if scm_repo:
a6bef3e8a361 Update changeset cache should use non-cache version of repo if given attribute is empty, it's easier to controll how changesets are udpated
Marcin Kuzminski <marcin@python-works.com>
parents: 3417
diff changeset
1093 cs_cache = scm_repo.get_changeset()
a6bef3e8a361 Update changeset cache should use non-cache version of repo if given attribute is empty, it's easier to controll how changesets are udpated
Marcin Kuzminski <marcin@python-works.com>
parents: 3417
diff changeset
1094
3147
8182ebed2922 Added full last changeset info to lightweight dashboard
Marcin Kuzminski <marcin@python-works.com>
parents: 3146
diff changeset
1095 if isinstance(cs_cache, BaseChangeset):
8182ebed2922 Added full last changeset info to lightweight dashboard
Marcin Kuzminski <marcin@python-works.com>
parents: 3146
diff changeset
1096 cs_cache = cs_cache.__json__()
8182ebed2922 Added full last changeset info to lightweight dashboard
Marcin Kuzminski <marcin@python-works.com>
parents: 3146
diff changeset
1097
3420
a6bef3e8a361 Update changeset cache should use non-cache version of repo if given attribute is empty, it's easier to controll how changesets are udpated
Marcin Kuzminski <marcin@python-works.com>
parents: 3417
diff changeset
1098 if (cs_cache != self.changeset_cache or not self.changeset_cache):
3226
226013bac971 update repo-info shouldn't allow setting empty values NEVER !
Marcin Kuzminski <marcin@python-works.com>
parents: 3222
diff changeset
1099 _default = datetime.datetime.fromtimestamp(0)
3420
a6bef3e8a361 Update changeset cache should use non-cache version of repo if given attribute is empty, it's easier to controll how changesets are udpated
Marcin Kuzminski <marcin@python-works.com>
parents: 3417
diff changeset
1100 last_change = cs_cache.get('date') or _default
3636
ddc4c12f00fb fixed issues with importing non-ascii repo names
Marcin Kuzminski <marcin@python-works.com>
parents: 3631
diff changeset
1101 log.debug('updated repo %s with new cs cache %s'
ddc4c12f00fb fixed issues with importing non-ascii repo names
Marcin Kuzminski <marcin@python-works.com>
parents: 3631
diff changeset
1102 % (self.repo_name, cs_cache))
2937
d439d408b415 Update last_change from VCS data on request.
Marcin Kuzminski <marcin@python-works.com>
parents: 2936
diff changeset
1103 self.updated_on = last_change
3147
8182ebed2922 Added full last changeset info to lightweight dashboard
Marcin Kuzminski <marcin@python-works.com>
parents: 3146
diff changeset
1104 self.changeset_cache = cs_cache
2937
d439d408b415 Update last_change from VCS data on request.
Marcin Kuzminski <marcin@python-works.com>
parents: 2936
diff changeset
1105 Session().add(self)
d439d408b415 Update last_change from VCS data on request.
Marcin Kuzminski <marcin@python-works.com>
parents: 2936
diff changeset
1106 Session().commit()
3227
99ce5d097a09 fixes for issue #731, update-repoinfo sometimes failed to update data when changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 3226
diff changeset
1107 else:
3636
ddc4c12f00fb fixed issues with importing non-ascii repo names
Marcin Kuzminski <marcin@python-works.com>
parents: 3631
diff changeset
1108 log.debug('Skipping repo:%s already with latest changes'
ddc4c12f00fb fixed issues with importing non-ascii repo names
Marcin Kuzminski <marcin@python-works.com>
parents: 3631
diff changeset
1109 % self.repo_name)
2937
d439d408b415 Update last_change from VCS data on request.
Marcin Kuzminski <marcin@python-works.com>
parents: 2936
diff changeset
1110
1466
ad5a543a9b2f Code cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1460
diff changeset
1111 @property
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1112 def tip(self):
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1113 return self.get_changeset('tip')
1466
ad5a543a9b2f Code cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1460
diff changeset
1114
ad5a543a9b2f Code cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1460
diff changeset
1115 @property
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1116 def author(self):
1466
ad5a543a9b2f Code cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1460
diff changeset
1117 return self.tip.author
ad5a543a9b2f Code cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1460
diff changeset
1118
ad5a543a9b2f Code cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1460
diff changeset
1119 @property
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1120 def last_change(self):
1466
ad5a543a9b2f Code cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1460
diff changeset
1121 return self.scm_instance.last_change
ad5a543a9b2f Code cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1460
diff changeset
1122
2520
a1e156503afe Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents: 2510
diff changeset
1123 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
1124 """
0614862a20ec Added number of comments in changelog for each changeset
Marcin Kuzminski <marcin@python-works.com>
parents: 1824
diff changeset
1125 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
1126
0614862a20ec Added number of comments in changelog for each changeset
Marcin Kuzminski <marcin@python-works.com>
parents: 1824
diff changeset
1127 :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
1128 """
0614862a20ec Added number of comments in changelog for each changeset
Marcin Kuzminski <marcin@python-works.com>
parents: 1824
diff changeset
1129 cmts = ChangesetComment.query()\
0614862a20ec Added number of comments in changelog for each changeset
Marcin Kuzminski <marcin@python-works.com>
parents: 1824
diff changeset
1130 .filter(ChangesetComment.repo == self)
0614862a20ec Added number of comments in changelog for each changeset
Marcin Kuzminski <marcin@python-works.com>
parents: 1824
diff changeset
1131 if revisions:
0614862a20ec Added number of comments in changelog for each changeset
Marcin Kuzminski <marcin@python-works.com>
parents: 1824
diff changeset
1132 cmts = cmts.filter(ChangesetComment.revision.in_(revisions))
3850
7a4df261a375 added alias configuration option for gists.
Marcin Kuzminski <marcin@python-works.com>
parents: 3842
diff changeset
1133 grouped = collections.defaultdict(list)
1884
0614862a20ec Added number of comments in changelog for each changeset
Marcin Kuzminski <marcin@python-works.com>
parents: 1824
diff changeset
1134 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
1135 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
1136 return grouped
0614862a20ec Added number of comments in changelog for each changeset
Marcin Kuzminski <marcin@python-works.com>
parents: 1824
diff changeset
1137
2215
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
1138 def statuses(self, revisions=None):
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
1139 """
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
1140 Returns statuses for this repository
2217
76947224bf27 Implemented initial code-review status of changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 2215
diff changeset
1141
2215
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
1142 :param revisions: list of revisions to get statuses for
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
1143 """
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
1144
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
1145 statuses = ChangesetStatus.query()\
2287
8447d35b674e Added simple versioning for changeset status
Marcin Kuzminski <marcin@python-works.com>
parents: 2286
diff changeset
1146 .filter(ChangesetStatus.repo == self)\
8447d35b674e Added simple versioning for changeset status
Marcin Kuzminski <marcin@python-works.com>
parents: 2286
diff changeset
1147 .filter(ChangesetStatus.version == 0)
2215
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
1148 if revisions:
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
1149 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
1150 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
1151
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
1152 #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
1153 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
1154 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
1155 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
1156 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
1157 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
1158 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
1159 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
1160
2215
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
1161 for stat in statuses.all():
2443
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
1162 pr_id = pr_repo = None
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
1163 if stat.pull_request:
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
1164 pr_id = stat.pull_request.pull_request_id
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
1165 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
1166 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
1167 pr_id, pr_repo]
2215
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
1168 return grouped
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
1169
3246
b9ba0d4d3abf implemented #83 show repo size on summary page
Marcin Kuzminski <marcin@python-works.com>
parents: 3239
diff changeset
1170 def _repo_size(self):
b9ba0d4d3abf implemented #83 show repo size on summary page
Marcin Kuzminski <marcin@python-works.com>
parents: 3239
diff changeset
1171 from rhodecode.lib import helpers as h
b9ba0d4d3abf implemented #83 show repo size on summary page
Marcin Kuzminski <marcin@python-works.com>
parents: 3239
diff changeset
1172 log.debug('calculating repository size...')
b9ba0d4d3abf implemented #83 show repo size on summary page
Marcin Kuzminski <marcin@python-works.com>
parents: 3239
diff changeset
1173 return h.format_byte_size(self.scm_instance.size)
b9ba0d4d3abf implemented #83 show repo size on summary page
Marcin Kuzminski <marcin@python-works.com>
parents: 3239
diff changeset
1174
1466
ad5a543a9b2f Code cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1460
diff changeset
1175 #==========================================================================
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
1176 # 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
1177 #==========================================================================
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
1178
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1179 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
1180 """
3682
cf65b2c1b69d invalidation: some documentation and refactoring, second round
Mads Kiilerich <madski@unity3d.com>
parents: 3680
diff changeset
1181 Mark caches of this repo as invalid.
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
1182 """
3717
6ff98871247a Minor changes
Mads Kiilerich <madski@unity3d.com>
parents: 3714
diff changeset
1183 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
1184
3278
c2bf0fa7b3cb git hook handler shouldn't ever use cache instances
Marcin Kuzminski <marcin@python-works.com>
parents: 3274
diff changeset
1185 def scm_instance_no_cache(self):
c2bf0fa7b3cb git hook handler shouldn't ever use cache instances
Marcin Kuzminski <marcin@python-works.com>
parents: 3274
diff changeset
1186 return self.__get_instance()
c2bf0fa7b3cb git hook handler shouldn't ever use cache instances
Marcin Kuzminski <marcin@python-works.com>
parents: 3274
diff changeset
1187
3680
0db18ba129ea scm_instance shouldn't be cached in anyway inside object
Marcin Kuzminski <marcin@python-works.com>
parents: 3636
diff changeset
1188 @property
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1189 def scm_instance(self):
3025
f61adead3520 Added option to ini files for controlling full cache of VCS instances.
Marcin Kuzminski <marcin@python-works.com>
parents: 3024
diff changeset
1190 import rhodecode
f61adead3520 Added option to ini files for controlling full cache of VCS instances.
Marcin Kuzminski <marcin@python-works.com>
parents: 3024
diff changeset
1191 full_cache = str2bool(rhodecode.CONFIG.get('vcs_full_cache'))
f61adead3520 Added option to ini files for controlling full cache of VCS instances.
Marcin Kuzminski <marcin@python-works.com>
parents: 3024
diff changeset
1192 if full_cache:
f61adead3520 Added option to ini files for controlling full cache of VCS instances.
Marcin Kuzminski <marcin@python-works.com>
parents: 3024
diff changeset
1193 return self.scm_instance_cached()
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
1194 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
1195
3772
910ad1ffee99 invalidation: merge .invalidate and .set_valid as .test_and_set_valid
Mads Kiilerich <madski@unity3d.com>
parents: 3759
diff changeset
1196 def scm_instance_cached(self, valid_cache_keys=None):
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1197 @cache_region('long_term')
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1198 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
1199 return self.__get_instance()
1607
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
1200 rn = self.repo_name
2352
90e06f53af8c Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents: 2339
diff changeset
1201
3773
8e2cd46f765b invalidate: encapsulate how key is generated from repo_name and kind
Mads Kiilerich <madski@unity3d.com>
parents: 3772
diff changeset
1202 valid = CacheInvalidation.test_and_set_valid(rn, None, valid_cache_keys=valid_cache_keys)
3772
910ad1ffee99 invalidation: merge .invalidate and .set_valid as .test_and_set_valid
Mads Kiilerich <madski@unity3d.com>
parents: 3759
diff changeset
1203 if not valid:
910ad1ffee99 invalidation: merge .invalidate and .set_valid as .test_and_set_valid
Mads Kiilerich <madski@unity3d.com>
parents: 3759
diff changeset
1204 log.debug('Cache for %s invalidated, getting new object' % (rn))
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1205 region_invalidate(_c, None, rn)
3686
f18801f827da repr of cache inv object show also now cache_active + some better logging
Marcin Kuzminski <marcin@python-works.com>
parents: 3685
diff changeset
1206 else:
f18801f827da repr of cache inv object show also now cache_active + some better logging
Marcin Kuzminski <marcin@python-works.com>
parents: 3685
diff changeset
1207 log.debug('Getting obj for %s from cache' % (rn))
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1208 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
1209
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1210 def __get_instance(self):
1368
04b43168742d adde short cache for repo_path
Marcin Kuzminski <marcin@python-works.com>
parents: 1366
diff changeset
1211 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
1212 try:
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1213 alias = get_scm(repo_full_path)[0]
3420
a6bef3e8a361 Update changeset cache should use non-cache version of repo if given attribute is empty, it's easier to controll how changesets are udpated
Marcin Kuzminski <marcin@python-works.com>
parents: 3417
diff changeset
1214 log.debug('Creating instance of %s repository from %s'
a6bef3e8a361 Update changeset cache should use non-cache version of repo if given attribute is empty, it's easier to controll how changesets are udpated
Marcin Kuzminski <marcin@python-works.com>
parents: 3417
diff changeset
1215 % (alias, repo_full_path))
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1216 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
1217 except VCSError:
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1218 log.error(traceback.format_exc())
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1219 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
1220 'filesystem run rescan repositories with '
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1221 '"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
1222 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
1223
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
1224 if alias == 'hg':
2000
72c525a7e7ad added migrations from 1.2.X to 1.3
Marcin Kuzminski <marcin@python-works.com>
parents: 1990
diff changeset
1225
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1226 repo = backend(safe_str(repo_full_path), create=False,
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1227 baseui=self._ui)
1607
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
1228 # 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
1229 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
1230 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
1231 else:
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1232 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
1233
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
1234 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
1235
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
1236
1633
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1607
diff changeset
1237 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
1238 __tablename__ = 'groups'
1958
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
1239 __table_args__ = (
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
1240 UniqueConstraint('group_name', 'group_parent_id'),
1963
9bbde54232dc white space cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 1960
diff changeset
1241 CheckConstraint('group_id != group_parent_id'),
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
1242 {'extend_existing': True, 'mysql_engine': 'InnoDB',
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1243 'mysql_charset': 'utf8'},
1958
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
1244 )
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
1245 __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
1246
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1247 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
1248 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
1249 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
1250 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
1251 enable_locking = Column("enable_locking", Boolean(), nullable=False, unique=None, default=False)
3714
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1252 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=False, default=None)
878
859bc9e7a15d Extended repo2db mapper with group creation via directory structures
Marcin Kuzminski <marcin@python-works.com>
parents: 836
diff changeset
1253
1982
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
1254 repo_group_to_perm = relationship('UserRepoGroupToPerm', cascade='all', order_by='UserRepoGroupToPerm.group_to_perm_id')
3417
fa6ba6727475 further cleanup of UsersGroup
Mads Kiilerich <madski@unity3d.com>
parents: 3416
diff changeset
1255 users_group_to_perm = relationship('UserGroupRepoGroupToPerm', cascade='all')
1633
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1607
diff changeset
1256 parent_group = relationship('RepoGroup', remote_side=group_id)
3714
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1257 user = relationship('User')
878
859bc9e7a15d Extended repo2db mapper with group creation via directory structures
Marcin Kuzminski <marcin@python-works.com>
parents: 836
diff changeset
1258
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1259 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
1260 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
1261 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
1262
2156
a27e4d44237e Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents: 2152
diff changeset
1263 def __unicode__(self):
3714
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1264 return u"<%s('id:%s:%s')>" % (self.__class__.__name__, self.group_id,
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1265 self.group_name)
631
05528ad948c4 Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents: 549
diff changeset
1266
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
1267 @classmethod
3239
a9565b8b429b filter out repo groups choices to only ones that you have write+ access to. Before it was read+ access and you got proper
Marcin Kuzminski <marcin@python-works.com>
parents: 3234
diff changeset
1268 def groups_choices(cls, groups=None, show_empty_group=True):
1547
fbc762ae3496 unified generation of repo groups choices
Marcin Kuzminski <marcin@python-works.com>
parents: 1546
diff changeset
1269 from webhelpers.html import literal as _literal
3222
b4daef4cc26d Group management delegation:
Marcin Kuzminski <marcin@python-works.com>
parents: 3212
diff changeset
1270 if not groups:
b4daef4cc26d Group management delegation:
Marcin Kuzminski <marcin@python-works.com>
parents: 3212
diff changeset
1271 groups = cls.query().all()
3239
a9565b8b429b filter out repo groups choices to only ones that you have write+ access to. Before it was read+ access and you got proper
Marcin Kuzminski <marcin@python-works.com>
parents: 3234
diff changeset
1272
3222
b4daef4cc26d Group management delegation:
Marcin Kuzminski <marcin@python-works.com>
parents: 3212
diff changeset
1273 repo_groups = []
b4daef4cc26d Group management delegation:
Marcin Kuzminski <marcin@python-works.com>
parents: 3212
diff changeset
1274 if show_empty_group:
3942
e6a3f4b414d2 fixed translation and unicode issues
Marcin Kuzminski <marcin@python-works.com>
parents: 3909
diff changeset
1275 repo_groups = [('-1', u'-- %s --' % _('top level'))]
1547
fbc762ae3496 unified generation of repo groups choices
Marcin Kuzminski <marcin@python-works.com>
parents: 1546
diff changeset
1276 sep = ' &raquo; '
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1277 _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
1278
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1279 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
1280 for x in groups])
1591
0b63a0d2cede Merge with upstream
Nicolas VINOT <aeris@imirhil.fr>
parents: 1576 1590
diff changeset
1281
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1282 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
1283 return repo_groups
1591
0b63a0d2cede Merge with upstream
Nicolas VINOT <aeris@imirhil.fr>
parents: 1576 1590
diff changeset
1284
1547
fbc762ae3496 unified generation of repo groups choices
Marcin Kuzminski <marcin@python-works.com>
parents: 1546
diff changeset
1285 @classmethod
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1286 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
1287 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
1288
1538
27be8f94c207 implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents: 1530
diff changeset
1289 @classmethod
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1290 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
1291 if case_insensitive:
3338a0994472 Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents: 1508
diff changeset
1292 gr = cls.query()\
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1293 .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
1294 else:
3338a0994472 Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents: 1508
diff changeset
1295 gr = cls.query()\
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1296 .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
1297 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
1298 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
1299 "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
1300 "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
1301 )
bf8ed0adbc66 fixes #371 fixed issues with beaker/sqlalchemy and non-ascii cache keys
Marcin Kuzminski <marcin@python-works.com>
parents: 2058
diff changeset
1302 )
1584
3338a0994472 Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents: 1508
diff changeset
1303 return gr.scalar()
1538
27be8f94c207 implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents: 1530
diff changeset
1304
1159
187a924ed653 Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1155
diff changeset
1305 @property
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1306 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
1307 parents_recursion_limit = 5
1159
187a924ed653 Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1155
diff changeset
1308 groups = []
187a924ed653 Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1155
diff changeset
1309 if self.parent_group is None:
187a924ed653 Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1155
diff changeset
1310 return groups
187a924ed653 Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1155
diff changeset
1311 cur_gr = self.parent_group
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1312 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
1313 cnt = 0
1159
187a924ed653 Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1155
diff changeset
1314 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
1315 cnt += 1
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1316 gr = getattr(cur_gr, 'parent_group', None)
1159
187a924ed653 Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1155
diff changeset
1317 cur_gr = cur_gr.parent_group
187a924ed653 Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1155
diff changeset
1318 if gr is None:
187a924ed653 Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1155
diff changeset
1319 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
1320 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
1321 # this will prevent accidental infinit loops
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1322 log.error('group nested more than %s' %
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1323 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
1324 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
1325
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1326 groups.insert(0, gr)
1159
187a924ed653 Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1155
diff changeset
1327 return groups
187a924ed653 Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents: 1155
diff changeset
1328
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
1329 @property
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1330 def children(self):
1633
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1607
diff changeset
1331 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
1332
a7a772ea7b95 fixed saving settings on repositories inside groups, also fixes #187
Marcin Kuzminski <marcin@python-works.com>
parents: 1301
diff changeset
1333 @property
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1334 def name(self):
1633
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1607
diff changeset
1335 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
1336
27be8f94c207 implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents: 1530
diff changeset
1337 @property
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1338 def full_path(self):
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1339 return self.group_name
1538
27be8f94c207 implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents: 1530
diff changeset
1340
27be8f94c207 implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents: 1530
diff changeset
1341 @property
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1342 def full_path_splitted(self):
1633
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1607
diff changeset
1343 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
1344
1193
523382549c45 Added repo group page showing what reposiories are inside a group
Marcin Kuzminski <marcin@python-works.com>
parents: 1159
diff changeset
1345 @property
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1346 def repositories(self):
2079
477fe54b8af8 fixed sorting of repos in group
Marcin Kuzminski <marcin@python-works.com>
parents: 2063
diff changeset
1347 return Repository.query()\
477fe54b8af8 fixed sorting of repos in group
Marcin Kuzminski <marcin@python-works.com>
parents: 2063
diff changeset
1348 .filter(Repository.group == self)\
477fe54b8af8 fixed sorting of repos in group
Marcin Kuzminski <marcin@python-works.com>
parents: 2063
diff changeset
1349 .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
1350
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
1351 @property
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1352 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
1353 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
1354
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1355 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
1356 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
1357 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
1358 cnt += child.repositories.count()
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1359 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
1360 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
1361
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1362 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
1363
3459
94f251fda314 fixed issue with renaming repos group together with changing parents with multiple nested trees
Marcin Kuzminski <marcin@python-works.com>
parents: 3457
diff changeset
1364 def _recursive_objects(self, include_repos=True):
2749
3ed4dae499d0 Recursive set locking on all children of a group.
Marcin Kuzminski <marcin@python-works.com>
parents: 2731
diff changeset
1365 all_ = []
3ed4dae499d0 Recursive set locking on all children of a group.
Marcin Kuzminski <marcin@python-works.com>
parents: 2731
diff changeset
1366
3ed4dae499d0 Recursive set locking on all children of a group.
Marcin Kuzminski <marcin@python-works.com>
parents: 2731
diff changeset
1367 def _get_members(root_gr):
3459
94f251fda314 fixed issue with renaming repos group together with changing parents with multiple nested trees
Marcin Kuzminski <marcin@python-works.com>
parents: 3457
diff changeset
1368 if include_repos:
94f251fda314 fixed issue with renaming repos group together with changing parents with multiple nested trees
Marcin Kuzminski <marcin@python-works.com>
parents: 3457
diff changeset
1369 for r in root_gr.repositories:
94f251fda314 fixed issue with renaming repos group together with changing parents with multiple nested trees
Marcin Kuzminski <marcin@python-works.com>
parents: 3457
diff changeset
1370 all_.append(r)
2749
3ed4dae499d0 Recursive set locking on all children of a group.
Marcin Kuzminski <marcin@python-works.com>
parents: 2731
diff changeset
1371 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
1372 if childs:
3ed4dae499d0 Recursive set locking on all children of a group.
Marcin Kuzminski <marcin@python-works.com>
parents: 2731
diff changeset
1373 for gr in childs:
3ed4dae499d0 Recursive set locking on all children of a group.
Marcin Kuzminski <marcin@python-works.com>
parents: 2731
diff changeset
1374 all_.append(gr)
3ed4dae499d0 Recursive set locking on all children of a group.
Marcin Kuzminski <marcin@python-works.com>
parents: 2731
diff changeset
1375 _get_members(gr)
3ed4dae499d0 Recursive set locking on all children of a group.
Marcin Kuzminski <marcin@python-works.com>
parents: 2731
diff changeset
1376
3ed4dae499d0 Recursive set locking on all children of a group.
Marcin Kuzminski <marcin@python-works.com>
parents: 2731
diff changeset
1377 _get_members(self)
3ed4dae499d0 Recursive set locking on all children of a group.
Marcin Kuzminski <marcin@python-works.com>
parents: 2731
diff changeset
1378 return [self] + all_
3ed4dae499d0 Recursive set locking on all children of a group.
Marcin Kuzminski <marcin@python-works.com>
parents: 2731
diff changeset
1379
3459
94f251fda314 fixed issue with renaming repos group together with changing parents with multiple nested trees
Marcin Kuzminski <marcin@python-works.com>
parents: 3457
diff changeset
1380 def recursive_groups_and_repos(self):
94f251fda314 fixed issue with renaming repos group together with changing parents with multiple nested trees
Marcin Kuzminski <marcin@python-works.com>
parents: 3457
diff changeset
1381 """
94f251fda314 fixed issue with renaming repos group together with changing parents with multiple nested trees
Marcin Kuzminski <marcin@python-works.com>
parents: 3457
diff changeset
1382 Recursive return all groups, with repositories in those groups
94f251fda314 fixed issue with renaming repos group together with changing parents with multiple nested trees
Marcin Kuzminski <marcin@python-works.com>
parents: 3457
diff changeset
1383 """
94f251fda314 fixed issue with renaming repos group together with changing parents with multiple nested trees
Marcin Kuzminski <marcin@python-works.com>
parents: 3457
diff changeset
1384 return self._recursive_objects()
94f251fda314 fixed issue with renaming repos group together with changing parents with multiple nested trees
Marcin Kuzminski <marcin@python-works.com>
parents: 3457
diff changeset
1385
94f251fda314 fixed issue with renaming repos group together with changing parents with multiple nested trees
Marcin Kuzminski <marcin@python-works.com>
parents: 3457
diff changeset
1386 def recursive_groups(self):
94f251fda314 fixed issue with renaming repos group together with changing parents with multiple nested trees
Marcin Kuzminski <marcin@python-works.com>
parents: 3457
diff changeset
1387 """
3473
b30a842bc164 codecleaner
Marcin Kuzminski <marcin@python-works.com>
parents: 3459
diff changeset
1388 Returns all children groups for this group including children of children
3459
94f251fda314 fixed issue with renaming repos group together with changing parents with multiple nested trees
Marcin Kuzminski <marcin@python-works.com>
parents: 3457
diff changeset
1389 """
94f251fda314 fixed issue with renaming repos group together with changing parents with multiple nested trees
Marcin Kuzminski <marcin@python-works.com>
parents: 3457
diff changeset
1390 return self._recursive_objects(include_repos=False)
94f251fda314 fixed issue with renaming repos group together with changing parents with multiple nested trees
Marcin Kuzminski <marcin@python-works.com>
parents: 3457
diff changeset
1391
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1392 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
1393 """
27be8f94c207 implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents: 1530
diff changeset
1394 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
1395
1538
27be8f94c207 implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents: 1530
diff changeset
1396 :param group_name:
27be8f94c207 implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents: 1530
diff changeset
1397 """
1607
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
1398 path_prefix = (self.parent_group.full_path_splitted if
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1399 self.parent_group else [])
1633
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1607
diff changeset
1400 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
1401
27be8f94c207 implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents: 1530
diff changeset
1402
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1403 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
1404 __tablename__ = 'permissions'
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1405 __table_args__ = (
2463
b426ecc30319 Added some DB indexes to optimize queries
Marcin Kuzminski <marcin@python-works.com>
parents: 2462
diff changeset
1406 Index('p_perm_name_idx', 'permission_name'),
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
1407 {'extend_existing': True, 'mysql_engine': 'InnoDB',
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1408 'mysql_charset': 'utf8'},
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1409 )
2532
19de74e33fb0 Better descriptions of given permission overview in edit user view
Marcin Kuzminski <marcin@python-works.com>
parents: 2531
diff changeset
1410 PERMS = [
3733
af049a957506 fixed default permissions population during upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 3729
diff changeset
1411 ('hg.admin', _('RhodeCode Administrator')),
af049a957506 fixed default permissions population during upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 3729
diff changeset
1412
2532
19de74e33fb0 Better descriptions of given permission overview in edit user view
Marcin Kuzminski <marcin@python-works.com>
parents: 2531
diff changeset
1413 ('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
1414 ('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
1415 ('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
1416 ('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
1417
3416
5706f6ab60cf follow-up on texts missing from 'users groups'/'repositories group' cleanup
Mads Kiilerich <madski@unity3d.com>
parents: 3370
diff changeset
1418 ('group.none', _('Repository group no access')),
5706f6ab60cf follow-up on texts missing from 'users groups'/'repositories group' cleanup
Mads Kiilerich <madski@unity3d.com>
parents: 3370
diff changeset
1419 ('group.read', _('Repository group read access')),
5706f6ab60cf follow-up on texts missing from 'users groups'/'repositories group' cleanup
Mads Kiilerich <madski@unity3d.com>
parents: 3370
diff changeset
1420 ('group.write', _('Repository group write access')),
5706f6ab60cf follow-up on texts missing from 'users groups'/'repositories group' cleanup
Mads Kiilerich <madski@unity3d.com>
parents: 3370
diff changeset
1421 ('group.admin', _('Repository group admin access')),
2532
19de74e33fb0 Better descriptions of given permission overview in edit user view
Marcin Kuzminski <marcin@python-works.com>
parents: 2531
diff changeset
1422
3714
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1423 ('usergroup.none', _('User group no access')),
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1424 ('usergroup.read', _('User group read access')),
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1425 ('usergroup.write', _('User group write access')),
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1426 ('usergroup.admin', _('User group admin access')),
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1427
3734
a8f520540ab0 New default permissions definition for user group create
Marcin Kuzminski <marcin@python-works.com>
parents: 3733
diff changeset
1428 ('hg.repogroup.create.false', _('Repository Group creation disabled')),
a8f520540ab0 New default permissions definition for user group create
Marcin Kuzminski <marcin@python-works.com>
parents: 3733
diff changeset
1429 ('hg.repogroup.create.true', _('Repository Group creation enabled')),
a8f520540ab0 New default permissions definition for user group create
Marcin Kuzminski <marcin@python-works.com>
parents: 3733
diff changeset
1430
a8f520540ab0 New default permissions definition for user group create
Marcin Kuzminski <marcin@python-works.com>
parents: 3733
diff changeset
1431 ('hg.usergroup.create.false', _('User Group creation disabled')),
a8f520540ab0 New default permissions definition for user group create
Marcin Kuzminski <marcin@python-works.com>
parents: 3733
diff changeset
1432 ('hg.usergroup.create.true', _('User Group creation enabled')),
a8f520540ab0 New default permissions definition for user group create
Marcin Kuzminski <marcin@python-works.com>
parents: 3733
diff changeset
1433
2532
19de74e33fb0 Better descriptions of given permission overview in edit user view
Marcin Kuzminski <marcin@python-works.com>
parents: 2531
diff changeset
1434 ('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
1435 ('hg.create.repository', _('Repository creation enabled')),
3733
af049a957506 fixed default permissions population during upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 3729
diff changeset
1436
2709
d2d35cf2b351 RhodeCode now has a option to explicitly set forking permissions. ref #508
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
1437 ('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
1438 ('hg.fork.repository', _('Repository forking enabled')),
3733
af049a957506 fixed default permissions population during upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 3729
diff changeset
1439
3786
222e6769e7b5 Added separate default permission for external_auth account
Marcin Kuzminski <marcin@python-works.com>
parents: 3773
diff changeset
1440 ('hg.register.none', _('Registration disabled')),
222e6769e7b5 Added separate default permission for external_auth account
Marcin Kuzminski <marcin@python-works.com>
parents: 3773
diff changeset
1441 ('hg.register.manual_activate', _('User Registration with manual account activation')),
222e6769e7b5 Added separate default permission for external_auth account
Marcin Kuzminski <marcin@python-works.com>
parents: 3773
diff changeset
1442 ('hg.register.auto_activate', _('User Registration with automatic account activation')),
2532
19de74e33fb0 Better descriptions of given permission overview in edit user view
Marcin Kuzminski <marcin@python-works.com>
parents: 2531
diff changeset
1443
3786
222e6769e7b5 Added separate default permission for external_auth account
Marcin Kuzminski <marcin@python-works.com>
parents: 3773
diff changeset
1444 ('hg.extern_activate.manual', _('Manual activation of external account')),
222e6769e7b5 Added separate default permission for external_auth account
Marcin Kuzminski <marcin@python-works.com>
parents: 3773
diff changeset
1445 ('hg.extern_activate.auto', _('Automatic activation of external account')),
222e6769e7b5 Added separate default permission for external_auth account
Marcin Kuzminski <marcin@python-works.com>
parents: 3773
diff changeset
1446
2532
19de74e33fb0 Better descriptions of given permission overview in edit user view
Marcin Kuzminski <marcin@python-works.com>
parents: 2531
diff changeset
1447 ]
19de74e33fb0 Better descriptions of given permission overview in edit user view
Marcin Kuzminski <marcin@python-works.com>
parents: 2531
diff changeset
1448
3733
af049a957506 fixed default permissions population during upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 3729
diff changeset
1449 #definition of system default permissions for DEFAULT user
af049a957506 fixed default permissions population during upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 3729
diff changeset
1450 DEFAULT_USER_PERMISSIONS = [
af049a957506 fixed default permissions population during upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 3729
diff changeset
1451 'repository.read',
af049a957506 fixed default permissions population during upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 3729
diff changeset
1452 'group.read',
af049a957506 fixed default permissions population during upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 3729
diff changeset
1453 'usergroup.read',
af049a957506 fixed default permissions population during upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 3729
diff changeset
1454 'hg.create.repository',
af049a957506 fixed default permissions population during upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 3729
diff changeset
1455 'hg.fork.repository',
af049a957506 fixed default permissions population during upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 3729
diff changeset
1456 'hg.register.manual_activate',
3786
222e6769e7b5 Added separate default permission for external_auth account
Marcin Kuzminski <marcin@python-works.com>
parents: 3773
diff changeset
1457 'hg.extern_activate.auto',
3733
af049a957506 fixed default permissions population during upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 3729
diff changeset
1458 ]
af049a957506 fixed default permissions population during upgrades
Marcin Kuzminski <marcin@python-works.com>
parents: 3729
diff changeset
1459
2709
d2d35cf2b351 RhodeCode now has a option to explicitly set forking permissions. ref #508
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
1460 # defines which permissions are more important higher the more important
3734
a8f520540ab0 New default permissions definition for user group create
Marcin Kuzminski <marcin@python-works.com>
parents: 3733
diff changeset
1461 # Weight defines which permissions are more important.
a8f520540ab0 New default permissions definition for user group create
Marcin Kuzminski <marcin@python-works.com>
parents: 3733
diff changeset
1462 # The higher number the more important.
2709
d2d35cf2b351 RhodeCode now has a option to explicitly set forking permissions. ref #508
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
1463 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
1464 '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
1465 '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
1466 '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
1467 '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
1468
d2d35cf2b351 RhodeCode now has a option to explicitly set forking permissions. ref #508
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
1469 '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
1470 '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
1471 '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
1472 '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
1473
3714
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1474 'usergroup.none': 0,
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1475 'usergroup.read': 1,
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1476 'usergroup.write': 3,
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1477 'usergroup.admin': 4,
3734
a8f520540ab0 New default permissions definition for user group create
Marcin Kuzminski <marcin@python-works.com>
parents: 3733
diff changeset
1478 'hg.repogroup.create.false': 0,
a8f520540ab0 New default permissions definition for user group create
Marcin Kuzminski <marcin@python-works.com>
parents: 3733
diff changeset
1479 'hg.repogroup.create.true': 1,
a8f520540ab0 New default permissions definition for user group create
Marcin Kuzminski <marcin@python-works.com>
parents: 3733
diff changeset
1480
a8f520540ab0 New default permissions definition for user group create
Marcin Kuzminski <marcin@python-works.com>
parents: 3733
diff changeset
1481 'hg.usergroup.create.false': 0,
a8f520540ab0 New default permissions definition for user group create
Marcin Kuzminski <marcin@python-works.com>
parents: 3733
diff changeset
1482 'hg.usergroup.create.true': 1,
3714
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1483
2709
d2d35cf2b351 RhodeCode now has a option to explicitly set forking permissions. ref #508
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
1484 '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
1485 '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
1486 'hg.create.none': 0,
3714
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1487 'hg.create.repository': 1
2709
d2d35cf2b351 RhodeCode now has a option to explicitly set forking permissions. ref #508
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
1488 }
d2d35cf2b351 RhodeCode now has a option to explicitly set forking permissions. ref #508
Marcin Kuzminski <marcin@python-works.com>
parents: 2708
diff changeset
1489
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1490 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
1491 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
1492 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
1493
2156
a27e4d44237e Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents: 2152
diff changeset
1494 def __unicode__(self):
a27e4d44237e Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents: 2152
diff changeset
1495 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
1496 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
1497 )
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
1498
1266
a1bcfe58a1ab Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents: 1206
diff changeset
1499 @classmethod
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1500 def get_by_key(cls, key):
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1501 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
1502
1728
07e56179633e - fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents: 1727
diff changeset
1503 @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
1504 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
1505 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
1506 .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
1507 .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
1508 .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
1509
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
1510 return q.all()
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
1511
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
1512 @classmethod
87f0800abc7b #227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents: 1976
diff changeset
1513 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
1514 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
1515 .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
1516 .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
1517 .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
1518
07e56179633e - fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents: 1727
diff changeset
1519 return q.all()
07e56179633e - fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents: 1727
diff changeset
1520
3714
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1521 @classmethod
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1522 def get_default_user_group_perms(cls, default_user_id):
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1523 q = Session().query(UserUserGroupToPerm, UserGroup, cls)\
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1524 .join((UserGroup, UserUserGroupToPerm.user_group_id == UserGroup.users_group_id))\
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1525 .join((cls, UserUserGroupToPerm.permission_id == cls.permission_id))\
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1526 .filter(UserUserGroupToPerm.user_id == default_user_id)
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1527
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1528 return q.all()
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1529
1728
07e56179633e - fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents: 1727
diff changeset
1530
1633
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1607
diff changeset
1531 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
1532 __tablename__ = 'repo_to_perm'
1958
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
1533 __table_args__ = (
2000
72c525a7e7ad added migrations from 1.2.X to 1.3
Marcin Kuzminski <marcin@python-works.com>
parents: 1990
diff changeset
1534 UniqueConstraint('user_id', 'repository_id', 'permission_id'),
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
1535 {'extend_existing': True, 'mysql_engine': 'InnoDB',
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1536 'mysql_charset': 'utf8'}
1958
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
1537 )
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1538 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
1539 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
1540 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
1541 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
1542
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1543 user = relationship('User')
2000
72c525a7e7ad added migrations from 1.2.X to 1.3
Marcin Kuzminski <marcin@python-works.com>
parents: 1990
diff changeset
1544 repository = relationship('Repository')
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1545 permission = relationship('Permission')
399
f5c1eec9f376 rename repo2perm into repo_to_perm
Marcin Kuzminski <marcin@python-works.com>
parents: 392
diff changeset
1546
1729
da8ee2ef7f6d implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents: 1728
diff changeset
1547 @classmethod
da8ee2ef7f6d implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents: 1728
diff changeset
1548 def create(cls, user, repository, permission):
da8ee2ef7f6d implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents: 1728
diff changeset
1549 n = cls()
da8ee2ef7f6d implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents: 1728
diff changeset
1550 n.user = user
da8ee2ef7f6d implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents: 1728
diff changeset
1551 n.repository = repository
da8ee2ef7f6d implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents: 1728
diff changeset
1552 n.permission = permission
2520
a1e156503afe Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents: 2510
diff changeset
1553 Session().add(n)
1729
da8ee2ef7f6d implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents: 1728
diff changeset
1554 return n
da8ee2ef7f6d implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents: 1728
diff changeset
1555
2156
a27e4d44237e Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents: 2152
diff changeset
1556 def __unicode__(self):
3714
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1557 return u'<%s => %s >' % (self.user, self.repository)
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1558
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1559
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1560 class UserUserGroupToPerm(Base, BaseModel):
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1561 __tablename__ = 'user_user_group_to_perm'
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1562 __table_args__ = (
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1563 UniqueConstraint('user_id', 'user_group_id', 'permission_id'),
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1564 {'extend_existing': True, 'mysql_engine': 'InnoDB',
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1565 'mysql_charset': 'utf8'}
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1566 )
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1567 user_user_group_to_perm_id = Column("user_user_group_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1568 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None)
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1569 permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1570 user_group_id = Column("user_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None)
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1571
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1572 user = relationship('User')
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1573 user_group = relationship('UserGroup')
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1574 permission = relationship('Permission')
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1575
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1576 @classmethod
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1577 def create(cls, user, user_group, permission):
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1578 n = cls()
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1579 n.user = user
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1580 n.user_group = user_group
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1581 n.permission = permission
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1582 Session().add(n)
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1583 return n
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1584
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1585 def __unicode__(self):
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1586 return u'<%s => %s >' % (self.user, self.user_group)
1729
da8ee2ef7f6d implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents: 1728
diff changeset
1587
1800
6c86c987cf93 pep8ify
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
1588
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1589 class UserToPerm(Base, BaseModel):
399
f5c1eec9f376 rename repo2perm into repo_to_perm
Marcin Kuzminski <marcin@python-works.com>
parents: 392
diff changeset
1590 __tablename__ = 'user_to_perm'
1988
5eae67552695 db unique constraints fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 1982
diff changeset
1591 __table_args__ = (
5eae67552695 db unique constraints fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 1982
diff changeset
1592 UniqueConstraint('user_id', 'permission_id'),
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
1593 {'extend_existing': True, 'mysql_engine': 'InnoDB',
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1594 'mysql_charset': 'utf8'}
1988
5eae67552695 db unique constraints fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 1982
diff changeset
1595 )
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1596 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
1597 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
1598 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
1599
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1600 user = relationship('User')
1728
07e56179633e - fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents: 1727
diff changeset
1601 permission = relationship('Permission', lazy='joined')
399
f5c1eec9f376 rename repo2perm into repo_to_perm
Marcin Kuzminski <marcin@python-works.com>
parents: 392
diff changeset
1602
3729
49e5d4fa01e9 add repr for UserToPerm
Marcin Kuzminski <marcin@python-works.com>
parents: 3717
diff changeset
1603 def __unicode__(self):
49e5d4fa01e9 add repr for UserToPerm
Marcin Kuzminski <marcin@python-works.com>
parents: 3717
diff changeset
1604 return u'<%s => %s >' % (self.user, self.permission)
49e5d4fa01e9 add repr for UserToPerm
Marcin Kuzminski <marcin@python-works.com>
parents: 3717
diff changeset
1605
1014
6fdc3ff65fce #56 added assignments of users groups into repository
Marcin Kuzminski <marcin@python-works.com>
parents: 1000
diff changeset
1606
3417
fa6ba6727475 further cleanup of UsersGroup
Mads Kiilerich <madski@unity3d.com>
parents: 3416
diff changeset
1607 class UserGroupRepoToPerm(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
1608 __tablename__ = 'users_group_repo_to_perm'
1958
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
1609 __table_args__ = (
2000
72c525a7e7ad added migrations from 1.2.X to 1.3
Marcin Kuzminski <marcin@python-works.com>
parents: 1990
diff changeset
1610 UniqueConstraint('repository_id', 'users_group_id', 'permission_id'),
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
1611 {'extend_existing': True, 'mysql_engine': 'InnoDB',
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1612 'mysql_charset': 'utf8'}
1958
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
1613 )
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1614 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
1615 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
1616 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
1617 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
1618
3417
fa6ba6727475 further cleanup of UsersGroup
Mads Kiilerich <madski@unity3d.com>
parents: 3416
diff changeset
1619 users_group = relationship('UserGroup')
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1620 permission = relationship('Permission')
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1621 repository = relationship('Repository')
958
7d1483f3170b added user group to perm table
Marcin Kuzminski <marcin@python-works.com>
parents: 956
diff changeset
1622
1729
da8ee2ef7f6d implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents: 1728
diff changeset
1623 @classmethod
da8ee2ef7f6d implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents: 1728
diff changeset
1624 def create(cls, users_group, repository, permission):
da8ee2ef7f6d implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents: 1728
diff changeset
1625 n = cls()
da8ee2ef7f6d implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents: 1728
diff changeset
1626 n.users_group = users_group
da8ee2ef7f6d implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents: 1728
diff changeset
1627 n.repository = repository
da8ee2ef7f6d implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents: 1728
diff changeset
1628 n.permission = permission
2520
a1e156503afe Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents: 2510
diff changeset
1629 Session().add(n)
1729
da8ee2ef7f6d implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents: 1728
diff changeset
1630 return n
da8ee2ef7f6d implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents: 1728
diff changeset
1631
2156
a27e4d44237e Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents: 2152
diff changeset
1632 def __unicode__(self):
3788
d9b89874edf9 UserGroup on UserGroup permissions implementation.
Marcin Kuzminski <marcin@python-works.com>
parents: 3786
diff changeset
1633 return u'<UserGroupRepoToPerm:%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
1634
1800
6c86c987cf93 pep8ify
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
1635
3714
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1636 class UserGroupUserGroupToPerm(Base, BaseModel):
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1637 __tablename__ = 'user_group_user_group_to_perm'
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1638 __table_args__ = (
3788
d9b89874edf9 UserGroup on UserGroup permissions implementation.
Marcin Kuzminski <marcin@python-works.com>
parents: 3786
diff changeset
1639 UniqueConstraint('target_user_group_id', 'user_group_id', 'permission_id'),
d9b89874edf9 UserGroup on UserGroup permissions implementation.
Marcin Kuzminski <marcin@python-works.com>
parents: 3786
diff changeset
1640 CheckConstraint('target_user_group_id != user_group_id'),
3714
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1641 {'extend_existing': True, 'mysql_engine': 'InnoDB',
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1642 'mysql_charset': 'utf8'}
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1643 )
3788
d9b89874edf9 UserGroup on UserGroup permissions implementation.
Marcin Kuzminski <marcin@python-works.com>
parents: 3786
diff changeset
1644 user_group_user_group_to_perm_id = Column("user_group_user_group_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
d9b89874edf9 UserGroup on UserGroup permissions implementation.
Marcin Kuzminski <marcin@python-works.com>
parents: 3786
diff changeset
1645 target_user_group_id = Column("target_user_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None)
3714
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1646 permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1647 user_group_id = Column("user_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None)
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1648
3788
d9b89874edf9 UserGroup on UserGroup permissions implementation.
Marcin Kuzminski <marcin@python-works.com>
parents: 3786
diff changeset
1649 target_user_group = relationship('UserGroup', primaryjoin='UserGroupUserGroupToPerm.target_user_group_id==UserGroup.users_group_id')
d9b89874edf9 UserGroup on UserGroup permissions implementation.
Marcin Kuzminski <marcin@python-works.com>
parents: 3786
diff changeset
1650 user_group = relationship('UserGroup', primaryjoin='UserGroupUserGroupToPerm.user_group_id==UserGroup.users_group_id')
3714
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1651 permission = relationship('Permission')
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1652
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1653 @classmethod
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1654 def create(cls, target_user_group, user_group, permission):
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1655 n = cls()
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1656 n.target_user_group = target_user_group
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1657 n.user_group = user_group
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1658 n.permission = permission
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1659 Session().add(n)
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1660 return n
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1661
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1662 def __unicode__(self):
3788
d9b89874edf9 UserGroup on UserGroup permissions implementation.
Marcin Kuzminski <marcin@python-works.com>
parents: 3786
diff changeset
1663 return u'<UserGroupUserGroup:%s => %s >' % (self.target_user_group, self.user_group)
3714
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1664
7e3d89d9d3a2 - Manage User’s Groups: create, delete, rename, add/remove users inside.
Marcin Kuzminski <marcin@python-works.com>
parents: 3687
diff changeset
1665
3417
fa6ba6727475 further cleanup of UsersGroup
Mads Kiilerich <madski@unity3d.com>
parents: 3416
diff changeset
1666 class UserGroupToPerm(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
1667 __tablename__ = 'users_group_to_perm'
1988
5eae67552695 db unique constraints fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 1982
diff changeset
1668 __table_args__ = (
5eae67552695 db unique constraints fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 1982
diff changeset
1669 UniqueConstraint('users_group_id', 'permission_id',),
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
1670 {'extend_existing': True, 'mysql_engine': 'InnoDB',
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1671 'mysql_charset': 'utf8'}
1988
5eae67552695 db unique constraints fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 1982
diff changeset
1672 )
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1673 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
1674 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
1675 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
1676
3417
fa6ba6727475 further cleanup of UsersGroup
Mads Kiilerich <madski@unity3d.com>
parents: 3416
diff changeset
1677 users_group = relationship('UserGroup')
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1678 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
1679
aa7e45ad0cea Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents: 1266
diff changeset
1680
1633
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1607
diff changeset
1681 class UserRepoGroupToPerm(Base, BaseModel):
1958
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
1682 __tablename__ = 'user_repo_group_to_perm'
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
1683 __table_args__ = (
2000
72c525a7e7ad added migrations from 1.2.X to 1.3
Marcin Kuzminski <marcin@python-works.com>
parents: 1990
diff changeset
1684 UniqueConstraint('user_id', 'group_id', 'permission_id'),
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
1685 {'extend_existing': True, 'mysql_engine': 'InnoDB',
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1686 'mysql_charset': 'utf8'}
1958
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
1687 )
879
b19341623d48 added group to perm mapping table
Marcin Kuzminski <marcin@python-works.com>
parents: 878
diff changeset
1688
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1689 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
1690 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
1691 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
1692 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
1693
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1694 user = relationship('User')
2000
72c525a7e7ad added migrations from 1.2.X to 1.3
Marcin Kuzminski <marcin@python-works.com>
parents: 1990
diff changeset
1695 group = relationship('RepoGroup')
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1696 permission = relationship('Permission')
1633
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1607
diff changeset
1697
1800
6c86c987cf93 pep8ify
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
1698
3417
fa6ba6727475 further cleanup of UsersGroup
Mads Kiilerich <madski@unity3d.com>
parents: 3416
diff changeset
1699 class UserGroupRepoGroupToPerm(Base, BaseModel):
1633
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1607
diff changeset
1700 __tablename__ = 'users_group_repo_group_to_perm'
1958
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
1701 __table_args__ = (
1988
5eae67552695 db unique constraints fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 1982
diff changeset
1702 UniqueConstraint('users_group_id', 'group_id'),
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
1703 {'extend_existing': True, 'mysql_engine': 'InnoDB',
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1704 'mysql_charset': 'utf8'}
1958
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
1705 )
1633
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1607
diff changeset
1706
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1607
diff changeset
1707 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
1708 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
1709 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
1710 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
1711
3417
fa6ba6727475 further cleanup of UsersGroup
Mads Kiilerich <madski@unity3d.com>
parents: 3416
diff changeset
1712 users_group = relationship('UserGroup')
1633
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1607
diff changeset
1713 permission = relationship('Permission')
2c0d35e336b5 refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents: 1607
diff changeset
1714 group = relationship('RepoGroup')
879
b19341623d48 added group to perm mapping table
Marcin Kuzminski <marcin@python-works.com>
parents: 878
diff changeset
1715
1800
6c86c987cf93 pep8ify
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
1716
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1717 class Statistics(Base, BaseModel):
493
2256c78afe53 implemented basic autoupdating statistics fetched from database
Marcin Kuzminski <marcin@python-works.com>
parents: 473
diff changeset
1718 __tablename__ = 'statistics'
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1719 __table_args__ = (
2150
a8c9c0094ddf White space cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 2149
diff changeset
1720 UniqueConstraint('repository_id'),
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
1721 {'extend_existing': True, 'mysql_engine': 'InnoDB',
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1722 'mysql_charset': 'utf8'}
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1723 )
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1724 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
1725 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
1726 stat_on_revision = Column("stat_on_revision", Integer(), nullable=False)
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1727 commit_activity = Column("commit_activity", LargeBinary(1000000), nullable=False)#JSON data
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1728 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
1729 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
1730
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1731 repository = relationship('Repository', single_parent=True)
399
f5c1eec9f376 rename repo2perm into repo_to_perm
Marcin Kuzminski <marcin@python-works.com>
parents: 392
diff changeset
1732
1800
6c86c987cf93 pep8ify
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
1733
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1734 class UserFollowing(Base, BaseModel):
734
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 713
diff changeset
1735 __tablename__ = 'user_followings'
1958
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
1736 __table_args__ = (
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
1737 UniqueConstraint('user_id', 'follows_repository_id'),
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
1738 UniqueConstraint('user_id', 'follows_user_id'),
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
1739 {'extend_existing': True, 'mysql_engine': 'InnoDB',
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1740 'mysql_charset': 'utf8'}
1958
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
1741 )
734
49eb69d78988 implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents: 713
diff changeset
1742
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1743 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
1744 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
1745 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
1746 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
1747 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
1748
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1749 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
1750
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1751 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
1752 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
1753
1279
cb216757a62d #179 Added followers page
Marcin Kuzminski <marcin@python-works.com>
parents: 1271
diff changeset
1754 @classmethod
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1755 def get_repo_followers(cls, repo_id):
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1756 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
1757
1800
6c86c987cf93 pep8ify
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
1758
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
1759 class CacheInvalidation(Base, BaseModel):
670
e7c670cc03cb Adde table for cache invalidation
Marcin Kuzminski <marcin@python-works.com>
parents: 667
diff changeset
1760 __tablename__ = 'cache_invalidation'
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1761 __table_args__ = (
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1762 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
1763 Index('key_idx', 'cache_key'),
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
1764 {'extend_existing': True, 'mysql_engine': 'InnoDB',
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1765 'mysql_charset': 'utf8'},
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1766 )
3606
c8ecfe42b285 invalidation: some documentation and refactoring
Mads Kiilerich <madski@unity3d.com>
parents: 3599
diff changeset
1767 # cache_id, not used
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1768 cache_id = Column("cache_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
3606
c8ecfe42b285 invalidation: some documentation and refactoring
Mads Kiilerich <madski@unity3d.com>
parents: 3599
diff changeset
1769 # cache_key as created by _get_cache_key
2588
32dd6896abcf added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents: 2585
diff changeset
1770 cache_key = Column("cache_key", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
3682
cf65b2c1b69d invalidation: some documentation and refactoring, second round
Mads Kiilerich <madski@unity3d.com>
parents: 3680
diff changeset
1771 # cache_args is a repo_name
2588
32dd6896abcf added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents: 2585
diff changeset
1772 cache_args = Column("cache_args", String(255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None)
3682
cf65b2c1b69d invalidation: some documentation and refactoring, second round
Mads Kiilerich <madski@unity3d.com>
parents: 3680
diff changeset
1773 # instance sets cache_active True when it is caching,
cf65b2c1b69d invalidation: some documentation and refactoring, second round
Mads Kiilerich <madski@unity3d.com>
parents: 3680
diff changeset
1774 # other instances set cache_active to False to indicate that this cache is invalid
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
1775 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
1776
3682
cf65b2c1b69d invalidation: some documentation and refactoring, second round
Mads Kiilerich <madski@unity3d.com>
parents: 3680
diff changeset
1777 def __init__(self, cache_key, repo_name=''):
692
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 670
diff changeset
1778 self.cache_key = cache_key
3682
cf65b2c1b69d invalidation: some documentation and refactoring, second round
Mads Kiilerich <madski@unity3d.com>
parents: 3680
diff changeset
1779 self.cache_args = repo_name
692
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 670
diff changeset
1780 self.cache_active = False
cb0d9ce6ac5c #50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents: 670
diff changeset
1781
2156
a27e4d44237e Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents: 2152
diff changeset
1782 def __unicode__(self):
3686
f18801f827da repr of cache inv object show also now cache_active + some better logging
Marcin Kuzminski <marcin@python-works.com>
parents: 3685
diff changeset
1783 return u"<%s('%s:%s[%s]')>" % (self.__class__.__name__,
f18801f827da repr of cache inv object show also now cache_active + some better logging
Marcin Kuzminski <marcin@python-works.com>
parents: 3685
diff changeset
1784 self.cache_id, self.cache_key, self.cache_active)
2352
90e06f53af8c Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents: 2339
diff changeset
1785
3687
8849c07d8c62 fixed prefix extractions from cache keys + cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 3686
diff changeset
1786 def _cache_key_partition(self):
8849c07d8c62 fixed prefix extractions from cache keys + cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 3686
diff changeset
1787 prefix, repo_name, suffix = self.cache_key.partition(self.cache_args)
8849c07d8c62 fixed prefix extractions from cache keys + cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 3686
diff changeset
1788 return prefix, repo_name, suffix
8849c07d8c62 fixed prefix extractions from cache keys + cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 3686
diff changeset
1789
3606
c8ecfe42b285 invalidation: some documentation and refactoring
Mads Kiilerich <madski@unity3d.com>
parents: 3599
diff changeset
1790 def get_prefix(self):
c8ecfe42b285 invalidation: some documentation and refactoring
Mads Kiilerich <madski@unity3d.com>
parents: 3599
diff changeset
1791 """
3687
8849c07d8c62 fixed prefix extractions from cache keys + cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 3686
diff changeset
1792 get prefix that might have been used in _get_cache_key to
8849c07d8c62 fixed prefix extractions from cache keys + cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 3686
diff changeset
1793 generate self.cache_key. Only used for informational purposes
8849c07d8c62 fixed prefix extractions from cache keys + cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 3686
diff changeset
1794 in repo_edit.html.
3606
c8ecfe42b285 invalidation: some documentation and refactoring
Mads Kiilerich <madski@unity3d.com>
parents: 3599
diff changeset
1795 """
3687
8849c07d8c62 fixed prefix extractions from cache keys + cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 3686
diff changeset
1796 # prefix, repo_name, suffix
8849c07d8c62 fixed prefix extractions from cache keys + cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 3686
diff changeset
1797 return self._cache_key_partition()[0]
8849c07d8c62 fixed prefix extractions from cache keys + cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 3686
diff changeset
1798
8849c07d8c62 fixed prefix extractions from cache keys + cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 3686
diff changeset
1799 def get_suffix(self):
8849c07d8c62 fixed prefix extractions from cache keys + cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 3686
diff changeset
1800 """
8849c07d8c62 fixed prefix extractions from cache keys + cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 3686
diff changeset
1801 get suffix that might have been used in _get_cache_key to
8849c07d8c62 fixed prefix extractions from cache keys + cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 3686
diff changeset
1802 generate self.cache_key. Only used for informational purposes
8849c07d8c62 fixed prefix extractions from cache keys + cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 3686
diff changeset
1803 in repo_edit.html.
8849c07d8c62 fixed prefix extractions from cache keys + cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 3686
diff changeset
1804 """
8849c07d8c62 fixed prefix extractions from cache keys + cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 3686
diff changeset
1805 # prefix, repo_name, suffix
8849c07d8c62 fixed prefix extractions from cache keys + cleanup
Marcin Kuzminski <marcin@python-works.com>
parents: 3686
diff changeset
1806 return self._cache_key_partition()[2]
2809
070d2eacd48b Show cache keys in admin settings of repository
Marcin Kuzminski <marcin@python-works.com>
parents: 2808
diff changeset
1807
2147
d25bd432bc3e - #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
1808 @classmethod
3757
f08881dcc9eb invalidate: clear CacheInvalidation when upgrading
Mads Kiilerich <madski@unity3d.com>
parents: 3734
diff changeset
1809 def clear_cache(cls):
f08881dcc9eb invalidate: clear CacheInvalidation when upgrading
Mads Kiilerich <madski@unity3d.com>
parents: 3734
diff changeset
1810 """
f08881dcc9eb invalidate: clear CacheInvalidation when upgrading
Mads Kiilerich <madski@unity3d.com>
parents: 3734
diff changeset
1811 Delete all cache keys from database.
f08881dcc9eb invalidate: clear CacheInvalidation when upgrading
Mads Kiilerich <madski@unity3d.com>
parents: 3734
diff changeset
1812 Should only be run when all instances are down and all entries thus stale.
f08881dcc9eb invalidate: clear CacheInvalidation when upgrading
Mads Kiilerich <madski@unity3d.com>
parents: 3734
diff changeset
1813 """
f08881dcc9eb invalidate: clear CacheInvalidation when upgrading
Mads Kiilerich <madski@unity3d.com>
parents: 3734
diff changeset
1814 cls.query().delete()
f08881dcc9eb invalidate: clear CacheInvalidation when upgrading
Mads Kiilerich <madski@unity3d.com>
parents: 3734
diff changeset
1815 Session().commit()
f08881dcc9eb invalidate: clear CacheInvalidation when upgrading
Mads Kiilerich <madski@unity3d.com>
parents: 3734
diff changeset
1816
f08881dcc9eb invalidate: clear CacheInvalidation when upgrading
Mads Kiilerich <madski@unity3d.com>
parents: 3734
diff changeset
1817 @classmethod
3606
c8ecfe42b285 invalidation: some documentation and refactoring
Mads Kiilerich <madski@unity3d.com>
parents: 3599
diff changeset
1818 def _get_cache_key(cls, key):
2013
8530c3cd9d04 fixed issue with hybrid property for ldap_active
Marcin Kuzminski <marcin@python-works.com>
parents: 2007
diff changeset
1819 """
3606
c8ecfe42b285 invalidation: some documentation and refactoring
Mads Kiilerich <madski@unity3d.com>
parents: 3599
diff changeset
1820 Wrapper for generating a unique cache key for this instance and "key".
3682
cf65b2c1b69d invalidation: some documentation and refactoring, second round
Mads Kiilerich <madski@unity3d.com>
parents: 3680
diff changeset
1821 key must / will start with a repo_name which will be stored in .cache_args .
2013
8530c3cd9d04 fixed issue with hybrid property for ldap_active
Marcin Kuzminski <marcin@python-works.com>
parents: 2007
diff changeset
1822 """
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
1823 import rhodecode
3606
c8ecfe42b285 invalidation: some documentation and refactoring
Mads Kiilerich <madski@unity3d.com>
parents: 3599
diff changeset
1824 prefix = rhodecode.CONFIG.get('instance_id', '')
c8ecfe42b285 invalidation: some documentation and refactoring
Mads Kiilerich <madski@unity3d.com>
parents: 3599
diff changeset
1825 return "%s%s" % (prefix, key)
2013
8530c3cd9d04 fixed issue with hybrid property for ldap_active
Marcin Kuzminski <marcin@python-works.com>
parents: 2007
diff changeset
1826
8530c3cd9d04 fixed issue with hybrid property for ldap_active
Marcin Kuzminski <marcin@python-works.com>
parents: 2007
diff changeset
1827 @classmethod
3685
02e1e270bf93 invalidation: set_invalidate is (obviously) only used to invalidate the whole repo
Mads Kiilerich <madski@unity3d.com>
parents: 3684
diff changeset
1828 def set_invalidate(cls, repo_name):
1607
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
1829 """
3685
02e1e270bf93 invalidation: set_invalidate is (obviously) only used to invalidate the whole repo
Mads Kiilerich <madski@unity3d.com>
parents: 3684
diff changeset
1830 Mark all caches of a repo as invalid in the database.
1607
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
1831 """
3685
02e1e270bf93 invalidation: set_invalidate is (obviously) only used to invalidate the whole repo
Mads Kiilerich <madski@unity3d.com>
parents: 3684
diff changeset
1832 inv_objs = Session().query(cls).filter(cls.cache_args == repo_name).all()
1607
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
1833
2147
d25bd432bc3e - #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
1834 try:
d25bd432bc3e - #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents: 2109
diff changeset
1835 for inv_obj in inv_objs:
3685
02e1e270bf93 invalidation: set_invalidate is (obviously) only used to invalidate the whole repo
Mads Kiilerich <madski@unity3d.com>
parents: 3684
diff changeset
1836 log.debug('marking %s key for invalidation based on repo_name=%s'
02e1e270bf93 invalidation: set_invalidate is (obviously) only used to invalidate the whole repo
Mads Kiilerich <madski@unity3d.com>
parents: 3684
diff changeset
1837 % (inv_obj, safe_str(repo_name)))
3020
00498b3e4c88 Cleaned the way cache keys are invalidated
Marcin Kuzminski <marcin@python-works.com>
parents: 3018
diff changeset
1838 inv_obj.cache_active = False
2520
a1e156503afe Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents: 2510
diff changeset
1839 Session().add(inv_obj)
a1e156503afe Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents: 2510
diff changeset
1840 Session().commit()
1607
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
1841 except Exception:
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
1842 log.error(traceback.format_exc())
2520
a1e156503afe Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents: 2510
diff changeset
1843 Session().rollback()
1607
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
1844
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
1845 @classmethod
3773
8e2cd46f765b invalidate: encapsulate how key is generated from repo_name and kind
Mads Kiilerich <madski@unity3d.com>
parents: 3772
diff changeset
1846 def test_and_set_valid(cls, repo_name, kind, valid_cache_keys=None):
1607
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
1847 """
3772
910ad1ffee99 invalidation: merge .invalidate and .set_valid as .test_and_set_valid
Mads Kiilerich <madski@unity3d.com>
parents: 3759
diff changeset
1848 Mark this cache key as active and currently cached.
910ad1ffee99 invalidation: merge .invalidate and .set_valid as .test_and_set_valid
Mads Kiilerich <madski@unity3d.com>
parents: 3759
diff changeset
1849 Return True if the existing cache registration still was valid.
910ad1ffee99 invalidation: merge .invalidate and .set_valid as .test_and_set_valid
Mads Kiilerich <madski@unity3d.com>
parents: 3759
diff changeset
1850 Return False to indicate that it had been invalidated and caches should be refreshed.
1607
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
1851 """
3773
8e2cd46f765b invalidate: encapsulate how key is generated from repo_name and kind
Mads Kiilerich <madski@unity3d.com>
parents: 3772
diff changeset
1852
8e2cd46f765b invalidate: encapsulate how key is generated from repo_name and kind
Mads Kiilerich <madski@unity3d.com>
parents: 3772
diff changeset
1853 key = (repo_name + '_' + kind) if kind else repo_name
3772
910ad1ffee99 invalidation: merge .invalidate and .set_valid as .test_and_set_valid
Mads Kiilerich <madski@unity3d.com>
parents: 3759
diff changeset
1854 cache_key = cls._get_cache_key(key)
910ad1ffee99 invalidation: merge .invalidate and .set_valid as .test_and_set_valid
Mads Kiilerich <madski@unity3d.com>
parents: 3759
diff changeset
1855
910ad1ffee99 invalidation: merge .invalidate and .set_valid as .test_and_set_valid
Mads Kiilerich <madski@unity3d.com>
parents: 3759
diff changeset
1856 if valid_cache_keys and cache_key in valid_cache_keys:
910ad1ffee99 invalidation: merge .invalidate and .set_valid as .test_and_set_valid
Mads Kiilerich <madski@unity3d.com>
parents: 3759
diff changeset
1857 return True
910ad1ffee99 invalidation: merge .invalidate and .set_valid as .test_and_set_valid
Mads Kiilerich <madski@unity3d.com>
parents: 3759
diff changeset
1858
910ad1ffee99 invalidation: merge .invalidate and .set_valid as .test_and_set_valid
Mads Kiilerich <madski@unity3d.com>
parents: 3759
diff changeset
1859 try:
910ad1ffee99 invalidation: merge .invalidate and .set_valid as .test_and_set_valid
Mads Kiilerich <madski@unity3d.com>
parents: 3759
diff changeset
1860 inv_obj = cls.query().filter(cls.cache_key == cache_key).scalar()
910ad1ffee99 invalidation: merge .invalidate and .set_valid as .test_and_set_valid
Mads Kiilerich <madski@unity3d.com>
parents: 3759
diff changeset
1861 if not inv_obj:
910ad1ffee99 invalidation: merge .invalidate and .set_valid as .test_and_set_valid
Mads Kiilerich <madski@unity3d.com>
parents: 3759
diff changeset
1862 inv_obj = CacheInvalidation(cache_key, repo_name)
910ad1ffee99 invalidation: merge .invalidate and .set_valid as .test_and_set_valid
Mads Kiilerich <madski@unity3d.com>
parents: 3759
diff changeset
1863 was_valid = inv_obj.cache_active
910ad1ffee99 invalidation: merge .invalidate and .set_valid as .test_and_set_valid
Mads Kiilerich <madski@unity3d.com>
parents: 3759
diff changeset
1864 inv_obj.cache_active = True
910ad1ffee99 invalidation: merge .invalidate and .set_valid as .test_and_set_valid
Mads Kiilerich <madski@unity3d.com>
parents: 3759
diff changeset
1865 Session().add(inv_obj)
910ad1ffee99 invalidation: merge .invalidate and .set_valid as .test_and_set_valid
Mads Kiilerich <madski@unity3d.com>
parents: 3759
diff changeset
1866 Session().commit()
910ad1ffee99 invalidation: merge .invalidate and .set_valid as .test_and_set_valid
Mads Kiilerich <madski@unity3d.com>
parents: 3759
diff changeset
1867 return was_valid
910ad1ffee99 invalidation: merge .invalidate and .set_valid as .test_and_set_valid
Mads Kiilerich <madski@unity3d.com>
parents: 3759
diff changeset
1868 except Exception:
910ad1ffee99 invalidation: merge .invalidate and .set_valid as .test_and_set_valid
Mads Kiilerich <madski@unity3d.com>
parents: 3759
diff changeset
1869 log.error(traceback.format_exc())
910ad1ffee99 invalidation: merge .invalidate and .set_valid as .test_and_set_valid
Mads Kiilerich <madski@unity3d.com>
parents: 3759
diff changeset
1870 Session().rollback()
910ad1ffee99 invalidation: merge .invalidate and .set_valid as .test_and_set_valid
Mads Kiilerich <madski@unity3d.com>
parents: 3759
diff changeset
1871 return False
1607
e886f91fcb71 Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents: 1594
diff changeset
1872
2352
90e06f53af8c Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents: 2339
diff changeset
1873 @classmethod
3772
910ad1ffee99 invalidation: merge .invalidate and .set_valid as .test_and_set_valid
Mads Kiilerich <madski@unity3d.com>
parents: 3759
diff changeset
1874 def get_valid_cache_keys(cls):
910ad1ffee99 invalidation: merge .invalidate and .set_valid as .test_and_set_valid
Mads Kiilerich <madski@unity3d.com>
parents: 3759
diff changeset
1875 """
910ad1ffee99 invalidation: merge .invalidate and .set_valid as .test_and_set_valid
Mads Kiilerich <madski@unity3d.com>
parents: 3759
diff changeset
1876 Return opaque object with information of which caches still are valid
910ad1ffee99 invalidation: merge .invalidate and .set_valid as .test_and_set_valid
Mads Kiilerich <madski@unity3d.com>
parents: 3759
diff changeset
1877 and can be used without checking for invalidation.
910ad1ffee99 invalidation: merge .invalidate and .set_valid as .test_and_set_valid
Mads Kiilerich <madski@unity3d.com>
parents: 3759
diff changeset
1878 """
910ad1ffee99 invalidation: merge .invalidate and .set_valid as .test_and_set_valid
Mads Kiilerich <madski@unity3d.com>
parents: 3759
diff changeset
1879 return set(inv_obj.cache_key for inv_obj in cls.query().filter(cls.cache_active).all())
2352
90e06f53af8c Implemented cache-map on main page to save executing select
Marcin Kuzminski <marcin@python-works.com>
parents: 2339
diff changeset
1880
1665
36f77a46f291 Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents: 1634
diff changeset
1881
1670
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents: 1669
diff changeset
1882 class ChangesetComment(Base, BaseModel):
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents: 1669
diff changeset
1883 __tablename__ = 'changeset_comments'
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1884 __table_args__ = (
2463
b426ecc30319 Added some DB indexes to optimize queries
Marcin Kuzminski <marcin@python-works.com>
parents: 2462
diff changeset
1885 Index('cc_revision_idx', 'revision'),
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
1886 {'extend_existing': True, 'mysql_engine': 'InnoDB',
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1887 'mysql_charset': 'utf8'},
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
1888 )
1670
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents: 1669
diff changeset
1889 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
1890 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
1891 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
1892 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
1893 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
1894 hl_lines = Column('hl_lines', Unicode(512), nullable=True)
1677
7276b170ce8b #71 code-review
Marcin Kuzminski <marcin@python-works.com>
parents: 1675
diff changeset
1895 f_path = Column('f_path', Unicode(1000), nullable=True)
1670
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents: 1669
diff changeset
1896 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
1897 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
1898 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
1899 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
1900
1703
f23828b00b21 notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1702
diff changeset
1901 author = relationship('User', lazy='joined')
1670
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents: 1669
diff changeset
1902 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
1903 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
1904 pull_request = relationship('PullRequest', lazy='joined')
1670
d2de0c2f02cd #77 code review
Marcin Kuzminski <marcin@python-works.com>
parents: 1669
diff changeset
1905
1703
f23828b00b21 notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1702
diff changeset
1906 @classmethod
2443
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
1907 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
1908 """
2443
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
1909 Returns user associated with this ChangesetComment. ie those
1703
f23828b00b21 notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1702
diff changeset
1910 who actually commented
1818
cf51bbfb120e auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents: 1800
diff changeset
1911
1703
f23828b00b21 notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1702
diff changeset
1912 :param cls:
f23828b00b21 notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1702
diff changeset
1913 :param revision:
f23828b00b21 notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1702
diff changeset
1914 """
2520
a1e156503afe Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents: 2510
diff changeset
1915 q = Session().query(User)\
2443
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
1916 .join(ChangesetComment.author)
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
1917 if revision:
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
1918 q = q.filter(cls.revision == revision)
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
1919 elif pull_request_id:
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
1920 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
1921 return q.all()
1886
50e32940e464 code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 1884
diff changeset
1922
1703
f23828b00b21 notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1702
diff changeset
1923
2215
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
1924 class ChangesetStatus(Base, BaseModel):
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
1925 __tablename__ = 'changeset_statuses'
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
1926 __table_args__ = (
2463
b426ecc30319 Added some DB indexes to optimize queries
Marcin Kuzminski <marcin@python-works.com>
parents: 2462
diff changeset
1927 Index('cs_revision_idx', 'revision'),
b426ecc30319 Added some DB indexes to optimize queries
Marcin Kuzminski <marcin@python-works.com>
parents: 2462
diff changeset
1928 Index('cs_version_idx', 'version'),
2287
8447d35b674e Added simple versioning for changeset status
Marcin Kuzminski <marcin@python-works.com>
parents: 2286
diff changeset
1929 UniqueConstraint('repo_id', 'revision', 'version'),
2215
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
1930 {'extend_existing': True, 'mysql_engine': 'InnoDB',
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
1931 'mysql_charset': 'utf8'}
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
1932 )
2481
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2480
diff changeset
1933 STATUS_NOT_REVIEWED = DEFAULT = 'not_reviewed'
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2480
diff changeset
1934 STATUS_APPROVED = 'approved'
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2480
diff changeset
1935 STATUS_REJECTED = 'rejected'
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2480
diff changeset
1936 STATUS_UNDER_REVIEW = 'under_review'
2215
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
1937
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
1938 STATUSES = [
2481
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2480
diff changeset
1939 (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
1940 (STATUS_APPROVED, _("Approved")),
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2480
diff changeset
1941 (STATUS_REJECTED, _("Rejected")),
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2480
diff changeset
1942 (STATUS_UNDER_REVIEW, _("Under Review")),
2215
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
1943 ]
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
1944
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
1945 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
1946 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
1947 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
1948 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
1949 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
1950 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
1951 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
1952 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
1953 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
1954
2215
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
1955 author = relationship('User', lazy='joined')
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
1956 repo = relationship('Repository')
2286
9265958e33bb Show changes of status inside comments
Marcin Kuzminski <marcin@python-works.com>
parents: 2280
diff changeset
1957 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
1958 pull_request = relationship('PullRequest', lazy='joined')
2215
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
1959
2481
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2480
diff changeset
1960 def __unicode__(self):
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2480
diff changeset
1961 return u"<%s('%s:%s')>" % (
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2480
diff changeset
1962 self.__class__.__name__,
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2480
diff changeset
1963 self.status, self.author
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2480
diff changeset
1964 )
4d3032431d4f Adde pull request voting recalculation
Marcin Kuzminski <marcin@python-works.com>
parents: 2480
diff changeset
1965
2296
e5c0f201ca0b Add changeset status change into emails
Marcin Kuzminski <marcin@python-works.com>
parents: 2287
diff changeset
1966 @classmethod
e5c0f201ca0b Add changeset status change into emails
Marcin Kuzminski <marcin@python-works.com>
parents: 2287
diff changeset
1967 def get_status_lbl(cls, value):
e5c0f201ca0b Add changeset status change into emails
Marcin Kuzminski <marcin@python-works.com>
parents: 2287
diff changeset
1968 return dict(cls.STATUSES).get(value)
e5c0f201ca0b Add changeset status change into emails
Marcin Kuzminski <marcin@python-works.com>
parents: 2287
diff changeset
1969
2217
76947224bf27 Implemented initial code-review status of changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 2215
diff changeset
1970 @property
76947224bf27 Implemented initial code-review status of changesets
Marcin Kuzminski <marcin@python-works.com>
parents: 2215
diff changeset
1971 def status_lbl(self):
2296
e5c0f201ca0b Add changeset status change into emails
Marcin Kuzminski <marcin@python-works.com>
parents: 2287
diff changeset
1972 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
1973
2215
2c2bdaeca912 code-review initial
Marcin Kuzminski <marcin@python-works.com>
parents: 2161
diff changeset
1974
2434
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
1975 class PullRequest(Base, BaseModel):
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
1976 __tablename__ = 'pull_requests'
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
1977 __table_args__ = (
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
1978 {'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
1979 'mysql_charset': 'utf8'},
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
1980 )
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
1981
4049
3b5f32aeed36 comments: clarify in ui whether comments are for changeset or PR
Mads Kiilerich <madski@unity3d.com>
parents: 3971
diff changeset
1982 # values for .status
2588
32dd6896abcf added status column to pull request + some small refactoring of models
Marcin Kuzminski <marcin@python-works.com>
parents: 2585
diff changeset
1983 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
1984 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
1985 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
1986
2434
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
1987 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
1988 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
1989 description = Column('description', UnicodeText(10240), nullable=True)
4049
3b5f32aeed36 comments: clarify in ui whether comments are for changeset or PR
Mads Kiilerich <madski@unity3d.com>
parents: 3971
diff changeset
1990 status = Column('status', Unicode(256), nullable=False, default=STATUS_NEW) # only for closedness, not approve/reject/etc
2440
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
1991 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
1992 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
1993 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
1994 _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
1995 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
1996 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
1997 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
1998 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
1999
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
2000 @hybrid_property
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
2001 def revisions(self):
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
2002 return self._revisions.split(':')
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
2003
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
2004 @revisions.setter
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
2005 def revisions(self, val):
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
2006 self._revisions = ':'.join(val)
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
2007
3170
2ab2eed4a70a implemented #725 Pull Request View - Show origin repo URL
Marcin Kuzminski <marcin@python-works.com>
parents: 3152
diff changeset
2008 @property
2ab2eed4a70a implemented #725 Pull Request View - Show origin repo URL
Marcin Kuzminski <marcin@python-works.com>
parents: 3152
diff changeset
2009 def org_ref_parts(self):
2ab2eed4a70a implemented #725 Pull Request View - Show origin repo URL
Marcin Kuzminski <marcin@python-works.com>
parents: 3152
diff changeset
2010 return self.org_ref.split(':')
2ab2eed4a70a implemented #725 Pull Request View - Show origin repo URL
Marcin Kuzminski <marcin@python-works.com>
parents: 3152
diff changeset
2011
2ab2eed4a70a implemented #725 Pull Request View - Show origin repo URL
Marcin Kuzminski <marcin@python-works.com>
parents: 3152
diff changeset
2012 @property
2ab2eed4a70a implemented #725 Pull Request View - Show origin repo URL
Marcin Kuzminski <marcin@python-works.com>
parents: 3152
diff changeset
2013 def other_ref_parts(self):
2ab2eed4a70a implemented #725 Pull Request View - Show origin repo URL
Marcin Kuzminski <marcin@python-works.com>
parents: 3152
diff changeset
2014 return self.other_ref.split(':')
2ab2eed4a70a implemented #725 Pull Request View - Show origin repo URL
Marcin Kuzminski <marcin@python-works.com>
parents: 3152
diff changeset
2015
2440
1bc579bcd67a - pull request generates overview based on it's params
Marcin Kuzminski <marcin@python-works.com>
parents: 2434
diff changeset
2016 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
2017 reviewers = relationship('PullRequestReviewers',
2666
c51fb1da6df2 cascade fixes for comments/pull-requests/reviewers
Marcin Kuzminski <marcin@python-works.com>
parents: 2665
diff changeset
2018 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
2019 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
2020 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
2021 statuses = relationship('ChangesetStatus')
c51fb1da6df2 cascade fixes for comments/pull-requests/reviewers
Marcin Kuzminski <marcin@python-works.com>
parents: 2665
diff changeset
2022 comments = relationship('ChangesetComment',
c51fb1da6df2 cascade fixes for comments/pull-requests/reviewers
Marcin Kuzminski <marcin@python-works.com>
parents: 2665
diff changeset
2023 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
2024
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
2025 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
2026 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
2027
3264
565806c66c4d Add new attr to pull request
Marcin Kuzminski <marcin@python-works.com>
parents: 3246
diff changeset
2028 @property
565806c66c4d Add new attr to pull request
Marcin Kuzminski <marcin@python-works.com>
parents: 3246
diff changeset
2029 def last_review_status(self):
3274
567207469e95 laste_review status should only return if there are any statuses
Marcin Kuzminski <marcin@python-works.com>
parents: 3267
diff changeset
2030 return self.statuses[-1].status if self.statuses else ''
3264
565806c66c4d Add new attr to pull request
Marcin Kuzminski <marcin@python-works.com>
parents: 3246
diff changeset
2031
2434
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
2032 def __json__(self):
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
2033 return dict(
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
2034 revisions=self.revisions
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
2035 )
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
2036
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
2037
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
2038 class PullRequestReviewers(Base, BaseModel):
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
2039 __tablename__ = 'pull_request_reviewers'
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
2040 __table_args__ = (
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
2041 {'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
2042 'mysql_charset': 'utf8'},
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
2043 )
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
2044
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
2045 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
2046 self.user = user
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
2047 self.pull_request = pull_request
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
2048
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
2049 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
2050 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
2051 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
2052
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
2053 user = relationship('User')
f29469677319 Added basic models for saving open pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2430
diff changeset
2054 pull_request = relationship('PullRequest')
1886
50e32940e464 code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 1884
diff changeset
2055
1703
f23828b00b21 notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1702
diff changeset
2056
1702
8cb7f5c4d494 #302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents: 1693
diff changeset
2057 class Notification(Base, BaseModel):
8cb7f5c4d494 #302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents: 1693
diff changeset
2058 __tablename__ = 'notifications'
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
2059 __table_args__ = (
2463
b426ecc30319 Added some DB indexes to optimize queries
Marcin Kuzminski <marcin@python-works.com>
parents: 2462
diff changeset
2060 Index('notification_type_idx', 'type'),
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
2061 {'extend_existing': True, 'mysql_engine': 'InnoDB',
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
2062 'mysql_charset': 'utf8'},
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
2063 )
1703
f23828b00b21 notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1702
diff changeset
2064
1712
cac5109ac3b6 Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1703
diff changeset
2065 TYPE_CHANGESET_COMMENT = u'cs_comment'
cac5109ac3b6 Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1703
diff changeset
2066 TYPE_MESSAGE = u'message'
cac5109ac3b6 Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1703
diff changeset
2067 TYPE_MENTION = u'mention'
1731
31e6eb2fb4b2 implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents: 1729
diff changeset
2068 TYPE_REGISTRATION = u'registration'
2244
77e376fdc4c6 pull requests draft UI
Marcin Kuzminski <marcin@python-works.com>
parents: 2218
diff changeset
2069 TYPE_PULL_REQUEST = u'pull_request'
2443
fd0a822481ec - added commenting to pull requests
Marcin Kuzminski <marcin@python-works.com>
parents: 2440
diff changeset
2070 TYPE_PULL_REQUEST_COMMENT = u'pull_request_comment'
1703
f23828b00b21 notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1702
diff changeset
2071
1702
8cb7f5c4d494 #302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents: 1693
diff changeset
2072 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
2073 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
2074 body = Column('body', UnicodeText(50000), nullable=True)
1703
f23828b00b21 notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1702
diff changeset
2075 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
2076 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
2077 type_ = Column('type', Unicode(256))
1702
8cb7f5c4d494 #302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents: 1693
diff changeset
2078
1712
cac5109ac3b6 Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1703
diff changeset
2079 created_by_user = relationship('User')
1717
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
2080 notifications_to_users = relationship('UserNotification', lazy='joined',
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
2081 cascade="all, delete, delete-orphan")
1702
8cb7f5c4d494 #302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents: 1693
diff changeset
2082
8cb7f5c4d494 #302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents: 1693
diff changeset
2083 @property
8cb7f5c4d494 #302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents: 1693
diff changeset
2084 def recipients(self):
8cb7f5c4d494 #302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents: 1693
diff changeset
2085 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
2086 .filter(UserNotification.notification == self)\
2585
a52cee88d612 fixed sorting in recipients query of notifications
Marcin Kuzminski <marcin@python-works.com>
parents: 2562
diff changeset
2087 .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
2088
8cb7f5c4d494 #302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents: 1693
diff changeset
2089 @classmethod
1703
f23828b00b21 notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1702
diff changeset
2090 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
2091 if type_ is None:
f23828b00b21 notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1702
diff changeset
2092 type_ = Notification.TYPE_MESSAGE
f23828b00b21 notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1702
diff changeset
2093
1702
8cb7f5c4d494 #302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents: 1693
diff changeset
2094 notification = cls()
1712
cac5109ac3b6 Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1703
diff changeset
2095 notification.created_by_user = created_by
1702
8cb7f5c4d494 #302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents: 1693
diff changeset
2096 notification.subject = subject
8cb7f5c4d494 #302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents: 1693
diff changeset
2097 notification.body = body
1703
f23828b00b21 notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1702
diff changeset
2098 notification.type_ = type_
1717
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
2099 notification.created_on = datetime.datetime.now()
1713
54687aa00724 Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents: 1712
diff changeset
2100
1702
8cb7f5c4d494 #302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents: 1693
diff changeset
2101 for u in recipients:
1713
54687aa00724 Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents: 1712
diff changeset
2102 assoc = UserNotification()
54687aa00724 Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents: 1712
diff changeset
2103 assoc.notification = notification
54687aa00724 Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents: 1712
diff changeset
2104 u.notifications.append(assoc)
2520
a1e156503afe Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents: 2510
diff changeset
2105 Session().add(notification)
1702
8cb7f5c4d494 #302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents: 1693
diff changeset
2106 return notification
8cb7f5c4d494 #302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents: 1693
diff changeset
2107
1712
cac5109ac3b6 Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1703
diff changeset
2108 @property
cac5109ac3b6 Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1703
diff changeset
2109 def description(self):
cac5109ac3b6 Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1703
diff changeset
2110 from rhodecode.model.notification import NotificationModel
cac5109ac3b6 Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1703
diff changeset
2111 return NotificationModel().make_description(self)
cac5109ac3b6 Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1703
diff changeset
2112
1800
6c86c987cf93 pep8ify
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
2113
1702
8cb7f5c4d494 #302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents: 1693
diff changeset
2114 class UserNotification(Base, BaseModel):
8cb7f5c4d494 #302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents: 1693
diff changeset
2115 __tablename__ = 'user_to_notification'
1958
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
2116 __table_args__ = (
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
2117 UniqueConstraint('user_id', 'notification_id'),
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
2118 {'extend_existing': True, 'mysql_engine': 'InnoDB',
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
2119 'mysql_charset': 'utf8'}
1958
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
2120 )
7e4b3d3a9c5c renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents: 1950
diff changeset
2121 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
2122 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
2123 read = Column('read', Boolean, default=False)
1702
8cb7f5c4d494 #302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents: 1693
diff changeset
2124 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
2125
1713
54687aa00724 Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents: 1712
diff changeset
2126 user = relationship('User', lazy="joined")
1717
7ff304d3028f Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 1716
diff changeset
2127 notification = relationship('Notification', lazy="joined",
1960
3daa7093fbbb fix typo in db models
Marcin Kuzminski <marcin@python-works.com>
parents: 1958
diff changeset
2128 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
2129
1712
cac5109ac3b6 Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1703
diff changeset
2130 def mark_as_read(self):
cac5109ac3b6 Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 1703
diff changeset
2131 self.read = True
2520
a1e156503afe Fixed calls to Session in db model
Marcin Kuzminski <marcin@python-works.com>
parents: 2510
diff changeset
2132 Session().add(self)
1702
8cb7f5c4d494 #302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents: 1693
diff changeset
2133
1800
6c86c987cf93 pep8ify
Marcin Kuzminski <marcin@python-works.com>
parents: 1758
diff changeset
2134
3840
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3808
diff changeset
2135 class Gist(Base, BaseModel):
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3808
diff changeset
2136 __tablename__ = 'gists'
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3808
diff changeset
2137 __table_args__ = (
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3808
diff changeset
2138 Index('g_gist_access_id_idx', 'gist_access_id'),
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3808
diff changeset
2139 Index('g_created_on_idx', 'created_on'),
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3808
diff changeset
2140 {'extend_existing': True, 'mysql_engine': 'InnoDB',
3957
b87def4b3cbb Add autoincrement for sqlite into Gist table.
Marcin Kuzminski <marcin@python-works.com>
parents: 3942
diff changeset
2141 'mysql_charset': 'utf8', 'sqlite_autoincrement': True}
3840
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3808
diff changeset
2142 )
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3808
diff changeset
2143 GIST_PUBLIC = u'public'
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3808
diff changeset
2144 GIST_PRIVATE = u'private'
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3808
diff changeset
2145
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3808
diff changeset
2146 gist_id = Column('gist_id', Integer(), primary_key=True)
3870
b08a3f8a4148 decrease column size for gist_access_id.
Marcin Kuzminski <marcin@python-works.com>
parents: 3869
diff changeset
2147 gist_access_id = Column('gist_access_id', Unicode(250))
3840
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3808
diff changeset
2148 gist_description = Column('gist_description', UnicodeText(1024))
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3808
diff changeset
2149 gist_owner = Column('user_id', Integer(), ForeignKey('users.user_id'), nullable=True)
3971
7f71d22a1794 Fixed issues with how mysql handles float values. Caused gists with
Marcin Kuzminski <marcin@python-works.com>
parents: 3960
diff changeset
2150 gist_expires = Column('gist_expires', Float(53), nullable=False)
3840
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3808
diff changeset
2151 gist_type = Column('gist_type', Unicode(128), nullable=False)
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3808
diff changeset
2152 created_on = Column('created_on', DateTime(timezone=False), nullable=False, default=datetime.datetime.now)
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3808
diff changeset
2153 modified_at = Column('modified_at', DateTime(timezone=False), nullable=False, default=datetime.datetime.now)
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3808
diff changeset
2154
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3808
diff changeset
2155 owner = relationship('User')
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3808
diff changeset
2156
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3808
diff changeset
2157 @classmethod
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3808
diff changeset
2158 def get_or_404(cls, id_):
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3808
diff changeset
2159 res = cls.query().filter(cls.gist_access_id == id_).scalar()
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3808
diff changeset
2160 if not res:
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3808
diff changeset
2161 raise HTTPNotFound
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3808
diff changeset
2162 return res
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3808
diff changeset
2163
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3808
diff changeset
2164 @classmethod
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3808
diff changeset
2165 def get_by_access_id(cls, gist_access_id):
3842
54bc7a89f090 gists: add some API related code improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
2166 return cls.query().filter(cls.gist_access_id == gist_access_id).scalar()
3840
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3808
diff changeset
2167
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3808
diff changeset
2168 def gist_url(self):
3850
7a4df261a375 added alias configuration option for gists.
Marcin Kuzminski <marcin@python-works.com>
parents: 3842
diff changeset
2169 import rhodecode
7a4df261a375 added alias configuration option for gists.
Marcin Kuzminski <marcin@python-works.com>
parents: 3842
diff changeset
2170 alias_url = rhodecode.CONFIG.get('gist_alias_url')
7a4df261a375 added alias configuration option for gists.
Marcin Kuzminski <marcin@python-works.com>
parents: 3842
diff changeset
2171 if alias_url:
7a4df261a375 added alias configuration option for gists.
Marcin Kuzminski <marcin@python-works.com>
parents: 3842
diff changeset
2172 return alias_url.replace('{gistid}', self.gist_access_id)
7a4df261a375 added alias configuration option for gists.
Marcin Kuzminski <marcin@python-works.com>
parents: 3842
diff changeset
2173
3840
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3808
diff changeset
2174 from pylons import url
3866
1fdec7e3aeb2 refactored url.resource to full definition of routes
Marcin Kuzminski <marcin@python-works.com>
parents: 3850
diff changeset
2175 return url('gist', gist_id=self.gist_access_id, qualified=True)
3840
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3808
diff changeset
2176
3842
54bc7a89f090 gists: add some API related code improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
2177 @classmethod
54bc7a89f090 gists: add some API related code improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
2178 def base_path(cls):
54bc7a89f090 gists: add some API related code improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
2179 """
54bc7a89f090 gists: add some API related code improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
2180 Returns base path when all gists are stored
54bc7a89f090 gists: add some API related code improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
2181
54bc7a89f090 gists: add some API related code improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
2182 :param cls:
54bc7a89f090 gists: add some API related code improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
2183 """
54bc7a89f090 gists: add some API related code improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
2184 from rhodecode.model.gist import GIST_STORE_LOC
54bc7a89f090 gists: add some API related code improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
2185 q = Session().query(RhodeCodeUi)\
54bc7a89f090 gists: add some API related code improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
2186 .filter(RhodeCodeUi.ui_key == URL_SEP)
54bc7a89f090 gists: add some API related code improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
2187 q = q.options(FromCache("sql_cache_short", "repository_repo_path"))
54bc7a89f090 gists: add some API related code improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
2188 return os.path.join(q.one().ui_value, GIST_STORE_LOC)
54bc7a89f090 gists: add some API related code improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
2189
54bc7a89f090 gists: add some API related code improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
2190 def get_api_data(self):
54bc7a89f090 gists: add some API related code improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
2191 """
54bc7a89f090 gists: add some API related code improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
2192 Common function for generating gist related data for API
54bc7a89f090 gists: add some API related code improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
2193 """
54bc7a89f090 gists: add some API related code improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
2194 gist = self
54bc7a89f090 gists: add some API related code improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
2195 data = dict(
54bc7a89f090 gists: add some API related code improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
2196 gist_id=gist.gist_id,
54bc7a89f090 gists: add some API related code improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
2197 type=gist.gist_type,
54bc7a89f090 gists: add some API related code improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
2198 access_id=gist.gist_access_id,
54bc7a89f090 gists: add some API related code improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
2199 description=gist.gist_description,
54bc7a89f090 gists: add some API related code improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
2200 url=gist.gist_url(),
54bc7a89f090 gists: add some API related code improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
2201 expires=gist.gist_expires,
54bc7a89f090 gists: add some API related code improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
2202 created_on=gist.created_on,
54bc7a89f090 gists: add some API related code improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
2203 )
54bc7a89f090 gists: add some API related code improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
2204 return data
54bc7a89f090 gists: add some API related code improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
2205
54bc7a89f090 gists: add some API related code improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
2206 def __json__(self):
54bc7a89f090 gists: add some API related code improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
2207 data = dict(
54bc7a89f090 gists: add some API related code improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
2208 )
54bc7a89f090 gists: add some API related code improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
2209 data.update(self.get_api_data())
54bc7a89f090 gists: add some API related code improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
2210 return data
54bc7a89f090 gists: add some API related code improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
2211 ## SCM functions
54bc7a89f090 gists: add some API related code improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
2212
54bc7a89f090 gists: add some API related code improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
2213 @property
54bc7a89f090 gists: add some API related code improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
2214 def scm_instance(self):
54bc7a89f090 gists: add some API related code improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
2215 from rhodecode.lib.vcs import get_repo
54bc7a89f090 gists: add some API related code improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
2216 base_path = self.base_path()
54bc7a89f090 gists: add some API related code improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
2217 return get_repo(os.path.join(*map(safe_str,
54bc7a89f090 gists: add some API related code improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
2218 [base_path, self.gist_access_id])))
54bc7a89f090 gists: add some API related code improvements
Marcin Kuzminski <marcin@python-works.com>
parents: 3840
diff changeset
2219
3840
dc4644865e8b Implemented simple gist functionality ref #530.
Marcin Kuzminski <marcin@python-works.com>
parents: 3808
diff changeset
2220
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
2221 class DbMigrateVersion(Base, BaseModel):
834
8924ed0e4f36 added current db version into rhodecode,
Marcin Kuzminski <marcin@python-works.com>
parents: 832
diff changeset
2222 __tablename__ = 'db_migrate_version'
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
2223 __table_args__ = (
2356
2da7b5984ae5 typo fix + code garden
Marcin Kuzminski <marcin@python-works.com>
parents: 2352
diff changeset
2224 {'extend_existing': True, 'mysql_engine': 'InnoDB',
2149
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
2225 'mysql_charset': 'utf8'},
50aa7cb78cfe Mysql fixes
Marcin Kuzminski <marcin@python-works.com>
parents: 2147
diff changeset
2226 )
1594
9dae92a65e40 fixes #288
Marcin Kuzminski <marcin@python-works.com>
parents: 1593
diff changeset
2227 repository_id = Column('repository_id', String(250), primary_key=True)
1593
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
2228 repository_path = Column('repository_path', Text)
92a4f7c496a5 Correct code style
Nicolas VINOT <aeris@imirhil.fr>
parents: 1592
diff changeset
2229 version = Column('version', Integer)