Exemple #1
0
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)
Exemple #2
0
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()
Exemple #3
0
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
Exemple #4
0
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)
Exemple #5
0
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
Exemple #6
0
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()
Exemple #7
0
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()
Exemple #8
0
        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)
Exemple #9
0
    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)
Exemple #10
0
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)