degal/commands/main.py
author Tero Marttila <terom@fixme.fi>
Wed, 17 Jun 2009 17:02:24 +0300
changeset 131 7021d949222c
parent 123 31c4a328ef96
child 132 c2b2f4b6fe6d
permissions -rw-r--r--
fix commands.main to render HTML for folders that only have subfolders, and no direct images
76
e22d9f699081 misc. fixes
Tero Marttila <terom@fixme.fi>
parents: 66
diff changeset
     1
from degal.command import command
117
a2e4562deaab implement concurrency... :)
Tero Marttila <terom@fixme.fi>
parents: 115
diff changeset
     2
from degal.concurrent import task
66
322e5cd0cb1f implement new main() command, remove old one
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
     3
from degal import templates
48
20355dd2e61a new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
94
676c1d201cfe slightly reoriganize function structure in commands.main
Tero Marttila <terom@fixme.fi>
parents: 87
diff changeset
     5
def render_image_html (ctx, image) :
66
322e5cd0cb1f implement new main() command, remove old one
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
     6
    """
322e5cd0cb1f implement new main() command, remove old one
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
     7
        Render the thumbnails and .html for one image
322e5cd0cb1f implement new main() command, remove old one
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
     8
    """
87
a7a18893730d implement up-to-date checking for commands.main, and add --force-update option
Tero Marttila <terom@fixme.fi>
parents: 76
diff changeset
     9
101
698dc68a985d split --force-update into --force-thumb/--force-html options, implement for main
Tero Marttila <terom@fixme.fi>
parents: 94
diff changeset
    10
    ctx.log_debug("%s", image.html)
698dc68a985d split --force-update into --force-thumb/--force-html options, implement for main
Tero Marttila <terom@fixme.fi>
parents: 94
diff changeset
    11
66
322e5cd0cb1f implement new main() command, remove old one
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    12
    # render output
119
e7855eefb4c7 fix breadcrumb/title stuff
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    13
    tpl = templates.master(ctx.gallery, image, 
66
322e5cd0cb1f implement new main() command, remove old one
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    14
        templates.image_page(image)
322e5cd0cb1f implement new main() command, remove old one
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    15
    )
322e5cd0cb1f implement new main() command, remove old one
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    16
    
322e5cd0cb1f implement new main() command, remove old one
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    17
    # write output
322e5cd0cb1f implement new main() command, remove old one
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    18
    tpl.render_file(image.html)
322e5cd0cb1f implement new main() command, remove old one
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    19
117
a2e4562deaab implement concurrency... :)
Tero Marttila <terom@fixme.fi>
parents: 115
diff changeset
    20
def update_image_thumbs (image) :
94
676c1d201cfe slightly reoriganize function structure in commands.main
Tero Marttila <terom@fixme.fi>
parents: 87
diff changeset
    21
    """
117
a2e4562deaab implement concurrency... :)
Tero Marttila <terom@fixme.fi>
parents: 115
diff changeset
    22
        Render the thubmnails for the given image, returning the image.
a2e4562deaab implement concurrency... :)
Tero Marttila <terom@fixme.fi>
parents: 115
diff changeset
    23
a2e4562deaab implement concurrency... :)
Tero Marttila <terom@fixme.fi>
parents: 115
diff changeset
    24
        This /should/ be threadsafe.
94
676c1d201cfe slightly reoriganize function structure in commands.main
Tero Marttila <terom@fixme.fi>
parents: 87
diff changeset
    25
    """
117
a2e4562deaab implement concurrency... :)
Tero Marttila <terom@fixme.fi>
parents: 115
diff changeset
    26
    
a2e4562deaab implement concurrency... :)
Tero Marttila <terom@fixme.fi>
parents: 115
diff changeset
    27
    # this will unconditionally update the image
a2e4562deaab implement concurrency... :)
Tero Marttila <terom@fixme.fi>
parents: 115
diff changeset
    28
    image.update()
94
676c1d201cfe slightly reoriganize function structure in commands.main
Tero Marttila <terom@fixme.fi>
parents: 87
diff changeset
    29
117
a2e4562deaab implement concurrency... :)
Tero Marttila <terom@fixme.fi>
parents: 115
diff changeset
    30
    return image
94
676c1d201cfe slightly reoriganize function structure in commands.main
Tero Marttila <terom@fixme.fi>
parents: 87
diff changeset
    31
101
698dc68a985d split --force-update into --force-thumb/--force-html options, implement for main
Tero Marttila <terom@fixme.fi>
parents: 94
diff changeset
    32
def render_folder_images (ctx, images, for_update=True) :
94
676c1d201cfe slightly reoriganize function structure in commands.main
Tero Marttila <terom@fixme.fi>
parents: 87
diff changeset
    33
    """
676c1d201cfe slightly reoriganize function structure in commands.main
Tero Marttila <terom@fixme.fi>
parents: 87
diff changeset
    34
        Render the given series of images
676c1d201cfe slightly reoriganize function structure in commands.main
Tero Marttila <terom@fixme.fi>
parents: 87
diff changeset
    35
    """
118
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 117
diff changeset
    36
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 117
diff changeset
    37
    # XXX: handle this thumb-update/html-update stuff better
123
31c4a328ef96 move the uncache-del's from commands.main to Image.cleanup, and call it after rendering each image's thumbs
Tero Marttila <terom@fixme.fi>
parents: 119
diff changeset
    38
31c4a328ef96 move the uncache-del's from commands.main to Image.cleanup, and call it after rendering each image's thumbs
Tero Marttila <terom@fixme.fi>
parents: 119
diff changeset
    39
    # render all HTML
31c4a328ef96 move the uncache-del's from commands.main to Image.cleanup, and call it after rendering each image's thumbs
Tero Marttila <terom@fixme.fi>
parents: 119
diff changeset
    40
    for image in images :
31c4a328ef96 move the uncache-del's from commands.main to Image.cleanup, and call it after rendering each image's thumbs
Tero Marttila <terom@fixme.fi>
parents: 119
diff changeset
    41
        render_image_html(ctx, image)
31c4a328ef96 move the uncache-del's from commands.main to Image.cleanup, and call it after rendering each image's thumbs
Tero Marttila <terom@fixme.fi>
parents: 119
diff changeset
    42
94
676c1d201cfe slightly reoriganize function structure in commands.main
Tero Marttila <terom@fixme.fi>
parents: 87
diff changeset
    43
    
117
a2e4562deaab implement concurrency... :)
Tero Marttila <terom@fixme.fi>
parents: 115
diff changeset
    44
    # render the thumbnails concurrently
a2e4562deaab implement concurrency... :)
Tero Marttila <terom@fixme.fi>
parents: 115
diff changeset
    45
    for image in ctx.concurrent.execute(
a2e4562deaab implement concurrency... :)
Tero Marttila <terom@fixme.fi>
parents: 115
diff changeset
    46
        task(update_image_thumbs, image) 
a2e4562deaab implement concurrency... :)
Tero Marttila <terom@fixme.fi>
parents: 115
diff changeset
    47
a2e4562deaab implement concurrency... :)
Tero Marttila <terom@fixme.fi>
parents: 115
diff changeset
    48
            for image in images 
a2e4562deaab implement concurrency... :)
Tero Marttila <terom@fixme.fi>
parents: 115
diff changeset
    49
a2e4562deaab implement concurrency... :)
Tero Marttila <terom@fixme.fi>
parents: 115
diff changeset
    50
            # only test if not already filtered for update
a2e4562deaab implement concurrency... :)
Tero Marttila <terom@fixme.fi>
parents: 115
diff changeset
    51
            # XXX: externalize logic
a2e4562deaab implement concurrency... :)
Tero Marttila <terom@fixme.fi>
parents: 115
diff changeset
    52
            if for_update or ctx.config.force_thumb or image.stale()
a2e4562deaab implement concurrency... :)
Tero Marttila <terom@fixme.fi>
parents: 115
diff changeset
    53
    ) :
94
676c1d201cfe slightly reoriganize function structure in commands.main
Tero Marttila <terom@fixme.fi>
parents: 87
diff changeset
    54
        # log image path
676c1d201cfe slightly reoriganize function structure in commands.main
Tero Marttila <terom@fixme.fi>
parents: 87
diff changeset
    55
        ctx.log_info("%s", image)
676c1d201cfe slightly reoriganize function structure in commands.main
Tero Marttila <terom@fixme.fi>
parents: 87
diff changeset
    56
101
698dc68a985d split --force-update into --force-thumb/--force-html options, implement for main
Tero Marttila <terom@fixme.fi>
parents: 94
diff changeset
    57
        # release large objects that are not needed anymore
123
31c4a328ef96 move the uncache-del's from commands.main to Image.cleanup, and call it after rendering each image's thumbs
Tero Marttila <terom@fixme.fi>
parents: 119
diff changeset
    58
        image.cleanup()
101
698dc68a985d split --force-update into --force-thumb/--force-html options, implement for main
Tero Marttila <terom@fixme.fi>
parents: 94
diff changeset
    59
117
a2e4562deaab implement concurrency... :)
Tero Marttila <terom@fixme.fi>
parents: 115
diff changeset
    60
def render_folder_html (ctx, folder) :
48
20355dd2e61a new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    61
    """
87
a7a18893730d implement up-to-date checking for commands.main, and add --force-update option
Tero Marttila <terom@fixme.fi>
parents: 76
diff changeset
    62
        Render the .html output for one folder
48
20355dd2e61a new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    63
    """
20355dd2e61a new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    64
87
a7a18893730d implement up-to-date checking for commands.main, and add --force-update option
Tero Marttila <terom@fixme.fi>
parents: 76
diff changeset
    65
    # render each page separately
66
322e5cd0cb1f implement new main() command, remove old one
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    66
    for page in xrange(folder.page_count) :
322e5cd0cb1f implement new main() command, remove old one
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    67
        # output .html page
119
e7855eefb4c7 fix breadcrumb/title stuff
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    68
        html = folder.html_page(page)
101
698dc68a985d split --force-update into --force-thumb/--force-html options, implement for main
Tero Marttila <terom@fixme.fi>
parents: 94
diff changeset
    69
    
119
e7855eefb4c7 fix breadcrumb/title stuff
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    70
        ctx.log_debug("%s", html)
66
322e5cd0cb1f implement new main() command, remove old one
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    71
        
322e5cd0cb1f implement new main() command, remove old one
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    72
        # render template
119
e7855eefb4c7 fix breadcrumb/title stuff
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    73
        tpl = templates.master(ctx.gallery, folder,
66
322e5cd0cb1f implement new main() command, remove old one
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    74
            templates.folder_page(folder, page)
322e5cd0cb1f implement new main() command, remove old one
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    75
        )
322e5cd0cb1f implement new main() command, remove old one
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    76
322e5cd0cb1f implement new main() command, remove old one
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    77
        # write output
119
e7855eefb4c7 fix breadcrumb/title stuff
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
    78
        tpl.render_file(html)
66
322e5cd0cb1f implement new main() command, remove old one
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
    79
87
a7a18893730d implement up-to-date checking for commands.main, and add --force-update option
Tero Marttila <terom@fixme.fi>
parents: 76
diff changeset
    80
def render_folder (ctx, folder) :
94
676c1d201cfe slightly reoriganize function structure in commands.main
Tero Marttila <terom@fixme.fi>
parents: 87
diff changeset
    81
    """
676c1d201cfe slightly reoriganize function structure in commands.main
Tero Marttila <terom@fixme.fi>
parents: 87
diff changeset
    82
        Render the HTML/images for this folder if needed, and recrurse into subfolders.
131
7021d949222c fix commands.main to render HTML for folders that only have subfolders, and no direct images
Tero Marttila <terom@fixme.fi>
parents: 123
diff changeset
    83
7021d949222c fix commands.main to render HTML for folders that only have subfolders, and no direct images
Tero Marttila <terom@fixme.fi>
parents: 123
diff changeset
    84
        Returns True if any sub-images were found, False if this folder and all subfolders were completely empty and no
7021d949222c fix commands.main to render HTML for folders that only have subfolders, and no direct images
Tero Marttila <terom@fixme.fi>
parents: 123
diff changeset
    85
        HTML was generated.
7021d949222c fix commands.main to render HTML for folders that only have subfolders, and no direct images
Tero Marttila <terom@fixme.fi>
parents: 123
diff changeset
    86
        
7021d949222c fix commands.main to render HTML for folders that only have subfolders, and no direct images
Tero Marttila <terom@fixme.fi>
parents: 123
diff changeset
    87
        XXX: this logic is too complicated for one function. For one module?
94
676c1d201cfe slightly reoriganize function structure in commands.main
Tero Marttila <terom@fixme.fi>
parents: 87
diff changeset
    88
    """
131
7021d949222c fix commands.main to render HTML for folders that only have subfolders, and no direct images
Tero Marttila <terom@fixme.fi>
parents: 123
diff changeset
    89
7021d949222c fix commands.main to render HTML for folders that only have subfolders, and no direct images
Tero Marttila <terom@fixme.fi>
parents: 123
diff changeset
    90
    # flag to track if we've rendered any contents.
7021d949222c fix commands.main to render HTML for folders that only have subfolders, and no direct images
Tero Marttila <terom@fixme.fi>
parents: 123
diff changeset
    91
    empty = True
101
698dc68a985d split --force-update into --force-thumb/--force-html options, implement for main
Tero Marttila <terom@fixme.fi>
parents: 94
diff changeset
    92
    
698dc68a985d split --force-update into --force-thumb/--force-html options, implement for main
Tero Marttila <terom@fixme.fi>
parents: 94
diff changeset
    93
    if ctx.config.force_html or ctx.config.force_thumb :
698dc68a985d split --force-update into --force-thumb/--force-html options, implement for main
Tero Marttila <terom@fixme.fi>
parents: 94
diff changeset
    94
        # index all
698dc68a985d split --force-update into --force-thumb/--force-html options, implement for main
Tero Marttila <terom@fixme.fi>
parents: 94
diff changeset
    95
        for_update = False
94
676c1d201cfe slightly reoriganize function structure in commands.main
Tero Marttila <terom@fixme.fi>
parents: 87
diff changeset
    96
101
698dc68a985d split --force-update into --force-thumb/--force-html options, implement for main
Tero Marttila <terom@fixme.fi>
parents: 94
diff changeset
    97
    else :
698dc68a985d split --force-update into --force-thumb/--force-html options, implement for main
Tero Marttila <terom@fixme.fi>
parents: 94
diff changeset
    98
        # only new images
698dc68a985d split --force-update into --force-thumb/--force-html options, implement for main
Tero Marttila <terom@fixme.fi>
parents: 94
diff changeset
    99
        for_update = True
698dc68a985d split --force-update into --force-thumb/--force-html options, implement for main
Tero Marttila <terom@fixme.fi>
parents: 94
diff changeset
   100
    
698dc68a985d split --force-update into --force-thumb/--force-html options, implement for main
Tero Marttila <terom@fixme.fi>
parents: 94
diff changeset
   101
    # full count of images
87
a7a18893730d implement up-to-date checking for commands.main, and add --force-update option
Tero Marttila <terom@fixme.fi>
parents: 76
diff changeset
   102
    image_count = len(folder.images)
101
698dc68a985d split --force-update into --force-thumb/--force-html options, implement for main
Tero Marttila <terom@fixme.fi>
parents: 94
diff changeset
   103
698dc68a985d split --force-update into --force-thumb/--force-html options, implement for main
Tero Marttila <terom@fixme.fi>
parents: 94
diff changeset
   104
    # index selected images
698dc68a985d split --force-update into --force-thumb/--force-html options, implement for main
Tero Marttila <terom@fixme.fi>
parents: 94
diff changeset
   105
    new_images = list(folder.index_images(for_update=for_update))
698dc68a985d split --force-update into --force-thumb/--force-html options, implement for main
Tero Marttila <terom@fixme.fi>
parents: 94
diff changeset
   106
131
7021d949222c fix commands.main to render HTML for folders that only have subfolders, and no direct images
Tero Marttila <terom@fixme.fi>
parents: 123
diff changeset
   107
    # index subfolders
7021d949222c fix commands.main to render HTML for folders that only have subfolders, and no direct images
Tero Marttila <terom@fixme.fi>
parents: 123
diff changeset
   108
    for subfolder in folder.subfolders :
7021d949222c fix commands.main to render HTML for folders that only have subfolders, and no direct images
Tero Marttila <terom@fixme.fi>
parents: 123
diff changeset
   109
        if render_folder(ctx, subfolder) :
7021d949222c fix commands.main to render HTML for folders that only have subfolders, and no direct images
Tero Marttila <terom@fixme.fi>
parents: 123
diff changeset
   110
            # positive assertion
7021d949222c fix commands.main to render HTML for folders that only have subfolders, and no direct images
Tero Marttila <terom@fixme.fi>
parents: 123
diff changeset
   111
            empty = False
7021d949222c fix commands.main to render HTML for folders that only have subfolders, and no direct images
Tero Marttila <terom@fixme.fi>
parents: 123
diff changeset
   112
    
7021d949222c fix commands.main to render HTML for folders that only have subfolders, and no direct images
Tero Marttila <terom@fixme.fi>
parents: 123
diff changeset
   113
    if folder.images :
7021d949222c fix commands.main to render HTML for folders that only have subfolders, and no direct images
Tero Marttila <terom@fixme.fi>
parents: 123
diff changeset
   114
        empty = False
7021d949222c fix commands.main to render HTML for folders that only have subfolders, and no direct images
Tero Marttila <terom@fixme.fi>
parents: 123
diff changeset
   115
7021d949222c fix commands.main to render HTML for folders that only have subfolders, and no direct images
Tero Marttila <terom@fixme.fi>
parents: 123
diff changeset
   116
    # only render HTML if needed
7021d949222c fix commands.main to render HTML for folders that only have subfolders, and no direct images
Tero Marttila <terom@fixme.fi>
parents: 123
diff changeset
   117
    if not empty  :
87
a7a18893730d implement up-to-date checking for commands.main, and add --force-update option
Tero Marttila <terom@fixme.fi>
parents: 76
diff changeset
   118
        # update folder index
117
a2e4562deaab implement concurrency... :)
Tero Marttila <terom@fixme.fi>
parents: 115
diff changeset
   119
        render_folder_html(ctx, folder)
131
7021d949222c fix commands.main to render HTML for folders that only have subfolders, and no direct images
Tero Marttila <terom@fixme.fi>
parents: 123
diff changeset
   120
    
7021d949222c fix commands.main to render HTML for folders that only have subfolders, and no direct images
Tero Marttila <terom@fixme.fi>
parents: 123
diff changeset
   121
    # only render new images if needed   
7021d949222c fix commands.main to render HTML for folders that only have subfolders, and no direct images
Tero Marttila <terom@fixme.fi>
parents: 123
diff changeset
   122
    if new_images or ctx.config.force_html :
87
a7a18893730d implement up-to-date checking for commands.main, and add --force-update option
Tero Marttila <terom@fixme.fi>
parents: 76
diff changeset
   123
        ctx.log_info("%s - render %d/%d images", folder, len(new_images), image_count)
a7a18893730d implement up-to-date checking for commands.main, and add --force-update option
Tero Marttila <terom@fixme.fi>
parents: 76
diff changeset
   124
a7a18893730d implement up-to-date checking for commands.main, and add --force-update option
Tero Marttila <terom@fixme.fi>
parents: 76
diff changeset
   125
        # update images
101
698dc68a985d split --force-update into --force-thumb/--force-html options, implement for main
Tero Marttila <terom@fixme.fi>
parents: 94
diff changeset
   126
        render_folder_images(ctx, new_images, for_update)
131
7021d949222c fix commands.main to render HTML for folders that only have subfolders, and no direct images
Tero Marttila <terom@fixme.fi>
parents: 123
diff changeset
   127
87
a7a18893730d implement up-to-date checking for commands.main, and add --force-update option
Tero Marttila <terom@fixme.fi>
parents: 76
diff changeset
   128
    else :
a7a18893730d implement up-to-date checking for commands.main, and add --force-update option
Tero Marttila <terom@fixme.fi>
parents: 76
diff changeset
   129
        ctx.log_info("%s - up to date", folder)
131
7021d949222c fix commands.main to render HTML for folders that only have subfolders, and no direct images
Tero Marttila <terom@fixme.fi>
parents: 123
diff changeset
   130
    
7021d949222c fix commands.main to render HTML for folders that only have subfolders, and no direct images
Tero Marttila <terom@fixme.fi>
parents: 123
diff changeset
   131
    # return flag
7021d949222c fix commands.main to render HTML for folders that only have subfolders, and no direct images
Tero Marttila <terom@fixme.fi>
parents: 123
diff changeset
   132
    return empty
66
322e5cd0cb1f implement new main() command, remove old one
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   133
322e5cd0cb1f implement new main() command, remove old one
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   134
@command
322e5cd0cb1f implement new main() command, remove old one
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   135
def main (ctx) :
322e5cd0cb1f implement new main() command, remove old one
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   136
    """
322e5cd0cb1f implement new main() command, remove old one
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   137
        Scan the gallery for new folders/images, and render updated ones
322e5cd0cb1f implement new main() command, remove old one
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   138
    """
322e5cd0cb1f implement new main() command, remove old one
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   139
322e5cd0cb1f implement new main() command, remove old one
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   140
    # render the gallery
322e5cd0cb1f implement new main() command, remove old one
Tero Marttila <terom@fixme.fi>
parents: 48
diff changeset
   141
    render_folder(ctx, ctx.gallery)
48
20355dd2e61a new structure for bin/degal, adding degal/commands, degal/main
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   142