degal/commands/main.py
changeset 117 a2e4562deaab
parent 115 d5aa320697df
child 118 60b126ff0b74
equal deleted inserted replaced
116:2d3721b9ffd0 117:a2e4562deaab
     1 from degal.command import command
     1 from degal.command import command
       
     2 from degal.concurrent import task
     2 from degal import templates
     3 from degal import templates
     3 
     4 
     4 def render_image_html (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
    14     )
    15     )
    15     
    16     
    16     # write output
    17     # write output
    17     tpl.render_file(image.html)
    18     tpl.render_file(image.html)
    18 
    19 
    19 def render_image_thumbs (image) :
    20 def update_image_thumbs (image) :
    20     """
    21     """
    21         Render the thubmnails for the given image
    22         Render the thubmnails for the given image, returning the image.
       
    23 
       
    24         This /should/ be threadsafe.
    22     """
    25     """
       
    26     
       
    27     # this will unconditionally update the image
       
    28     image.update()
    23 
    29 
    24     image.update()
    30     return image
    25 
    31 
    26 def render_folder_images (ctx, images, for_update=True) :
    32 def render_folder_images (ctx, images, for_update=True) :
    27     """
    33     """
    28         Render the given series of images
    34         Render the given series of images
    29     """
    35     """
    30     
    36     
    31     # render them in parallel as required
    37     # XXX: this breaks force_html
    32     for image in images :
    38 
       
    39     # render the thumbnails concurrently
       
    40     for image in ctx.concurrent.execute(
       
    41         task(update_image_thumbs, image) 
       
    42 
       
    43             for image in images 
       
    44 
       
    45             # only test if not already filtered for update
       
    46             # XXX: externalize logic
       
    47             if for_update or ctx.config.force_thumb or image.stale()
       
    48     ) :
    33         # log image path
    49         # log image path
    34         ctx.log_info("%s", image)
    50         ctx.log_info("%s", image)
    35         
       
    36         # only test if not already filtered for update
       
    37         if for_update or ctx.config.force_thumb or image.stale() :
       
    38             # render output thumbs
       
    39             render_image_thumbs(image)
       
    40         
    51         
    41         # render HTML
    52         # render HTML
    42         render_image_html(ctx, image)
    53         render_image_html(ctx, image)
    43 
    54 
    44         # release large objects that are not needed anymore
    55         # release large objects that are not needed anymore
    45         # XXX: verify that this works
    56         # XXX: verify that this works
    46         del image.img
    57         del image.img
    47 
    58 
    48 def render_folder_page (ctx, folder) :
    59 def render_folder_html (ctx, folder) :
    49     """
    60     """
    50         Render the .html output for one folder
    61         Render the .html output for one folder
    51     """
    62     """
    52 
    63 
    53     # render each page separately
    64     # render each page separately
    84     # index selected images
    95     # index selected images
    85     new_images = list(folder.index_images(for_update=for_update))
    96     new_images = list(folder.index_images(for_update=for_update))
    86 
    97 
    87     if new_images or ctx.config.force_html :
    98     if new_images or ctx.config.force_html :
    88         # update folder index
    99         # update folder index
    89         render_folder_page(ctx, folder)
   100         render_folder_html(ctx, folder)
    90         
   101         
    91         ctx.log_info("%s - render %d/%d images", folder, len(new_images), image_count)
   102         ctx.log_info("%s - render %d/%d images", folder, len(new_images), image_count)
    92 
   103 
    93         # update images
   104         # update images
    94         render_folder_images(ctx, new_images, for_update)
   105         render_folder_images(ctx, new_images, for_update)