|
a/Allura/allura/model/project.py |
|
b/Allura/allura/model/project.py |
|
... |
|
... |
3 |
|
3 |
|
4 |
from tg import config
|
4 |
from tg import config
|
5 |
from pylons import c, g, request
|
5 |
from pylons import c, g, request
|
6 |
import pkg_resources
|
6 |
import pkg_resources
|
7 |
from webob import exc
|
7 |
from webob import exc
|
8 |
from pymongo import bson
|
8 |
from bson import ObjectId
|
9 |
|
9 |
|
10 |
from ming import schema as S
|
10 |
from ming import schema as S
|
11 |
from ming.utils import LazyProperty
|
11 |
from ming.utils import LazyProperty
|
12 |
from ming.orm import ThreadLocalORMSession
|
12 |
from ming.orm import ThreadLocalORMSession
|
13 |
from ming.orm.base import mapper, session, state
|
13 |
from ming.orm.base import mapper, session, state
|
|
... |
|
... |
56 |
|
56 |
|
57 |
@classmethod
|
57 |
@classmethod
|
58 |
def fire_when_ready(cls):
|
58 |
def fire_when_ready(cls):
|
59 |
now = datetime.utcnow()
|
59 |
now = datetime.utcnow()
|
60 |
# Lock the objects to fire
|
60 |
# Lock the objects to fire
|
61 |
nonce = bson.ObjectId()
|
61 |
nonce = ObjectId()
|
62 |
m = mapper(cls)
|
62 |
m = mapper(cls)
|
63 |
session(cls).impl.update_partial(
|
63 |
session(cls).impl.update_partial(
|
64 |
m.doc_cls,
|
64 |
m.doc_cls,
|
65 |
{'when' : { '$lt':now},
|
65 |
{'when' : { '$lt':now},
|
66 |
'nonce': None },
|
66 |
'nonce': None },
|
|
... |
|
... |
78 |
|
78 |
|
79 |
class ProjectFile(File):
|
79 |
class ProjectFile(File):
|
80 |
class __mongometa__:
|
80 |
class __mongometa__:
|
81 |
session = main_orm_session
|
81 |
session = main_orm_session
|
82 |
|
82 |
|
83 |
metadata=FieldProperty(dict(
|
83 |
project_id=FieldProperty(S.ObjectId)
|
84 |
project_id=S.ObjectId,
|
84 |
category=FieldProperty(str)
|
85 |
category=str,
|
|
|
86 |
filename=str))
|
|
|
87 |
|
85 |
|
88 |
class ProjectCategory(MappedClass):
|
86 |
class ProjectCategory(MappedClass):
|
89 |
class __mongometa__:
|
87 |
class __mongometa__:
|
90 |
session = main_orm_session
|
88 |
session = main_orm_session
|
91 |
name='project_category'
|
89 |
name='project_category'
|
|
... |
|
... |
145 |
_extra_tool_status = FieldProperty([str])
|
143 |
_extra_tool_status = FieldProperty([str])
|
146 |
|
144 |
|
147 |
@classmethod
|
145 |
@classmethod
|
148 |
def default_database_uri(cls, shortname):
|
146 |
def default_database_uri(cls, shortname):
|
149 |
base = config.get('ming.project.master')
|
147 |
base = config.get('ming.project.master')
|
|
|
148 |
db = config.get('ming.project.database')
|
150 |
shard = ''.join(ch.lower() for ch in shortname if ch.isalpha())[-cls.SHARD_LENGTH:]
|
149 |
shard = ''.join(ch.lower() for ch in shortname if ch.isalpha())[-cls.SHARD_LENGTH:]
|
151 |
return base + '-' + shard
|
150 |
return base + '/' + db + '-' + shard
|
152 |
|
151 |
|
153 |
@LazyProperty
|
152 |
@LazyProperty
|
154 |
def allowed_tool_status(self):
|
153 |
def allowed_tool_status(self):
|
155 |
return ['production'] + self._extra_tool_status
|
154 |
return ['production'] + self._extra_tool_status
|
156 |
|
155 |
|
|
... |
|
... |
205 |
def best_download_url(self):
|
204 |
def best_download_url(self):
|
206 |
provider = plugin.ProjectRegistrationProvider.get()
|
205 |
provider = plugin.ProjectRegistrationProvider.get()
|
207 |
return provider.best_download_url(self)
|
206 |
return provider.best_download_url(self)
|
208 |
|
207 |
|
209 |
def get_screenshots(self):
|
208 |
def get_screenshots(self):
|
210 |
return ProjectFile.query.find({'metadata.project_id':self._id, 'metadata.category':'screenshot'}).all()
|
209 |
return ProjectFile.query.find(dict(
|
|
|
210 |
project_id=self._id,
|
|
|
211 |
category='screenshot')).all()
|
211 |
|
212 |
|
212 |
@property
|
213 |
@property
|
213 |
def icon(self):
|
214 |
def icon(self):
|
214 |
return ProjectFile.query.find({'metadata.project_id':self._id, 'metadata.category':'icon'}).first()
|
215 |
return ProjectFile.query.get(
|
|
|
216 |
project_id=self._id,
|
|
|
217 |
category='icon')
|
215 |
|
218 |
|
216 |
@property
|
219 |
@property
|
217 |
def description_html(self):
|
220 |
def description_html(self):
|
218 |
return g.markdown.convert(self.description)
|
221 |
return g.markdown.convert(self.description)
|
219 |
|
222 |
|