diff options
author | Joar Wandborg <git@wandborg.com> | 2011-05-04 11:50:39 +0200 |
---|---|---|
committer | Joar Wandborg <git@wandborg.com> | 2011-05-04 11:50:39 +0200 |
commit | 7b3fcddbf4fd6418aceb9e0d06b912a0d79c4a97 (patch) | |
tree | ec4df697d6785da9f1246d3739df1f39bff8141d | |
parent | 1b46208f3e6daa773ed0ac2b7c811db68b8b3123 (diff) | |
parent | 88816492a3776618e2a2a9ad40d49445ebba410d (diff) | |
download | mediagoblin-7b3fcddbf4fd6418aceb9e0d06b912a0d79c4a97.tar.lz mediagoblin-7b3fcddbf4fd6418aceb9e0d06b912a0d79c4a97.tar.xz mediagoblin-7b3fcddbf4fd6418aceb9e0d06b912a0d79c4a97.zip |
Merge branch 'master' of http://git.gitorious.org/mediagoblin/mediagoblin
-rw-r--r-- | mediagoblin/celery_setup/__init__.py | 6 | ||||
-rw-r--r-- | mediagoblin/process_media/__init__.py | 50 | ||||
-rw-r--r-- | mediagoblin/tests/test_celery_setup.py | 4 | ||||
-rw-r--r-- | setup.py | 1 |
4 files changed, 59 insertions, 2 deletions
diff --git a/mediagoblin/celery_setup/__init__.py b/mediagoblin/celery_setup/__init__.py index 3a7f2a5d..551b2741 100644 --- a/mediagoblin/celery_setup/__init__.py +++ b/mediagoblin/celery_setup/__init__.py @@ -70,6 +70,8 @@ def asfloat(obj): "Bad float value: %r" % obj) +MANDATORY_CELERY_IMPORTS = ['mediagoblin.process_media'] + DEFAULT_SETTINGS_MODULE = 'mediagoblin.celery_setup.dummy_settings_module' def setup_celery_from_config(app_config, global_config, @@ -130,6 +132,10 @@ def setup_celery_from_config(app_config, global_config, value = aslist(value) celery_settings[key] = value + # add mandatory celery imports + celery_imports = celery_settings.setdefault('CELERY_IMPORTS', []) + celery_imports.extend(MANDATORY_CELERY_IMPORTS) + __import__(settings_module) this_module = sys.modules[settings_module] diff --git a/mediagoblin/process_media/__init__.py b/mediagoblin/process_media/__init__.py new file mode 100644 index 00000000..0d02a13f --- /dev/null +++ b/mediagoblin/process_media/__init__.py @@ -0,0 +1,50 @@ +# GNU MediaGoblin -- federated, autonomous media hosting +# Copyright (C) 2011 Free Software Foundation, Inc +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +import Image +import mongokit +from celery.task import task + +from mediagoblin.globals import database, queue_store, public_store + + +THUMB_SIZE = 200, 200 + + +@task +def process_media_initial(media_id): + entry = database.MediaEntry.one( + {'_id': mongokit.ObjectId(media_id)}) + + queued_filepath = entry['queue_files'].pop() + queued_file = queue_store.get_file(queued_filepath, 'r') + + with queued_file: + thumb = Image(queued_file) + thumb.thumbnail(THUMB_SIZE, Image.ANTIALIAS) + + thumb_filepath = public_store.get_unique_filepath( + ['media_entries', + unicode(entry['_id']), + 'thumbnail.jpg']) + + with public_store.get_file(thumb_filepath, 'w') as thumb_file: + thumb.save(thumb_file, "JPEG") + + queue_store.delete(queued_filepath) + entry.setdefault('media_files', []).append(thumb_filepath) + entry.state = 'processed' + entry.save() diff --git a/mediagoblin/tests/test_celery_setup.py b/mediagoblin/tests/test_celery_setup.py index da18b0ef..558eb458 100644 --- a/mediagoblin/tests/test_celery_setup.py +++ b/mediagoblin/tests/test_celery_setup.py @@ -45,7 +45,7 @@ def test_setup_celery_from_config(): assert isinstance(fake_celery_module.CELERYD_ETA_SCHEDULER_PRECISION, float) assert fake_celery_module.CELERY_RESULT_PERSISTENT is True assert fake_celery_module.CELERY_IMPORTS == [ - 'foo.bar.baz', 'this.is.an.import'] + 'foo.bar.baz', 'this.is.an.import', 'mediagoblin.process_media'] assert fake_celery_module.CELERY_MONGODB_BACKEND_SETTINGS == { 'database': 'mediagoblin'} assert fake_celery_module.CELERY_RESULT_BACKEND == 'mongodb' @@ -74,7 +74,7 @@ def test_setup_celery_from_config(): assert isinstance(fake_celery_module.CELERYD_ETA_SCHEDULER_PRECISION, float) assert fake_celery_module.CELERY_RESULT_PERSISTENT is False assert fake_celery_module.CELERY_IMPORTS == [ - 'baz.bar.foo', 'import.is.a.this'] + 'baz.bar.foo', 'import.is.a.this', 'mediagoblin.process_media'] assert fake_celery_module.CELERY_MONGODB_BACKEND_SETTINGS == { 'database': 'captain_lollerskates', 'host': 'mongodb.example.org', @@ -39,6 +39,7 @@ setup( 'celery', 'jinja2', 'sphinx', + 'PIL', ], test_suite='nose.collector', |