def prepare_file(self): zf = zipfile.ZipFile(self.data_liberation_path(), 'w') username = self.get_author_username() user_data = Query.sql("""SELECT * FROM `users` WHERE `username` = %s""", (username)) content_data = Query.sql("""SELECT * FROM `content` WHERE `username` = %s""", (username)) # sql data zf.writestr('user_data', repr(user_data)) zf.writestr('content_data', repr(content_data)) # files files = os.walk(url_factory.resource_directory(self)) for f in files: for filename in f[2]: path = os.path.join(f[0], filename) arcname = path[len( url_factory.resource_directory(self)) - len(username):] zf.write(path, arcname) zf.close()
def get(self): if not self.authenticate(author=True): return if self.get_argument('preview', ''): self.preview() return self.display["user"] = self.get_author_user() parent_directory = url_factory.resource_directory(self) self.display["files"] = os.walk(parent_directory) self.display["initial_section"] = None initial_section_check = self.get_argument('initial_section', None) if initial_section_check and os.path.exists(os.path.join( url_factory.resource_directory(self), initial_section_check)): self.display["initial_section"] = initial_section_check self.display["basename"] = os.path.basename self.display["dirname"] = os.path.dirname self.display["join"] = os.path.join if not self.display.has_key('uploaded_file'): self.display["uploaded_file"] = None uploaded_file_check = self.get_argument('uploaded_file', None) if uploaded_file_check: uploaded_file_check = url_factory.clean_filename(uploaded_file_check) uploaded_file_check = os.path.join( self.application.settings["base_path"], uploaded_file_check) if not uploaded_file_check.startswith( url_factory.resource_directory(self)): raise tornado.web.HTTPError(400, "i call shenanigans") if os.path.exists(uploaded_file_check): self.display["uploaded_file"] = uploaded_file_check.replace( self.application.settings["base_path"] + '/', '') self.display["initial_section"] = os.path.dirname( self.display["uploaded_file"]) self.display["embedded"] = self.get_argument('embedded', '') if self.display["embedded"]: self.fill_template("media_standalone.html") else: self.fill_template("media.html") # disabled for now
def post(self): if not self.authenticate(author=True): return op = self.get_argument('op', None) if op == 'favorite': self.favorite() return self.user = self.get_author_user() access_token = json.loads(self.user.twitter) #thumb = self.get_argument('thumb', '') # XXX TODO multipart doesn't work for some reason right now... arrrgh thumb = None text_length = 79 if thumb else 99 title = self.get_argument('title', '') view = self.get_argument('view', '') status = (content_logic.ellipsize( content_remote.strip_html(title), 18, including_dots=True) + (': ' if title and view else '') + content_logic.ellipsize( content_remote.strip_html(view.replace('<br>', ' ')), text_length, including_dots=True) + (' ' if title or view else '') + self.get_argument('url')) if thumb: thumb = url_factory.clean_filename(thumb) thumb = thumb[len(url_factory.resource_url(self)) + 1:] thumb = url_factory.resource_directory(self, thumb) image = thumb basename = os.path.basename(thumb) dirname = os.path.dirname(thumb) if os.path.basename(dirname) == 'thumbs': parent_dir = os.path.dirname(dirname) original_dir = os.path.join(parent_dir, 'original') original_img = os.path.join(original_dir, basename) if (os.path.exists(original_img) and os.path.getsize(original_img) < 3145728): image = original_img f = open(image, 'r') image_data = f.read() f.close() self.twitter_request(self.UPDATE_WITH_MEDIA_URL, self.status_update_result, access_token=access_token, post_args={ "status": status, "media[]": image_data }) else: self.twitter_request("/statuses/update", self.status_update_result, access_token=access_token, post_args={"status": status})
def post(self): if not self.authenticate(author=True): return op = self.get_argument('op', None) if op == 'favorite': self.favorite() return self.user = self.get_author_user() access_token = json.loads(self.user.twitter) #thumb = self.get_argument('thumb', '') # XXX TODO multipart doesn't work for some reason right now... arrrgh thumb = None text_length = 79 if thumb else 99 title = self.get_argument('title', '') view = self.get_argument('view', '') status = (content_logic.ellipsize(content_remote.strip_html( title), 18, including_dots=True) + (': ' if title and view else '') + content_logic.ellipsize(content_remote.strip_html( view.replace('<br>', ' ')), text_length, including_dots=True) + (' ' if title or view else '') + self.get_argument('url')) if thumb: thumb = url_factory.clean_filename(thumb) thumb = thumb[len(url_factory.resource_url(self)) + 1:] thumb = url_factory.resource_directory(self, thumb) image = thumb basename = os.path.basename(thumb) dirname = os.path.dirname(thumb) if os.path.basename(dirname) == 'thumbs': parent_dir = os.path.dirname(dirname) original_dir = os.path.join(parent_dir, 'original') original_img = os.path.join(original_dir, basename) if (os.path.exists(original_img) and os.path.getsize(original_img) < 3145728): image = original_img f = open(image, 'r') image_data = f.read() f.close() self.twitter_request( self.UPDATE_WITH_MEDIA_URL, self.status_update_result, access_token=access_token, post_args={"status": status, "media[]": image_data }) else: self.twitter_request( "/statuses/update", self.status_update_result, access_token=access_token, post_args={"status": status})
def delete(self): if not self.authenticate(author=True): return files = json.loads(self.get_argument('files')) parent_leading_path = (self.application.settings["resource_url"] + "/" + self.get_author_username()) for f in files: f = url_factory.clean_filename(f).replace(parent_leading_path + '/', '') filename = os.path.join(url_factory.resource_directory(self), f) if os.path.isdir(filename): shutil.rmtree(filename) else: os.remove(filename)
def embed(self): try: url = self.get_argument('url') media_type = media.detect_media_type(url) if media_type in ('video', 'image', 'audio', 'web'): parent_url = url_factory.resource_url(self, 'remote') parent_directory = url_factory.resource_directory(self, 'remote') leafname = os.path.basename(url) full_path = os.path.join(parent_directory, leafname) url_factory.check_legit_filename(full_path) if not os.path.isdir(parent_directory): os.makedirs(parent_directory) response = urllib2.urlopen(url) original_size_url, url, thumb_url = media.save_locally(parent_url, full_path, response.read()) if thumb_url: self.set_header('X-Helloworld-Thumbnail', thumb_url) self.write(media.generate_full_html(self, url, original_size_url)) return remote_title, remote_thumb, remote_html = \ content_remote.get_remote_title_and_thumb(url, 'text/html') if remote_title: self.set_header('X-Helloworld-Title', remote_title) if remote_thumb: self.set_header('X-Helloworld-Thumbnail', remote_thumb) if remote_html: self.write(remote_html) return if remote_thumb: self.write('<a href="' + url + '" title="' + remote_title + '"><img src="' + remote_thumb + '"></a>') return except: pass self.write('<a href="' + url + '">' + url + '</a>')
def post(self): safe_user = False if self.authenticate(author=True): safe_user = True self.get_common_parameters() if safe_user: if media.detect_media_type(self.base_leafname) not in ('video', 'image', 'audio', 'web', 'zip'): raise tornado.web.HTTPError(400, "i call shenanigans") else: if media.detect_media_type(self.base_leafname) != 'image': raise tornado.web.HTTPError(400, "i call shenanigans") if self.get_argument('canvasImage', None): uploaded_file = self.get_argument('canvasImage') else: uploaded_file = self.request.files['file'][0] overwrite = True if self.get_argument('overwrite', False) else False if safe_user: self.media_section = url_factory.clean_filename( self.get_argument('section')) if self.media_section.startswith(url_factory.resource_url(self)): self.media_section = self.media_section[len( url_factory.resource_url(self)) + 1:] self.parent_directory = url_factory.resource_directory(self, self.media_section) self.parent_url = url_factory.resource_url(self, self.media_section) if self.media_section == 'themes': test_zip_path_name = os.path.join(self.parent_directory, self.base_leafname) split_path = os.path.splitext(test_zip_path_name) if os.path.exists(test_zip_path_name): os.remove(test_zip_path_name) if os.path.exists(split_path[0]) and os.path.isdir(split_path[0]): shutil.rmtree(split_path[0]) else: self.parent_directory = os.path.join( self.application.settings["resource_path"], 'remote') self.parent_url = os.path.join( self.application.settings["resource_url"], 'remote') self.full_path = os.path.join(self.parent_directory, self.base_leafname) if not overwrite: self.full_path = media.get_unique_name(self.full_path) if not os.path.isdir(self.parent_directory): os.makedirs(self.parent_directory) if self.chunked_upload and safe_user: f = open(self.tmp_path, 'w') f.write(uploaded_file['body']) f.close() total_chunks_uploaded = 0 for f in os.listdir(self.tmp_dir): if f.startswith(self.base_leafname): total_chunks_uploaded += 1 if total_chunks_uploaded == max(self.total_size / self.chunk_size, 1): final_file = open(self.full_path, 'w') for f in os.listdir(self.tmp_dir): if f.startswith(self.base_leafname): chunk_path = os.path.join(self.tmp_dir, f) chunk_file = open(chunk_path, 'r') final_file.write(chunk_file.read()) chunk_file.close() os.unlink(chunk_path) final_file.close() original_size_url, url, thumb_url = media.save_locally( self.parent_url, self.full_path, None, skip_write=True, overwrite=overwrite) else: return else: original_size_url, url, thumb_url = media.save_locally( self.parent_url, self.full_path, uploaded_file['body'], disallow_zip=(not safe_user), overwrite=overwrite) media_html = media.generate_full_html(self, url, original_size_url) self.set_header("Content-Type", "text/plain; charset=UTF-8") self.write(json.dumps({ 'original_size_url': original_size_url, \ 'url': url, \ 'thumb_url': thumb_url, \ 'html': media_html, }))
def post(self): if not self.authenticate(author=True): return op = self.get_argument('op', None) if op == 'favorite': self.favorite() return self.user = self.get_author_user() access_token = self.user.facebook title = self.get_argument('title', '') view = self.get_argument('view', '') status = (content_remote.strip_html(title) + ('\n' if title and view else '') + content_remote.strip_html(view.replace('<br>', ' ')) + ('\n' if title or view else '') + self.get_argument('url')) post_args = {"message": status} thumb = self.get_argument('thumb', '') picture = None if thumb: if not thumb.startswith('http://'): thumb = url_factory.clean_filename(thumb) thumb = thumb[len(url_factory.resource_url(self)) + 1:] thumb = url_factory.resource_directory(self, thumb) picture = thumb basename = os.path.basename(thumb) dirname = os.path.dirname(thumb) if os.path.basename(dirname) == 'thumbs': parent_dir = os.path.dirname(dirname) original_dir = os.path.join(parent_dir, 'original') original_img = os.path.join(original_dir, basename) if os.path.exists(original_img): picture = original_img picture = picture[len(self.application.settings["static_path"]) + 1:] picture = self.static_url(picture, include_host=True) else: picture = thumb if picture: post_args['picture'] = picture video = re.compile(r'<iframe[^>]*(youtube|vimeo)[^>]*>.*?</iframe>', re.M | re.S).search(view) if video: video = video.group(0) is_youtube = re.compile(r'<iframe[^>]*(youtube)[^>]*>', re.M).search( view) if is_youtube: video_id = re.compile(r'<iframe[^>]*youtube.com/embed/([^\?]*)[^>]*>', re.M).search(view).group(1) source = 'http://www.youtube.com/e/' + video_id + '?autoplay=1' else: video_id = re.compile(r'<iframe[^>]*vimeo.com/video/([^\?"]*)[^>]*>', re.M).search(view).group(1) source = ('https://secure.vimeo.com/moogaloop.swf?clip_id=' + video_id + '&autoplay=1') post_args['source'] = source self.facebook_request( "/me/feed", self.status_update_result, access_token=access_token, post_args=post_args,)
def post(self): if not self.authenticate(author=True): return op = self.get_argument('op', None) if op == 'favorite': self.favorite() return access_token, tumblr_info = self.get_tumblr_info() title = content_remote.strip_html(self.get_argument('title', '')) body = url_factory.add_base_uris(self, self.get_argument('view', '')) \ + '\n' \ + self.get_argument('url') post_args = {"type": "text", "title": title, "body": body} # TODO, refactor out w FB logic thumb = self.get_argument('thumb', '') picture = None normal_picture = None if thumb: if not thumb.startswith('http://'): thumb = url_factory.clean_filename(thumb) thumb = thumb[len(url_factory.resource_url(self)) + 1:] thumb = url_factory.resource_directory(self, thumb) picture = thumb basename = os.path.basename(thumb) dirname = os.path.dirname(thumb) if os.path.basename(dirname) == 'thumbs': parent_dir = os.path.dirname(dirname) original_dir = os.path.join(parent_dir, 'original') original_img = os.path.join(original_dir, basename) if os.path.exists(original_img): picture = original_img normal_path = os.path.join(parent_dir, basename) if os.path.exists(normal_path): normal_picture = normal_path normal_picture = normal_picture[ len(self.application.settings["static_path"]) + 1:] normal_picture = self.static_url(normal_picture, include_host=True, include_sig=False) picture = picture[len(self.application.settings["static_path"] ) + 1:] picture = self.static_url(picture, include_host=True, include_sig=False) else: picture = thumb video = re.compile(r'<iframe[^>]*(youtube|vimeo)[^>]*>.*?</iframe>', re.M | re.S).search(body) if picture and normal_picture and not video: post_args["source"] = picture post_args["link"] = self.get_argument('url') post_args["caption"] = re.compile( r'(<figure>.*?<img.*?src="' + normal_picture + r'".*?>.*?</figure>)', re.M | re.U | re.S).sub('', body) post_args["type"] = "photo" if video: video = video.group(0) post_args["embed"] = video post_args["caption"] = body.replace(video, '') post_args["type"] = "video" section = self.get_argument('section', '') album = self.get_argument('album', '') tags = re.compile(r'#(\w+)(?![^<&]*(?:[>;]))', re.M | re.U).findall(body) post_args["tags"] = "" if tags: post_args["tags"] += ','.join(tags) if section: post_args["tags"] += "," + section if album: post_args["tags"] += "," + album self.tumblr_request( "http://api.tumblr.com/v2/blog/" + tumblr_info['primary_blog'] + "/post", self.status_update_result, access_token=access_token, post_args=post_args, )
def get(self): if not self.authenticate(author=True): return self.display["user"] = self.get_author_user() static_path = self.application.settings["static_path"] global_themes_directory = os.path.join(static_path, 'css/themes') local_themes_directory = url_factory.resource_directory(self, 'themes') local_themes_stem = local_themes_directory[len(static_path) + 1:] self.display['themes'] = [] if os.path.exists(local_themes_directory): local_themes = os.listdir(local_themes_directory) for theme in local_themes: theme_path = os.path.join(local_themes_directory, theme) css_path = os.path.join(theme_path, theme + '.css') if (not theme.startswith('.') and os.path.isdir(theme_path) and os.path.exists(css_path)): self.display['themes'].append({ 'path': os.path.join(local_themes_stem, os.path.join(theme, theme + '.css')) }) local_themes = os.listdir(global_themes_directory) for theme in local_themes: theme_path = os.path.join(global_themes_directory, theme) css_path = os.path.join(theme_path, theme + '.css') if (not theme.startswith('.') and os.path.isdir(theme_path) and os.path.exists(css_path)): self.display['themes'].append({ 'path': os.path.join('css/themes', os.path.join(theme, theme + '.css')) }) if self.display["user"].theme.find('_current_theme') != -1: current_theme_path = os.path.join(local_themes_stem, '_current_theme') default_stylesheet_path = os.path.join(current_theme_path, '_default_.css') self.display['themes'].append({'path': default_stylesheet_path}) for theme in self.display['themes']: f = open(os.path.join(static_path, theme['path'])) theme_data = f.read() title = re.search(r'\* theme: (.*)(\s\(|$)', theme_data) theme['title'] = (title.group(1) if title and len(title.groups()) > 1 else '') link = re.search(r'\* theme: .*\((.*)\)', theme_data) theme['link'] = link.group( 1) if link and len(link.groups()) > 0 else '' author = re.search(r'\* designed_by: (.*)(\s\(|$)', theme_data) theme['author'] = (author.group(1) if author and len(author.groups()) > 1 else '') author_link = re.search(r'\* designed_by: .*\((.*)\)', theme_data) theme['author_link'] = (author_link.group(1) if author_link and len(author_link.groups()) > 0 else '') theme['thumb'] = os.path.join(os.path.dirname(theme['path']), 'thumb.png') theme['static_url'] = self.application.settings["static_url"] options = re.findall(r'\* ((?:color|font|image|if|text).*)', theme_data, re.M) for index, option in enumerate(options): theme['option_' + str(index)] = option extra_head_html = re.search(r'\* extra_head_html: """(.*?)"""', theme_data, re.M | re.DOTALL) theme['extra_head_html'] = ( extra_head_html.group(1).replace('\n', '\\n') if extra_head_html and len(extra_head_html.groups()) > 0 else '') extra_body_end_html = re.search( r'\* extra_body_end_html: """(.*?)"""', theme_data, re.M | re.DOTALL) theme['extra_body_end_html'] = extra_body_end_html.group( 1).replace('\n', '\\n') if extra_body_end_html and len( extra_body_end_html.groups()) > 0 else '' if ((self.display["user"].theme.find('_current_theme') != -1 and theme['path'].find('_current_theme') != -1) or self.display["user"].theme.replace( '_compiled_', '') == theme['path']): self.display['user_theme'] = theme if re.search('_compiled_', self.display["user"].theme): self.display['user_theme_compiled'] = self.display[ "user"].theme else: self.display['user_theme_compiled'] = None self.display['user_theme_custom'] = self.display[ "user"].theme.find('_current_theme') != -1 f.close() self.display['currencies'] = \ [ "AUD", "CAD", "CZK", "DKK", "EUR", "HKD", "HUF", "ILS", "JPY", \ "MXN", "NOK", "NZD", "PLN", "GBP", "SGD", "SEK", "CHF", "THB", "USD", ] self.fill_template("customize.html")
def post(self): if not self.authenticate(author=True): return op = self.get_argument('op', None) if op == 'favorite': self.favorite() return self.user = self.get_author_user() access_token = self.user.facebook title = self.get_argument('title', '') view = self.get_argument('view', '') status = (content_remote.strip_html(title) + ('\n' if title and view else '') + content_remote.strip_html(view.replace('<br>', ' ')) + ('\n' if title or view else '') + self.get_argument('url')) post_args = {"message": status} thumb = self.get_argument('thumb', '') picture = None if thumb: if not thumb.startswith('http://'): thumb = url_factory.clean_filename(thumb) thumb = thumb[len(url_factory.resource_url(self)) + 1:] thumb = url_factory.resource_directory(self, thumb) picture = thumb basename = os.path.basename(thumb) dirname = os.path.dirname(thumb) if os.path.basename(dirname) == 'thumbs': parent_dir = os.path.dirname(dirname) original_dir = os.path.join(parent_dir, 'original') original_img = os.path.join(original_dir, basename) if os.path.exists(original_img): picture = original_img picture = picture[len(self.application.settings["static_path"] ) + 1:] picture = self.static_url(picture, include_host=True) else: picture = thumb if picture: post_args['picture'] = picture video = re.compile(r'<iframe[^>]*(youtube|vimeo)[^>]*>.*?</iframe>', re.M | re.S).search(view) if video: video = video.group(0) is_youtube = re.compile(r'<iframe[^>]*(youtube)[^>]*>', re.M).search(view) if is_youtube: video_id = re.compile( r'<iframe[^>]*youtube.com/embed/([^\?]*)[^>]*>', re.M).search(view).group(1) source = 'http://www.youtube.com/e/' + video_id + '?autoplay=1' else: video_id = re.compile( r'<iframe[^>]*vimeo.com/video/([^\?"]*)[^>]*>', re.M).search(view).group(1) source = ('https://secure.vimeo.com/moogaloop.swf?clip_id=' + video_id + '&autoplay=1') post_args['source'] = source self.facebook_request( "/me/feed", self.status_update_result, access_token=access_token, post_args=post_args, )
def post(self): if not self.authenticate(author=True): return op = self.get_argument('op', None) if op == 'favorite': self.favorite() return access_token, tumblr_info = self.get_tumblr_info() title = content_remote.strip_html(self.get_argument('title', '')) body = url_factory.add_base_uris(self, self.get_argument('view', '')) \ + '\n' \ + self.get_argument('url') post_args = {"type": "text", "title": title, "body": body} # TODO, refactor out w FB logic thumb = self.get_argument('thumb', '') picture = None normal_picture = None if thumb: if not thumb.startswith('http://'): thumb = url_factory.clean_filename(thumb) thumb = thumb[len(url_factory.resource_url(self)) + 1:] thumb = url_factory.resource_directory(self, thumb) picture = thumb basename = os.path.basename(thumb) dirname = os.path.dirname(thumb) if os.path.basename(dirname) == 'thumbs': parent_dir = os.path.dirname(dirname) original_dir = os.path.join(parent_dir, 'original') original_img = os.path.join(original_dir, basename) if os.path.exists(original_img): picture = original_img normal_path = os.path.join(parent_dir, basename) if os.path.exists(normal_path): normal_picture = normal_path normal_picture = normal_picture[len( self.application.settings["static_path"]) + 1:] normal_picture = self.static_url(normal_picture, include_host=True, include_sig=False) picture = picture[len(self.application.settings["static_path"]) + 1:] picture = self.static_url(picture, include_host=True, include_sig=False) else: picture = thumb video = re.compile(r'<iframe[^>]*(youtube|vimeo)[^>]*>.*?</iframe>', re.M | re.S).search(body) if picture and normal_picture and not video: post_args["source"] = picture post_args["link"] = self.get_argument('url') post_args["caption"] = re.compile(r'(<figure>.*?<img.*?src="' + normal_picture + r'".*?>.*?</figure>)', re.M | re.U | re.S).sub( '', body) post_args["type"] = "photo" if video: video = video.group(0) post_args["embed"] = video post_args["caption"] = body.replace(video, '') post_args["type"] = "video" section = self.get_argument('section', '') album = self.get_argument('album', '') tags = re.compile(r'#(\w+)(?![^<&]*(?:[>;]))', re.M | re.U).findall(body) post_args["tags"] = "" if tags: post_args["tags"] += ','.join(tags) if section: post_args["tags"] += "," + section if album: post_args["tags"] += "," + album self.tumblr_request( "http://api.tumblr.com/v2/blog/" + tumblr_info['primary_blog'] + "/post", self.status_update_result, access_token=access_token, post_args=post_args,)
def get(self): if not self.authenticate(author=True): return self.display["user"] = self.get_author_user() static_path = self.application.settings["static_path"] global_themes_directory = os.path.join(static_path, 'css/themes') local_themes_directory = url_factory.resource_directory(self, 'themes') local_themes_stem = local_themes_directory[len(static_path) + 1:] self.display['themes'] = [] if os.path.exists(local_themes_directory): local_themes = os.listdir(local_themes_directory) for theme in local_themes: theme_path = os.path.join(local_themes_directory, theme) css_path = os.path.join(theme_path, theme + '.css') if (not theme.startswith('.') and os.path.isdir(theme_path) and os.path.exists(css_path)): self.display['themes'].append({ 'path': os.path.join( local_themes_stem, os.path.join(theme, theme + '.css')) }) local_themes = os.listdir(global_themes_directory) for theme in local_themes: theme_path = os.path.join(global_themes_directory, theme) css_path = os.path.join(theme_path, theme + '.css') if (not theme.startswith('.') and os.path.isdir(theme_path) and os.path.exists(css_path)): self.display['themes'].append({ 'path': os.path.join('css/themes', os.path.join(theme, theme + '.css')) }) if self.display["user"].theme.find('_current_theme') != -1: current_theme_path = os.path.join(local_themes_stem, '_current_theme') default_stylesheet_path = os.path.join(current_theme_path, '_default_.css') self.display['themes'].append({ 'path': default_stylesheet_path }) for theme in self.display['themes']: f = open(os.path.join(static_path, theme['path'])) theme_data = f.read() title = re.search(r'\* theme: (.*)(\s\(|$)', theme_data) theme['title'] = (title.group(1) if title and len(title.groups()) > 1 else '') link = re.search(r'\* theme: .*\((.*)\)', theme_data) theme['link'] = link.group(1) if link and len(link.groups()) > 0 else '' author = re.search(r'\* designed_by: (.*)(\s\(|$)', theme_data) theme['author'] = (author.group(1) if author and len(author.groups()) > 1 else '') author_link = re.search(r'\* designed_by: .*\((.*)\)', theme_data) theme['author_link'] = (author_link.group(1) if author_link and len(author_link.groups()) > 0 else '') theme['thumb'] = os.path.join(os.path.dirname(theme['path']), 'thumb.png') theme['static_url'] = self.application.settings["static_url"] options = re.findall( r'\* ((?:color|font|image|if|text).*)', theme_data, re.M) for index, option in enumerate(options): theme['option_' + str(index)] = option extra_head_html = re.search(r'\* extra_head_html: """(.*?)"""', theme_data, re.M | re.DOTALL) theme['extra_head_html'] = (extra_head_html.group(1).replace( '\n', '\\n') if extra_head_html and len(extra_head_html.groups()) > 0 else '') extra_body_end_html = re.search( r'\* extra_body_end_html: """(.*?)"""', theme_data, re.M | re.DOTALL) theme['extra_body_end_html'] = extra_body_end_html.group(1).replace( '\n', '\\n') if extra_body_end_html and len( extra_body_end_html.groups()) > 0 else '' if ((self.display["user"].theme.find('_current_theme') != -1 and theme['path'].find('_current_theme') != -1) or self.display["user"].theme.replace('_compiled_', '') == theme['path']): self.display['user_theme'] = theme if re.search('_compiled_', self.display["user"].theme): self.display['user_theme_compiled'] = self.display["user"].theme else: self.display['user_theme_compiled'] = None self.display['user_theme_custom'] = self.display["user"].theme.find( '_current_theme') != -1 f.close() self.display['currencies'] = \ [ "AUD", "CAD", "CZK", "DKK", "EUR", "HKD", "HUF", "ILS", "JPY", \ "MXN", "NOK", "NZD", "PLN", "GBP", "SGD", "SEK", "CHF", "THB", "USD", ] self.fill_template("customize.html")
def post(self): safe_user = False if self.authenticate(author=True): safe_user = True self.get_common_parameters() if safe_user: if media.detect_media_type( self.base_leafname) not in ('video', 'image', 'audio', 'web', 'zip'): raise tornado.web.HTTPError(400, "i call shenanigans") else: if media.detect_media_type(self.base_leafname) != 'image': raise tornado.web.HTTPError(400, "i call shenanigans") if self.get_argument('canvasImage', None): uploaded_file = self.get_argument('canvasImage') else: uploaded_file = self.request.files['file'][0] overwrite = True if self.get_argument('overwrite', False) else False if safe_user: self.media_section = url_factory.clean_filename( self.get_argument('section')) if self.media_section.startswith(url_factory.resource_url(self)): self.media_section = self.media_section[ len(url_factory.resource_url(self)) + 1:] self.parent_directory = url_factory.resource_directory( self, self.media_section) self.parent_url = url_factory.resource_url(self, self.media_section) if self.media_section == 'themes': test_zip_path_name = os.path.join(self.parent_directory, self.base_leafname) split_path = os.path.splitext(test_zip_path_name) if os.path.exists(test_zip_path_name): os.remove(test_zip_path_name) if os.path.exists(split_path[0]) and os.path.isdir( split_path[0]): shutil.rmtree(split_path[0]) else: self.parent_directory = os.path.join( self.application.settings["resource_path"], 'remote') self.parent_url = os.path.join( self.application.settings["resource_url"], 'remote') self.full_path = os.path.join(self.parent_directory, self.base_leafname) if not overwrite: self.full_path = media.get_unique_name(self.full_path) if not os.path.isdir(self.parent_directory): os.makedirs(self.parent_directory) if self.chunked_upload and safe_user: f = open(self.tmp_path, 'w') f.write(uploaded_file['body']) f.close() total_chunks_uploaded = 0 for f in os.listdir(self.tmp_dir): if f.startswith(self.base_leafname): total_chunks_uploaded += 1 if total_chunks_uploaded == max(self.total_size / self.chunk_size, 1): final_file = open(self.full_path, 'w') for f in os.listdir(self.tmp_dir): if f.startswith(self.base_leafname): chunk_path = os.path.join(self.tmp_dir, f) chunk_file = open(chunk_path, 'r') final_file.write(chunk_file.read()) chunk_file.close() os.unlink(chunk_path) final_file.close() original_size_url, url, thumb_url = media.save_locally( self.parent_url, self.full_path, None, skip_write=True, overwrite=overwrite) else: return else: original_size_url, url, thumb_url = media.save_locally( self.parent_url, self.full_path, uploaded_file['body'], disallow_zip=(not safe_user), overwrite=overwrite) media_html = media.generate_full_html(self, url, original_size_url) self.set_header("Content-Type", "text/plain; charset=UTF-8") self.write(json.dumps({ 'original_size_url': original_size_url, \ 'url': url, \ 'thumb_url': thumb_url, \ 'html': media_html, }))