diff options
-rw-r--r-- | mediagoblin/processing.py | 16 | ||||
-rw-r--r-- | mediagoblin/tests/test_processing.py | 20 |
2 files changed, 36 insertions, 0 deletions
diff --git a/mediagoblin/processing.py b/mediagoblin/processing.py index 1c84c557..b0d5751e 100644 --- a/mediagoblin/processing.py +++ b/mediagoblin/processing.py @@ -15,6 +15,7 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. import logging +import os from celery.task import Task @@ -42,6 +43,21 @@ def create_pub_filepath(entry, filename): # Media processing initial steps ################################ +class FilenameMunger(object): + MAX_FILENAME_LENGTH = 255 + + def __init__(self, path): + self.dirpath, self.basename = os.path.split(path) + self.basename, self.ext = os.path.splitext(self.basename) + self.ext = self.ext.lower() + + def munge(self, fmtstr): + basename_len = (self.MAX_FILENAME_LENGTH - + len(fmtstr.format(basename='', ext=self.ext))) + return fmtstr.format(basename=self.basename[:basename_len], + ext=self.ext) + + class ProcessMedia(Task): """ DEPRECATED -- This now resides in the individual media plugins diff --git a/mediagoblin/tests/test_processing.py b/mediagoblin/tests/test_processing.py new file mode 100644 index 00000000..6f3fad70 --- /dev/null +++ b/mediagoblin/tests/test_processing.py @@ -0,0 +1,20 @@ +#!/usr/bin/env python + +from nose.tools import assert_equal, assert_true, assert_false + +from mediagoblin import processing + +class TestProcessing(object): + def run_munge(self, input, format, output=None): + munger = processing.FilenameMunger(input) + result = munger.munge(format) + if output is None: + return result + assert_equal(output, result) + + def test_easy_filename_munge(self): + self.run_munge('/home/user/foo.TXT', '{basename}bar{ext}', 'foobar.txt') + + def test_long_filename_munge(self): + self.run_munge('{0}.png'.format('A' * 300), 'image-{basename}{ext}', + 'image-{0}.png'.format('A' * 245)) |