degal/commands/main.py
branchthreaded-tasks
changeset 88 b1b0939517e7
parent 87 a7a18893730d
equal deleted inserted replaced
87:a7a18893730d 88:b1b0939517e7
     1 from degal.command import command
     1 from degal.command import command
     2 from degal import templates
     2 from degal import templates
       
     3 from degal.task import threadable_task
     3 
     4 
     4 def render_image (ctx, image) :
     5 def render_image_html (ctx, image) :
     5     """
     6     """
     6         Render the thumbnails and .html for one image
     7         Render the thumbnails and .html for one image
     7     """
     8     """
     8 
       
     9     # log image path
       
    10     ctx.log_info("%s", image)
       
    11 
     9 
    12     # render output
    10     # render output
    13     tpl = templates.master(ctx.gallery, image.title, image.html, 
    11     tpl = templates.master(ctx.gallery, image.title, image.html, 
    14         templates.image_page(image)
    12         templates.image_page(image)
    15     )
    13     )
    16     
    14     
    17     # write output
    15     # write output
    18     tpl.render_file(image.html)
    16     tpl.render_file(image.html)
       
    17 
       
    18 def render_image_task (image) :
       
    19     """
       
    20         Render the image output for the given image
       
    21     """
       
    22     
       
    23     # XXX: is this really threadsafe?
       
    24     image.update()
       
    25     
       
    26     # return value is the image itself
       
    27     return image
       
    28 
       
    29 def render_folder_images (ctx, images) :
       
    30     """
       
    31         Render the given series of images
       
    32     """
       
    33     
       
    34     # render them in parallel as required
       
    35     for image in ctx.tasks.execute([
       
    36         threadable_task(render_image_task, image) for image in images
       
    37     ]) :
       
    38         # log image path
       
    39         ctx.log_info("%s", image)
       
    40 
       
    41         render_image_html(ctx, image)
    19 
    42 
    20 def render_folder_page (ctx, folder) :
    43 def render_folder_page (ctx, folder) :
    21     """
    44     """
    22         Render the .html output for one folder
    45         Render the .html output for one folder
    23     """
    46     """
    32             templates.folder_page(folder, page)
    55             templates.folder_page(folder, page)
    33         )
    56         )
    34 
    57 
    35         # write output
    58         # write output
    36         tpl.render_file(html_file)
    59         tpl.render_file(html_file)
    37     
       
    38 
    60 
    39 def render_folder (ctx, folder) :
    61 def render_folder (ctx, folder) :
       
    62     """
       
    63         Render the HTML/images for this folder if needed, and recrurse into subfolders.
       
    64     """
       
    65 
    40     # index images that require updating
    66     # index images that require updating
    41     image_count = len(folder.images)
    67     image_count = len(folder.images)
    42     new_images = list(folder.index_images(for_update=(not ctx.config.force_update)))
    68     new_images = list(folder.index_images(for_update=(not ctx.config.force_update)))
    43     
    69     
    44     if new_images or ctx.config.force_update:
    70     if new_images or ctx.config.force_update:
    46         render_folder_page(ctx, folder)
    72         render_folder_page(ctx, folder)
    47         
    73         
    48         ctx.log_info("%s - render %d/%d images", folder, len(new_images), image_count)
    74         ctx.log_info("%s - render %d/%d images", folder, len(new_images), image_count)
    49 
    75 
    50         # update images
    76         # update images
    51         for image in new_images :
    77         render_folder_images(ctx, new_images)
    52             # update thumbs
       
    53             image.update()
       
    54             
       
    55             # render output
       
    56             render_image(ctx, image)
       
    57     
    78     
    58     else :
    79     else :
    59         ctx.log_info("%s - up to date", folder)
    80         ctx.log_info("%s - up to date", folder)
    60 
    81 
    61     # index subfolders
    82     # index subfolders