summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore3
-rw-r--r--Procfile.dev2
-rw-r--r--newsdiff/celery.py2
-rw-r--r--newsdiff/core/utils.py13
-rw-r--r--newsdiff/rain/__init__.py0
-rw-r--r--newsdiff/rain/admin.py4
-rw-r--r--newsdiff/rain/migrations/0001_initial.py34
-rw-r--r--newsdiff/rain/migrations/__init__.py0
-rw-r--r--newsdiff/rain/models.py9
-rw-r--r--newsdiff/rain/tasks.py20
-rw-r--r--newsdiff/rain/tests.py15
-rw-r--r--newsdiff/rain/views.py3
-rw-r--r--newsdiff/settings/base.py15
-rw-r--r--newsdiff/settings/local.py2
14 files changed, 115 insertions, 7 deletions
diff --git a/.gitignore b/.gitignore
index 641b4c4..0c722fd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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'