Mercurial > kallithea
annotate rhodecode/model/db.py @ 1717:7ff304d3028f beta
Notification fixes
- email prefix added to .ini files
- html templates emails
- rewrote email system to use some parts from pyramid_mailer
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Fri, 25 Nov 2011 17:41:42 +0200 |
parents | 7d1fc253549e |
children | 64e91067b996 |
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 |
1203
6832ef664673
source code cleanup: remove trailing white space, normalize file endings
Marcin Kuzminski <marcin@python-works.com>
parents:
1199
diff
changeset
|
10 :copyright: (C) 2009-2011 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 |
994
7f9d23f6a526
Added grouping by days in journal
Marcin Kuzminski <marcin@python-works.com>
parents:
991
diff
changeset
|
30 from datetime import date |
759
a7f50911a945
Models code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
734
diff
changeset
|
31 |
658 | 32 from sqlalchemy import * |
1634
1d904d972c47
User usermodel instead of db model to manage accounts
Marcin Kuzminski <marcin@python-works.com>
parents:
1633
diff
changeset
|
33 from sqlalchemy.exc import DatabaseError |
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
|
34 from sqlalchemy.ext.hybrid import hybrid_property |
1594 | 35 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
|
36 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
|
37 |
9c0f5d558789
fixes #200, rewrote the whole caching mechanism to get rid of such problems. Now cached instances are attached
Marcin Kuzminski <marcin@python-works.com>
parents:
1360
diff
changeset
|
38 from vcs import get_backend |
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
|
39 from vcs.utils.helpers import get_scm |
1500 | 40 from vcs.exceptions import VCSError |
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 from vcs.utils.lazy import LazyProperty |
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
|
42 |
1514
87ec80c280bb
fixed issues with python2.5
Marcin Kuzminski <marcin@python-works.com>
parents:
1508
diff
changeset
|
43 from rhodecode.lib import str2bool, safe_str, get_changeset_safe, \ |
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
|
44 generate_api_key, safe_unicode |
1436
88d13c1c6a55
removed users_group controller in replace for model methods,
Marcin Kuzminski <marcin@python-works.com>
parents:
1435
diff
changeset
|
45 from rhodecode.lib.exceptions import UsersGroupsAssignedException |
1514
87ec80c280bb
fixed issues with python2.5
Marcin Kuzminski <marcin@python-works.com>
parents:
1508
diff
changeset
|
46 from rhodecode.lib.compat import json |
1669
f522f4d3bf93
moved caching query to libs
Marcin Kuzminski <marcin@python-works.com>
parents:
1665
diff
changeset
|
47 from rhodecode.lib.caching_query import FromCache |
1500 | 48 |
1081
70bf0be59653
fixed Session problems in model class functions
Marcin Kuzminski <marcin@python-works.com>
parents:
1065
diff
changeset
|
49 from rhodecode.model.meta import Base, Session |
1669
f522f4d3bf93
moved caching query to libs
Marcin Kuzminski <marcin@python-works.com>
parents:
1665
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 |
1593 | 57 class ModelSerializer(json.JSONEncoder): |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
58 """ |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
59 Simple Serializer for JSON, |
1584
3338a0994472
Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents:
1508
diff
changeset
|
60 |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
61 usage:: |
1584
3338a0994472
Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents:
1508
diff
changeset
|
62 |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
63 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
|
64 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
|
65 |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
66 example:: |
1584
3338a0994472
Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents:
1508
diff
changeset
|
67 |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
68 class Task(object): |
1584
3338a0994472
Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents:
1508
diff
changeset
|
69 |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
70 def __init__(self, name, value): |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
71 self.name = name |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
72 self.value = value |
1584
3338a0994472
Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents:
1508
diff
changeset
|
73 |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
74 def __json__(self): |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
75 return dict(name=self.name, |
1584
3338a0994472
Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents:
1508
diff
changeset
|
76 value=self.value) |
3338a0994472
Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents:
1508
diff
changeset
|
77 |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
78 """ |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
79 |
1593 | 80 def default(self, obj): |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
81 |
1593 | 82 if hasattr(obj, '__json__'): |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
83 return obj.__json__() |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
84 else: |
1593 | 85 return json.JSONEncoder.default(self, obj) |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
86 |
1593 | 87 class BaseModel(object): |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
88 """Base Model for all classess |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
89 |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
90 """ |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
91 |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
92 @classmethod |
1593 | 93 def _get_keys(cls): |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
94 """return column names for this model """ |
1593 | 95 return class_mapper(cls).c.keys() |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
96 |
1593 | 97 def get_dict(self): |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
98 """return dict with keys and values corresponding |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
99 to this model data """ |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
100 |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
101 d = {} |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
102 for k in self._get_keys(): |
1593 | 103 d[k] = getattr(self, k) |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
104 return d |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
105 |
1593 | 106 def get_appstruct(self): |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
107 """return list with keys and values tupples corresponding |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
108 to this model data """ |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
109 |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
110 l = [] |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
111 for k in self._get_keys(): |
1593 | 112 l.append((k, getattr(self, k),)) |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
113 return l |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
114 |
1593 | 115 def populate_obj(self, populate_dict): |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
116 """populate model with data from given populate_dict""" |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
117 |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
118 for k in self._get_keys(): |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
119 if k in populate_dict: |
1593 | 120 setattr(self, k, populate_dict[k]) |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
121 |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
122 @classmethod |
1593 | 123 def query(cls): |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
124 return Session().query(cls) |
1388
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
125 |
2029c17cc6c6
Added basic JsonSerialization into models.
Marcin Kuzminski <marcin@python-works.com>
parents:
1385
diff
changeset
|
126 @classmethod |
1593 | 127 def get(cls, id_): |
1594 | 128 if id_: |
129 return cls.query().get(id_) | |
1466 | 130 |
1460
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
131 @classmethod |
1593 | 132 def getAll(cls): |
1584
3338a0994472
Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents:
1508
diff
changeset
|
133 return cls.query().all() |
1466 | 134 |
1460
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
135 @classmethod |
1593 | 136 def delete(cls, id_): |
137 obj = cls.query().get(id_) | |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
138 Session().delete(obj) |
1466 | 139 |
1081
70bf0be59653
fixed Session problems in model class functions
Marcin Kuzminski <marcin@python-works.com>
parents:
1065
diff
changeset
|
140 |
1633
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
141 class RhodeCodeSetting(Base, BaseModel): |
548
b75b77ef649d
renamed hg_app to rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents:
547
diff
changeset
|
142 __tablename__ = 'rhodecode_settings' |
1593 | 143 __table_args__ = (UniqueConstraint('app_settings_name'), {'extend_existing':True}) |
1594 | 144 app_settings_id = Column("app_settings_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
145 app_settings_name = Column("app_settings_name", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) | |
146 _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
|
147 |
1594 | 148 def __init__(self, k='', v=''): |
704
26237de9b613
Added settings model, and Exceptions lib.
Marcin Kuzminski <marcin@python-works.com>
parents:
692
diff
changeset
|
149 self.app_settings_name = k |
26237de9b613
Added settings model, and Exceptions lib.
Marcin Kuzminski <marcin@python-works.com>
parents:
692
diff
changeset
|
150 self.app_settings_value = v |
26237de9b613
Added settings model, and Exceptions lib.
Marcin Kuzminski <marcin@python-works.com>
parents:
692
diff
changeset
|
151 |
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
|
152 |
1593 | 153 @validates('_app_settings_value') |
154 def validate_settings_value(self, key, val): | |
155 assert type(val) == unicode | |
1561
4d841e565237
added validation of params on settings table
Marcin Kuzminski <marcin@python-works.com>
parents:
1556
diff
changeset
|
156 return val |
4d841e565237
added validation of params on settings table
Marcin Kuzminski <marcin@python-works.com>
parents:
1556
diff
changeset
|
157 |
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
|
158 @hybrid_property |
1593 | 159 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
|
160 v = self._app_settings_value |
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
|
161 if v == 'ldap_active': |
1593 | 162 v = str2bool(v) |
1591 | 163 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
|
164 |
c363267bbec7
fixes #265 ldap save fails sometimes on converting attributes to booleans, added getter and setter
Marcin Kuzminski <marcin@python-works.com>
parents:
1539
diff
changeset
|
165 @app_settings_value.setter |
1593 | 166 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
|
167 """ |
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
|
168 Setter that will always make sure we use unicode in app_settings_value |
1591 | 169 |
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
|
170 :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
|
171 """ |
1593 | 172 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
|
173 |
1593 | 174 def __repr__(self): |
175 return "<%s('%s:%s')>" % (self.__class__.__name__, | |
176 self.app_settings_name, self.app_settings_value) | |
704
26237de9b613
Added settings model, and Exceptions lib.
Marcin Kuzminski <marcin@python-works.com>
parents:
692
diff
changeset
|
177 |
1266
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
178 |
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
179 @classmethod |
1593 | 180 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
|
181 return cls.query()\ |
1593 | 182 .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
|
183 |
c0335c1dee36
added some fixes to LDAP form re-submition, new simples ldap-settings getter.
Marcin Kuzminski <marcin@python-works.com>
parents:
1279
diff
changeset
|
184 @classmethod |
1594 | 185 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
|
186 |
1584
3338a0994472
Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents:
1508
diff
changeset
|
187 ret = cls.query() |
1266
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
188 |
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
189 if cache: |
1593 | 190 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
|
191 |
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
192 if not ret: |
1593 | 193 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
|
194 settings = {} |
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
195 for each in ret: |
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
196 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
|
197 each.app_settings_value |
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
198 |
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
199 return settings |
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
200 |
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
201 @classmethod |
1594 | 202 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
|
203 ret = cls.query()\ |
1593 | 204 .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
|
205 fd = {} |
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
206 for row in ret: |
1593 | 207 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
|
208 |
1266
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
209 return fd |
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
210 |
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
211 |
1593 | 212 class RhodeCodeUi(Base, BaseModel): |
548
b75b77ef649d
renamed hg_app to rhodecode
Marcin Kuzminski <marcin@python-works.com>
parents:
547
diff
changeset
|
213 __tablename__ = 'rhodecode_ui' |
1593 | 214 __table_args__ = (UniqueConstraint('ui_key'), {'extend_existing':True}) |
1460
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
215 |
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
216 HOOK_UPDATE = 'changegroup.update' |
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
217 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
|
218 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
|
219 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
|
220 |
1594 | 221 ui_id = Column("ui_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
222 ui_section = Column("ui_section", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) | |
223 ui_key = Column("ui_key", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) | |
224 ui_value = Column("ui_value", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) | |
225 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
|
226 |
05528ad948c4
Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents:
549
diff
changeset
|
227 |
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
|
228 @classmethod |
1593 | 229 def get_by_key(cls, key): |
230 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
|
231 |
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
|
232 |
1460
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
233 @classmethod |
1593 | 234 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
|
235 q = cls.query() |
1593 | 236 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
|
237 cls.HOOK_REPO_SIZE, |
1593 | 238 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
|
239 return q.all() |
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
240 |
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
241 @classmethod |
1593 | 242 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
|
243 q = cls.query() |
1593 | 244 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
|
245 cls.HOOK_REPO_SIZE, |
1593 | 246 cls.HOOK_PUSH, cls.HOOK_PULL])) |
247 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
|
248 return q.all() |
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
249 |
b50348816a80
Added more advanced hook management into rhodecode admin settings
Marcin Kuzminski <marcin@python-works.com>
parents:
1436
diff
changeset
|
250 @classmethod |
1593 | 251 def create_or_update_hook(cls, key, val): |
252 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
|
253 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
|
254 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
|
255 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
|
256 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
|
257 |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
258 Session().add(new_ui) |
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
259 Session().commit() |
1460
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 |
1593 | 262 class User(Base, BaseModel): |
49
3ada2f409c1c
Added sqlalchemy support
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff
changeset
|
263 __tablename__ = 'users' |
1593 | 264 __table_args__ = (UniqueConstraint('username'), UniqueConstraint('email'), {'extend_existing':True}) |
1594 | 265 user_id = Column("user_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
266 username = Column("username", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) | |
267 password = Column("password", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) | |
268 active = Column("active", Boolean(), nullable=True, unique=None, default=None) | |
269 admin = Column("admin", Boolean(), nullable=True, unique=None, default=False) | |
270 name = Column("name", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) | |
271 lastname = Column("lastname", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) | |
272 email = Column("email", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) | |
273 last_login = Column("last_login", DateTime(timezone=False), nullable=True, unique=None, default=None) | |
274 ldap_dn = Column("ldap_dn", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) | |
275 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
|
276 |
1594 | 277 user_log = relationship('UserLog', cascade='all') |
278 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
|
279 |
1593 | 280 repositories = relationship('Repository') |
1594 | 281 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
|
282 repo_to_perm = relationship('UserRepoToPerm', primaryjoin='UserRepoToPerm.user_id==User.user_id', cascade='all') |
713
1bb0fcdec895
fixed #72 show warning on removal when user still is owner of existing repositories
Marcin Kuzminski <marcin@python-works.com>
parents:
708
diff
changeset
|
283 |
1594 | 284 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
|
285 |
1717
7ff304d3028f
Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
1716
diff
changeset
|
286 notifications = relationship('UserNotification',) |
1702
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
287 |
759
a7f50911a945
Models code cleanups
Marcin Kuzminski <marcin@python-works.com>
parents:
734
diff
changeset
|
288 @property |
1593 | 289 def full_contact(self): |
290 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
|
291 |
895
62c04c5cc971
Added some more details into user edit permissions view
Marcin Kuzminski <marcin@python-works.com>
parents:
880
diff
changeset
|
292 @property |
1593 | 293 def short_contact(self): |
294 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
|
295 |
fee472613dfa
made simple global rss and atom feed
Marcin Kuzminski <marcin@python-works.com>
parents:
1081
diff
changeset
|
296 @property |
1593 | 297 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
|
298 return self.admin |
62c04c5cc971
Added some more details into user edit permissions view
Marcin Kuzminski <marcin@python-works.com>
parents:
880
diff
changeset
|
299 |
1593 | 300 def __repr__(self): |
1712
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1703
diff
changeset
|
301 return "<%s('id:%s:%s')>" % (self.__class__.__name__, |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1703
diff
changeset
|
302 self.user_id, self.username) |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1703
diff
changeset
|
303 |
631
05528ad948c4
Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents:
549
diff
changeset
|
304 |
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
|
305 @classmethod |
1665
36f77a46f291
Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents:
1634
diff
changeset
|
306 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
|
307 if case_insensitive: |
1665
36f77a46f291
Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents:
1634
diff
changeset
|
308 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
|
309 else: |
1665
36f77a46f291
Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents:
1634
diff
changeset
|
310 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
|
311 |
36f77a46f291
Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents:
1634
diff
changeset
|
312 if cache: |
36f77a46f291
Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents:
1634
diff
changeset
|
313 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
|
314 "get_user_%s" % username)) |
36f77a46f291
Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents:
1634
diff
changeset
|
315 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
|
316 |
1417
5875955def39
fixes #223 improve password reset form
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
317 @classmethod |
1665
36f77a46f291
Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents:
1634
diff
changeset
|
318 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
|
319 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
|
320 |
36f77a46f291
Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents:
1634
diff
changeset
|
321 if cache: |
36f77a46f291
Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents:
1634
diff
changeset
|
322 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
|
323 "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
|
324 return q.scalar() |
1417
5875955def39
fixes #223 improve password reset form
Marcin Kuzminski <marcin@python-works.com>
parents:
1401
diff
changeset
|
325 |
1716
7d1fc253549e
notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents:
1713
diff
changeset
|
326 @classmethod |
7d1fc253549e
notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents:
1713
diff
changeset
|
327 def get_by_email(cls, email, cache=False): |
7d1fc253549e
notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents:
1713
diff
changeset
|
328 q = cls.query().filter(cls.email == email) |
7d1fc253549e
notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents:
1713
diff
changeset
|
329 |
7d1fc253549e
notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents:
1713
diff
changeset
|
330 if cache: |
7d1fc253549e
notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents:
1713
diff
changeset
|
331 q = q.options(FromCache("sql_cache_short", |
7d1fc253549e
notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents:
1713
diff
changeset
|
332 "get_api_key_%s" % email)) |
7d1fc253549e
notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents:
1713
diff
changeset
|
333 return q.scalar() |
7d1fc253549e
notification to commit author + gardening
Marcin Kuzminski <marcin@python-works.com>
parents:
1713
diff
changeset
|
334 |
1593 | 335 def update_lastlogin(self): |
442
d66a7fa7689b
moved loged in user propagation out of forms,
Marcin Kuzminski <marcin@python-works.com>
parents:
417
diff
changeset
|
336 """Update user lastlogin""" |
631
05528ad948c4
Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents:
549
diff
changeset
|
337 |
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
|
338 self.last_login = datetime.datetime.now() |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
339 Session().add(self) |
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
340 Session().commit() |
1593 | 341 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
|
342 |
1712
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1703
diff
changeset
|
343 |
1593 | 344 class UserLog(Base, BaseModel): |
49
3ada2f409c1c
Added sqlalchemy support
Marcin Kuzminski <marcin@python-blog.com>
parents:
diff
changeset
|
345 __tablename__ = 'user_logs' |
1360
1f47adeb67c2
Bumped sqlalchemy version to 0.7, replaced timerproxy with new event system for sqlalchemy.
Marcin Kuzminski <marcin@python-works.com>
parents:
1349
diff
changeset
|
346 __table_args__ = {'extend_existing':True} |
1594 | 347 user_log_id = Column("user_log_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
348 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None) | |
349 repository_id = Column("repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=False, unique=None, default=None) | |
350 repository_name = Column("repository_name", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) | |
351 user_ip = Column("user_ip", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) | |
352 action = Column("action", UnicodeText(length=1200000, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) | |
353 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
|
354 |
994
7f9d23f6a526
Added grouping by days in journal
Marcin Kuzminski <marcin@python-works.com>
parents:
991
diff
changeset
|
355 @property |
1593 | 356 def action_as_day(self): |
357 return date(*self.action_date.timetuple()[:3]) | |
994
7f9d23f6a526
Added grouping by days in journal
Marcin Kuzminski <marcin@python-works.com>
parents:
991
diff
changeset
|
358 |
1593 | 359 user = relationship('User') |
360 repository = relationship('Repository') | |
631
05528ad948c4
Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents:
549
diff
changeset
|
361 |
956
83d35d716a02
started working on issue #56
Marcin Kuzminski <marcin@python-works.com>
parents:
907
diff
changeset
|
362 |
1593 | 363 class UsersGroup(Base, BaseModel): |
956
83d35d716a02
started working on issue #56
Marcin Kuzminski <marcin@python-works.com>
parents:
907
diff
changeset
|
364 __tablename__ = 'users_groups' |
1360
1f47adeb67c2
Bumped sqlalchemy version to 0.7, replaced timerproxy with new event system for sqlalchemy.
Marcin Kuzminski <marcin@python-works.com>
parents:
1349
diff
changeset
|
365 __table_args__ = {'extend_existing':True} |
956
83d35d716a02
started working on issue #56
Marcin Kuzminski <marcin@python-works.com>
parents:
907
diff
changeset
|
366 |
1594 | 367 users_group_id = Column("users_group_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
368 users_group_name = Column("users_group_name", String(length=255, convert_unicode=False, assert_unicode=None), nullable=False, unique=True, default=None) | |
369 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
|
370 |
1594 | 371 members = relationship('UsersGroupMember', cascade="all, delete, delete-orphan", lazy="joined") |
956
83d35d716a02
started working on issue #56
Marcin Kuzminski <marcin@python-works.com>
parents:
907
diff
changeset
|
372 |
1593 | 373 def __repr__(self): |
374 return '<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
|
375 |
aa7e45ad0cea
Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents:
1266
diff
changeset
|
376 @classmethod |
1594 | 377 def get_by_group_name(cls, group_name, cache=False, 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
|
378 if case_insensitive: |
1584
3338a0994472
Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents:
1508
diff
changeset
|
379 gr = cls.query()\ |
1593 | 380 .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
|
381 else: |
1584
3338a0994472
Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents:
1508
diff
changeset
|
382 gr = cls.query()\ |
1593 | 383 .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
|
384 if cache: |
1593 | 385 gr = gr.options(FromCache("sql_cache_short", |
386 "get_user_%s" % 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
|
387 return gr.scalar() |
aa7e45ad0cea
Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents:
1266
diff
changeset
|
388 |
1436
88d13c1c6a55
removed users_group controller in replace for model methods,
Marcin Kuzminski <marcin@python-works.com>
parents:
1435
diff
changeset
|
389 |
88d13c1c6a55
removed users_group controller in replace for model methods,
Marcin Kuzminski <marcin@python-works.com>
parents:
1435
diff
changeset
|
390 @classmethod |
1594 | 391 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
|
392 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
|
393 if cache: |
1593 | 394 users_group = users_group.options(FromCache("sql_cache_short", |
395 "get_users_group_%s" % users_group_id)) | |
396 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
|
397 |
88d13c1c6a55
removed users_group controller in replace for model methods,
Marcin Kuzminski <marcin@python-works.com>
parents:
1435
diff
changeset
|
398 @classmethod |
1593 | 399 def create(cls, form_data): |
1436
88d13c1c6a55
removed users_group controller in replace for model methods,
Marcin Kuzminski <marcin@python-works.com>
parents:
1435
diff
changeset
|
400 try: |
88d13c1c6a55
removed users_group controller in replace for model methods,
Marcin Kuzminski <marcin@python-works.com>
parents:
1435
diff
changeset
|
401 new_users_group = cls() |
88d13c1c6a55
removed users_group controller in replace for model methods,
Marcin Kuzminski <marcin@python-works.com>
parents:
1435
diff
changeset
|
402 for k, v in form_data.items(): |
1593 | 403 setattr(new_users_group, k, v) |
1436
88d13c1c6a55
removed users_group controller in replace for model methods,
Marcin Kuzminski <marcin@python-works.com>
parents:
1435
diff
changeset
|
404 |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
405 Session().add(new_users_group) |
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
406 Session().commit() |
1500 | 407 return new_users_group |
1436
88d13c1c6a55
removed users_group controller in replace for model methods,
Marcin Kuzminski <marcin@python-works.com>
parents:
1435
diff
changeset
|
408 except: |
1593 | 409 log.error(traceback.format_exc()) |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
410 Session().rollback() |
1436
88d13c1c6a55
removed users_group controller in replace for model methods,
Marcin Kuzminski <marcin@python-works.com>
parents:
1435
diff
changeset
|
411 raise |
88d13c1c6a55
removed users_group controller in replace for model methods,
Marcin Kuzminski <marcin@python-works.com>
parents:
1435
diff
changeset
|
412 |
88d13c1c6a55
removed users_group controller in replace for model methods,
Marcin Kuzminski <marcin@python-works.com>
parents:
1435
diff
changeset
|
413 @classmethod |
1593 | 414 def update(cls, users_group_id, form_data): |
1436
88d13c1c6a55
removed users_group controller in replace for model methods,
Marcin Kuzminski <marcin@python-works.com>
parents:
1435
diff
changeset
|
415 |
88d13c1c6a55
removed users_group controller in replace for model methods,
Marcin Kuzminski <marcin@python-works.com>
parents:
1435
diff
changeset
|
416 try: |
1594 | 417 users_group = cls.get(users_group_id, cache=False) |
1436
88d13c1c6a55
removed users_group controller in replace for model methods,
Marcin Kuzminski <marcin@python-works.com>
parents:
1435
diff
changeset
|
418 |
88d13c1c6a55
removed users_group controller in replace for model methods,
Marcin Kuzminski <marcin@python-works.com>
parents:
1435
diff
changeset
|
419 for k, v in form_data.items(): |
88d13c1c6a55
removed users_group controller in replace for model methods,
Marcin Kuzminski <marcin@python-works.com>
parents:
1435
diff
changeset
|
420 if k == 'users_group_members': |
88d13c1c6a55
removed users_group controller in replace for model methods,
Marcin Kuzminski <marcin@python-works.com>
parents:
1435
diff
changeset
|
421 users_group.members = [] |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
422 Session().flush() |
1436
88d13c1c6a55
removed users_group controller in replace for model methods,
Marcin Kuzminski <marcin@python-works.com>
parents:
1435
diff
changeset
|
423 members_list = [] |
88d13c1c6a55
removed users_group controller in replace for model methods,
Marcin Kuzminski <marcin@python-works.com>
parents:
1435
diff
changeset
|
424 if v: |
1577
534b9c0a5646
Proper patch for issue #276
Marcin Kuzminski <marcin@python-works.com>
parents:
1576
diff
changeset
|
425 v = [v] if isinstance(v, basestring) else v |
534b9c0a5646
Proper patch for issue #276
Marcin Kuzminski <marcin@python-works.com>
parents:
1576
diff
changeset
|
426 for u_id in set(v): |
1593 | 427 member = UsersGroupMember(users_group_id, u_id) |
428 members_list.append(member) | |
429 setattr(users_group, 'members', members_list) | |
430 setattr(users_group, k, v) | |
1436
88d13c1c6a55
removed users_group controller in replace for model methods,
Marcin Kuzminski <marcin@python-works.com>
parents:
1435
diff
changeset
|
431 |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
432 Session().add(users_group) |
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
433 Session().commit() |
1436
88d13c1c6a55
removed users_group controller in replace for model methods,
Marcin Kuzminski <marcin@python-works.com>
parents:
1435
diff
changeset
|
434 except: |
1593 | 435 log.error(traceback.format_exc()) |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
436 Session().rollback() |
1436
88d13c1c6a55
removed users_group controller in replace for model methods,
Marcin Kuzminski <marcin@python-works.com>
parents:
1435
diff
changeset
|
437 raise |
88d13c1c6a55
removed users_group controller in replace for model methods,
Marcin Kuzminski <marcin@python-works.com>
parents:
1435
diff
changeset
|
438 |
88d13c1c6a55
removed users_group controller in replace for model methods,
Marcin Kuzminski <marcin@python-works.com>
parents:
1435
diff
changeset
|
439 @classmethod |
1593 | 440 def delete(cls, users_group_id): |
1436
88d13c1c6a55
removed users_group controller in replace for model methods,
Marcin Kuzminski <marcin@python-works.com>
parents:
1435
diff
changeset
|
441 try: |
88d13c1c6a55
removed users_group controller in replace for model methods,
Marcin Kuzminski <marcin@python-works.com>
parents:
1435
diff
changeset
|
442 |
88d13c1c6a55
removed users_group controller in replace for model methods,
Marcin Kuzminski <marcin@python-works.com>
parents:
1435
diff
changeset
|
443 # check if this group is not assigned to repo |
88d13c1c6a55
removed users_group controller in replace for model methods,
Marcin Kuzminski <marcin@python-works.com>
parents:
1435
diff
changeset
|
444 assigned_groups = UsersGroupRepoToPerm.query()\ |
1593 | 445 .filter(UsersGroupRepoToPerm.users_group_id == |
446 users_group_id).all() | |
1436
88d13c1c6a55
removed users_group controller in replace for model methods,
Marcin Kuzminski <marcin@python-works.com>
parents:
1435
diff
changeset
|
447 |
88d13c1c6a55
removed users_group controller in replace for model methods,
Marcin Kuzminski <marcin@python-works.com>
parents:
1435
diff
changeset
|
448 if assigned_groups: |
1633
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
449 raise UsersGroupsAssignedException('RepoGroup assigned to %s' % |
1593 | 450 assigned_groups) |
1436
88d13c1c6a55
removed users_group controller in replace for model methods,
Marcin Kuzminski <marcin@python-works.com>
parents:
1435
diff
changeset
|
451 |
1594 | 452 users_group = cls.get(users_group_id, cache=False) |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
453 Session().delete(users_group) |
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
454 Session().commit() |
1436
88d13c1c6a55
removed users_group controller in replace for model methods,
Marcin Kuzminski <marcin@python-works.com>
parents:
1435
diff
changeset
|
455 except: |
1593 | 456 log.error(traceback.format_exc()) |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
457 Session().rollback() |
1436
88d13c1c6a55
removed users_group controller in replace for model methods,
Marcin Kuzminski <marcin@python-works.com>
parents:
1435
diff
changeset
|
458 raise |
88d13c1c6a55
removed users_group controller in replace for model methods,
Marcin Kuzminski <marcin@python-works.com>
parents:
1435
diff
changeset
|
459 |
1593 | 460 class UsersGroupMember(Base, BaseModel): |
956
83d35d716a02
started working on issue #56
Marcin Kuzminski <marcin@python-works.com>
parents:
907
diff
changeset
|
461 __tablename__ = 'users_groups_members' |
1360
1f47adeb67c2
Bumped sqlalchemy version to 0.7, replaced timerproxy with new event system for sqlalchemy.
Marcin Kuzminski <marcin@python-works.com>
parents:
1349
diff
changeset
|
462 __table_args__ = {'extend_existing':True} |
956
83d35d716a02
started working on issue #56
Marcin Kuzminski <marcin@python-works.com>
parents:
907
diff
changeset
|
463 |
1594 | 464 users_group_member_id = Column("users_group_member_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
465 users_group_id = Column("users_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None) | |
466 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
|
467 |
1594 | 468 user = relationship('User', lazy='joined') |
1593 | 469 users_group = relationship('UsersGroup') |
972
2c8fd84935a4
#56 implemented users groups editing,
Marcin Kuzminski <marcin@python-works.com>
parents:
962
diff
changeset
|
470 |
1594 | 471 def __init__(self, gr_id='', u_id=''): |
972
2c8fd84935a4
#56 implemented users groups editing,
Marcin Kuzminski <marcin@python-works.com>
parents:
962
diff
changeset
|
472 self.users_group_id = gr_id |
2c8fd84935a4
#56 implemented users groups editing,
Marcin Kuzminski <marcin@python-works.com>
parents:
962
diff
changeset
|
473 self.user_id = u_id |
956
83d35d716a02
started working on issue #56
Marcin Kuzminski <marcin@python-works.com>
parents:
907
diff
changeset
|
474 |
1587
8898a79ac628
Implement all CRUD API operation for repo
Nicolas VINOT <aeris@imirhil.fr>
parents:
1586
diff
changeset
|
475 @staticmethod |
1593 | 476 def add_user_to_group(group, user): |
1587
8898a79ac628
Implement all CRUD API operation for repo
Nicolas VINOT <aeris@imirhil.fr>
parents:
1586
diff
changeset
|
477 ugm = UsersGroupMember() |
8898a79ac628
Implement all CRUD API operation for repo
Nicolas VINOT <aeris@imirhil.fr>
parents:
1586
diff
changeset
|
478 ugm.users_group = group |
8898a79ac628
Implement all CRUD API operation for repo
Nicolas VINOT <aeris@imirhil.fr>
parents:
1586
diff
changeset
|
479 ugm.user = user |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
480 Session().add(ugm) |
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
481 Session().commit() |
1587
8898a79ac628
Implement all CRUD API operation for repo
Nicolas VINOT <aeris@imirhil.fr>
parents:
1586
diff
changeset
|
482 return ugm |
8898a79ac628
Implement all CRUD API operation for repo
Nicolas VINOT <aeris@imirhil.fr>
parents:
1586
diff
changeset
|
483 |
1593 | 484 class Repository(Base, BaseModel): |
234
a0116e944da1
changed naming convention for db modules.
Marcin Kuzminski <marcin@python-works.com>
parents:
232
diff
changeset
|
485 __tablename__ = 'repositories' |
1593 | 486 __table_args__ = (UniqueConstraint('repo_name'), {'extend_existing':True},) |
1081
70bf0be59653
fixed Session problems in model class functions
Marcin Kuzminski <marcin@python-works.com>
parents:
1065
diff
changeset
|
487 |
1594 | 488 repo_id = Column("repo_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
489 repo_name = Column("repo_name", String(length=255, convert_unicode=False, assert_unicode=None), nullable=False, unique=True, default=None) | |
490 clone_uri = Column("clone_uri", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=False, default=None) | |
491 repo_type = Column("repo_type", String(length=255, convert_unicode=False, assert_unicode=None), nullable=False, unique=False, default='hg') | |
492 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=False, default=None) | |
493 private = Column("private", Boolean(), nullable=True, unique=None, default=None) | |
494 enable_statistics = Column("statistics", Boolean(), nullable=True, unique=None, default=True) | |
495 enable_downloads = Column("downloads", Boolean(), nullable=True, unique=None, default=True) | |
496 description = Column("description", String(length=10000, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) | |
497 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
|
498 |
1594 | 499 fork_id = Column("fork_id", Integer(), ForeignKey('repositories.repo_id'), nullable=True, unique=False, default=None) |
500 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
|
501 |
1113
c1eda8ec4a46
added clone_uri,api_key into models. Fixed models for mysql compatibilty
Marcin Kuzminski <marcin@python-works.com>
parents:
1088
diff
changeset
|
502 |
1593 | 503 user = relationship('User') |
1594 | 504 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
|
505 group = relationship('RepoGroup') |
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
506 repo_to_perm = relationship('UserRepoToPerm', cascade='all', order_by='UserRepoToPerm.repo_to_perm_id') |
1594 | 507 users_group_to_perm = relationship('UsersGroupRepoToPerm', cascade='all') |
508 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
|
509 |
1594 | 510 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
|
511 |
1594 | 512 logs = relationship('UserLog', cascade='all') |
970
1a5c41e4bb02
fixees for #106 relation issues on databases different than sqlite
Marcin Kuzminski <marcin@python-works.com>
parents:
962
diff
changeset
|
513 |
1593 | 514 def __repr__(self): |
515 return "<%s('%s:%s')>" % (self.__class__.__name__, | |
516 self.repo_id, self.repo_name) | |
878
859bc9e7a15d
Extended repo2db mapper with group creation via directory structures
Marcin Kuzminski <marcin@python-works.com>
parents:
836
diff
changeset
|
517 |
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
|
518 @classmethod |
1593 | 519 def url_sep(cls): |
1554
e7c6341ad3cb
fixes #245 Rescan of the repositories on Windows
Marcin Kuzminski <marcin@python-works.com>
parents:
1547
diff
changeset
|
520 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
|
521 |
1554
e7c6341ad3cb
fixes #245 Rescan of the repositories on Windows
Marcin Kuzminski <marcin@python-works.com>
parents:
1547
diff
changeset
|
522 @classmethod |
1593 | 523 def get_by_repo_name(cls, repo_name): |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
524 q = Session().query(cls).filter(cls.repo_name == repo_name) |
1593 | 525 q = q.options(joinedload(Repository.fork))\ |
526 .options(joinedload(Repository.user))\ | |
527 .options(joinedload(Repository.group)) | |
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
|
528 return q.one() |
1301
7e75af301842
Added simple forks page, resolves issue #179
Marcin Kuzminski <marcin@python-works.com>
parents:
1292
diff
changeset
|
529 |
7e75af301842
Added simple forks page, resolves issue #179
Marcin Kuzminski <marcin@python-works.com>
parents:
1292
diff
changeset
|
530 @classmethod |
1593 | 531 def get_repo_forks(cls, repo_id): |
532 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
|
533 |
1508
4aba7be311e8
API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents:
1500
diff
changeset
|
534 @classmethod |
1593 | 535 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
|
536 """ |
4aba7be311e8
API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents:
1500
diff
changeset
|
537 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
|
538 |
1508
4aba7be311e8
API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents:
1500
diff
changeset
|
539 :param cls: |
4aba7be311e8
API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents:
1500
diff
changeset
|
540 """ |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
541 q = Session().query(RhodeCodeUi).filter(RhodeCodeUi.ui_key == |
1593 | 542 cls.url_sep()) |
543 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
|
544 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
|
545 |
1113
c1eda8ec4a46
added clone_uri,api_key into models. Fixed models for mysql compatibilty
Marcin Kuzminski <marcin@python-works.com>
parents:
1088
diff
changeset
|
546 @property |
1593 | 547 def just_name(self): |
548 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
|
549 |
37a9421f32a0
Added handy methods to Repository model for fetching groups with parents
Marcin Kuzminski <marcin@python-works.com>
parents:
1113
diff
changeset
|
550 @property |
1593 | 551 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
|
552 groups = [] |
37a9421f32a0
Added handy methods to Repository model for fetching groups with parents
Marcin Kuzminski <marcin@python-works.com>
parents:
1113
diff
changeset
|
553 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
|
554 return groups |
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 cur_gr = self.group |
1593 | 557 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
|
558 while 1: |
1593 | 559 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
|
560 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
|
561 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
|
562 break |
1593 | 563 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
|
564 |
37a9421f32a0
Added handy methods to Repository model for fetching groups with parents
Marcin Kuzminski <marcin@python-works.com>
parents:
1113
diff
changeset
|
565 return groups |
37a9421f32a0
Added handy methods to Repository model for fetching groups with parents
Marcin Kuzminski <marcin@python-works.com>
parents:
1113
diff
changeset
|
566 |
37a9421f32a0
Added handy methods to Repository model for fetching groups with parents
Marcin Kuzminski <marcin@python-works.com>
parents:
1113
diff
changeset
|
567 @property |
1593 | 568 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
|
569 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
|
570 |
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
|
571 @LazyProperty |
1593 | 572 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
|
573 """ |
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
|
574 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
|
575 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
|
576 """ |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
577 q = Session().query(RhodeCodeUi).filter(RhodeCodeUi.ui_key == |
1593 | 578 Repository.url_sep()) |
579 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
|
580 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
|
581 |
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 @property |
1593 | 583 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
|
584 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
|
585 # 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
|
586 # 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
|
587 # into a valid system path |
1593 | 588 p += self.repo_name.split(Repository.url_sep()) |
589 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
|
590 |
1593 | 591 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
|
592 """ |
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
|
593 returns new full repository name based on assigned group and new new |
1591 | 594 |
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
|
595 :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
|
596 """ |
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
|
597 path_prefix = self.group.full_path_splitted if self.group else [] |
1593 | 598 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
|
599 |
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
|
600 @property |
1593 | 601 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
|
602 """ |
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
|
603 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
|
604 """ |
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
|
605 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
|
606 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
|
607 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
|
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 #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
|
610 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
|
611 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
|
612 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
|
613 |
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 |
1584
3338a0994472
Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents:
1508
diff
changeset
|
615 ret = RhodeCodeUi.query()\ |
1593 | 616 .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
|
617 |
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 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
|
619 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
|
620 if ui_.ui_active: |
1593 | 621 log.debug('settings ui from db[%s]%s:%s', ui_.ui_section, |
622 ui_.ui_key, ui_.ui_value) | |
623 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
|
624 |
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 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
|
626 |
1508
4aba7be311e8
API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents:
1500
diff
changeset
|
627 @classmethod |
1593 | 628 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
|
629 """ |
4aba7be311e8
API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents:
1500
diff
changeset
|
630 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
|
631 |
1508
4aba7be311e8
API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents:
1500
diff
changeset
|
632 @param cls: |
4aba7be311e8
API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents:
1500
diff
changeset
|
633 @param repo_name: |
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 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
|
636 |
1593 | 637 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
|
638 |
4aba7be311e8
API added checks for a valid repository on pull command
Marcin Kuzminski <marcin@python-works.com>
parents:
1500
diff
changeset
|
639 |
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
|
640 #========================================================================== |
1466 | 641 # SCM PROPERTIES |
642 #========================================================================== | |
643 | |
1593 | 644 def get_changeset(self, rev): |
645 return get_changeset_safe(self.scm_instance, rev) | |
1466 | 646 |
647 @property | |
1593 | 648 def tip(self): |
649 return self.get_changeset('tip') | |
1466 | 650 |
651 @property | |
1593 | 652 def author(self): |
1466 | 653 return self.tip.author |
654 | |
655 @property | |
1593 | 656 def last_change(self): |
1466 | 657 return self.scm_instance.last_change |
658 | |
659 #========================================================================== | |
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
|
660 # 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
|
661 #========================================================================== |
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
|
662 |
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
|
663 @property |
1593 | 664 def invalidate(self): |
1607
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
665 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
|
666 |
1593 | 667 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
|
668 """ |
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
|
669 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
|
670 """ |
1607
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
671 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
|
672 |
1466 | 673 @LazyProperty |
1593 | 674 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
|
675 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
|
676 |
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
|
677 @property |
1593 | 678 def scm_instance_cached(self): |
679 @cache_region('long_term') | |
680 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
|
681 return self.__get_instance() |
1607
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
682 rn = self.repo_name |
1428
e5467730682b
fixed some issues with cache invalidation, and simplified invalidation codes
Marcin Kuzminski <marcin@python-works.com>
parents:
1427
diff
changeset
|
683 |
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
|
684 inv = self.invalidate |
1427
ba697e2f71ff
fixed a bug in cache invalidation
Marcin Kuzminski <marcin@python-works.com>
parents:
1417
diff
changeset
|
685 if inv is not None: |
1593 | 686 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
|
687 # update our cache |
1607
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
688 CacheInvalidation.set_valid(inv.cache_key) |
1593 | 689 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
|
690 |
1593 | 691 def __get_instance(self): |
1368
04b43168742d
adde short cache for repo_path
Marcin Kuzminski <marcin@python-works.com>
parents:
1366
diff
changeset
|
692 |
04b43168742d
adde short cache for repo_path
Marcin Kuzminski <marcin@python-works.com>
parents:
1366
diff
changeset
|
693 repo_full_path = self.repo_full_path |
04b43168742d
adde short cache for repo_path
Marcin Kuzminski <marcin@python-works.com>
parents:
1366
diff
changeset
|
694 |
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 try: |
1593 | 696 alias = get_scm(repo_full_path)[0] |
697 log.debug('Creating instance of %s repository', alias) | |
698 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
|
699 except VCSError: |
1593 | 700 log.error(traceback.format_exc()) |
701 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
|
702 'filesystem run rescan repositories with ' |
1593 | 703 '"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
|
704 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
|
705 |
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
|
706 if alias == 'hg': |
1401
b7563ad4e7ee
Unicode fixes, added safe_str method for global str() operations +better test sandboxing
Marcin Kuzminski <marcin@python-works.com>
parents:
1400
diff
changeset
|
707 |
1594 | 708 repo = backend(safe_str(repo_full_path), create=False, |
709 baseui=self._ui) | |
1607
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
710 # 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
|
711 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
|
712 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
|
713 else: |
1594 | 714 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
|
715 |
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 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
|
717 |
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
|
718 |
1633
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
719 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
|
720 __tablename__ = 'groups' |
1593 | 721 __table_args__ = (UniqueConstraint('group_name', 'group_parent_id'), |
722 CheckConstraint('group_id != group_parent_id'), {'extend_existing':True},) | |
1343
a04fe5986109
#47 implemented basic gui for browsing repo groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1325
diff
changeset
|
723 __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
|
724 |
1594 | 725 group_id = Column("group_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
726 group_name = Column("group_name", String(length=255, convert_unicode=False, assert_unicode=None), nullable=False, unique=True, default=None) | |
727 group_parent_id = Column("group_parent_id", Integer(), ForeignKey('groups.group_id'), nullable=True, unique=None, default=None) | |
728 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
|
729 |
1633
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
730 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
|
731 |
859bc9e7a15d
Extended repo2db mapper with group creation via directory structures
Marcin Kuzminski <marcin@python-works.com>
parents:
836
diff
changeset
|
732 |
1594 | 733 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
|
734 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
|
735 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
|
736 |
1593 | 737 def __repr__(self): |
738 return "<%s('%s:%s')>" % (self.__class__.__name__, self.group_id, | |
739 self.group_name) | |
631
05528ad948c4
Hacking for git support,and new faster repo scan
Marcin Kuzminski <marcin@python-works.com>
parents:
549
diff
changeset
|
740 |
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
|
741 @classmethod |
1593 | 742 def groups_choices(cls): |
1547
fbc762ae3496
unified generation of repo groups choices
Marcin Kuzminski <marcin@python-works.com>
parents:
1546
diff
changeset
|
743 from webhelpers.html import literal as _literal |
1593 | 744 repo_groups = [('', '')] |
1547
fbc762ae3496
unified generation of repo groups choices
Marcin Kuzminski <marcin@python-works.com>
parents:
1546
diff
changeset
|
745 sep = ' » ' |
1593 | 746 _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
|
747 |
1593 | 748 repo_groups.extend([(x.group_id, _name(x.full_path_splitted)) |
749 for x in cls.query().all()]) | |
1591 | 750 |
1594 | 751 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
|
752 return repo_groups |
1591 | 753 |
1547
fbc762ae3496
unified generation of repo groups choices
Marcin Kuzminski <marcin@python-works.com>
parents:
1546
diff
changeset
|
754 @classmethod |
1593 | 755 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
|
756 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
|
757 |
1538
27be8f94c207
implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents:
1530
diff
changeset
|
758 @classmethod |
1594 | 759 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
|
760 if case_insensitive: |
3338a0994472
Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents:
1508
diff
changeset
|
761 gr = cls.query()\ |
1593 | 762 .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
|
763 else: |
3338a0994472
Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents:
1508
diff
changeset
|
764 gr = cls.query()\ |
1593 | 765 .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
|
766 if cache: |
1593 | 767 gr = gr.options(FromCache("sql_cache_short", |
768 "get_group_%s" % group_name)) | |
1584
3338a0994472
Improve API with user/group/repo CRUD methods
Nicolas VINOT <aeris@imirhil.fr>
parents:
1508
diff
changeset
|
769 return gr.scalar() |
1538
27be8f94c207
implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents:
1530
diff
changeset
|
770 |
1159
187a924ed653
Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1155
diff
changeset
|
771 @property |
1593 | 772 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
|
773 parents_recursion_limit = 5 |
1159
187a924ed653
Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1155
diff
changeset
|
774 groups = [] |
187a924ed653
Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1155
diff
changeset
|
775 if self.parent_group is None: |
187a924ed653
Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1155
diff
changeset
|
776 return groups |
187a924ed653
Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1155
diff
changeset
|
777 cur_gr = self.parent_group |
1593 | 778 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
|
779 cnt = 0 |
1159
187a924ed653
Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1155
diff
changeset
|
780 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
|
781 cnt += 1 |
1593 | 782 gr = getattr(cur_gr, 'parent_group', None) |
1159
187a924ed653
Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1155
diff
changeset
|
783 cur_gr = cur_gr.parent_group |
187a924ed653
Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1155
diff
changeset
|
784 if gr is None: |
187a924ed653
Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1155
diff
changeset
|
785 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
|
786 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
|
787 # this will prevent accidental infinit loops |
1593 | 788 log.error('group nested more than %s' % |
789 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
|
790 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
|
791 |
1593 | 792 groups.insert(0, gr) |
1159
187a924ed653
Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1155
diff
changeset
|
793 return groups |
187a924ed653
Changes for repo groups
Marcin Kuzminski <marcin@python-works.com>
parents:
1155
diff
changeset
|
794 |
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
|
795 @property |
1593 | 796 def children(self): |
1633
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
797 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
|
798 |
a7a772ea7b95
fixed saving settings on repositories inside groups, also fixes #187
Marcin Kuzminski <marcin@python-works.com>
parents:
1301
diff
changeset
|
799 @property |
1593 | 800 def name(self): |
1633
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
801 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
|
802 |
27be8f94c207
implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents:
1530
diff
changeset
|
803 @property |
1593 | 804 def full_path(self): |
1594 | 805 return self.group_name |
1538
27be8f94c207
implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents:
1530
diff
changeset
|
806 |
27be8f94c207
implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents:
1530
diff
changeset
|
807 @property |
1593 | 808 def full_path_splitted(self): |
1633
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
809 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
|
810 |
1193
523382549c45
Added repo group page showing what reposiories are inside a group
Marcin Kuzminski <marcin@python-works.com>
parents:
1159
diff
changeset
|
811 @property |
1593 | 812 def repositories(self): |
813 return Repository.query().filter(Repository.group == self) | |
1193
523382549c45
Added repo group page showing what reposiories are inside a group
Marcin Kuzminski <marcin@python-works.com>
parents:
1159
diff
changeset
|
814 |
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
|
815 @property |
1593 | 816 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
|
817 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
|
818 |
1593 | 819 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
|
820 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
|
821 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
|
822 cnt += child.repositories.count() |
1593 | 823 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
|
824 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
|
825 |
1593 | 826 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
|
827 |
1538
27be8f94c207
implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents:
1530
diff
changeset
|
828 |
1593 | 829 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
|
830 """ |
27be8f94c207
implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents:
1530
diff
changeset
|
831 returns new full group name based on parent and new name |
1591 | 832 |
1538
27be8f94c207
implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents:
1530
diff
changeset
|
833 :param group_name: |
27be8f94c207
implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents:
1530
diff
changeset
|
834 """ |
1607
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
835 path_prefix = (self.parent_group.full_path_splitted if |
1594 | 836 self.parent_group else []) |
1633
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
837 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
|
838 |
27be8f94c207
implements #226 repo groups available by path
Marcin Kuzminski <marcin@python-works.com>
parents:
1530
diff
changeset
|
839 |
1593 | 840 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
|
841 __tablename__ = 'permissions' |
1360
1f47adeb67c2
Bumped sqlalchemy version to 0.7, replaced timerproxy with new event system for sqlalchemy.
Marcin Kuzminski <marcin@python-works.com>
parents:
1349
diff
changeset
|
842 __table_args__ = {'extend_existing':True} |
1594 | 843 permission_id = Column("permission_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
844 permission_name = Column("permission_name", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) | |
845 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
|
846 |
1593 | 847 def __repr__(self): |
848 return "<%s('%s:%s')>" % (self.__class__.__name__, | |
849 self.permission_id, self.permission_name) | |
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
|
850 |
1266
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
851 @classmethod |
1593 | 852 def get_by_key(cls, key): |
853 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
|
854 |
1633
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
855 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
|
856 __tablename__ = 'repo_to_perm' |
1593 | 857 __table_args__ = (UniqueConstraint('user_id', 'repository_id'), {'extend_existing':True}) |
1594 | 858 repo_to_perm_id = Column("repo_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
859 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None) | |
860 permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None) | |
861 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
|
862 |
1593 | 863 user = relationship('User') |
864 permission = relationship('Permission') | |
865 repository = relationship('Repository') | |
399
f5c1eec9f376
rename repo2perm into repo_to_perm
Marcin Kuzminski <marcin@python-works.com>
parents:
392
diff
changeset
|
866 |
1593 | 867 class UserToPerm(Base, BaseModel): |
399
f5c1eec9f376
rename repo2perm into repo_to_perm
Marcin Kuzminski <marcin@python-works.com>
parents:
392
diff
changeset
|
868 __tablename__ = 'user_to_perm' |
1593 | 869 __table_args__ = (UniqueConstraint('user_id', 'permission_id'), {'extend_existing':True}) |
1594 | 870 user_to_perm_id = Column("user_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
871 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None) | |
872 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
|
873 |
1593 | 874 user = relationship('User') |
875 permission = relationship('Permission') | |
399
f5c1eec9f376
rename repo2perm into repo_to_perm
Marcin Kuzminski <marcin@python-works.com>
parents:
392
diff
changeset
|
876 |
1266
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
877 @classmethod |
1593 | 878 def has_perm(cls, user_id, perm): |
879 if not isinstance(perm, Permission): | |
880 raise Exception('perm needs to be an instance of Permission class') | |
1266
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
881 |
1593 | 882 return cls.query().filter(cls.user_id == user_id)\ |
883 .filter(cls.permission == perm).scalar() is not None | |
1266
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
884 |
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
885 @classmethod |
1593 | 886 def grant_perm(cls, user_id, perm): |
887 if not isinstance(perm, Permission): | |
888 raise Exception('perm needs to be an instance of Permission class') | |
1266
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
889 |
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
890 new = cls() |
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
891 new.user_id = user_id |
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
892 new.permission = perm |
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
893 try: |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
894 Session().add(new) |
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
895 Session().commit() |
1266
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
896 except: |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
897 Session().rollback() |
1266
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
898 |
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
899 |
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
900 @classmethod |
1593 | 901 def revoke_perm(cls, user_id, perm): |
902 if not isinstance(perm, Permission): | |
903 raise Exception('perm needs to be an instance of Permission class') | |
1266
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
904 |
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
905 try: |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
906 obj = cls.query().filter(cls.user_id == user_id)\ |
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
907 .filter(cls.permission == perm).one() |
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
908 Session().delete(obj) |
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
909 Session().commit() |
1266
a1bcfe58a1ab
Fixed #161 form saves the create repository permission.
Marcin Kuzminski <marcin@python-works.com>
parents:
1206
diff
changeset
|
910 except: |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
911 Session().rollback() |
1014
6fdc3ff65fce
#56 added assignments of users groups into repository
Marcin Kuzminski <marcin@python-works.com>
parents:
1000
diff
changeset
|
912 |
1593 | 913 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
|
914 __tablename__ = 'users_group_repo_to_perm' |
1593 | 915 __table_args__ = (UniqueConstraint('repository_id', 'users_group_id', 'permission_id'), {'extend_existing':True}) |
1594 | 916 users_group_to_perm_id = Column("users_group_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
917 users_group_id = Column("users_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None) | |
918 permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None) | |
919 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
|
920 |
1593 | 921 users_group = relationship('UsersGroup') |
922 permission = relationship('Permission') | |
923 repository = relationship('Repository') | |
958
7d1483f3170b
added user group to perm table
Marcin Kuzminski <marcin@python-works.com>
parents:
956
diff
changeset
|
924 |
1593 | 925 def __repr__(self): |
926 return '<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
|
927 |
1593 | 928 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
|
929 __tablename__ = 'users_group_to_perm' |
1594 | 930 users_group_to_perm_id = Column("users_group_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
931 users_group_id = Column("users_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None) | |
932 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
|
933 |
1593 | 934 users_group = relationship('UsersGroup') |
935 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
|
936 |
aa7e45ad0cea
Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents:
1266
diff
changeset
|
937 |
aa7e45ad0cea
Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents:
1266
diff
changeset
|
938 @classmethod |
1593 | 939 def has_perm(cls, users_group_id, perm): |
940 if not isinstance(perm, Permission): | |
941 raise Exception('perm needs to be an instance of Permission class') | |
1271
aa7e45ad0cea
Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents:
1266
diff
changeset
|
942 |
1593 | 943 return cls.query().filter(cls.users_group_id == |
944 users_group_id)\ | |
945 .filter(cls.permission == perm)\ | |
1271
aa7e45ad0cea
Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents:
1266
diff
changeset
|
946 .scalar() is not None |
aa7e45ad0cea
Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents:
1266
diff
changeset
|
947 |
aa7e45ad0cea
Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents:
1266
diff
changeset
|
948 @classmethod |
1593 | 949 def grant_perm(cls, users_group_id, perm): |
950 if not isinstance(perm, Permission): | |
951 raise Exception('perm needs to be an instance of Permission class') | |
1271
aa7e45ad0cea
Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents:
1266
diff
changeset
|
952 |
aa7e45ad0cea
Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents:
1266
diff
changeset
|
953 new = cls() |
aa7e45ad0cea
Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents:
1266
diff
changeset
|
954 new.users_group_id = users_group_id |
aa7e45ad0cea
Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents:
1266
diff
changeset
|
955 new.permission = perm |
aa7e45ad0cea
Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents:
1266
diff
changeset
|
956 try: |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
957 Session().add(new) |
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
958 Session().commit() |
1271
aa7e45ad0cea
Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents:
1266
diff
changeset
|
959 except: |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
960 Session().rollback() |
1271
aa7e45ad0cea
Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents:
1266
diff
changeset
|
961 |
aa7e45ad0cea
Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents:
1266
diff
changeset
|
962 |
aa7e45ad0cea
Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents:
1266
diff
changeset
|
963 @classmethod |
1593 | 964 def revoke_perm(cls, users_group_id, perm): |
965 if not isinstance(perm, Permission): | |
966 raise Exception('perm needs to be an instance of Permission class') | |
1271
aa7e45ad0cea
Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents:
1266
diff
changeset
|
967 |
aa7e45ad0cea
Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents:
1266
diff
changeset
|
968 try: |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
969 obj = cls.query().filter(cls.users_group_id == users_group_id)\ |
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
970 .filter(cls.permission == perm).one() |
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
971 Session().delete(obj) |
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
972 Session().commit() |
1271
aa7e45ad0cea
Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents:
1266
diff
changeset
|
973 except: |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
974 Session().rollback() |
1271
aa7e45ad0cea
Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents:
1266
diff
changeset
|
975 |
aa7e45ad0cea
Fixed permissions for users groups, group can have create repo permission now.
Marcin Kuzminski <marcin@python-works.com>
parents:
1266
diff
changeset
|
976 |
1633
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
977 class UserRepoGroupToPerm(Base, BaseModel): |
879
b19341623d48
added group to perm mapping table
Marcin Kuzminski <marcin@python-works.com>
parents:
878
diff
changeset
|
978 __tablename__ = 'group_to_perm' |
1593 | 979 __table_args__ = (UniqueConstraint('group_id', 'permission_id'), {'extend_existing':True}) |
879
b19341623d48
added group to perm mapping table
Marcin Kuzminski <marcin@python-works.com>
parents:
878
diff
changeset
|
980 |
1594 | 981 group_to_perm_id = Column("group_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
982 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None) | |
983 permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None) | |
984 group_id = Column("group_id", Integer(), ForeignKey('groups.group_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
|
985 |
1593 | 986 user = relationship('User') |
987 permission = relationship('Permission') | |
1633
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
988 group = relationship('RepoGroup') |
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
989 |
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
990 class UsersGroupRepoGroupToPerm(Base, BaseModel): |
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
991 __tablename__ = 'users_group_repo_group_to_perm' |
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
992 __table_args__ = (UniqueConstraint('group_id', 'permission_id'), {'extend_existing':True}) |
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
993 |
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
994 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
|
995 users_group_id = Column("users_group_id", Integer(), ForeignKey('users_groups.users_group_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
|
996 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
|
997 group_id = Column("group_id", Integer(), ForeignKey('groups.group_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
|
998 |
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
999 users_group = relationship('UsersGroup') |
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
1000 permission = relationship('Permission') |
2c0d35e336b5
refactoring of models names for repoGroup permissions
Marcin Kuzminski <marcin@python-works.com>
parents:
1607
diff
changeset
|
1001 group = relationship('RepoGroup') |
879
b19341623d48
added group to perm mapping table
Marcin Kuzminski <marcin@python-works.com>
parents:
878
diff
changeset
|
1002 |
1593 | 1003 class Statistics(Base, BaseModel): |
493
2256c78afe53
implemented basic autoupdating statistics fetched from database
Marcin Kuzminski <marcin@python-works.com>
parents:
473
diff
changeset
|
1004 __tablename__ = 'statistics' |
1593 | 1005 __table_args__ = (UniqueConstraint('repository_id'), {'extend_existing':True}) |
1594 | 1006 stat_id = Column("stat_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
1007 repository_id = Column("repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=False, unique=True, default=None) | |
1008 stat_on_revision = Column("stat_on_revision", Integer(), nullable=False) | |
1009 commit_activity = Column("commit_activity", LargeBinary(1000000), nullable=False)#JSON data | |
1010 commit_activity_combined = Column("commit_activity_combined", LargeBinary(), nullable=False)#JSON data | |
1011 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
|
1012 |
1594 | 1013 repository = relationship('Repository', single_parent=True) |
399
f5c1eec9f376
rename repo2perm into repo_to_perm
Marcin Kuzminski <marcin@python-works.com>
parents:
392
diff
changeset
|
1014 |
1593 | 1015 class UserFollowing(Base, BaseModel): |
734
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
713
diff
changeset
|
1016 __tablename__ = 'user_followings' |
1593 | 1017 __table_args__ = (UniqueConstraint('user_id', 'follows_repository_id'), |
1018 UniqueConstraint('user_id', 'follows_user_id') | |
1019 , {'extend_existing':True}) | |
734
49eb69d78988
implemented user dashboards, and following system.
Marcin Kuzminski <marcin@python-works.com>
parents:
713
diff
changeset
|
1020 |
1594 | 1021 user_following_id = Column("user_following_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
1022 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), nullable=False, unique=None, default=None) | |
1023 follows_repo_id = Column("follows_repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=True, unique=None, default=None) | |
1024 follows_user_id = Column("follows_user_id", Integer(), ForeignKey('users.user_id'), nullable=True, unique=None, default=None) | |
1025 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
|
1026 |
1594 | 1027 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
|
1028 |
1594 | 1029 follows_user = relationship('User', primaryjoin='User.user_id==UserFollowing.follows_user_id') |
1030 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
|
1031 |
1279
cb216757a62d
#179 Added followers page
Marcin Kuzminski <marcin@python-works.com>
parents:
1271
diff
changeset
|
1032 |
cb216757a62d
#179 Added followers page
Marcin Kuzminski <marcin@python-works.com>
parents:
1271
diff
changeset
|
1033 @classmethod |
1593 | 1034 def get_repo_followers(cls, repo_id): |
1035 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
|
1036 |
1593 | 1037 class CacheInvalidation(Base, BaseModel): |
670
e7c670cc03cb
Adde table for cache invalidation
Marcin Kuzminski <marcin@python-works.com>
parents:
667
diff
changeset
|
1038 __tablename__ = 'cache_invalidation' |
1593 | 1039 __table_args__ = (UniqueConstraint('cache_key'), {'extend_existing':True}) |
1594 | 1040 cache_id = Column("cache_id", Integer(), nullable=False, unique=True, default=None, primary_key=True) |
1041 cache_key = Column("cache_key", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) | |
1042 cache_args = Column("cache_args", String(length=255, convert_unicode=False, assert_unicode=None), nullable=True, unique=None, default=None) | |
1043 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
|
1044 |
e7c670cc03cb
Adde table for cache invalidation
Marcin Kuzminski <marcin@python-works.com>
parents:
667
diff
changeset
|
1045 |
1594 | 1046 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
|
1047 self.cache_key = cache_key |
cb0d9ce6ac5c
#50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents:
670
diff
changeset
|
1048 self.cache_args = cache_args |
cb0d9ce6ac5c
#50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents:
670
diff
changeset
|
1049 self.cache_active = False |
cb0d9ce6ac5c
#50 on point cache invalidation changes.
Marcin Kuzminski <marcin@python-works.com>
parents:
670
diff
changeset
|
1050 |
1593 | 1051 def __repr__(self): |
1052 return "<%s('%s:%s')>" % (self.__class__.__name__, | |
1053 self.cache_id, self.cache_key) | |
834
8924ed0e4f36
added current db version into rhodecode,
Marcin Kuzminski <marcin@python-works.com>
parents:
832
diff
changeset
|
1054 |
1607
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1055 @classmethod |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1056 def invalidate(cls, key): |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1057 """ |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1058 Returns Invalidation object if this given key should be invalidated |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1059 None otherwise. `cache_active = False` means that this cache |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1060 state is not valid and needs to be invalidated |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1061 |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1062 :param key: |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1063 """ |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1064 return cls.query()\ |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1065 .filter(CacheInvalidation.cache_key == key)\ |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1066 .filter(CacheInvalidation.cache_active == False)\ |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1067 .scalar() |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1068 |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1069 @classmethod |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1070 def set_invalidate(cls, key): |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1071 """ |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1072 Mark this Cache key for invalidation |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1073 |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1074 :param key: |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1075 """ |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1076 |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1077 log.debug('marking %s for invalidation' % key) |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1078 inv_obj = Session().query(cls)\ |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1079 .filter(cls.cache_key == key).scalar() |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1080 if inv_obj: |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1081 inv_obj.cache_active = False |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1082 else: |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1083 log.debug('cache key not found in invalidation db -> creating one') |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1084 inv_obj = CacheInvalidation(key) |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1085 |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1086 try: |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
1087 Session().add(inv_obj) |
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
1088 Session().commit() |
1607
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1089 except Exception: |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1090 log.error(traceback.format_exc()) |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
1091 Session().rollback() |
1607
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1092 |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1093 @classmethod |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1094 def set_valid(cls, key): |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1095 """ |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1096 Mark this cache key as active and currently cached |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1097 |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1098 :param key: |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1099 """ |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
1100 inv_obj = CacheInvalidation.query()\ |
1607
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1101 .filter(CacheInvalidation.cache_key == key).scalar() |
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1102 inv_obj.cache_active = True |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
1103 Session().add(inv_obj) |
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
1104 Session().commit() |
1607
e886f91fcb71
Cached readme generation
Marcin Kuzminski <marcin@python-works.com>
parents:
1594
diff
changeset
|
1105 |
1665
36f77a46f291
Added cache options to some db getters
Marcin Kuzminski <marcin@python-works.com>
parents:
1634
diff
changeset
|
1106 |
1670
d2de0c2f02cd
#77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
1669
diff
changeset
|
1107 class ChangesetComment(Base, BaseModel): |
d2de0c2f02cd
#77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
1669
diff
changeset
|
1108 __tablename__ = 'changeset_comments' |
d2de0c2f02cd
#77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
1669
diff
changeset
|
1109 __table_args__ = ({'extend_existing':True},) |
d2de0c2f02cd
#77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
1669
diff
changeset
|
1110 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
|
1111 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
|
1112 revision = Column('revision', String(40), nullable=False) |
1677
7276b170ce8b
#71 code-review
Marcin Kuzminski <marcin@python-works.com>
parents:
1675
diff
changeset
|
1113 line_no = Column('line_no', Unicode(10), nullable=True) |
7276b170ce8b
#71 code-review
Marcin Kuzminski <marcin@python-works.com>
parents:
1675
diff
changeset
|
1114 f_path = Column('f_path', Unicode(1000), nullable=True) |
1670
d2de0c2f02cd
#77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
1669
diff
changeset
|
1115 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
|
1116 text = Column('text', Unicode(25000), nullable=False) |
7276b170ce8b
#71 code-review
Marcin Kuzminski <marcin@python-works.com>
parents:
1675
diff
changeset
|
1117 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
|
1118 |
1703
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1119 author = relationship('User', lazy='joined') |
1670
d2de0c2f02cd
#77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
1669
diff
changeset
|
1120 repo = relationship('Repository') |
d2de0c2f02cd
#77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
1669
diff
changeset
|
1121 |
d2de0c2f02cd
#77 code review
Marcin Kuzminski <marcin@python-works.com>
parents:
1669
diff
changeset
|
1122 |
1703
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1123 @classmethod |
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1124 def get_users(cls, revision): |
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1125 """ |
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1126 Returns user associated with this changesetComment. ie those |
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1127 who actually commented |
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1128 |
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1129 :param cls: |
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1130 :param revision: |
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1131 """ |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
1132 return Session().query(User)\ |
1703
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1133 .filter(cls.revision == revision)\ |
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1134 .join(ChangesetComment.author).all() |
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1135 |
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1136 |
1702
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1137 class Notification(Base, BaseModel): |
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1138 __tablename__ = 'notifications' |
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1139 __table_args__ = ({'extend_existing':True}) |
1703
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1140 |
1712
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1703
diff
changeset
|
1141 TYPE_CHANGESET_COMMENT = u'cs_comment' |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1703
diff
changeset
|
1142 TYPE_MESSAGE = u'message' |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1703
diff
changeset
|
1143 TYPE_MENTION = u'mention' |
1703
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1144 |
1702
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1145 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
|
1146 subject = Column('subject', Unicode(512), nullable=True) |
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1147 body = Column('body', Unicode(50000), nullable=True) |
1703
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1148 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
|
1149 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
|
1150 type_ = Column('type', Unicode(256)) |
1702
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1151 |
1712
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1703
diff
changeset
|
1152 created_by_user = relationship('User') |
1717
7ff304d3028f
Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
1716
diff
changeset
|
1153 notifications_to_users = relationship('UserNotification', lazy='joined', |
7ff304d3028f
Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
1716
diff
changeset
|
1154 cascade="all, delete, delete-orphan") |
1702
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1155 |
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1156 @property |
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1157 def recipients(self): |
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1158 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
|
1159 .filter(UserNotification.notification == self).all()] |
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1160 |
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1161 @classmethod |
1703
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1162 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
|
1163 if type_ is None: |
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1164 type_ = Notification.TYPE_MESSAGE |
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1165 |
1702
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1166 notification = cls() |
1712
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1703
diff
changeset
|
1167 notification.created_by_user = created_by |
1702
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1168 notification.subject = subject |
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1169 notification.body = body |
1703
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1170 notification.type_ = type_ |
1717
7ff304d3028f
Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
1716
diff
changeset
|
1171 notification.created_on = datetime.datetime.now() |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
1172 |
1702
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1173 for u in recipients: |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
1174 assoc = UserNotification() |
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
1175 assoc.notification = notification |
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
1176 u.notifications.append(assoc) |
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
1177 Session().add(notification) |
1702
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1178 return notification |
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1179 |
1712
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1703
diff
changeset
|
1180 @property |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1703
diff
changeset
|
1181 def description(self): |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1703
diff
changeset
|
1182 from rhodecode.model.notification import NotificationModel |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1703
diff
changeset
|
1183 return NotificationModel().make_description(self) |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1703
diff
changeset
|
1184 |
1702
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1185 class UserNotification(Base, BaseModel): |
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1186 __tablename__ = 'user_to_notification' |
1703
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1187 __table_args__ = (UniqueConstraint('user_id', 'notification_id'), |
f23828b00b21
notification fixes and improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1702
diff
changeset
|
1188 {'extend_existing':True}) |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
1189 user_id = Column("user_id", Integer(), ForeignKey('users.user_id'), primary_key=True) |
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
1190 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
|
1191 read = Column('read', Boolean, default=False) |
1702
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1192 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
|
1193 |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
1194 user = relationship('User', lazy="joined") |
1717
7ff304d3028f
Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
1716
diff
changeset
|
1195 notification = relationship('Notification', lazy="joined", |
7ff304d3028f
Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
1716
diff
changeset
|
1196 order_by=lambda:Notification.created_on.desc(), |
7ff304d3028f
Notification fixes
Marcin Kuzminski <marcin@python-works.com>
parents:
1716
diff
changeset
|
1197 cascade='all') |
1702
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1198 |
1712
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1703
diff
changeset
|
1199 def mark_as_read(self): |
cac5109ac3b6
Notification system improvements
Marcin Kuzminski <marcin@python-works.com>
parents:
1703
diff
changeset
|
1200 self.read = True |
1713
54687aa00724
Tests updates, Session refactoring
Marcin Kuzminski <marcin@python-works.com>
parents:
1712
diff
changeset
|
1201 Session().add(self) |
1702
8cb7f5c4d494
#302 - basic notification system, models+tests
Marcin Kuzminski <marcin@python-works.com>
parents:
1693
diff
changeset
|
1202 |
1593 | 1203 class DbMigrateVersion(Base, BaseModel): |
834
8924ed0e4f36
added current db version into rhodecode,
Marcin Kuzminski <marcin@python-works.com>
parents:
832
diff
changeset
|
1204 __tablename__ = 'db_migrate_version' |
1360
1f47adeb67c2
Bumped sqlalchemy version to 0.7, replaced timerproxy with new event system for sqlalchemy.
Marcin Kuzminski <marcin@python-works.com>
parents:
1349
diff
changeset
|
1205 __table_args__ = {'extend_existing':True} |
1594 | 1206 repository_id = Column('repository_id', String(250), primary_key=True) |
1593 | 1207 repository_path = Column('repository_path', Text) |
1208 version = Column('version', Integer) | |
1594 | 1209 |