Rename to FilenameBuilder, with a main method named fill.

I think these names better convey what's actually going on.  I updated the
documentation a bit while I was at it.
This commit is contained in:
Brett Smith 2012-03-26 13:40:35 -04:00
parent 84725abd64
commit 28f364bd6d
4 changed files with 28 additions and 26 deletions

View File

@ -19,7 +19,7 @@ import os
from mediagoblin import mg_globals as mgg from mediagoblin import mg_globals as mgg
from mediagoblin.processing import BadMediaFail, \ from mediagoblin.processing import BadMediaFail, \
create_pub_filepath, THUMB_SIZE, MEDIUM_SIZE, FilenameMunger create_pub_filepath, THUMB_SIZE, MEDIUM_SIZE, FilenameBuilder
from mediagoblin.tools.exif import exif_fix_image_orientation, \ from mediagoblin.tools.exif import exif_fix_image_orientation, \
extract_exif, clean_exif, get_gps_data, get_useful extract_exif, clean_exif, get_gps_data, get_useful
@ -67,7 +67,7 @@ def process_image(entry):
queued_filename = workbench.localized_file( queued_filename = workbench.localized_file(
mgg.queue_store, queued_filepath, mgg.queue_store, queued_filepath,
'source') 'source')
name_munger = FilenameMunger(queued_filename) name_builder = FilenameBuilder(queued_filename)
# EXIF extraction # EXIF extraction
exif_tags = extract_exif(queued_filename) exif_tags = extract_exif(queued_filename)
@ -75,7 +75,7 @@ def process_image(entry):
# Always create a small thumbnail # Always create a small thumbnail
thumb_filepath = create_pub_filepath( thumb_filepath = create_pub_filepath(
entry, name_munger.munge('{basename}.thumbnail{ext}')) entry, name_builder.fill('{basename}.thumbnail{ext}'))
resize_image(entry, queued_filename, thumb_filepath, resize_image(entry, queued_filename, thumb_filepath,
exif_tags, conversions_subdir, THUMB_SIZE) exif_tags, conversions_subdir, THUMB_SIZE)
@ -83,7 +83,7 @@ def process_image(entry):
# file, a `.medium.jpg` files is created and later associated with the media # file, a `.medium.jpg` files is created and later associated with the media
# entry. # entry.
medium_filepath = create_pub_filepath( medium_filepath = create_pub_filepath(
entry, name_munger.munge('{basename}.medium{ext}')) entry, name_builder.fill('{basename}.medium{ext}'))
resize_image(entry, queued_filename, medium_filepath, resize_image(entry, queued_filename, medium_filepath,
exif_tags, conversions_subdir, MEDIUM_SIZE, MEDIUM_SIZE) exif_tags, conversions_subdir, MEDIUM_SIZE, MEDIUM_SIZE)
@ -93,7 +93,7 @@ def process_image(entry):
with queued_file: with queued_file:
original_filepath = create_pub_filepath( original_filepath = create_pub_filepath(
entry, name_munger.munge('{basename}{ext}') ) entry, name_builder.fill('{basename}{ext}') )
with mgg.public_store.get_file(original_filepath, 'wb') \ with mgg.public_store.get_file(original_filepath, 'wb') \
as original_file: as original_file:

View File

@ -20,7 +20,7 @@ import os
from mediagoblin import mg_globals as mgg from mediagoblin import mg_globals as mgg
from mediagoblin.processing import mark_entry_failed, \ from mediagoblin.processing import mark_entry_failed, \
THUMB_SIZE, MEDIUM_SIZE, create_pub_filepath, FilenameMunger THUMB_SIZE, MEDIUM_SIZE, create_pub_filepath, FilenameBuilder
from . import transcoders from . import transcoders
logging.basicConfig() logging.basicConfig()
@ -49,13 +49,13 @@ def process_video(entry):
queued_filename = workbench.localized_file( queued_filename = workbench.localized_file(
mgg.queue_store, queued_filepath, mgg.queue_store, queued_filepath,
'source') 'source')
name_munger = FilenameMunger(queued_filename) name_builder = FilenameBuilder(queued_filename)
medium_filepath = create_pub_filepath( medium_filepath = create_pub_filepath(
entry, name_munger.munge('{basename}-640p.webm')) entry, name_builder.fill('{basename}-640p.webm'))
thumbnail_filepath = create_pub_filepath( thumbnail_filepath = create_pub_filepath(
entry, name_munger.munge('{basename}.thumbnail.jpg')) entry, name_builder.fill('{basename}.thumbnail.jpg'))
# Create a temporary file for the video destination # Create a temporary file for the video destination
tmp_dst = tempfile.NamedTemporaryFile() tmp_dst = tempfile.NamedTemporaryFile()

View File

@ -43,28 +43,30 @@ def create_pub_filepath(entry, filename):
# Media processing initial steps # Media processing initial steps
################################ ################################
class FilenameMunger(object): class FilenameBuilder(object):
"""Easily slice and dice filenames. """Easily slice and dice filenames.
Initialize this class with an original filename, then use the munge() Initialize this class with an original file path, then use the fill()
method to create new filenames based on the original. method to create new filenames based on the original.
""" """
MAX_FILENAME_LENGTH = 255 # VFAT's maximum filename length MAX_FILENAME_LENGTH = 255 # VFAT's maximum filename length
def __init__(self, path): def __init__(self, path):
"""Initialize a munger with one original filename.""" """Initialize a builder from an original file path."""
self.dirpath, self.basename = os.path.split(path) self.dirpath, self.basename = os.path.split(path)
self.basename, self.ext = os.path.splitext(self.basename) self.basename, self.ext = os.path.splitext(self.basename)
self.ext = self.ext.lower() self.ext = self.ext.lower()
def munge(self, fmtstr): def fill(self, fmtstr):
"""Return a new filename based on the initialized original. """Build a new filename based on the original.
The fmtstr argumentcan include {basename} and {ext}, which will The fmtstr argument can include the following:
fill in components of the original filename. The extension will {basename} -- the original basename, with the extension removed
always be lowercased. The filename will also be trunacted to this {ext} -- the original extension, always lowercase
class' MAX_FILENAME_LENGTH characters.
If necessary, {basename} will be truncated so the filename does not
exceed this class' MAX_FILENAME_LENGTH in length.
""" """
basename_len = (self.MAX_FILENAME_LENGTH - basename_len = (self.MAX_FILENAME_LENGTH -

View File

@ -5,16 +5,16 @@ from nose.tools import assert_equal, assert_true, assert_false
from mediagoblin import processing from mediagoblin import processing
class TestProcessing(object): class TestProcessing(object):
def run_munge(self, input, format, output=None): def run_fill(self, input, format, output=None):
munger = processing.FilenameMunger(input) builder = processing.FilenameBuilder(input)
result = munger.munge(format) result = builder.fill(format)
if output is None: if output is None:
return result return result
assert_equal(output, result) assert_equal(output, result)
def test_easy_filename_munge(self): def test_easy_filename_fill(self):
self.run_munge('/home/user/foo.TXT', '{basename}bar{ext}', 'foobar.txt') self.run_fill('/home/user/foo.TXT', '{basename}bar{ext}', 'foobar.txt')
def test_long_filename_munge(self): def test_long_filename_fill(self):
self.run_munge('{0}.png'.format('A' * 300), 'image-{basename}{ext}', self.run_fill('{0}.png'.format('A' * 300), 'image-{basename}{ext}',
'image-{0}.png'.format('A' * 245)) 'image-{0}.png'.format('A' * 245))