Mercurial > kallithea
annotate rhodecode/model/db.py @ 2212:727e1f922a89 beta
exclude the actual grep command in memwatch
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Mon, 30 Apr 2012 14:10:58 +0200 |
parents | e8c016815ab9 |
children | dc2584ba5fbc 2c2bdaeca912 72542dc597be |
rev | line source |
---|---|
759
a7f50911a945
Models code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
734
diff
changeset
|
1 # -*- coding: utf-8 -*- |
a7f50911a945
Models code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
734
diff
changeset
|
2 """ |
832
634596f81cfd
new improved models with helper functions for easier data fetching
Marcin Kuzminski <marcin@python-works.com>
parents:
810
diff
changeset
|
3 rhodecode.model.db |
634596f81cfd
new improved models with helper functions for easier data fetching
Marcin Kuzminski <marcin@python-works.com>
parents:
810
diff
changeset
|
4 ~~~~~~~~~~~~~~~~~~ |
1203
6832ef664673
source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents:
1199
diff
changeset
|
5 |
834
8924ed0e4f36
added current db version into rhodecode,
Marcin Kuzminski <marcin@python-works.com>
parents:
832
diff
changeset
|
6 Database Models for RhodeCode |
1203
6832ef664673
source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents:
1199
diff
changeset
|
7 |
759
a7f50911a945
Models code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
734
diff
changeset
|
8 :created_on: Apr 08, 2010 |
a7f50911a945
Models code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
734
diff
changeset
|
9 :author: marcink |
1824
89efedac4e6c
2012 copyrights
Marcin Kuzminski <marcin@python-works.com>
parents:
1819
diff
changeset
|
10 :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com> |
759
a7f50911a945
Models code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
734
diff
changeset
|
11 :license: GPLv3, see COPYING for more details. |
a7f50911a945
Models code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
734
diff
changeset
|
12 """ |
1206
a671db5bdd58
fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents:
1203
diff
changeset
|
13 # This program is free software: you can redistribute it and/or modify |
a671db5bdd58
fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents:
1203
diff
changeset
|
14 # it under the terms of the GNU General Public License as published by |
a671db5bdd58
fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents:
1203
diff
changeset
|
15 # the Free Software Foundation, either version 3 of the License, or |
a671db5bdd58
fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents:
1203
diff
changeset
|
16 # (at your option) any later version. |
1203
6832ef664673
source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents:
1199
diff
changeset
|
17 # |
759
a7f50911a945
Models code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
734
diff
changeset
|
18 # This program is distributed in the hope that it will be useful, |
a7f50911a945
Models code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
734
diff
changeset
|
19 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
a7f50911a945
Models code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
734
diff
changeset
|
20 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
a7f50911a945
Models code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
734
diff
changeset
|
21 # GNU General Public License for more details. |
1203
6832ef664673
source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents:
1199
diff
changeset
|
22 # |
759
a7f50911a945
Models code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
734
diff
changeset
|
23 # You should have received a copy of the GNU General Public License |
1206
a671db5bdd58
fixed license issue #149
Marcin Kuzminski <marcin@python-works.com>
parents:
1203
diff
changeset
|
24 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
1199
268fa0b6b2ef
Added os.sep in models for better win support
Marcin Kuzminski <marcin@python-works.com>
parents:
1193
diff
changeset
|
25 |
268fa0b6b2ef
Added os.sep in models for better win support
Marcin Kuzminski <marcin@python-works.com>
parents:
1193
diff
changeset
|
26 import os |
759
a7f50911a945
Models code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
734
diff
changeset
|
27 import logging |
a7f50911a945
Models code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
734
diff
changeset
|
28 import datetime |
1366
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
29 import traceback |
1884
0614862a20ec
Added number of comments in changelog for each changeset
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
30 from collections import defaultdict |
759
a7f50911a945
Models code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
734
diff
changeset
|
31 |
658 | 32 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
|
33 from sqlalchemy.ext.hybrid import hybrid_property |
1594 | 34 from sqlalchemy.orm import relationship, joinedload, class_mapper, validates |
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
|
35 from beaker.cache import cache_region, region_invalidate |
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
|
36 |
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
|
37 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
|
38 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
|
39 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
|
40 from rhodecode.lib.vcs.utils.lazy import LazyProperty |
1366
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
41 |
2109 | 42 from rhodecode.lib.utils2 import str2bool, safe_str, get_changeset_safe, \ |
43 safe_unicode | |
1514
87ec80c280bb
fixed issues with python2.5
Marcin Kuzminski <marcin@python-works.com>
parents:
1508
diff
changeset
|
44 from rhodecode.lib.compat import json |
1669
f522f4d3bf93
moved caching query to libs
Marcin Kuzminski <marcin@python-works.com>
parents:
1665
diff
changeset
|
45 from rhodecode.lib.caching_query import FromCache |
1500 | 46 |
1081
70bf0be59653
fixed Session problems in model class functions
Marcin Kuzminski <marcin@python-works.com>
parents:
1065
diff
changeset
|
47 from rhodecode.model.meta import Base, Session |
2062
bf8ed0adbc66
fixes #371 fixed issues with beaker/sqlalchemy and non-ascii cache keys
Marcin Kuzminski <marcin@python-works.com>
parents:
2058
diff
changeset
|
48 import hashlib |
1669
f522f4d3bf93
moved caching query to libs
Marcin Kuzminski <marcin@python-works.com>
parents:
1665
diff
changeset
|
49 |
2000
72c525a7e7ad
added migrations from 1.2.X to 1.3
Marcin Kuzminski <marcin@python-works.com>
parents:
1990
diff
changeset
|
50 |
1593 | 51 log = logging.getLogger(__name__) |
49
3ada2f409c1c
Added sqlalchemy support
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff
changeset
|
52 |
1081
70bf0be59653
fixed Session problems in model class functions
Marcin Kuzminski <marcin@python-works.com>
parents:
1065
diff
changeset
|
53 #============================================================================== |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
54 # BASE CLASSES |
1081
70bf0be59653
fixed Session problems in model class functions
Marcin Kuzminski <marcin@python-works.com>
parents:
1065
diff
changeset
|
55 #============================================================================== |
70bf0be59653
fixed Session problems in model class functions
Marcin Kuzminski <marcin@python-works.com>
parents:
1065
diff
changeset
|
56 |
2062
bf8ed0adbc66
fixes #371 fixed issues with beaker/sqlalchemy and non-ascii cache keys
Marcin Kuzminski <marcin@python-works.com>
parents:
2058
diff
changeset
|
57 _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
|
58 |
1800 | 59 |
1593 | 60 class ModelSerializer(json.JSONEncoder): |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
61 """ |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
62 Simple Serializer for JSON, |
1584
3338a0994472
Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents:
1508
diff
changeset
|
63 |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
64 usage:: |
1584
3338a0994472
Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents:
1508
diff
changeset
|
65 |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
66 to make object customized for serialization implement a __json__ |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
67 method that will return a dict for serialization into json |
1584
3338a0994472
Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents:
1508
diff
changeset
|
68 |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
69 example:: |
1584
3338a0994472
Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents:
1508
diff
changeset
|
70 |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
71 class Task(object): |
1584
3338a0994472
Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents:
1508
diff
changeset
|
72 |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
73 def __init__(self, name, value): |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
74 self.name = name |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
75 self.value = value |
1584
3338a0994472
Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents:
1508
diff
changeset
|
76 |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
77 def __json__(self): |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
78 return dict(name=self.name, |
1584
3338a0994472
Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents:
1508
diff
changeset
|
79 value=self.value) |
3338a0994472
Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents:
1508
diff
changeset
|
80 |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
81 """ |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
82 |
1593 | 83 def default(self, obj): |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
84 |
1593 | 85 if hasattr(obj, '__json__'): |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
86 return obj.__json__() |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
87 else: |
1593 | 88 return json.JSONEncoder.default(self, obj) |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
89 |
1800 | 90 |
1593 | 91 class BaseModel(object): |
1758
a87aa385f21c
fixed repo_create permission by adding missing commit statements
Marcin Kuzminski <marcin@python-works.com>
parents:
1757
diff
changeset
|
92 """ |
a87aa385f21c
fixed repo_create permission by adding missing commit statements
Marcin Kuzminski <marcin@python-works.com>
parents:
1757
diff
changeset
|
93 Base Model for all classess |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
94 """ |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
95 |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
96 @classmethod |
1593 | 97 def _get_keys(cls): |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
98 """return column names for this model """ |
1593 | 99 return class_mapper(cls).c.keys() |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
100 |
1948
4582e6b9e2f6
get_dict function garden
Marcin Kuzminski <marcin@python-works.com>
parents:
1886
diff
changeset
|
101 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
|
102 """ |
a87aa385f21c
fixed repo_create permission by adding missing commit statements
Marcin Kuzminski <marcin@python-works.com>
parents:
1757
diff
changeset
|
103 return dict with keys and values corresponding |
1948
4582e6b9e2f6
get_dict function garden
Marcin Kuzminski <marcin@python-works.com>
parents:
1886
diff
changeset
|
104 to this model data """ |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
105 |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
106 d = {} |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
107 for k in self._get_keys(): |
1593 | 108 d[k] = getattr(self, k) |
1800 | 109 |
1758
a87aa385f21c
fixed repo_create permission by adding missing commit statements
Marcin Kuzminski <marcin@python-works.com>
parents:
1757
diff
changeset
|
110 # also use __json__() if present to get additional fields |
1948
4582e6b9e2f6
get_dict function garden
Marcin Kuzminski <marcin@python-works.com>
parents:
1886
diff
changeset
|
111 for k, val in getattr(self, '__json__', lambda: {})().iteritems(): |
4582e6b9e2f6
get_dict function garden
Marcin Kuzminski <marcin@python-works.com>
parents:
1886
diff
changeset
|
112 d[k] = val |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
113 return d |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
114 |
1593 | 115 def get_appstruct(self): |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
116 """return list with keys and values tupples corresponding |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
117 to this model data """ |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
118 |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
119 l = [] |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
120 for k in self._get_keys(): |
1593 | 121 l.append((k, getattr(self, k),)) |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
122 return l |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
123 |
1593 | 124 def populate_obj(self, populate_dict): |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
125 """populate model with data from given populate_dict""" |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
126 |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
127 for k in self._get_keys(): |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
128 if k in populate_dict: |
1593 | 129 setattr(self, k, populate_dict[k]) |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
130 |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
131 @classmethod |
1593 | 132 def query(cls): |
1749
8ecc6b8229a5
commit less models
Marcin Kuzminski <marcin@python-works.com>
parents:
1747
diff
changeset
|
133 return Session.query(cls) |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
134 |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
135 @classmethod |
1593 | 136 def get(cls, id_): |
1594 | 137 if id_: |
138 return cls.query().get(id_) | |
1466 | 139 |
1460
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
140 @classmethod |
1593 | 141 def getAll(cls): |
1584
3338a0994472
Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents:
1508
diff
changeset
|
142 return cls.query().all() |
1466 | 143 |
1460
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
144 @classmethod |
1593 | 145 def delete(cls, id_): |
146 obj = cls.query().get(id_) | |
1749
8ecc6b8229a5
commit less models
Marcin Kuzminski <marcin@python-works.com>
parents:
1747
diff
changeset
|
147 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
|
148 |
2156
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
149 def __repr__(self): |
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
150 if hasattr(self, '__unicode__'): |
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
151 # python repr needs to return str |
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
152 return safe_str(self.__unicode__()) |
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
153 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
|
154 |
1633
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
155 class RhodeCodeSetting(Base, BaseModel): |
548
b75b77ef649d
renamed hg_app to rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents:
547
diff
changeset
|
156 __tablename__ = 'rhodecode_settings' |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
157 __table_args__ = ( |
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
158 UniqueConstraint('app_settings_name'), |
2149 | 159 {'extend_existing': True, 'mysql_engine':'InnoDB', |
160 'mysql_charset': 'utf8'} | |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
161 ) |
1594 | 162 app_settings_id = Column("app_settings_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
163 app_settings_name = Column("app_settings_name", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) | |
164 _app_settings_value = Column("app_settings_value", String(length=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
|
165 |
1594 | 166 def __init__(self, k='', v=''): |
704
26237de9b613
Added settings model, and Exceptions lib.
Marcin Kuzminski <marcin@python-works.com>
parents:
692
diff
changeset
|
167 self.app_settings_name = k |
26237de9b613
Added settings model, and Exceptions lib.
Marcin Kuzminski <marcin@python-works.com>
parents:
692
diff
changeset
|
168 self.app_settings_value = v |
26237de9b613
Added settings model, and Exceptions lib.
Marcin Kuzminski <marcin@python-works.com>
parents:
692
diff
changeset
|
169 |
1593 | 170 @validates('_app_settings_value') |
171 def validate_settings_value(self, key, val): | |
172 assert type(val) == unicode | |
1561
4d841e565237
added validation of params on settings table
Marcin Kuzminski <marcin@python-works.com>
parents:
1556
diff
changeset
|
173 return val |
4d841e565237
added validation of params on settings table
Marcin Kuzminski <marcin@python-works.com>
parents:
1556
diff
changeset
|
174 |
1546
c363267bbec7
fixes #265 ldap save fails sometimes on converting attributes to booleans, added getter and setter
Marcin Kuzminski <marcin@python-works.com>
parents:
1539
diff
changeset
|
175 @hybrid_property |
1593 | 176 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
|
177 v = self._app_settings_value |
2013
8530c3cd9d04
fixed issue with hybrid property for ldap_active
Marcin Kuzminski <marcin@python-works.com>
parents:
2007
diff
changeset
|
178 if self.app_settings_name == 'ldap_active': |
1593 | 179 v = str2bool(v) |
1591 | 180 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
|
181 |
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
|
182 @app_settings_value.setter |
1593 | 183 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
|
184 """ |
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
|
185 Setter that will always make sure we use unicode in app_settings_value |
1591 | 186 |
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
|
187 :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
|
188 """ |
1593 | 189 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
|
190 |
2156
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
191 def __unicode__(self): |
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
192 return u"<%s('%s:%s')>" % ( |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
193 self.__class__.__name__, |
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
194 self.app_settings_name, self.app_settings_value |
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
195 ) |
704
26237de9b613
Added settings model, and Exceptions lib.
Marcin Kuzminski <marcin@python-works.com>
parents:
692
diff
changeset
|
196 |
1266
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
197 @classmethod |
1593 | 198 def get_by_name(cls, ldap_key): |
1584
3338a0994472
Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents:
1508
diff
changeset
|
199 return cls.query()\ |
1593 | 200 .filter(cls.app_settings_name == ldap_key).scalar() |
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
|
201 |
c0335c1dee36
added some fixes to LDAP form re-submition, new simples ldap-settings getter.
Marcin Kuzminski <marcin@python-works.com>
parents:
1279
diff
changeset
|
202 @classmethod |
1594 | 203 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
|
204 |
1584
3338a0994472
Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents:
1508
diff
changeset
|
205 ret = cls.query() |
1266
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
206 |
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
207 if cache: |
1593 | 208 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
|
209 |
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
210 if not ret: |
1593 | 211 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
|
212 settings = {} |
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
213 for each in ret: |
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
214 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
|
215 each.app_settings_value |
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
216 |
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
217 return settings |
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 @classmethod |
1594 | 220 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
|
221 ret = cls.query()\ |
1593 | 222 .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
|
223 fd = {} |
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
224 for row in ret: |
1593 | 225 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
|
226 |
1266
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
227 return fd |
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
228 |
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
229 |
1593 | 230 class RhodeCodeUi(Base, BaseModel): |
548
b75b77ef649d
renamed hg_app to rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents:
547
diff
changeset
|
231 __tablename__ = 'rhodecode_ui' |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
232 __table_args__ = ( |
1963
9bbde54232dc
white space cleanup
Marcin Kuzminski <marcin@python-works.com>
parents:
1960
diff
changeset
|
233 UniqueConstraint('ui_key'), |
2149 | 234 {'extend_existing': True, 'mysql_engine':'InnoDB', |
235 'mysql_charset': 'utf8'} | |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
236 ) |
1460
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
237 |
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
238 HOOK_UPDATE = 'changegroup.update' |
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
239 HOOK_REPO_SIZE = 'changegroup.repo_size' |
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
240 HOOK_PUSH = 'pretxnchangegroup.push_logger' |
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
241 HOOK_PULL = 'preoutgoing.pull_logger' |
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
242 |
1594 | 243 ui_id = Column("ui_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
244 ui_section = Column("ui_section", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) | |
245 ui_key = Column("ui_key", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) | |
246 ui_value = Column("ui_value", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) | |
247 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
|
248 |
1345
3bce31f026b8
#47 implemented Adding of new repo_groups+forms+validators. Fixed sorting of repo groups by main names in multiple locations. Removed some unneeded calls to self.sa for exchange to .query() methods.
Marcin Kuzminski <marcin@python-works.com>
parents:
1343
diff
changeset
|
249 @classmethod |
1593 | 250 def get_by_key(cls, key): |
251 return cls.query().filter(cls.ui_key == key) | |
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
|
252 |
1460
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
253 @classmethod |
1593 | 254 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
|
255 q = cls.query() |
1593 | 256 q = q.filter(cls.ui_key.in_([cls.HOOK_UPDATE, |
1460
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
257 cls.HOOK_REPO_SIZE, |
1593 | 258 cls.HOOK_PUSH, cls.HOOK_PULL])) |
1460
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
259 return q.all() |
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
260 |
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
261 @classmethod |
1593 | 262 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
|
263 q = cls.query() |
1593 | 264 q = q.filter(~cls.ui_key.in_([cls.HOOK_UPDATE, |
1460
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
265 cls.HOOK_REPO_SIZE, |
1593 | 266 cls.HOOK_PUSH, cls.HOOK_PULL])) |
267 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
|
268 return q.all() |
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
269 |
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
270 @classmethod |
1593 | 271 def create_or_update_hook(cls, key, val): |
272 new_ui = cls.get_by_key(key).scalar() or cls() | |
1460
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
273 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
|
274 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
|
275 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
|
276 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
|
277 |
1749
8ecc6b8229a5
commit less models
Marcin Kuzminski <marcin@python-works.com>
parents:
1747
diff
changeset
|
278 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
|
279 |
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
280 |
1593 | 281 class User(Base, BaseModel): |
49
3ada2f409c1c
Added sqlalchemy support
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff
changeset
|
282 __tablename__ = 'users' |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
283 __table_args__ = ( |
1963
9bbde54232dc
white space cleanup
Marcin Kuzminski <marcin@python-works.com>
parents:
1960
diff
changeset
|
284 UniqueConstraint('username'), UniqueConstraint('email'), |
2149 | 285 {'extend_existing': True, 'mysql_engine':'InnoDB', |
286 'mysql_charset': 'utf8'} | |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
287 ) |
1594 | 288 user_id = Column("user_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
289 username = Column("username", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) | |
290 password = Column("password", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) | |
291 active = Column("active", Boolean(), nullable=True, unique=None, default=None) | |
292 admin = Column("admin", Boolean(), nullable=True, unique=None, default=False) | |
293 name = Column("name", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) | |
294 lastname = Column("lastname", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) | |
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
|
295 _email = Column("email", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) |
1594 | 296 last_login = Column("last_login", DateTime(timezone=False), nullable=True, unique=None, default=None) |
297 ldap_dn = Column("ldap_dn", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) | |
298 api_key = Column("api_key", String(length=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
|
299 |
1594 | 300 user_log = relationship('UserLog', cascade='all') |
301 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
|
302 |
1593 | 303 repositories = relationship('Repository') |
1594 | 304 user_followers = relationship('UserFollowing', primaryjoin='UserFollowing.follows_user_id==User.user_id', cascade='all') |
1633
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
305 repo_to_perm = relationship('UserRepoToPerm', primaryjoin='UserRepoToPerm.user_id==User.user_id', cascade='all') |
2149 | 306 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
|
307 |
1594 | 308 group_member = relationship('UsersGroupMember', cascade='all') |
1065
5d676b6ab71c
Moved BaseModel into base class for declarative base. Added some handy methods into
Marcin Kuzminski <marcin@python-works.com>
parents:
1039
diff
changeset
|
309 |
2157
6a2c0cfb018d
Cascade delete comments and notifications when removing user.
Marcin Kuzminski <marcin@python-works.com>
parents:
2156
diff
changeset
|
310 notifications = relationship('UserNotification', cascade='all') |
6a2c0cfb018d
Cascade delete comments and notifications when removing user.
Marcin Kuzminski <marcin@python-works.com>
parents:
2156
diff
changeset
|
311 # notifications assigned to this user |
6a2c0cfb018d
Cascade delete comments and notifications when removing user.
Marcin Kuzminski <marcin@python-works.com>
parents:
2156
diff
changeset
|
312 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
|
313 # comments created by this user |
6a2c0cfb018d
Cascade delete comments and notifications when removing user.
Marcin Kuzminski <marcin@python-works.com>
parents:
2156
diff
changeset
|
314 user_comments = relationship('ChangesetComment', cascade='all') |
1702
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
315 |
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
|
316 @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
|
317 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
|
318 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
|
319 |
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
|
320 @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
|
321 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
|
322 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
|
323 |
759
a7f50911a945
Models code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
734
diff
changeset
|
324 @property |
1731
31e6eb2fb4b2
implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents:
1729
diff
changeset
|
325 def full_name(self): |
31e6eb2fb4b2
implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents:
1729
diff
changeset
|
326 return '%s %s' % (self.name, self.lastname) |
31e6eb2fb4b2
implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents:
1729
diff
changeset
|
327 |
31e6eb2fb4b2
implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents:
1729
diff
changeset
|
328 @property |
1950
4ae17f819ee8
#344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents:
1948
diff
changeset
|
329 def full_name_or_username(self): |
4ae17f819ee8
#344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents:
1948
diff
changeset
|
330 return ('%s %s' % (self.name, self.lastname) |
4ae17f819ee8
#344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents:
1948
diff
changeset
|
331 if (self.name and self.lastname) else self.username) |
4ae17f819ee8
#344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents:
1948
diff
changeset
|
332 |
4ae17f819ee8
#344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents:
1948
diff
changeset
|
333 @property |
1593 | 334 def full_contact(self): |
335 return '%s %s <%s>' % (self.name, 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
|
336 |
895
62c04c5cc971
Added some more details into user edit permissions view
Marcin Kuzminski <marcin@python-works.com>
parents:
880
diff
changeset
|
337 @property |
1593 | 338 def short_contact(self): |
339 return '%s %s' % (self.name, self.lastname) | |
1088
fee472613dfa
made simple global rss and atom feed
Marcin Kuzminski <marcin@python-works.com>
parents:
1081
diff
changeset
|
340 |
fee472613dfa
made simple global rss and atom feed
Marcin Kuzminski <marcin@python-works.com>
parents:
1081
diff
changeset
|
341 @property |
1593 | 342 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
|
343 return self.admin |
62c04c5cc971
Added some more details into user edit permissions view
Marcin Kuzminski <marcin@python-works.com>
parents:
880
diff
changeset
|
344 |
2156
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
345 def __unicode__(self): |
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
346 return u"<%s('id:%s:%s')>" % (self.__class__.__name__, |
1712
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1703
diff
changeset
|
347 self.user_id, self.username) |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1703
diff
changeset
|
348 |
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
|
349 @classmethod |
1665
36f77a46f291
Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents:
1634
diff
changeset
|
350 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
|
351 if case_insensitive: |
1665
36f77a46f291
Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents:
1634
diff
changeset
|
352 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
|
353 else: |
1665
36f77a46f291
Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents:
1634
diff
changeset
|
354 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
|
355 |
36f77a46f291
Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents:
1634
diff
changeset
|
356 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
|
357 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
|
358 "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
|
359 "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
|
360 ) |
bf8ed0adbc66
fixes #371 fixed issues with beaker/sqlalchemy and non-ascii cache keys
Marcin Kuzminski <marcin@python-works.com>
parents:
2058
diff
changeset
|
361 ) |
1665
36f77a46f291
Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents:
1634
diff
changeset
|
362 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
|
363 |
1417
5875955def39
fixes #223 improve password reset form
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
364 @classmethod |
1665
36f77a46f291
Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents:
1634
diff
changeset
|
365 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
|
366 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
|
367 |
36f77a46f291
Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents:
1634
diff
changeset
|
368 if cache: |
36f77a46f291
Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents:
1634
diff
changeset
|
369 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
|
370 "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
|
371 return q.scalar() |
1417
5875955def39
fixes #223 improve password reset form
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
372 |
1716
7d1fc253549e
notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents:
1713
diff
changeset
|
373 @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
|
374 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
|
375 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
|
376 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
|
377 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
|
378 q = cls.query().filter(cls.email == email) |
1716
7d1fc253549e
notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents:
1713
diff
changeset
|
379 |
7d1fc253549e
notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents:
1713
diff
changeset
|
380 if cache: |
7d1fc253549e
notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents:
1713
diff
changeset
|
381 q = q.options(FromCache("sql_cache_short", |
7d1fc253549e
notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents:
1713
diff
changeset
|
382 "get_api_key_%s" % email)) |
7d1fc253549e
notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents:
1713
diff
changeset
|
383 return q.scalar() |
7d1fc253549e
notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents:
1713
diff
changeset
|
384 |
1593 | 385 def update_lastlogin(self): |
442
d66a7fa7689b
moved loged in user propagation out of forms,
Marcin Kuzminski <marcin@python-works.com>
parents:
417
diff
changeset
|
386 """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
|
387 self.last_login = datetime.datetime.now() |
1749
8ecc6b8229a5
commit less models
Marcin Kuzminski <marcin@python-works.com>
parents:
1747
diff
changeset
|
388 Session.add(self) |
1976 | 389 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
|
390 |
1758
a87aa385f21c
fixed repo_create permission by adding missing commit statements
Marcin Kuzminski <marcin@python-works.com>
parents:
1757
diff
changeset
|
391 def __json__(self): |
1950
4ae17f819ee8
#344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents:
1948
diff
changeset
|
392 return dict( |
2152
e14ae8437548
extended JSON encoder to use __json__ method if available
Marcin Kuzminski <marcin@python-works.com>
parents:
2150
diff
changeset
|
393 user_id=self.user_id, |
e14ae8437548
extended JSON encoder to use __json__ method if available
Marcin Kuzminski <marcin@python-works.com>
parents:
2150
diff
changeset
|
394 first_name=self.name, |
e14ae8437548
extended JSON encoder to use __json__ method if available
Marcin Kuzminski <marcin@python-works.com>
parents:
2150
diff
changeset
|
395 last_name=self.lastname, |
1950
4ae17f819ee8
#344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents:
1948
diff
changeset
|
396 email=self.email, |
4ae17f819ee8
#344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents:
1948
diff
changeset
|
397 full_name=self.full_name, |
4ae17f819ee8
#344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents:
1948
diff
changeset
|
398 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
|
399 short_contact=self.short_contact, |
4ae17f819ee8
#344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents:
1948
diff
changeset
|
400 full_contact=self.full_contact |
4ae17f819ee8
#344 optional firstname lastname on user creation
Marcin Kuzminski <marcin@python-works.com>
parents:
1948
diff
changeset
|
401 ) |
1758
a87aa385f21c
fixed repo_create permission by adding missing commit statements
Marcin Kuzminski <marcin@python-works.com>
parents:
1757
diff
changeset
|
402 |
a87aa385f21c
fixed repo_create permission by adding missing commit statements
Marcin Kuzminski <marcin@python-works.com>
parents:
1757
diff
changeset
|
403 |
1593 | 404 class UserLog(Base, BaseModel): |
49
3ada2f409c1c
Added sqlalchemy support
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff
changeset
|
405 __tablename__ = 'user_logs' |
2149 | 406 __table_args__ = ( |
407 {'extend_existing': True, 'mysql_engine':'InnoDB', | |
408 'mysql_charset': 'utf8'}, | |
409 ) | |
1594 | 410 user_log_id = Column("user_log_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
411 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None) | |
1747
8804715404c9
implements #193 journal stores information about deleting of repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1744
diff
changeset
|
412 repository_id = Column("repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=True) |
1594 | 413 repository_name = Column("repository_name", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) |
414 user_ip = Column("user_ip", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) | |
415 action = Column("action", UnicodeText(length=1200000, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) | |
416 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
|
417 |
994
7f9d23f6a526
Added grouping by days in journal
Marcin Kuzminski <marcin@python-works.com>
parents:
991
diff
changeset
|
418 @property |
1593 | 419 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
|
420 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
|
421 |
1593 | 422 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
|
423 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
|
424 |
956
83d35d716a02
started working on issue #56
Marcin Kuzminski <marcin@python-works.com>
parents:
907
diff
changeset
|
425 |
1593 | 426 class UsersGroup(Base, BaseModel): |
956
83d35d716a02
started working on issue #56
Marcin Kuzminski <marcin@python-works.com>
parents:
907
diff
changeset
|
427 __tablename__ = 'users_groups' |
2149 | 428 __table_args__ = ( |
429 {'extend_existing': True, 'mysql_engine':'InnoDB', | |
430 'mysql_charset': 'utf8'}, | |
431 ) | |
956
83d35d716a02
started working on issue #56
Marcin Kuzminski <marcin@python-works.com>
parents:
907
diff
changeset
|
432 |
1594 | 433 users_group_id = Column("users_group_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
434 users_group_name = Column("users_group_name", String(length=255, convert_unicode=False, assert_unicode=None), nullable=False, unique=True, default=None) | |
435 users_group_active = Column("users_group_active", Boolean(), nullable=True, unique=None, default=None) | |
956
83d35d716a02
started working on issue #56
Marcin Kuzminski <marcin@python-works.com>
parents:
907
diff
changeset
|
436 |
1594 | 437 members = relationship('UsersGroupMember', cascade="all, delete, delete-orphan", lazy="joined") |
2063
d9ba58526712
fixed #373 missing cascade drop on user_group_to_perm table
Marcin Kuzminski <marcin@python-works.com>
parents:
2062
diff
changeset
|
438 users_group_to_perm = relationship('UsersGroupToPerm', cascade='all') |
2149 | 439 users_group_repo_to_perm = relationship('UsersGroupRepoToPerm', cascade='all') |
956
83d35d716a02
started working on issue #56
Marcin Kuzminski <marcin@python-works.com>
parents:
907
diff
changeset
|
440 |
2156
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
441 def __unicode__(self): |
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
442 return u'<userGroup(%s)>' % (self.users_group_name) |
1271
aa7e45ad0cea
Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents:
1266
diff
changeset
|
443 |
aa7e45ad0cea
Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents:
1266
diff
changeset
|
444 @classmethod |
1728
07e56179633e
- fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents:
1727
diff
changeset
|
445 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
|
446 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
|
447 if case_insensitive: |
1728
07e56179633e
- fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents:
1727
diff
changeset
|
448 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
|
449 else: |
1728
07e56179633e
- fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents:
1727
diff
changeset
|
450 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
|
451 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
|
452 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
|
453 "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
|
454 "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
|
455 ) |
bf8ed0adbc66
fixes #371 fixed issues with beaker/sqlalchemy and non-ascii cache keys
Marcin Kuzminski <marcin@python-works.com>
parents:
2058
diff
changeset
|
456 ) |
1728
07e56179633e
- fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents:
1727
diff
changeset
|
457 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
|
458 |
1436
88d13c1c6a55
removed users_group controller in replace for model methods,
Marcin Kuzminski <marcin@python-works.com>
parents:
1435
diff
changeset
|
459 @classmethod |
1594 | 460 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
|
461 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
|
462 if cache: |
1593 | 463 users_group = users_group.options(FromCache("sql_cache_short", |
464 "get_users_group_%s" % users_group_id)) | |
465 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
|
466 |
1800 | 467 |
1593 | 468 class UsersGroupMember(Base, BaseModel): |
956
83d35d716a02
started working on issue #56
Marcin Kuzminski <marcin@python-works.com>
parents:
907
diff
changeset
|
469 __tablename__ = 'users_groups_members' |
2149 | 470 __table_args__ = ( |
471 {'extend_existing': True, 'mysql_engine':'InnoDB', | |
472 'mysql_charset': 'utf8'}, | |
473 ) | |
956
83d35d716a02
started working on issue #56
Marcin Kuzminski <marcin@python-works.com>
parents:
907
diff
changeset
|
474 |
1594 | 475 users_group_member_id = Column("users_group_member_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
476 users_group_id = Column("users_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None) | |
477 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
|
478 |
1594 | 479 user = relationship('User', lazy='joined') |
1593 | 480 users_group = relationship('UsersGroup') |
972
2c8fd84935a4
#56 implemented users groups editing,
Marcin Kuzminski <marcin@python-works.com>
parents:
962
diff
changeset
|
481 |
1594 | 482 def __init__(self, gr_id='', u_id=''): |
972
2c8fd84935a4
#56 implemented users groups editing,
Marcin Kuzminski <marcin@python-works.com>
parents:
962
diff
changeset
|
483 self.users_group_id = gr_id |
2c8fd84935a4
#56 implemented users groups editing,
Marcin Kuzminski <marcin@python-works.com>
parents:
962
diff
changeset
|
484 self.user_id = u_id |
956
83d35d716a02
started working on issue #56
Marcin Kuzminski <marcin@python-works.com>
parents:
907
diff
changeset
|
485 |
2013
8530c3cd9d04
fixed issue with hybrid property for ldap_active
Marcin Kuzminski <marcin@python-works.com>
parents:
2007
diff
changeset
|
486 |
1593 | 487 class Repository(Base, BaseModel): |
234
a0116e944da1
changed naming convention for db modules.
Marcin Kuzminski <marcin@python-works.com>
parents:
232
diff
changeset
|
488 __tablename__ = 'repositories' |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
489 __table_args__ = ( |
1963
9bbde54232dc
white space cleanup
Marcin Kuzminski <marcin@python-works.com>
parents:
1960
diff
changeset
|
490 UniqueConstraint('repo_name'), |
2149 | 491 {'extend_existing': True, 'mysql_engine':'InnoDB', |
492 'mysql_charset': 'utf8'}, | |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
493 ) |
1081
70bf0be59653
fixed Session problems in model class functions
Marcin Kuzminski <marcin@python-works.com>
parents:
1065
diff
changeset
|
494 |
1594 | 495 repo_id = Column("repo_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
496 repo_name = Column("repo_name", String(length=255, convert_unicode=False, assert_unicode=None), nullable=False, unique=True, default=None) | |
497 clone_uri = Column("clone_uri", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=False, default=None) | |
498 repo_type = Column("repo_type", String(length=255, convert_unicode=False, assert_unicode=None), nullable=False, unique=False, default='hg') | |
499 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=False, default=None) | |
500 private = Column("private", Boolean(), nullable=True, unique=None, default=None) | |
501 enable_statistics = Column("statistics", Boolean(), nullable=True, unique=None, default=True) | |
502 enable_downloads = Column("downloads", Boolean(), nullable=True, unique=None, default=True) | |
503 description = Column("description", String(length=10000, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) | |
504 created_on = Column('created_on', DateTime(timezone=False), nullable=True, unique=None, default=datetime.datetime.now) | |
1301
7e75af301842
Added simple forks page, resolves issue #179
Marcin Kuzminski <marcin@python-works.com>
parents:
1292
diff
changeset
|
505 |
1594 | 506 fork_id = Column("fork_id", Integer(), ForeignKey('repositories.repo_id'), nullable=True, unique=False, default=None) |
507 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
|
508 |
1593 | 509 user = relationship('User') |
1594 | 510 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
|
511 group = relationship('RepoGroup') |
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
512 repo_to_perm = relationship('UserRepoToPerm', cascade='all', order_by='UserRepoToPerm.repo_to_perm_id') |
1594 | 513 users_group_to_perm = relationship('UsersGroupRepoToPerm', cascade='all') |
514 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
|
515 |
1594 | 516 followers = relationship('UserFollowing', primaryjoin='UserFollowing.follows_repo_id==Repository.repo_id', cascade='all') |
734
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
713
diff
changeset
|
517 |
1747
8804715404c9
implements #193 journal stores information about deleting of repos
Marcin Kuzminski <marcin@python-works.com>
parents:
1744
diff
changeset
|
518 logs = relationship('UserLog') |
970
1a5c41e4bb02
fixees for #106 relation issues on databases different than sqlite
Marcin Kuzminski <marcin@python-works.com>
parents:
962
diff
changeset
|
519 |
2156
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
520 def __unicode__(self): |
2161
e8c016815ab9
added hidden fulldiff GET param for disabling big diff cut off limit.
Marcin Kuzminski <marcin@python-works.com>
parents:
2157
diff
changeset
|
521 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
|
522 self.repo_name) |
878
859bc9e7a15d
Extended repo2db mapper with group creation via directory structures
Marcin Kuzminski <marcin@python-works.com>
parents:
836
diff
changeset
|
523 |
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
|
524 @classmethod |
1593 | 525 def url_sep(cls): |
1554
e7c6341ad3cb
fixes #245 Rescan of the repositories on Windows
Marcin Kuzminski <marcin@python-works.com>
parents:
1547
diff
changeset
|
526 return '/' |
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
|
527 |
1554
e7c6341ad3cb
fixes #245 Rescan of the repositories on Windows
Marcin Kuzminski <marcin@python-works.com>
parents:
1547
diff
changeset
|
528 @classmethod |
1593 | 529 def get_by_repo_name(cls, repo_name): |
1749
8ecc6b8229a5
commit less models
Marcin Kuzminski <marcin@python-works.com>
parents:
1747
diff
changeset
|
530 q = Session.query(cls).filter(cls.repo_name == repo_name) |
1593 | 531 q = q.options(joinedload(Repository.fork))\ |
532 .options(joinedload(Repository.user))\ | |
533 .options(joinedload(Repository.group)) | |
1749
8ecc6b8229a5
commit less models
Marcin Kuzminski <marcin@python-works.com>
parents:
1747
diff
changeset
|
534 return q.scalar() |
1301
7e75af301842
Added simple forks page, resolves issue #179
Marcin Kuzminski <marcin@python-works.com>
parents:
1292
diff
changeset
|
535 |
7e75af301842
Added simple forks page, resolves issue #179
Marcin Kuzminski <marcin@python-works.com>
parents:
1292
diff
changeset
|
536 @classmethod |
1593 | 537 def get_repo_forks(cls, repo_id): |
538 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
|
539 |
1508
4aba7be311e8
API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents:
1500
diff
changeset
|
540 @classmethod |
1593 | 541 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
|
542 """ |
4aba7be311e8
API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents:
1500
diff
changeset
|
543 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
|
544 |
1508
4aba7be311e8
API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents:
1500
diff
changeset
|
545 :param cls: |
4aba7be311e8
API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents:
1500
diff
changeset
|
546 """ |
1749
8ecc6b8229a5
commit less models
Marcin Kuzminski <marcin@python-works.com>
parents:
1747
diff
changeset
|
547 q = Session.query(RhodeCodeUi)\ |
1728
07e56179633e
- fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents:
1727
diff
changeset
|
548 .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
|
549 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
|
550 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
|
551 |
1113
c1eda8ec4a46
added clone_uri,api_key into models. Fixed models for mysql compatibilty
Marcin Kuzminski <marcin@python-works.com>
parents:
1088
diff
changeset
|
552 @property |
1593 | 553 def just_name(self): |
554 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
|
555 |
37a9421f32a0
Added handy methods to Repository model for fetching groups with parents
Marcin Kuzminski <marcin@python-works.com>
parents:
1113
diff
changeset
|
556 @property |
1593 | 557 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
|
558 groups = [] |
37a9421f32a0
Added handy methods to Repository model for fetching groups with parents
Marcin Kuzminski <marcin@python-works.com>
parents:
1113
diff
changeset
|
559 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
|
560 return groups |
37a9421f32a0
Added handy methods to Repository model for fetching groups with parents
Marcin Kuzminski <marcin@python-works.com>
parents:
1113
diff
changeset
|
561 |
37a9421f32a0
Added handy methods to Repository model for fetching groups with parents
Marcin Kuzminski <marcin@python-works.com>
parents:
1113
diff
changeset
|
562 cur_gr = self.group |
1593 | 563 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
|
564 while 1: |
1593 | 565 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
|
566 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
|
567 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
|
568 break |
1593 | 569 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
|
570 |
37a9421f32a0
Added handy methods to Repository model for fetching groups with parents
Marcin Kuzminski <marcin@python-works.com>
parents:
1113
diff
changeset
|
571 return groups |
37a9421f32a0
Added handy methods to Repository model for fetching groups with parents
Marcin Kuzminski <marcin@python-works.com>
parents:
1113
diff
changeset
|
572 |
37a9421f32a0
Added handy methods to Repository model for fetching groups with parents
Marcin Kuzminski <marcin@python-works.com>
parents:
1113
diff
changeset
|
573 @property |
1593 | 574 def groups_and_repo(self): |
1155
37a9421f32a0
Added handy methods to Repository model for fetching groups with parents
Marcin Kuzminski <marcin@python-works.com>
parents:
1113
diff
changeset
|
575 return self.groups_with_parents, self.just_name |
1113
c1eda8ec4a46
added clone_uri,api_key into models. Fixed models for mysql compatibilty
Marcin Kuzminski <marcin@python-works.com>
parents:
1088
diff
changeset
|
576 |
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
|
577 @LazyProperty |
1593 | 578 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
|
579 """ |
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
|
580 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
|
581 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
|
582 """ |
1749
8ecc6b8229a5
commit less models
Marcin Kuzminski <marcin@python-works.com>
parents:
1747
diff
changeset
|
583 q = Session.query(RhodeCodeUi).filter(RhodeCodeUi.ui_key == |
1593 | 584 Repository.url_sep()) |
1727
8e9f51091229
fixed caching query on repos path
Marcin Kuzminski <marcin@python-works.com>
parents:
1723
diff
changeset
|
585 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
|
586 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
|
587 |
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
|
588 @property |
1593 | 589 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
|
590 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
|
591 # 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
|
592 # 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
|
593 # into a valid system path |
1593 | 594 p += self.repo_name.split(Repository.url_sep()) |
595 return os.path.join(*p) | |
1366
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
596 |
1593 | 597 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
|
598 """ |
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
|
599 returns new full repository name based on assigned group and new new |
1591 | 600 |
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
|
601 :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
|
602 """ |
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
|
603 path_prefix = self.group.full_path_splitted if self.group else [] |
1593 | 604 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
|
605 |
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
|
606 @property |
1593 | 607 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
|
608 """ |
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
|
609 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
|
610 """ |
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
|
611 from mercurial import ui |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
612 from mercurial import config |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
613 baseui = ui.ui() |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
614 |
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
|
615 #clean the baseui object |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
616 baseui._ocfg = config.config() |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
617 baseui._ucfg = config.config() |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
618 baseui._tcfg = config.config() |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
619 |
1584
3338a0994472
Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents:
1508
diff
changeset
|
620 ret = RhodeCodeUi.query()\ |
1593 | 621 .options(FromCache("sql_cache_short", "repository_repo_ui")).all() |
1366
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
622 |
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
|
623 hg_ui = ret |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
624 for ui_ in hg_ui: |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
625 if ui_.ui_active: |
1593 | 626 log.debug('settings ui from db[%s]%s:%s', ui_.ui_section, |
627 ui_.ui_key, ui_.ui_value) | |
628 baseui.setconfig(ui_.ui_section, ui_.ui_key, ui_.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
|
629 |
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
|
630 return baseui |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
631 |
1508
4aba7be311e8
API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents:
1500
diff
changeset
|
632 @classmethod |
1593 | 633 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
|
634 """ |
4aba7be311e8
API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents:
1500
diff
changeset
|
635 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
|
636 |
1819
9451a569aee5
sphinx doc cleanup
Marcin Kuzminski <marcin@python-works.com>
parents:
1818
diff
changeset
|
637 :param cls: |
9451a569aee5
sphinx doc cleanup
Marcin Kuzminski <marcin@python-works.com>
parents:
1818
diff
changeset
|
638 :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
|
639 """ |
4aba7be311e8
API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents:
1500
diff
changeset
|
640 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
|
641 |
1593 | 642 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
|
643 |
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
|
644 #========================================================================== |
1466 | 645 # SCM PROPERTIES |
646 #========================================================================== | |
647 | |
1593 | 648 def get_changeset(self, rev): |
649 return get_changeset_safe(self.scm_instance, rev) | |
1466 | 650 |
651 @property | |
1593 | 652 def tip(self): |
653 return self.get_changeset('tip') | |
1466 | 654 |
655 @property | |
1593 | 656 def author(self): |
1466 | 657 return self.tip.author |
658 | |
659 @property | |
1593 | 660 def last_change(self): |
1466 | 661 return self.scm_instance.last_change |
662 | |
1884
0614862a20ec
Added number of comments in changelog for each changeset
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
663 def comments(self, revisions=None): |
0614862a20ec
Added number of comments in changelog for each changeset
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
664 """ |
0614862a20ec
Added number of comments in changelog for each changeset
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
665 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
|
666 |
0614862a20ec
Added number of comments in changelog for each changeset
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
667 :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
|
668 """ |
0614862a20ec
Added number of comments in changelog for each changeset
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
669 cmts = ChangesetComment.query()\ |
0614862a20ec
Added number of comments in changelog for each changeset
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
670 .filter(ChangesetComment.repo == self) |
0614862a20ec
Added number of comments in changelog for each changeset
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
671 if revisions: |
0614862a20ec
Added number of comments in changelog for each changeset
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
672 cmts = cmts.filter(ChangesetComment.revision.in_(revisions)) |
0614862a20ec
Added number of comments in changelog for each changeset
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
673 grouped = defaultdict(list) |
0614862a20ec
Added number of comments in changelog for each changeset
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
674 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
|
675 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
|
676 return grouped |
0614862a20ec
Added number of comments in changelog for each changeset
Marcin Kuzminski <marcin@python-works.com>
parents:
1824
diff
changeset
|
677 |
1466 | 678 #========================================================================== |
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
|
679 # 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
|
680 #========================================================================== |
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
|
681 |
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
|
682 @property |
1593 | 683 def invalidate(self): |
1607
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
684 return CacheInvalidation.invalidate(self.repo_name) |
1366
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
685 |
1593 | 686 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
|
687 """ |
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
|
688 set a cache for invalidation for this instance |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
689 """ |
1607
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
690 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
|
691 |
1466 | 692 @LazyProperty |
1593 | 693 def scm_instance(self): |
1400
0d7b56b97953
Simplified last_login call on user, and changed login to use User model directly
Marcin Kuzminski <marcin@python-works.com>
parents:
1388
diff
changeset
|
694 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
|
695 |
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
|
696 @property |
1593 | 697 def scm_instance_cached(self): |
698 @cache_region('long_term') | |
699 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
|
700 return self.__get_instance() |
1607
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
701 rn = self.repo_name |
1744
d41a115d9a39
remove cache from default perms. In some cases of concurrent repo removal it crashed.
Marcin Kuzminski <marcin@python-works.com>
parents:
1733
diff
changeset
|
702 log.debug('Getting cached instance of repo') |
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
|
703 inv = self.invalidate |
1427
ba697e2f71ff
fixed a bug in cache invalidation
Marcin Kuzminski <marcin@python-works.com>
parents:
1417
diff
changeset
|
704 if inv is not None: |
1593 | 705 region_invalidate(_c, None, rn) |
1428
e5467730682b
fixed some issues with cache invalidation, and simplified invalidation codes
Marcin Kuzminski <marcin@python-works.com>
parents:
1427
diff
changeset
|
706 # update our cache |
1607
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
707 CacheInvalidation.set_valid(inv.cache_key) |
1593 | 708 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
|
709 |
1593 | 710 def __get_instance(self): |
1368
04b43168742d
adde short cache for repo_path
Marcin Kuzminski <marcin@python-works.com>
parents:
1366
diff
changeset
|
711 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
|
712 try: |
1593 | 713 alias = get_scm(repo_full_path)[0] |
1976 | 714 log.debug('Creating instance of %s repository' % alias) |
1593 | 715 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
|
716 except VCSError: |
1593 | 717 log.error(traceback.format_exc()) |
718 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
|
719 'filesystem run rescan repositories with ' |
1593 | 720 '"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
|
721 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
|
722 |
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
|
723 if alias == 'hg': |
2000
72c525a7e7ad
added migrations from 1.2.X to 1.3
Marcin Kuzminski <marcin@python-works.com>
parents:
1990
diff
changeset
|
724 |
1594 | 725 repo = backend(safe_str(repo_full_path), create=False, |
726 baseui=self._ui) | |
1607
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
727 # 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
|
728 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
|
729 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
|
730 else: |
1594 | 731 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
|
732 |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
733 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
|
734 |
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
|
735 |
1633
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
736 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
|
737 __tablename__ = 'groups' |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
738 __table_args__ = ( |
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
739 UniqueConstraint('group_name', 'group_parent_id'), |
1963
9bbde54232dc
white space cleanup
Marcin Kuzminski <marcin@python-works.com>
parents:
1960
diff
changeset
|
740 CheckConstraint('group_id != group_parent_id'), |
2149 | 741 {'extend_existing': True, 'mysql_engine':'InnoDB', |
742 'mysql_charset': 'utf8'}, | |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
743 ) |
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
744 __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
|
745 |
1594 | 746 group_id = Column("group_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
747 group_name = Column("group_name", String(length=255, convert_unicode=False, assert_unicode=None), nullable=False, unique=True, default=None) | |
748 group_parent_id = Column("group_parent_id", Integer(), ForeignKey('groups.group_id'), nullable=True, unique=None, default=None) | |
749 group_description = Column("group_description", String(length=10000, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) | |
878
859bc9e7a15d
Extended repo2db mapper with group creation via directory structures
Marcin Kuzminski <marcin@python-works.com>
parents:
836
diff
changeset
|
750 |
1982
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1976
diff
changeset
|
751 repo_group_to_perm = relationship('UserRepoGroupToPerm', cascade='all', order_by='UserRepoGroupToPerm.group_to_perm_id') |
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1976
diff
changeset
|
752 users_group_to_perm = relationship('UsersGroupRepoGroupToPerm', cascade='all') |
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1976
diff
changeset
|
753 |
1633
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
754 parent_group = relationship('RepoGroup', remote_side=group_id) |
878
859bc9e7a15d
Extended repo2db mapper with group creation via directory structures
Marcin Kuzminski <marcin@python-works.com>
parents:
836
diff
changeset
|
755 |
1594 | 756 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
|
757 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
|
758 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
|
759 |
2156
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
760 def __unicode__(self): |
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
761 return u"<%s('%s:%s')>" % (self.__class__.__name__, self.group_id, |
1593 | 762 self.group_name) |
631
05528ad948c4
Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents:
549
diff
changeset
|
763 |
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
|
764 @classmethod |
1593 | 765 def groups_choices(cls): |
1547
fbc762ae3496
unified generation of repo groups choices
Marcin Kuzminski <marcin@python-works.com>
parents:
1546
diff
changeset
|
766 from webhelpers.html import literal as _literal |
1593 | 767 repo_groups = [('', '')] |
1547
fbc762ae3496
unified generation of repo groups choices
Marcin Kuzminski <marcin@python-works.com>
parents:
1546
diff
changeset
|
768 sep = ' » ' |
1593 | 769 _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
|
770 |
1593 | 771 repo_groups.extend([(x.group_id, _name(x.full_path_splitted)) |
772 for x in cls.query().all()]) | |
1591 | 773 |
1594 | 774 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
|
775 return repo_groups |
1591 | 776 |
1547
fbc762ae3496
unified generation of repo groups choices
Marcin Kuzminski <marcin@python-works.com>
parents:
1546
diff
changeset
|
777 @classmethod |
1593 | 778 def url_sep(cls): |
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
|
779 return '/' |
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
|
780 |
1538
27be8f94c207
implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents:
1530
diff
changeset
|
781 @classmethod |
1594 | 782 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
|
783 if case_insensitive: |
3338a0994472
Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents:
1508
diff
changeset
|
784 gr = cls.query()\ |
1593 | 785 .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
|
786 else: |
3338a0994472
Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents:
1508
diff
changeset
|
787 gr = cls.query()\ |
1593 | 788 .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
|
789 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
|
790 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
|
791 "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
|
792 "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
|
793 ) |
bf8ed0adbc66
fixes #371 fixed issues with beaker/sqlalchemy and non-ascii cache keys
Marcin Kuzminski <marcin@python-works.com>
parents:
2058
diff
changeset
|
794 ) |
1584
3338a0994472
Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents:
1508
diff
changeset
|
795 return gr.scalar() |
1538
27be8f94c207
implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents:
1530
diff
changeset
|
796 |
1159
187a924ed653
Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1155
diff
changeset
|
797 @property |
1593 | 798 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
|
799 parents_recursion_limit = 5 |
1159
187a924ed653
Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1155
diff
changeset
|
800 groups = [] |
187a924ed653
Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1155
diff
changeset
|
801 if self.parent_group is None: |
187a924ed653
Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1155
diff
changeset
|
802 return groups |
187a924ed653
Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1155
diff
changeset
|
803 cur_gr = self.parent_group |
1593 | 804 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
|
805 cnt = 0 |
1159
187a924ed653
Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1155
diff
changeset
|
806 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
|
807 cnt += 1 |
1593 | 808 gr = getattr(cur_gr, 'parent_group', None) |
1159
187a924ed653
Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1155
diff
changeset
|
809 cur_gr = cur_gr.parent_group |
187a924ed653
Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1155
diff
changeset
|
810 if gr is None: |
187a924ed653
Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1155
diff
changeset
|
811 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
|
812 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
|
813 # this will prevent accidental infinit loops |
1593 | 814 log.error('group nested more than %s' % |
815 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
|
816 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
|
817 |
1593 | 818 groups.insert(0, gr) |
1159
187a924ed653
Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1155
diff
changeset
|
819 return groups |
187a924ed653
Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1155
diff
changeset
|
820 |
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
|
821 @property |
1593 | 822 def children(self): |
1633
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
823 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
|
824 |
a7a772ea7b95
fixed saving settings on repositories inside groups, also fixes #187
Marcin Kuzminski <marcin@python-works.com>
parents:
1301
diff
changeset
|
825 @property |
1593 | 826 def name(self): |
1633
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
827 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
|
828 |
27be8f94c207
implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents:
1530
diff
changeset
|
829 @property |
1593 | 830 def full_path(self): |
1594 | 831 return self.group_name |
1538
27be8f94c207
implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents:
1530
diff
changeset
|
832 |
27be8f94c207
implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents:
1530
diff
changeset
|
833 @property |
1593 | 834 def full_path_splitted(self): |
1633
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
835 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
|
836 |
1193
523382549c45
Added repo group page showing what reposiories are inside a group
Marcin Kuzminski <marcin@python-works.com>
parents:
1159
diff
changeset
|
837 @property |
1593 | 838 def repositories(self): |
2079
477fe54b8af8
fixed sorting of repos in group
Marcin Kuzminski <marcin@python-works.com>
parents:
2063
diff
changeset
|
839 return Repository.query()\ |
477fe54b8af8
fixed sorting of repos in group
Marcin Kuzminski <marcin@python-works.com>
parents:
2063
diff
changeset
|
840 .filter(Repository.group == self)\ |
477fe54b8af8
fixed sorting of repos in group
Marcin Kuzminski <marcin@python-works.com>
parents:
2063
diff
changeset
|
841 .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
|
842 |
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
|
843 @property |
1593 | 844 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
|
845 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
|
846 |
1593 | 847 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
|
848 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
|
849 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
|
850 cnt += child.repositories.count() |
1593 | 851 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
|
852 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
|
853 |
1593 | 854 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
|
855 |
1593 | 856 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
|
857 """ |
27be8f94c207
implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents:
1530
diff
changeset
|
858 returns new full group name based on parent and new name |
1591 | 859 |
1538
27be8f94c207
implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents:
1530
diff
changeset
|
860 :param group_name: |
27be8f94c207
implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents:
1530
diff
changeset
|
861 """ |
1607
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
862 path_prefix = (self.parent_group.full_path_splitted if |
1594 | 863 self.parent_group else []) |
1633
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
864 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
|
865 |
27be8f94c207
implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents:
1530
diff
changeset
|
866 |
1593 | 867 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
|
868 __tablename__ = 'permissions' |
2149 | 869 __table_args__ = ( |
870 {'extend_existing': True, 'mysql_engine':'InnoDB', | |
871 'mysql_charset': 'utf8'}, | |
872 ) | |
1594 | 873 permission_id = Column("permission_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
874 permission_name = Column("permission_name", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) | |
875 permission_longname = Column("permission_longname", String(length=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
|
876 |
2156
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
877 def __unicode__(self): |
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
878 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
|
879 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
|
880 ) |
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
|
881 |
1266
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
882 @classmethod |
1593 | 883 def get_by_key(cls, key): |
884 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
|
885 |
1728
07e56179633e
- fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents:
1727
diff
changeset
|
886 @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
|
887 def get_default_perms(cls, default_user_id): |
1749
8ecc6b8229a5
commit less models
Marcin Kuzminski <marcin@python-works.com>
parents:
1747
diff
changeset
|
888 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
|
889 .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
|
890 .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
|
891 .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
|
892 |
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1976
diff
changeset
|
893 return q.all() |
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1976
diff
changeset
|
894 |
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1976
diff
changeset
|
895 @classmethod |
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1976
diff
changeset
|
896 def get_default_group_perms(cls, default_user_id): |
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1976
diff
changeset
|
897 q = Session.query(UserRepoGroupToPerm, RepoGroup, cls)\ |
87f0800abc7b
#227 Initial version of repository groups permissions system
Marcin Kuzminski <marcin@python-works.com>
parents:
1976
diff
changeset
|
898 .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
|
899 .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
|
900 .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
|
901 |
07e56179633e
- fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents:
1727
diff
changeset
|
902 return q.all() |
07e56179633e
- fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents:
1727
diff
changeset
|
903 |
07e56179633e
- fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents:
1727
diff
changeset
|
904 |
1633
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
905 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
|
906 __tablename__ = 'repo_to_perm' |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
907 __table_args__ = ( |
2000
72c525a7e7ad
added migrations from 1.2.X to 1.3
Marcin Kuzminski <marcin@python-works.com>
parents:
1990
diff
changeset
|
908 UniqueConstraint('user_id', 'repository_id', 'permission_id'), |
2149 | 909 {'extend_existing': True, 'mysql_engine':'InnoDB', |
910 'mysql_charset': 'utf8'} | |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
911 ) |
1594 | 912 repo_to_perm_id = Column("repo_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
913 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None) | |
914 permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None) | |
915 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
|
916 |
1593 | 917 user = relationship('User') |
2000
72c525a7e7ad
added migrations from 1.2.X to 1.3
Marcin Kuzminski <marcin@python-works.com>
parents:
1990
diff
changeset
|
918 repository = relationship('Repository') |
1593 | 919 permission = relationship('Permission') |
399
f5c1eec9f376
rename repo2perm into repo_to_perm
Marcin Kuzminski <marcin@python-works.com>
parents:
392
diff
changeset
|
920 |
1729
da8ee2ef7f6d
implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents:
1728
diff
changeset
|
921 @classmethod |
da8ee2ef7f6d
implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents:
1728
diff
changeset
|
922 def create(cls, user, repository, permission): |
da8ee2ef7f6d
implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents:
1728
diff
changeset
|
923 n = cls() |
da8ee2ef7f6d
implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents:
1728
diff
changeset
|
924 n.user = user |
da8ee2ef7f6d
implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents:
1728
diff
changeset
|
925 n.repository = repository |
da8ee2ef7f6d
implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents:
1728
diff
changeset
|
926 n.permission = permission |
1749
8ecc6b8229a5
commit less models
Marcin Kuzminski <marcin@python-works.com>
parents:
1747
diff
changeset
|
927 Session.add(n) |
1729
da8ee2ef7f6d
implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents:
1728
diff
changeset
|
928 return n |
da8ee2ef7f6d
implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents:
1728
diff
changeset
|
929 |
2156
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
930 def __unicode__(self): |
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
931 return u'<user:%s => %s >' % (self.user, self.repository) |
1729
da8ee2ef7f6d
implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents:
1728
diff
changeset
|
932 |
1800 | 933 |
1593 | 934 class UserToPerm(Base, BaseModel): |
399
f5c1eec9f376
rename repo2perm into repo_to_perm
Marcin Kuzminski <marcin@python-works.com>
parents:
392
diff
changeset
|
935 __tablename__ = 'user_to_perm' |
1988
5eae67552695
db unique constraints fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
1982
diff
changeset
|
936 __table_args__ = ( |
5eae67552695
db unique constraints fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
1982
diff
changeset
|
937 UniqueConstraint('user_id', 'permission_id'), |
2149 | 938 {'extend_existing': True, 'mysql_engine':'InnoDB', |
939 'mysql_charset': 'utf8'} | |
1988
5eae67552695
db unique constraints fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
1982
diff
changeset
|
940 ) |
1594 | 941 user_to_perm_id = Column("user_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
942 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None) | |
943 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
|
944 |
1593 | 945 user = relationship('User') |
1728
07e56179633e
- fixes celery sqlalchemy session issues for async forking
Marcin Kuzminski <marcin@python-works.com>
parents:
1727
diff
changeset
|
946 permission = relationship('Permission', lazy='joined') |
399
f5c1eec9f376
rename repo2perm into repo_to_perm
Marcin Kuzminski <marcin@python-works.com>
parents:
392
diff
changeset
|
947 |
1014
6fdc3ff65fce
#56 added assignments of users groups into repository
Marcin Kuzminski <marcin@python-works.com>
parents:
1000
diff
changeset
|
948 |
1593 | 949 class UsersGroupRepoToPerm(Base, BaseModel): |
1271
aa7e45ad0cea
Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents:
1266
diff
changeset
|
950 __tablename__ = 'users_group_repo_to_perm' |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
951 __table_args__ = ( |
2000
72c525a7e7ad
added migrations from 1.2.X to 1.3
Marcin Kuzminski <marcin@python-works.com>
parents:
1990
diff
changeset
|
952 UniqueConstraint('repository_id', 'users_group_id', 'permission_id'), |
2149 | 953 {'extend_existing': True, 'mysql_engine':'InnoDB', |
954 'mysql_charset': 'utf8'} | |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
955 ) |
1594 | 956 users_group_to_perm_id = Column("users_group_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
957 users_group_id = Column("users_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None) | |
958 permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None) | |
959 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
|
960 |
1593 | 961 users_group = relationship('UsersGroup') |
962 permission = relationship('Permission') | |
963 repository = relationship('Repository') | |
958
7d1483f3170b
added user group to perm table
Marcin Kuzminski <marcin@python-works.com>
parents:
956
diff
changeset
|
964 |
1729
da8ee2ef7f6d
implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents:
1728
diff
changeset
|
965 @classmethod |
da8ee2ef7f6d
implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents:
1728
diff
changeset
|
966 def create(cls, users_group, repository, permission): |
da8ee2ef7f6d
implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents:
1728
diff
changeset
|
967 n = cls() |
da8ee2ef7f6d
implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents:
1728
diff
changeset
|
968 n.users_group = users_group |
da8ee2ef7f6d
implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents:
1728
diff
changeset
|
969 n.repository = repository |
da8ee2ef7f6d
implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents:
1728
diff
changeset
|
970 n.permission = permission |
1749
8ecc6b8229a5
commit less models
Marcin Kuzminski <marcin@python-works.com>
parents:
1747
diff
changeset
|
971 Session.add(n) |
1729
da8ee2ef7f6d
implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents:
1728
diff
changeset
|
972 return n |
da8ee2ef7f6d
implements #236 forking copy permission option
Marcin Kuzminski <marcin@python-works.com>
parents:
1728
diff
changeset
|
973 |
2156
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
974 def __unicode__(self): |
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
975 return u'<userGroup:%s => %s >' % (self.users_group, self.repository) |
1271
aa7e45ad0cea
Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents:
1266
diff
changeset
|
976 |
1800 | 977 |
1593 | 978 class UsersGroupToPerm(Base, BaseModel): |
1271
aa7e45ad0cea
Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents:
1266
diff
changeset
|
979 __tablename__ = 'users_group_to_perm' |
1988
5eae67552695
db unique constraints fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
1982
diff
changeset
|
980 __table_args__ = ( |
5eae67552695
db unique constraints fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
1982
diff
changeset
|
981 UniqueConstraint('users_group_id', 'permission_id',), |
2150
a8c9c0094ddf
White space cleanup
Marcin Kuzminski <marcin@python-works.com>
parents:
2149
diff
changeset
|
982 {'extend_existing': True, 'mysql_engine':'InnoDB', |
2149 | 983 'mysql_charset': 'utf8'} |
1988
5eae67552695
db unique constraints fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
1982
diff
changeset
|
984 ) |
1594 | 985 users_group_to_perm_id = Column("users_group_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
986 users_group_id = Column("users_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None) | |
987 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
|
988 |
1593 | 989 users_group = relationship('UsersGroup') |
990 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
|
991 |
aa7e45ad0cea
Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents:
1266
diff
changeset
|
992 |
1633
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
993 class UserRepoGroupToPerm(Base, BaseModel): |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
994 __tablename__ = 'user_repo_group_to_perm' |
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
995 __table_args__ = ( |
2000
72c525a7e7ad
added migrations from 1.2.X to 1.3
Marcin Kuzminski <marcin@python-works.com>
parents:
1990
diff
changeset
|
996 UniqueConstraint('user_id', 'group_id', 'permission_id'), |
2150
a8c9c0094ddf
White space cleanup
Marcin Kuzminski <marcin@python-works.com>
parents:
2149
diff
changeset
|
997 {'extend_existing': True, 'mysql_engine':'InnoDB', |
2149 | 998 'mysql_charset': 'utf8'} |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
999 ) |
879
b19341623d48
added group to perm mapping table
Marcin Kuzminski <marcin@python-works.com>
parents:
878
diff
changeset
|
1000 |
1594 | 1001 group_to_perm_id = Column("group_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
1002 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
|
1003 group_id = Column("group_id", Integer(), ForeignKey('groups.group_id'), nullable=False, unique=None, default=None) |
1594 | 1004 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
|
1005 |
1593 | 1006 user = relationship('User') |
2000
72c525a7e7ad
added migrations from 1.2.X to 1.3
Marcin Kuzminski <marcin@python-works.com>
parents:
1990
diff
changeset
|
1007 group = relationship('RepoGroup') |
1593 | 1008 permission = relationship('Permission') |
1633
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
1009 |
1800 | 1010 |
1633
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
1011 class UsersGroupRepoGroupToPerm(Base, BaseModel): |
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
1012 __tablename__ = 'users_group_repo_group_to_perm' |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
1013 __table_args__ = ( |
1988
5eae67552695
db unique constraints fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
1982
diff
changeset
|
1014 UniqueConstraint('users_group_id', 'group_id'), |
2149 | 1015 {'extend_existing': True, 'mysql_engine':'InnoDB', |
1016 'mysql_charset': 'utf8'} | |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
1017 ) |
1633
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
1018 |
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
1019 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
|
1020 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
|
1021 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
|
1022 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
|
1023 |
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
1024 users_group = relationship('UsersGroup') |
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
1025 permission = relationship('Permission') |
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
1026 group = relationship('RepoGroup') |
879
b19341623d48
added group to perm mapping table
Marcin Kuzminski <marcin@python-works.com>
parents:
878
diff
changeset
|
1027 |
1800 | 1028 |
1593 | 1029 class Statistics(Base, BaseModel): |
493
2256c78afe53
implemented basic autoupdating statistics fetched from database
Marcin Kuzminski <marcin@python-works.com>
parents:
473
diff
changeset
|
1030 __tablename__ = 'statistics' |
2149 | 1031 __table_args__ = ( |
2150
a8c9c0094ddf
White space cleanup
Marcin Kuzminski <marcin@python-works.com>
parents:
2149
diff
changeset
|
1032 UniqueConstraint('repository_id'), |
a8c9c0094ddf
White space cleanup
Marcin Kuzminski <marcin@python-works.com>
parents:
2149
diff
changeset
|
1033 {'extend_existing': True, 'mysql_engine':'InnoDB', |
2149 | 1034 'mysql_charset': 'utf8'} |
1035 ) | |
1594 | 1036 stat_id = Column("stat_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
1037 repository_id = Column("repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=False, unique=True, default=None) | |
1038 stat_on_revision = Column("stat_on_revision", Integer(), nullable=False) | |
1039 commit_activity = Column("commit_activity", LargeBinary(1000000), nullable=False)#JSON data | |
1040 commit_activity_combined = Column("commit_activity_combined", LargeBinary(), nullable=False)#JSON data | |
1041 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
|
1042 |
1594 | 1043 repository = relationship('Repository', single_parent=True) |
399
f5c1eec9f376
rename repo2perm into repo_to_perm
Marcin Kuzminski <marcin@python-works.com>
parents:
392
diff
changeset
|
1044 |
1800 | 1045 |
1593 | 1046 class UserFollowing(Base, BaseModel): |
734
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
713
diff
changeset
|
1047 __tablename__ = 'user_followings' |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
1048 __table_args__ = ( |
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
1049 UniqueConstraint('user_id', 'follows_repository_id'), |
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
1050 UniqueConstraint('user_id', 'follows_user_id'), |
2149 | 1051 {'extend_existing': True, 'mysql_engine':'InnoDB', |
1052 'mysql_charset': 'utf8'} | |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
1053 ) |
734
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
713
diff
changeset
|
1054 |
1594 | 1055 user_following_id = Column("user_following_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
1056 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None) | |
1057 follows_repo_id = Column("follows_repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=True, unique=None, default=None) | |
1058 follows_user_id = Column("follows_user_id", Integer(), ForeignKey('users.user_id'), nullable=True, unique=None, default=None) | |
1059 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
|
1060 |
1594 | 1061 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
|
1062 |
1594 | 1063 follows_user = relationship('User', primaryjoin='User.user_id==UserFollowing.follows_user_id') |
1064 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
|
1065 |
1279
cb216757a62d
#179 Added followers page
Marcin Kuzminski <marcin@python-works.com>
parents:
1271
diff
changeset
|
1066 @classmethod |
1593 | 1067 def get_repo_followers(cls, repo_id): |
1068 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
|
1069 |
1800 | 1070 |
1593 | 1071 class CacheInvalidation(Base, BaseModel): |
670
e7c670cc03cb
Adde table for cache invalidation
Marcin Kuzminski <marcin@python-works.com>
parents:
667
diff
changeset
|
1072 __tablename__ = 'cache_invalidation' |
2149 | 1073 __table_args__ = ( |
1074 UniqueConstraint('cache_key'), | |
1075 {'extend_existing': True, 'mysql_engine':'InnoDB', | |
1076 'mysql_charset': 'utf8'}, | |
1077 ) | |
1594 | 1078 cache_id = Column("cache_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
1079 cache_key = Column("cache_key", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) | |
1080 cache_args = Column("cache_args", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) | |
1081 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
|
1082 |
1594 | 1083 def __init__(self, cache_key, cache_args=''): |
692
cb0d9ce6ac5c
#50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents:
670
diff
changeset
|
1084 self.cache_key = cache_key |
cb0d9ce6ac5c
#50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents:
670
diff
changeset
|
1085 self.cache_args = cache_args |
cb0d9ce6ac5c
#50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents:
670
diff
changeset
|
1086 self.cache_active = False |
cb0d9ce6ac5c
#50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents:
670
diff
changeset
|
1087 |
2156
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
1088 def __unicode__(self): |
a27e4d44237e
Use __unicode__ instead of __repr__ in models.
Marcin Kuzminski <marcin@python-works.com>
parents:
2152
diff
changeset
|
1089 return u"<%s('%s:%s')>" % (self.__class__.__name__, |
1593 | 1090 self.cache_id, self.cache_key) |
2147
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1091 @classmethod |
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1092 def clear_cache(cls): |
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1093 cls.query().delete() |
834
8924ed0e4f36
added current db version into rhodecode,
Marcin Kuzminski <marcin@python-works.com>
parents:
832
diff
changeset
|
1094 |
1607
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1095 @classmethod |
2013
8530c3cd9d04
fixed issue with hybrid property for ldap_active
Marcin Kuzminski <marcin@python-works.com>
parents:
2007
diff
changeset
|
1096 def _get_key(cls, key): |
8530c3cd9d04
fixed issue with hybrid property for ldap_active
Marcin Kuzminski <marcin@python-works.com>
parents:
2007
diff
changeset
|
1097 """ |
2147
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1098 Wrapper for generating a key, together with a prefix |
2013
8530c3cd9d04
fixed issue with hybrid property for ldap_active
Marcin Kuzminski <marcin@python-works.com>
parents:
2007
diff
changeset
|
1099 |
8530c3cd9d04
fixed issue with hybrid property for ldap_active
Marcin Kuzminski <marcin@python-works.com>
parents:
2007
diff
changeset
|
1100 :param key: |
8530c3cd9d04
fixed issue with hybrid property for ldap_active
Marcin Kuzminski <marcin@python-works.com>
parents:
2007
diff
changeset
|
1101 """ |
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
|
1102 import rhodecode |
6020e3884a58
implements #212 moved default encoding variable into rhodecode-config. It's now possible to change
Marcin Kuzminski <marcin@python-works.com>
parents:
2013
diff
changeset
|
1103 prefix = '' |
6020e3884a58
implements #212 moved default encoding variable into rhodecode-config. It's now possible to change
Marcin Kuzminski <marcin@python-works.com>
parents:
2013
diff
changeset
|
1104 iid = rhodecode.CONFIG.get('instance_id') |
6020e3884a58
implements #212 moved default encoding variable into rhodecode-config. It's now possible to change
Marcin Kuzminski <marcin@python-works.com>
parents:
2013
diff
changeset
|
1105 if iid: |
2058
fb51a6fc10ae
updated CONTRIBUTORS
Marcin Kuzminski <marcin@python-works.com>
parents:
2016
diff
changeset
|
1106 prefix = iid |
2147
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1107 return "%s%s" % (prefix, key), prefix, key.rstrip('_README') |
2013
8530c3cd9d04
fixed issue with hybrid property for ldap_active
Marcin Kuzminski <marcin@python-works.com>
parents:
2007
diff
changeset
|
1108 |
8530c3cd9d04
fixed issue with hybrid property for ldap_active
Marcin Kuzminski <marcin@python-works.com>
parents:
2007
diff
changeset
|
1109 @classmethod |
8530c3cd9d04
fixed issue with hybrid property for ldap_active
Marcin Kuzminski <marcin@python-works.com>
parents:
2007
diff
changeset
|
1110 def get_by_key(cls, key): |
8530c3cd9d04
fixed issue with hybrid property for ldap_active
Marcin Kuzminski <marcin@python-works.com>
parents:
2007
diff
changeset
|
1111 return cls.query().filter(cls.cache_key == key).scalar() |
2149 | 1112 |
2147
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1113 @classmethod |
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1114 def _get_or_create_key(cls, key, prefix, org_key): |
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1115 inv_obj = Session.query(cls).filter(cls.cache_key == key).scalar() |
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1116 if not inv_obj: |
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1117 try: |
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1118 inv_obj = CacheInvalidation(key, org_key) |
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1119 Session.add(inv_obj) |
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1120 Session.commit() |
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1121 except Exception: |
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1122 log.error(traceback.format_exc()) |
2149 | 1123 Session.rollback() |
2147
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1124 return inv_obj |
2149 | 1125 |
2013
8530c3cd9d04
fixed issue with hybrid property for ldap_active
Marcin Kuzminski <marcin@python-works.com>
parents:
2007
diff
changeset
|
1126 @classmethod |
1607
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1127 def invalidate(cls, key): |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1128 """ |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1129 Returns Invalidation object if this given key should be invalidated |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1130 None otherwise. `cache_active = False` means that this cache |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1131 state is not valid and needs to be invalidated |
1818
cf51bbfb120e
auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents:
1800
diff
changeset
|
1132 |
1607
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1133 :param key: |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1134 """ |
2149 | 1135 |
2147
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1136 key, _prefix, _org_key = cls._get_key(key) |
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1137 inv = cls._get_or_create_key(key, _prefix, _org_key) |
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1138 |
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1139 if inv and inv.cache_active is False: |
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1140 return inv |
1607
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1141 |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1142 @classmethod |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1143 def set_invalidate(cls, key): |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1144 """ |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1145 Mark this Cache key for invalidation |
1818
cf51bbfb120e
auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents:
1800
diff
changeset
|
1146 |
1607
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1147 :param key: |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1148 """ |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1149 |
2147
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1150 key, _prefix, _org_key = cls._get_key(key) |
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1151 inv_objs = Session.query(cls).filter(cls.cache_args == _org_key).all() |
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1152 log.debug('marking %s key[s] %s for invalidation' % (len(inv_objs), |
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1153 _org_key)) |
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1154 try: |
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1155 for inv_obj in inv_objs: |
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1156 if inv_obj: |
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1157 inv_obj.cache_active = False |
1607
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1158 |
2147
d25bd432bc3e
- #347 when running multiple RhodeCode instances, properly invalidates cache
Marcin Kuzminski <marcin@python-works.com>
parents:
2109
diff
changeset
|
1159 Session.add(inv_obj) |
1749
8ecc6b8229a5
commit less models
Marcin Kuzminski <marcin@python-works.com>
parents:
1747
diff
changeset
|
1160 Session.commit() |
1607
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1161 except Exception: |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1162 log.error(traceback.format_exc()) |
1749
8ecc6b8229a5
commit less models
Marcin Kuzminski <marcin@python-works.com>
parents:
1747
diff
changeset
|
1163 Session.rollback() |
1607
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1164 |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1165 @classmethod |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1166 def set_valid(cls, key): |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1167 """ |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1168 Mark this cache key as active and currently cached |
1818
cf51bbfb120e
auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents:
1800
diff
changeset
|
1169 |
1607
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1170 :param key: |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1171 """ |
2013
8530c3cd9d04
fixed issue with hybrid property for ldap_active
Marcin Kuzminski <marcin@python-works.com>
parents:
2007
diff
changeset
|
1172 inv_obj = cls.get_by_key(key) |
1607
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1173 inv_obj.cache_active = True |
1749
8ecc6b8229a5
commit less models
Marcin Kuzminski <marcin@python-works.com>
parents:
1747
diff
changeset
|
1174 Session.add(inv_obj) |
8ecc6b8229a5
commit less models
Marcin Kuzminski <marcin@python-works.com>
parents:
1747
diff
changeset
|
1175 Session.commit() |
1607
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1176 |
1665
36f77a46f291
Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents:
1634
diff
changeset
|
1177 |
1670
d2de0c2f02cd
#77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
1669
diff
changeset
|
1178 class ChangesetComment(Base, BaseModel): |
d2de0c2f02cd
#77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
1669
diff
changeset
|
1179 __tablename__ = 'changeset_comments' |
2149 | 1180 __table_args__ = ( |
1181 {'extend_existing': True, 'mysql_engine':'InnoDB', | |
1182 'mysql_charset': 'utf8'}, | |
1183 ) | |
1670
d2de0c2f02cd
#77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
1669
diff
changeset
|
1184 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
|
1185 repo_id = Column('repo_id', Integer(), ForeignKey('repositories.repo_id'), nullable=False) |
1675
7c487d2678c7
code refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1670
diff
changeset
|
1186 revision = Column('revision', String(40), nullable=False) |
1677
7276b170ce8b
#71 code-review
Marcin Kuzminski <marcin@python-works.com>
parents:
1675
diff
changeset
|
1187 line_no = Column('line_no', Unicode(10), nullable=True) |
7276b170ce8b
#71 code-review
Marcin Kuzminski <marcin@python-works.com>
parents:
1675
diff
changeset
|
1188 f_path = Column('f_path', Unicode(1000), nullable=True) |
1670
d2de0c2f02cd
#77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
1669
diff
changeset
|
1189 user_id = Column('user_id', Integer(), ForeignKey('users.user_id'), nullable=False) |
1677
7276b170ce8b
#71 code-review
Marcin Kuzminski <marcin@python-works.com>
parents:
1675
diff
changeset
|
1190 text = Column('text', Unicode(25000), nullable=False) |
7276b170ce8b
#71 code-review
Marcin Kuzminski <marcin@python-works.com>
parents:
1675
diff
changeset
|
1191 modified_at = Column('modified_at', DateTime(), nullable=False, default=datetime.datetime.now) |
1670
d2de0c2f02cd
#77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
1669
diff
changeset
|
1192 |
1703
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1193 author = relationship('User', lazy='joined') |
1670
d2de0c2f02cd
#77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
1669
diff
changeset
|
1194 repo = relationship('Repository') |
d2de0c2f02cd
#77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
1669
diff
changeset
|
1195 |
1703
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1196 @classmethod |
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1197 def get_users(cls, revision): |
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1198 """ |
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1199 Returns user associated with this changesetComment. ie those |
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1200 who actually commented |
1818
cf51bbfb120e
auto white-space removal
Marcin Kuzminski <marcin@python-works.com>
parents:
1800
diff
changeset
|
1201 |
1703
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1202 :param cls: |
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1203 :param revision: |
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1204 """ |
1749
8ecc6b8229a5
commit less models
Marcin Kuzminski <marcin@python-works.com>
parents:
1747
diff
changeset
|
1205 return Session.query(User)\ |
1703
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1206 .filter(cls.revision == revision)\ |
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1207 .join(ChangesetComment.author).all() |
1886 | 1208 |
1703
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1209 |
1702
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1210 class Notification(Base, BaseModel): |
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1211 __tablename__ = 'notifications' |
2149 | 1212 __table_args__ = ( |
1213 {'extend_existing': True, 'mysql_engine':'InnoDB', | |
1214 'mysql_charset': 'utf8'}, | |
1215 ) | |
1703
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1216 |
1712
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1703
diff
changeset
|
1217 TYPE_CHANGESET_COMMENT = u'cs_comment' |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1703
diff
changeset
|
1218 TYPE_MESSAGE = u'message' |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1703
diff
changeset
|
1219 TYPE_MENTION = u'mention' |
1731
31e6eb2fb4b2
implements #222 registration feedback
Marcin Kuzminski <marcin@python-works.com>
parents:
1729
diff
changeset
|
1220 TYPE_REGISTRATION = u'registration' |
1703
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1221 |
1702
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1222 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
|
1223 subject = Column('subject', Unicode(512), nullable=True) |
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1224 body = Column('body', Unicode(50000), nullable=True) |
1703
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1225 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
|
1226 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
|
1227 type_ = Column('type', Unicode(256)) |
1702
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1228 |
1712
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1703
diff
changeset
|
1229 created_by_user = relationship('User') |
1717
7ff304d3028f
Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
1716
diff
changeset
|
1230 notifications_to_users = relationship('UserNotification', lazy='joined', |
7ff304d3028f
Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
1716
diff
changeset
|
1231 cascade="all, delete, delete-orphan") |
1702
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1232 |
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1233 @property |
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1234 def recipients(self): |
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1235 return [x.user for x in UserNotification.query()\ |
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1236 .filter(UserNotification.notification == self).all()] |
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1237 |
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1238 @classmethod |
1703
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1239 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
|
1240 if type_ is None: |
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1241 type_ = Notification.TYPE_MESSAGE |
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1242 |
1702
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1243 notification = cls() |
1712
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1703
diff
changeset
|
1244 notification.created_by_user = created_by |
1702
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1245 notification.subject = subject |
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1246 notification.body = body |
1703
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1247 notification.type_ = type_ |
1717
7ff304d3028f
Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
1716
diff
changeset
|
1248 notification.created_on = datetime.datetime.now() |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
1249 |
1702
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1250 for u in recipients: |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
1251 assoc = UserNotification() |
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
1252 assoc.notification = notification |
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
1253 u.notifications.append(assoc) |
1749
8ecc6b8229a5
commit less models
Marcin Kuzminski <marcin@python-works.com>
parents:
1747
diff
changeset
|
1254 Session.add(notification) |
1702
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1255 return notification |
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1256 |
1712
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1703
diff
changeset
|
1257 @property |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1703
diff
changeset
|
1258 def description(self): |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1703
diff
changeset
|
1259 from rhodecode.model.notification import NotificationModel |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1703
diff
changeset
|
1260 return NotificationModel().make_description(self) |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1703
diff
changeset
|
1261 |
1800 | 1262 |
1702
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1263 class UserNotification(Base, BaseModel): |
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1264 __tablename__ = 'user_to_notification' |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
1265 __table_args__ = ( |
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
1266 UniqueConstraint('user_id', 'notification_id'), |
2149 | 1267 {'extend_existing': True, 'mysql_engine':'InnoDB', |
1268 'mysql_charset': 'utf8'} | |
1958
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
1269 ) |
7e4b3d3a9c5c
renamed repo groups table
Marcin Kuzminski <marcin@python-works.com>
parents:
1950
diff
changeset
|
1270 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
|
1271 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
|
1272 read = Column('read', Boolean, default=False) |
1702
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1273 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
|
1274 |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
1275 user = relationship('User', lazy="joined") |
1717
7ff304d3028f
Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
1716
diff
changeset
|
1276 notification = relationship('Notification', lazy="joined", |
1960
3daa7093fbbb
fix typo in db models
Marcin Kuzminski <marcin@python-works.com>
parents:
1958
diff
changeset
|
1277 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
|
1278 |
1712
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1703
diff
changeset
|
1279 def mark_as_read(self): |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1703
diff
changeset
|
1280 self.read = True |
1749
8ecc6b8229a5
commit less models
Marcin Kuzminski <marcin@python-works.com>
parents:
1747
diff
changeset
|
1281 Session.add(self) |
1702
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1282 |
1800 | 1283 |
1593 | 1284 class DbMigrateVersion(Base, BaseModel): |
834
8924ed0e4f36
added current db version into rhodecode,
Marcin Kuzminski <marcin@python-works.com>
parents:
832
diff
changeset
|
1285 __tablename__ = 'db_migrate_version' |
2149 | 1286 __table_args__ = ( |
1287 {'extend_existing': True, 'mysql_engine':'InnoDB', | |
1288 'mysql_charset': 'utf8'}, | |
1289 ) | |
1594 | 1290 repository_id = Column('repository_id', String(250), primary_key=True) |
1593 | 1291 repository_path = Column('repository_path', Text) |
1292 version = Column('version', Integer) |