def add_default_data(): log.info('Adding default data') settings = [ (u'email_media_uploaded', None), (u'email_comment_posted', None), (u'email_support_requests', None), (u'email_send_from', u'noreply@localhost'), (u'wording_user_uploads', N_(u"Upload your media using the form below. We'll review it and get back to you.")), (u'wording_administrative_notes', None), (u'wording_display_administrative_notes', u''), (u'popularity_decay_exponent', u'4'), (u'popularity_decay_lifetime', u'36'), (u'rich_text_editor', u'tinymce'), (u'google_analytics_uacct', u''), (u'featured_category', u'1'), (u'max_upload_size', u'314572800'), (u'ftp_storage', u'false'), (u'ftp_server', u'ftp.someserver.com'), (u'ftp_user', u'username'), (u'ftp_password', u'password'), (u'ftp_upload_directory', u'media'), (u'ftp_download_url', u'http://www.someserver.com/web/accessible/media/'), (u'ftp_upload_integrity_retries', u'10'), (u'akismet_key', u''), (u'akismet_url', u''), (u'req_comment_approval', u''), (u'use_embed_thumbnails', u'true'), (u'api_secret_key_required', u'true'), (u'api_secret_key', random_string(20)), (u'api_media_max_results', u'50'), (u'api_tree_max_depth', u'10'), (u'general_site_name', u'MediaDrop'), (u'general_site_title_display_order', u'prepend'), (u'sitemaps_display', u'True'), (u'rss_display', u'True'), (u'vulgarity_filtered_words', u''), (u'primary_language', u'en'), (u'advertising_banner_html', u''), (u'advertising_sidebar_html', u''), (u'comments_engine', u'builtin'), (u'facebook_appid', u''), (u'youtube_apikey', u''), ] settings.extend(appearance_settings) for key, value in settings: s = Setting() s.key = key s.value = value DBSession.add(s) admin_user = User() admin_user.user_name = u'admin' admin_user.display_name = u'Admin' admin_user.email_address = u'*****@*****.**' admin_user.password = u'admin' DBSession.add(admin_user) admin_group = Group(name=u'admins', display_name=u'Admins') admin_group.users.append(admin_user) DBSession.add(admin_group) editor_group = Group(name=u'editors', display_name=u'Editors') DBSession.add(editor_group) anonymous_group = Group(name=u'anonymous', display_name=u'Everyone (including guests)') DBSession.add(anonymous_group) authenticated_group = Group(name=u'authenticated', display_name=u'Logged in users') DBSession.add(authenticated_group) admin_perm = Permission(name=u'admin', groups=[admin_group], description=u'Grants access to the admin panel') DBSession.add(admin_perm) edit_perm = Permission(name=u'edit', groups=[admin_group, editor_group], description=u'Grants access to edit site content') DBSession.add(edit_perm) view_perm = Permission(name=u'view', groups=[admin_group, anonymous_group, editor_group], description=u'View published media') DBSession.add(view_perm) upload_perm = Permission(name=u'upload', groups=[admin_group, anonymous_group, editor_group], description=u'Can upload new media') DBSession.add(upload_perm) media_upload_perm = Permission() media_upload_perm.permission_name = u'MEDIA_UPLOAD' media_upload_perm.description = u'Grants the ability to upload new media' media_upload_perm.groups.append(admin_group) media_upload_perm.groups.append(editor_group) media_upload_perm.groups.append(anonymous_group) DBSession.add(edit_perm) category = Category(name=u'Featured', slug=u'featured') DBSession.add(category) category2 = Category(name=u'Instructional', slug=u'instructional') DBSession.add(category2) podcast = Podcast() podcast.slug = u'hello-world' podcast.title = u'Hello World' podcast.subtitle = u'My very first podcast!' podcast.description = u"""<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>""" podcast.category = u'Technology' podcast.author = Author(admin_user.display_name, admin_user.email_address) podcast.explicit = None podcast.copyright = u'Copyright 2009 Xyz' podcast.itunes_url = None podcast.feedburner_url = None DBSession.add(podcast) comment = Comment() comment.subject = u'Re: New Media' comment.author = AuthorWithIP(name=u'John Doe', ip=2130706433) comment.body = u'<p>Hello to you too!</p>' DBSession.add(comment) media = Media() media.type = None media.slug = u'new-media' media.reviewed = True media.encoded = False media.publishable = False media.title = u'New Media' media.subtitle = None media.description = u"""<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>""" media.description_plain = u"""Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.""" media.author = Author(admin_user.display_name, admin_user.email_address) media.categories.append(category) media.comments.append(comment) DBSession.add(media) #XXX The list of default players is actually defined in model.players # and should at some point be moved here to avoid inconsistency # between the default storage engines and default players. remote_url_storage = RemoteURLStorage() default_engines = [ SwiftStorage(), LocalFileStorage(), remote_url_storage, YoutubeStorage(), VimeoStorage(), BlipTVStorage(), DailyMotionStorage(), ] for engine in default_engines: DBSession.add(engine) import datetime instructional_media = [ (u'workflow-in-mediadrop', u'Workflow in MediaDrop', u'<p>This sceencast explains the publish status feature in MediaDrop.</p><p>Initially all videos uploaded through the front-end or admin panel are placed under "awaiting review" status. Once the administrator hits the "review complete" button, they can upload media. Videos can be added in any format, however, they can only be published if they are in a web-ready format such as FLV, M4V, MP3, or MP4. Alternatively, if they are published through Youtube or Vimeo the encoding step is skipped</p><p>Once uploaded and encoded the administrator can then publish the video.</p>', u'This sceencast explains the publish status feature in MediaDrop.\nInitially all videos uploaded through the front-end or admin panel are placed under \"awaiting review\" status. Once the administrator hits the \"review complete\" button, they can upload media. Videos can be added in any format, however, they can only be published if they are in a web-ready format such as FLV, M4V, MP3, or MP4. Alternatively, if they are published through Youtube or Vimeo the encoding step is skipped\nOnce uploaded and encoded the administrator can then publish the video.', datetime.datetime(2010, 5, 13, 2, 29, 40), 218, u'http://static.mediadrop.net/files/videos/tutorial-workflow-in-mediadrop.mp4', u'video', u'mp4', ), (u'creating-a-podcast-in-mediadrop', u'Creating a Podcast in MediaDrop', u'<p>This describes the process an administrator goes through in creating a podcast in MediaDrop. An administrator can enter information that will automatically generate the iTunes/RSS feed information. Any episodes published to a podcast will automatically publish to iTunes/RSS.</p>', u'This describes the process an administrator goes through in creating a podcast in MediaDrop. An administrator can enter information that will automatically generate the iTunes/RSS feed information. Any episodes published to a podcast will automatically publish to iTunes/RSS.', datetime.datetime(2010, 5, 13, 2, 33, 44), 100, u'http://static.mediadrop.net/files/videos/tutorial-create-podcast-in-mediadrop.mp4', u'video', u'mp4', ), (u'adding-a-video-in-mediadrop', u'Adding a Video in MediaDrop', u'<p>This screencast shows how video or audio can be added in MediaDrop.</p><p>MediaDrop supports a wide range of formats including (but not limited to): YouTube, Vimeo, Amazon S3, Bits on the Run, BrightCove, Kaltura, and either your own server or someone else\'s.</p><p>Videos can be uploaded in any format, but can only be published in web-ready formats such as FLV, MP3, M4V, MP4 etc.</p>', u'This screencast shows how video or audio can be added in MediaDrop.\nMediaDrop supports a wide range of formats including (but not limited to): YouTube, Vimeo, Amazon S3, Bits on the Run, BrightCove, Kaltura, and either your own server or someone else\'s.\nVideos can be uploaded in any format, but can only be published in web-ready formats such as FLV, MP3, M4V, MP4 etc.', datetime.datetime(2010, 5, 13, 02, 37, 36), 169, u'http://static.mediadrop.net/files/videos/tutorial-add-video-in-mediadrop.mp4', u'video', u'mp4', ), ] name = u'MediaDrop Team' email = u'*****@*****.**' for slug, title, desc, desc_plain, publish_on, duration, url, type_, container in instructional_media: media = Media() media.author = Author(name, email) media.description = desc media.description_plain = desc_plain media.duration = duration media.publish_on = publish_on media.slug = slug media.title = title media.type = type_ media_file = MediaFile() media_file.container = container media_file.created_on = publish_on media_file.display_name = os.path.basename(url) media_file.duration = duration media_file.type = type_ media_file.storage = remote_url_storage media_file.unique_id = url DBSession.add(media) DBSession.add(media_file) media.files.append(media_file) media.categories.append(category2) media.encoded = True media.reviewed = True media.publishable = True
def add_default_data(): log.info('Adding default data') settings = [ (u'email_media_uploaded', None), (u'email_comment_posted', None), (u'email_support_requests', None), (u'email_send_from', u'noreply@localhost'), (u'wording_user_uploads', N_(u"Upload your media using the form below. We'll review it and get back to you." )), (u'wording_administrative_notes', None), (u'wording_display_administrative_notes', u''), (u'popularity_decay_exponent', u'4'), (u'popularity_decay_lifetime', u'36'), (u'rich_text_editor', u'tinymce'), (u'google_analytics_uacct', u''), (u'featured_category', u'1'), (u'max_upload_size', u'314572800'), (u'ftp_storage', u'false'), (u'ftp_server', u'ftp.someserver.com'), (u'ftp_user', u'username'), (u'ftp_password', u'password'), (u'ftp_upload_directory', u'media'), (u'ftp_download_url', u'http://www.someserver.com/web/accessible/media/'), (u'ftp_upload_integrity_retries', u'10'), (u'akismet_key', u''), (u'akismet_url', u''), (u'req_comment_approval', u''), (u'use_embed_thumbnails', u'true'), (u'api_secret_key_required', u'true'), (u'api_secret_key', random_string(20)), (u'api_media_max_results', u'50'), (u'api_tree_max_depth', u'10'), (u'general_site_name', u'MediaDrop'), (u'general_site_title_display_order', u'prepend'), (u'sitemaps_display', u'True'), (u'rss_display', u'True'), (u'vulgarity_filtered_words', u''), (u'primary_language', u'en'), (u'advertising_banner_html', u''), (u'advertising_sidebar_html', u''), (u'comments_engine', u'builtin'), (u'facebook_appid', u''), (u'youtube_apikey', u''), ] settings.extend(appearance_settings) for key, value in settings: s = Setting() s.key = key s.value = value DBSession.add(s) admin_user = User() admin_user.user_name = u'admin' admin_user.display_name = u'Admin' admin_user.email_address = u'*****@*****.**' admin_user.password = u'admin' DBSession.add(admin_user) admin_group = Group(name=u'admins', display_name=u'Admins') admin_group.users.append(admin_user) DBSession.add(admin_group) editor_group = Group(name=u'editors', display_name=u'Editors') DBSession.add(editor_group) anonymous_group = Group(name=u'anonymous', display_name=u'Everyone (including guests)') DBSession.add(anonymous_group) authenticated_group = Group(name=u'authenticated', display_name=u'Logged in users') DBSession.add(authenticated_group) admin_perm = Permission(name=u'admin', groups=[admin_group], description=u'Grants access to the admin panel') DBSession.add(admin_perm) edit_perm = Permission(name=u'edit', groups=[admin_group, editor_group], description=u'Grants access to edit site content') DBSession.add(edit_perm) view_perm = Permission(name=u'view', groups=[admin_group, anonymous_group, editor_group], description=u'View published media') DBSession.add(view_perm) upload_perm = Permission( name=u'upload', groups=[admin_group, anonymous_group, editor_group], description=u'Can upload new media') DBSession.add(upload_perm) media_upload_perm = Permission() media_upload_perm.permission_name = u'MEDIA_UPLOAD' media_upload_perm.description = u'Grants the ability to upload new media' media_upload_perm.groups.append(admin_group) media_upload_perm.groups.append(editor_group) media_upload_perm.groups.append(anonymous_group) DBSession.add(edit_perm) category = Category(name=u'Featured', slug=u'featured') DBSession.add(category) category2 = Category(name=u'Instructional', slug=u'instructional') DBSession.add(category2) podcast = Podcast() podcast.slug = u'hello-world' podcast.title = u'Hello World' podcast.subtitle = u'My very first podcast!' podcast.description = u"""<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>""" podcast.category = u'Technology' podcast.author = Author(admin_user.display_name, admin_user.email_address) podcast.explicit = None podcast.copyright = u'Copyright 2009 Xyz' podcast.itunes_url = None podcast.feedburner_url = None DBSession.add(podcast) comment = Comment() comment.subject = u'Re: New Media' comment.author = AuthorWithIP(name=u'John Doe', ip=2130706433) comment.body = u'<p>Hello to you too!</p>' DBSession.add(comment) media = Media() media.type = None media.slug = u'new-media' media.reviewed = True media.encoded = False media.publishable = False media.title = u'New Media' media.subtitle = None media.description = u"""<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>""" media.description_plain = u"""Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.""" media.author = Author(admin_user.display_name, admin_user.email_address) media.categories.append(category) media.comments.append(comment) DBSession.add(media) #XXX The list of default players is actually defined in model.players # and should at some point be moved here to avoid inconsistency # between the default storage engines and default players. remote_url_storage = RemoteURLStorage() default_engines = [ LocalFileStorage(), remote_url_storage, YoutubeStorage(), VimeoStorage(), BlipTVStorage(), DailyMotionStorage(), ] for engine in default_engines: DBSession.add(engine) import datetime instructional_media = [ ( u'workflow-in-mediadrop', u'Workflow in MediaDrop', u'<p>This sceencast explains the publish status feature in MediaDrop.</p><p>Initially all videos uploaded through the front-end or admin panel are placed under "awaiting review" status. Once the administrator hits the "review complete" button, they can upload media. Videos can be added in any format, however, they can only be published if they are in a web-ready format such as FLV, M4V, MP3, or MP4. Alternatively, if they are published through Youtube or Vimeo the encoding step is skipped</p><p>Once uploaded and encoded the administrator can then publish the video.</p>', u'This sceencast explains the publish status feature in MediaDrop.\nInitially all videos uploaded through the front-end or admin panel are placed under \"awaiting review\" status. Once the administrator hits the \"review complete\" button, they can upload media. Videos can be added in any format, however, they can only be published if they are in a web-ready format such as FLV, M4V, MP3, or MP4. Alternatively, if they are published through Youtube or Vimeo the encoding step is skipped\nOnce uploaded and encoded the administrator can then publish the video.', datetime.datetime(2010, 5, 13, 2, 29, 40), 218, u'http://static.mediadrop.video/files/videos/tutorial-workflow-in-mediadrop.mp4', u'video', u'mp4', ), ( u'creating-a-podcast-in-mediadrop', u'Creating a Podcast in MediaDrop', u'<p>This describes the process an administrator goes through in creating a podcast in MediaDrop. An administrator can enter information that will automatically generate the iTunes/RSS feed information. Any episodes published to a podcast will automatically publish to iTunes/RSS.</p>', u'This describes the process an administrator goes through in creating a podcast in MediaDrop. An administrator can enter information that will automatically generate the iTunes/RSS feed information. Any episodes published to a podcast will automatically publish to iTunes/RSS.', datetime.datetime(2010, 5, 13, 2, 33, 44), 100, u'http://static.mediadrop.video/files/videos/tutorial-create-podcast-in-mediadrop.mp4', u'video', u'mp4', ), ( u'adding-a-video-in-mediadrop', u'Adding a Video in MediaDrop', u'<p>This screencast shows how video or audio can be added in MediaDrop.</p><p>MediaDrop supports a wide range of formats including (but not limited to): YouTube, Vimeo, Amazon S3, Bits on the Run, BrightCove, Kaltura, and either your own server or someone else\'s.</p><p>Videos can be uploaded in any format, but can only be published in web-ready formats such as FLV, MP3, M4V, MP4 etc.</p>', u'This screencast shows how video or audio can be added in MediaDrop.\nMediaDrop supports a wide range of formats including (but not limited to): YouTube, Vimeo, Amazon S3, Bits on the Run, BrightCove, Kaltura, and either your own server or someone else\'s.\nVideos can be uploaded in any format, but can only be published in web-ready formats such as FLV, MP3, M4V, MP4 etc.', datetime.datetime(2010, 5, 13, 02, 37, 36), 169, u'http://static.mediadrop.video/files/videos/tutorial-add-video-in-mediadrop.mp4', u'video', u'mp4', ), ] name = u'MediaDrop Team' email = u'*****@*****.**' for slug, title, desc, desc_plain, publish_on, duration, url, type_, container in instructional_media: media = Media() media.author = Author(name, email) media.description = desc media.description_plain = desc_plain media.duration = duration media.publish_on = publish_on media.slug = slug media.title = title media.type = type_ media_file = MediaFile() media_file.container = container media_file.created_on = publish_on media_file.display_name = os.path.basename(url) media_file.duration = duration media_file.type = type_ media_file.storage = remote_url_storage media_file.unique_id = url DBSession.add(media) DBSession.add(media_file) media.files.append(media_file) media.categories.append(category2) media.encoded = True media.reviewed = True media.publishable = True
def comment(self, slug, name='', email=None, body='', **kwargs): """Post a comment from :class:`~mediadrop.forms.comments.PostCommentForm`. :param slug: The media :attr:`~mediadrop.model.media.Media.slug` :returns: Redirect to :meth:`view` page for media. """ def result(success, message=None, comment=None): if request.is_xhr: result = dict(success=success, message=message) if comment: result['comment'] = render('comments/_list.html', {'comment_to_render': comment}, method='xhtml') return result elif success: return redirect(action='view') else: return self.view(slug, name=name, email=email, body=body, **kwargs) if request.settings['comments_engine'] != 'builtin': abort(404) akismet_key = request.settings['akismet_key'] if akismet_key: akismet = Akismet(agent=USER_AGENT) akismet.key = akismet_key akismet.blog_url = request.settings['akismet_url'] or \ url_for('/', qualified=True) akismet.verify_key() data = {'comment_author': name.encode('utf-8'), 'user_ip': request.environ.get('REMOTE_ADDR'), 'user_agent': request.environ.get('HTTP_USER_AGENT', ''), 'referrer': request.environ.get('HTTP_REFERER', 'unknown'), 'HTTP_ACCEPT': request.environ.get('HTTP_ACCEPT')} if akismet.comment_check(body.encode('utf-8'), data): return result(False, _(u'Your comment has been rejected.')) media = fetch_row(Media, slug=slug) request.perm.assert_permission(u'view', media.resource) c = Comment() name = filter_vulgarity(name) c.author = AuthorWithIP(name, email, request.environ['REMOTE_ADDR']) c.subject = 'Re: %s' % media.title c.body = filter_vulgarity(body) require_review = request.settings['req_comment_approval'] if not require_review: c.reviewed = True c.publishable = True media.comments.append(c) DBSession.flush() send_comment_notification(media, c) if require_review: message = _('Thank you for your comment! We will post it just as ' 'soon as a moderator approves it.') return result(True, message=message) else: return result(True, comment=c)
def comment(self, slug, name='', email=None, body='', **kwargs): """Post a comment from :class:`~mediadrop.forms.comments.PostCommentForm`. :param slug: The media :attr:`~mediadrop.model.media.Media.slug` :returns: Redirect to :meth:`view` page for media. """ def result(success, message=None, comment=None): if request.is_xhr: result = dict(success=success, message=message) if comment: result['comment'] = render('comments/_list.html', {'comment_to_render': comment}, method='xhtml') return result elif success: return redirect(action='view') else: return self.view(slug, name=name, email=email, body=body, **kwargs) if request.settings['comments_engine'] != 'builtin': abort(404) akismet_key = request.settings['akismet_key'] if akismet_key: akismet = Akismet(agent=USER_AGENT) akismet.key = akismet_key akismet.blog_url = request.settings['akismet_url'] or \ url_for('/', qualified=True) akismet.verify_key() data = { 'comment_author': name.encode('utf-8'), 'user_ip': request.environ.get('REMOTE_ADDR'), 'user_agent': request.environ.get('HTTP_USER_AGENT', ''), 'referrer': request.environ.get('HTTP_REFERER', 'unknown'), 'HTTP_ACCEPT': request.environ.get('HTTP_ACCEPT') } if akismet.comment_check(body.encode('utf-8'), data): return result(False, _(u'Your comment has been rejected.')) media = fetch_row(Media, slug=slug) request.perm.assert_permission(u'view', media.resource) c = Comment() aux = DBSession.query(User).filter(User.display_name == name) require_review = request.settings['req_comment_approval'] if not require_review: c.reviewed = True c.publishable = True if request.perm.user.display_name != "Anonymous User": name = request.perm.user.display_name email = request.perm.user.email_address if aux: name = filter_vulgarity(name) c.author = AuthorWithIP(name, email, request.environ['REMOTE_ADDR']) c.subject = 'Re: %s' % media.title c.body = filter_vulgarity(body) media.comments.append(c) DBSession.flush() send_comment_notification(media, c) if require_review: message = _('Thank you for your comment! We will post it just as ' 'soon as a moderator approves it.') return result(True, message=message) else: return result(True, comment=c)