diff options
| author | Yuval Adam <yuv.adm@gmail.com> | 2013-12-31 16:11:47 +0200 |
|---|---|---|
| committer | Yuval Adam <yuv.adm@gmail.com> | 2013-12-31 16:12:29 +0200 |
| commit | 06dc00525acdc0021685aa58fc65075c0b50c355 (patch) | |
| tree | 894598226cef69b623dcdfcd1c9aa9ea562081fa | |
| parent | 47a0f07d18d3137a06ac9cd19f95be290fd7f276 (diff) | |
Add rain app and some celery stuff
| -rw-r--r-- | .gitignore | 3 | ||||
| -rw-r--r-- | Procfile.dev | 2 | ||||
| -rw-r--r-- | newsdiff/celery.py | 2 | ||||
| -rw-r--r-- | newsdiff/core/utils.py | 13 | ||||
| -rw-r--r-- | newsdiff/rain/__init__.py | 0 | ||||
| -rw-r--r-- | newsdiff/rain/admin.py | 4 | ||||
| -rw-r--r-- | newsdiff/rain/migrations/0001_initial.py | 34 | ||||
| -rw-r--r-- | newsdiff/rain/migrations/__init__.py | 0 | ||||
| -rw-r--r-- | newsdiff/rain/models.py | 9 | ||||
| -rw-r--r-- | newsdiff/rain/tasks.py | 20 | ||||
| -rw-r--r-- | newsdiff/rain/tests.py | 15 | ||||
| -rw-r--r-- | newsdiff/rain/views.py | 3 | ||||
| -rw-r--r-- | newsdiff/settings/base.py | 15 | ||||
| -rw-r--r-- | newsdiff/settings/local.py | 2 |
14 files changed, 115 insertions, 7 deletions
@@ -1,3 +1,6 @@ *.pyc +*.rdb + +celerybeat-schedule newsdiff/media/ diff --git a/Procfile.dev b/Procfile.dev index 848adfd..30c1b97 100644 --- a/Procfile.dev +++ b/Procfile.dev @@ -1 +1,3 @@ web: python manage.py runserver +#worker: celery -A newsdiff worker -B --loglevel=info +#redis: redis-server diff --git a/newsdiff/celery.py b/newsdiff/celery.py index c1e2111..cfb4ab7 100644 --- a/newsdiff/celery.py +++ b/newsdiff/celery.py @@ -5,7 +5,7 @@ import os from celery import Celery from django.conf import settings -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'segmanta.settings') +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'newsdiff.settings') app = Celery('newsdiff') app.config_from_object('django.conf:settings') diff --git a/newsdiff/core/utils.py b/newsdiff/core/utils.py index 2a5f4fc..514bf67 100644 --- a/newsdiff/core/utils.py +++ b/newsdiff/core/utils.py @@ -1,13 +1,18 @@ -import urllib2 +import logging +import requests from django.core.files import File from django.core.files.temp import NamedTemporaryFile from urlparse import urlparse + def get_image_from_url(url): tmp = NamedTemporaryFile(delete=True) - u = urllib2.urlopen(url) - tmp.write(u.read()) + req = requests.get(url) + if not req.ok: + logging.error('Failed to import image from {}'.format(url)) + return None + tmp.write(req.content) tmp.flush() - name = urlparse(u.geturl()).path.split('/')[-1] + name = urlparse(req.url).path.split('/')[-1] return name, File(tmp) diff --git a/newsdiff/rain/__init__.py b/newsdiff/rain/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/newsdiff/rain/__init__.py diff --git a/newsdiff/rain/admin.py b/newsdiff/rain/admin.py new file mode 100644 index 0000000..1421afd --- /dev/null +++ b/newsdiff/rain/admin.py @@ -0,0 +1,4 @@ +from django.contrib import admin +from .models import * + +admin.site.register(RainRadarImage) diff --git a/newsdiff/rain/migrations/0001_initial.py b/newsdiff/rain/migrations/0001_initial.py new file mode 100644 index 0000000..e60bdb0 --- /dev/null +++ b/newsdiff/rain/migrations/0001_initial.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +from south.utils import datetime_utils as datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding model 'RainRadarImage' + db.create_table(u'rain_rainradarimage', ( + (u'id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), + ('created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), + ('image', self.gf('django.db.models.fields.files.ImageField')(max_length=100)), + )) + db.send_create_signal(u'rain', ['RainRadarImage']) + + + def backwards(self, orm): + # Deleting model 'RainRadarImage' + db.delete_table(u'rain_rainradarimage') + + + models = { + u'rain.rainradarimage': { + 'Meta': {'object_name': 'RainRadarImage'}, + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}) + } + } + + complete_apps = ['rain']
\ No newline at end of file diff --git a/newsdiff/rain/migrations/__init__.py b/newsdiff/rain/migrations/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/newsdiff/rain/migrations/__init__.py diff --git a/newsdiff/rain/models.py b/newsdiff/rain/models.py new file mode 100644 index 0000000..1ff8915 --- /dev/null +++ b/newsdiff/rain/models.py @@ -0,0 +1,9 @@ +from django.db import models + + +class RainRadarImage(models.Model): + created = models.DateTimeField(auto_now_add=True, editable=False) + image = models.ImageField(upload_to='rain/%Y/%m/%d') + + def __unicode__(self): + return self.created.strftime('%Y/%m/%d %H:%M') diff --git a/newsdiff/rain/tasks.py b/newsdiff/rain/tasks.py new file mode 100644 index 0000000..582acbf --- /dev/null +++ b/newsdiff/rain/tasks.py @@ -0,0 +1,20 @@ +import logging +import requests + +from datetime import datetime +from newsdiff.celery import app +from newsdiff.core.utils import get_image_from_url + +from .models import RainRadarImage + +RAIN_RADAR_IMAGE_URL = 'http://www.ims.gov.il/Ims/Pages/RadarImage.aspx' + + +@app.task() +def import_rain_radar_image(): + logging.info('run') + _name, image = get_image_from_url(RAIN_RADAR_IMAGE_URL) + name = datetime.now().strftime('%H%M.gif') + image_obj = RainRadarImage() + image_obj.image.save(name, image) + image_obj.save() diff --git a/newsdiff/rain/tests.py b/newsdiff/rain/tests.py new file mode 100644 index 0000000..3ff7dfb --- /dev/null +++ b/newsdiff/rain/tests.py @@ -0,0 +1,15 @@ +from django.test import TestCase + +from .models import RainRadarImage +from .tasks import import_rain_radar_image + + +class RainRadarTestCase(TestCase): + def setUp(self): + pass + + def test_import_rain_radar_image(self): + import_rain_radar_image() + image = RainRadarImage.objects.all()[0] + self.assertTrue(image.created) + self.assertTrue(image.image.url) diff --git a/newsdiff/rain/views.py b/newsdiff/rain/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/newsdiff/rain/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/newsdiff/settings/base.py b/newsdiff/settings/base.py index 35c4b47..93bac16 100644 --- a/newsdiff/settings/base.py +++ b/newsdiff/settings/base.py @@ -1,5 +1,7 @@ +from datetime import timedelta from unipath import FSPath as Path + PROJECT_DIR = Path(__file__).absolute().ancestor(2) DEBUG = False @@ -13,7 +15,7 @@ MANAGERS = ADMINS ALLOWED_HOSTS = [] -TIME_ZONE = 'Etc/UTC' +TIME_ZONE = 'Asia/Jerusalem' LANGUAGE_CODE = 'en-us' SITE_ID = 1 USE_I18N = True @@ -85,7 +87,8 @@ INSTALLED_APPS = ( 'celery', 'reversion', - 'newsdiff.core' + 'newsdiff.core', + 'newsdiff.rain' ) AUTH_USER_MODEL = 'core.NewsDiffUser' @@ -119,3 +122,11 @@ LOGGING = { } TEST_RUNNER = 'django_nose.NoseTestSuiteRunner' + +CELERY_ACCEPT_CONTENT = ['json'] +CELERYBEAT_SCHEDULE = { + 'rain': { + 'task': 'newsdiff.rain.tasks.import_rain_radar_image', + 'schedule': timedelta(minutes=10) + }, +} diff --git a/newsdiff/settings/local.py b/newsdiff/settings/local.py index 95b64c1..cf76879 100644 --- a/newsdiff/settings/local.py +++ b/newsdiff/settings/local.py @@ -16,9 +16,11 @@ DATABASES = { } } + MEDIA_ROOT = PROJECT_DIR.child('media') MEDIA_URL = '/media/' EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' CELERY_ALWAYS_EAGER = True # Makes all celery tasks run synchronously +BROKER_URL = 'redis://localhost:6379/0' |
