def do_bind_page(user, upage, flowgram=None): """Binds an unbound page to a specified or default Flowgram""" if flowgram is None: flowgram, new = get_working_flowgram(user) position = get_next_position(flowgram) # Create the new page object page = Page.objects.create(flowgram=flowgram, title=upage.title, source_url= upage.source_url, position=position) make_thumbnail(page) add_default_time(page) # Copy the html file upage_path = unbound_page_path(upage) _mkdir(flowgram.directory()) page_path = full_page_path(page) shutil.copy(upage_path, page_path) # Remove the user's 'just_published' attribute profile = user.get_profile() profile.just_published = False profile.save() # Set the title of the flowgram if this is the first page: if (flowgram.title == DEFAULT_FG_TITLE) and (position == 1): flowgram.title = page.title flowgram.save() return (page, flowgram)
def add_file_to_flowgram(flowgram, filename, content, encoding=None): dir = flowgram.directory() _mkdir(dir) if encoding is None: f = open(dir+filename, 'wb') else: f = codecs.open(dir+filename, 'wb', encoding) f.write(content) f.close()
def new_flowgram(owner, title=None): if title is None: title = DEFAULT_FG_TITLE flowgram = Flowgram.objects.create(owner=owner, title=title[:255], published=False, public=False) _mkdir(flowgram.directory()) return flowgram
def backup_filename(bucket_name, key_name, filename): if localsettings.S3_BACKUP_DIR == "": return path = localsettings.S3_BACKUP_DIR + "/" + bucket_name + "/" if len(key_name) > 4: path += helpers.get_id_subdir_path(key_name) + "/" path += key_name dir = os.path.dirname(path) helpers._mkdir(dir) shutil.copyfile(filename, path)
def copy_flowgram(user, flowgram): new_fg = Flowgram.objects.create( #owner = flowgram.owner, owner = user, title = flowgram.title, description = flowgram.description, duration = flowgram.duration, ) _mkdir(new_fg.directory()) for page in flowgram.page_set.all(): deep_copy_page_to_flowgram(page, new_fg) return new_fg
def backup_string(bucket_name, key_name, contents): if localsettings.S3_BACKUP_DIR == "": return path = localsettings.S3_BACKUP_DIR + "/" + bucket_name + "/" if len(key_name) > 4: path += helpers.get_id_subdir_path(key_name) + "/" path += key_name dir = os.path.dirname(path) helpers._mkdir(dir) f = open(path, "wb") f.write(contents) f.close()
def backup_file(bucket_name, key_name, file): if localsettings.S3_BACKUP_DIR == "": return path = localsettings.S3_BACKUP_DIR + "/" + bucket_name + "/" if len(key_name) > 4: path += helpers.get_id_subdir_path(key_name) + "/" path += key_name dir = os.path.dirname(path) helpers._mkdir(dir) destfile = open(path, "wb") file.seek(0) shutil.copyfileobj(file, destfile) file.seek(0) destfile.close()
profile.save() log.debug("Action log: set_working_flowgram to %s for %s" % (fg.id, str(user.id))) def set_tags(user, flowgram, tags): Tag.objects.filter(flowgram=flowgram).delete() for tag in tags: stripped_tag = tag.strip() if stripped_tag: Tag.objects.create(name=stripped_tag, flowgram=flowgram, adder=user) def deleted_pages_dir(): return "%s/deleted_pages/" % localsettings.my_WOWKASTDIR _mkdir(deleted_pages_dir()) def highlighted_page_filename(page): return str(page.id) + '_hl.html' def unbound_page_path(upage): """Returns the file unbound page content is stored in.""" return "%s/unbound_pages/%s.html" % (localsettings.my_WOWKASTDIR, upage.id) def full_page_path(page): return page.flowgram.directory() + page_filename(page) def add_file_to_flowgram(flowgram, filename, content, encoding=None): dir = flowgram.directory() _mkdir(dir)
def process(self, task): print ("processing %s" % task.id) task.attempts += 1 task.started_at = datetime.datetime.now() task.save() success = False try: # 2. Extract the ppt file temp_dir = tempfile.mkdtemp() temp_path = temp_dir + "\\" + task.id + "." + task.filetype print ("temp_dir = %s" % temp_dir) print ("temp_path = %s" % temp_path) download_file(task.get_s3_url(), temp_path) output_dir = localsettings.POWERPOINT_DIR + "/" + helpers.get_id_subdir_path(task.id) + "/" + task.id helpers._mkdir(output_dir + "/") # 3. Send the ppt file to the C# program slide_files = process_ppt_file(temp_path, output_dir) # s3_slide_urls = save_slides_to_s3(task, slide_files) slide_urls = get_slide_urls(task, slide_files) for url in slide_urls: extension = url[-3:] if extension.lower() == "swf": html = ( "<html>" "<head>" "<title>Slide</title>" '<script src="%s"></script>' "</head>" "<body>" '<div id="swfwrapper">' '<div id="swfholder">' "You either have JavaScript turned off or an old version of Adobe's Flash Player." '<a href="http://www.macromedia.com/go/getflashplayer/">Click here to get the latest Flash player</a>.' "</div>" "</div>" "<script>" 'swfobject.embedSWF("%s",' '"swfholder",' '"100%%",' '"100%%",' '"9.0.60",' '"/media/swf/expressInstall.swf",' "{}," "{" "wmode: 'opaque'," "bgcolor: '#FFFFFF'," "allowScriptAccess: 'always'" "}," "{" "id: 'FlexClient2'" "});" "</script>" "</body>" "</html>" % (SWFOBJECT_URL, url) ) else: html = ( "<html>" "<head>" "<title>Slide</title>" '<style>@import url("/media/css/photo_importers.css");</style>' "</head>" "<body>" "<center>" '<img src="%s" />' "</center>" "</body>" "</html>" % (url) ) data = { "flowgram_id": task.flowgram.id, "ppt_req_id": task.id, "title": "Slide", "url": url, "html": html, } u = urllib2.urlopen(ADD_PPT_SLIDE_URL, urllib.urlencode(data)) u.close() task.status_code = StatusCode.DONE task.save() print ("task saved and status_code set to DONE") success = True except DownloadException: pass except Exception, e: print e print ("Failed attempt to process %s" % task.id)
import logging, logging.handlers, sys from flowgram.localsettings import fg_LOG_DIR from flowgram.core.helpers import _mkdir _mkdir(fg_LOG_DIR) main_logger = logging.getLogger("main") main_log = logging.FileHandler(fg_LOG_DIR + "main.log") main_log.setFormatter(logging.Formatter("%(asctime)s %(levelname)s %(message)s")) main_log.setLevel(logging.DEBUG) main_logger.addHandler(main_log) main_logger.setLevel(logging.DEBUG) # cache_logger = logging.getLogger('cache') # cache_log = logging.FileHandler(fg_LOG_DIR + 'cache.log') # cache_log.setFormatter(logging.Formatter('%(asctime)s %(message)s')) # cache_log.setLevel(logging.DEBUG) # cache_logger.addHandler(cache_log) # cache_logger.setLevel(logging.DEBUG) def callersname(): # callersname copied from ASPN return sys._getframe(2).f_code.co_name def log_at_level(level): def logger(msg="", request=None): caller = callersname() if request:
def process(self, task): print ("processing %s" % task.id) task.attempts += 1 task.started_at = datetime.datetime.now() task.save() success = False title = task.flowgram.title or "Untitled" try: output_dir = tempfile.mkdtemp("", "", os.path.join(tempfile.gettempdir(), "exporttovideo")) + os.sep print ("output_dir = %s" % output_dir) if os.path.isdir(output_dir): shutil.rmtree(output_dir) helpers._mkdir(output_dir) # Rendering the video. Flowgram2Video().run(task.flowgram.id, 640, 480, output_dir, task.use_highlight_popups) copy_to_uploads_directory(task, "%svideo.wmv" % output_dir) save_video_file_to_s3(task, "%svideo.wmv" % output_dir) # Closing out, and notifying corresponding users, open requests for the same video and # options. similar_tasks = ExportToVideoRequest.objects.filter( flowgram=task.flowgram, use_highlight_popups=task.use_highlight_popups, status_code__in=(StatusCode.UNPROCESSED, StatusCode.PROCESSING), ) for close_task in similar_tasks: preview_url = "http://%s/%s.wmv" % (localsettings.S3_BUCKETS[localsettings.S3_BUCKET_UPLOAD], task.id) export_url = "%sexport/youtube/%s/" % (localsettings.my_URL_BASE, task.id) recipient = close_task.request_user.username if close_task.request_user else "" subject = "Your Flowgram Video is now ready" template = loader.get_template("emails/video_export.html") context = Context( { "recipient": recipient, "recipient_url": localsettings.my_URL_BASE + recipient, "recipient_email": close_task.request_email, "title": title, "fg_url": "%sp/%s/" % (localsettings.my_URL_BASE, task.flowgram.id), "fg_owner": task.flowgram.owner, "fg_owner_url": "%s%s" % (localsettings.my_URL_BASE, task.flowgram.owner), "preview_url": preview_url, "export_url": export_url, "contact_us": localsettings.my_URL_BASE + "about_us/contact_us/", "image_url": "%sapi/getthumbbydims/fg/%s/%d/%d/" % (localsettings.my_URL_BASE, task.flowgram.id, 150, 100), } ) print "Notice: %sapi/getthumbbydims/fg/%s/%d/%d/" % ( localsettings.my_URL_BASE, task.flowgram.id, 150, 100, ) html_content = template.render(context) add_to_mail_queue( "*****@*****.**", close_task.request_user.email if close_task.request_user != ANONYMOUS_USER_OBJECT else close_task.request_email, subject, "", html_content, "text/html", ) close_task.status_code = StatusCode.DONE close_task.save() success = True except: traceback.print_exc(file=sys.stdout) print ("Failed attempt to encode video for Flowgram: %s" % task.flowgram.id) finally: if not success: if task.attempts >= MAX_ATTEMPTS: add_to_mail_queue( "*****@*****.**", task.request_user.email if task.request_user else task.request_user.email, 'Flowgram Video "%s" Processing Error' % (task.flowgram.title or "Untitled"), 'The video of the Flowgram "%s" could not be processed at this time. We have recorded this problem and will look into the cause. Sorry for the inconvenience.' % title, ) task.status_code = StatusCode.ERROR task.save() if localsettings.VIDEO["delete_temp_files"]: shutil.rmtree(output_dir)