from mediagoblin import util
from mediagoblin.auth import lib as auth_lib
-from mediagoblin import globals as mediagoblin_globals
+from mediagoblin import mg_globals
+from mediagoblin.db import migrations
+from mediagoblin.db.util import ObjectId
###################
# Custom validators
'status': unicode,
'verification_key': unicode,
'is_admin': bool,
+ 'url' : unicode,
+ 'bio' : unicode
}
required_fields = ['username', 'created', 'pw_hash', 'email']
'status': u'needs_email_verification',
'verification_key': lambda: unicode(uuid.uuid4()),
'is_admin': False}
+
+ migration_handler = migrations.UserMigration
def check_login(self, password):
"""
__collection__ = 'media_entries'
structure = {
- 'uploader': User,
+ 'uploader': ObjectId,
'title': unicode,
'slug': unicode,
'created': datetime.datetime,
- 'description': unicode,
+ 'description': unicode, # May contain markdown/up
+ 'description_html': unicode, # May contain plaintext, or HTML
'media_type': unicode,
'media_data': dict, # extra data relevant to this media_type
'plugin_data': dict, # plugins can dump stuff here.
'thumbnail_file': [unicode]}
required_fields = [
- 'uploader', 'created', 'media_type']
+ 'uploader', 'created', 'media_type', 'slug']
default_values = {
'created': datetime.datetime.utcnow,
'state': u'unprocessed'}
- # Actually we should referene uniqueness by uploader, but we
- # should fix http://bugs.foocorp.net/issues/340 first.
- # indexes = [
- # {'fields': ['uploader', 'slug'],
- # 'unique': True}]
+ migration_handler = migrations.MediaEntryMigration
+
+ indexes = [
+ # Referene uniqueness of slugs by uploader
+ {'fields': ['uploader', 'slug'],
+ 'unique': True}]
def main_mediafile(self):
pass
def generate_slug(self):
self['slug'] = util.slugify(self['title'])
- duplicate = mediagoblin_globals.database.media_entries.find_one(
+ duplicate = mg_globals.database.media_entries.find_one(
{'slug': self['slug']})
if duplicate:
self['slug'] = "%s-%s" % (self['_id'], self['slug'])
+ def url_for_self(self, urlgen):
+ """
+ Generate an appropriate url for ourselves
+
+ Use a slug if we have one, else use our '_id'.
+ """
+ uploader = self.uploader()
+
+ if self.get('slug'):
+ return urlgen(
+ 'mediagoblin.user_pages.media_home',
+ user=uploader['username'],
+ media=self['slug'])
+ else:
+ return urlgen(
+ 'mediagoblin.user_pages.media_home',
+ user=uploader['username'],
+ media=unicode(self['_id']))
+
+ def uploader(self):
+ return self.db.User.find_one({'_id': self['uploader']})
+
+
REGISTER_MODELS = [MediaEntry, User]