diff --git a/jobs/admin.py b/jobs/admin.py index 270122b..9824b17 100644 --- a/jobs/admin.py +++ b/jobs/admin.py @@ -3,6 +3,7 @@ from jobs.models import Job class JobAdmin(admin.ModelAdmin): - list_display = ('title', 'company', 'location', 'url',) + list_display = ('title', 'created', 'company', 'url',) + ordering = ('-created',) admin.site.register(Job, JobAdmin) diff --git a/jobs/management/__init__.py b/jobs/management/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/jobs/management/commands/__init__.py b/jobs/management/commands/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/jobs/management/commands/importjobs.py b/jobs/management/commands/importjobs.py new file mode 100644 index 0000000..e15eda5 --- /dev/null +++ b/jobs/management/commands/importjobs.py @@ -0,0 +1,48 @@ +from django.conf import settings +from django.core.management.base import BaseCommand +from jobs.models import Job + +import json +import requests + + +class Command(BaseCommand): + help = 'Import jobs' + listings = [] + + def get_for_page(self, page): + r = requests.get('{}&page={}'.format(settings.JOBS_BASE_URL, page)) + obj = r.json() + self.listings.extend(obj['listings']['listing']) + + if page < obj['listings']['pages']: + return self.get_for_page(page + 1) + + return self.listings + + def handle(self, *args, **options): + listings = self.get_for_page(1) + + jobs = Job.objects.all() + for job in jobs: + job.delete() + + for listing in listings: + + try: + location = listing['company']['location']['city'] + except: + location = '' + + try: + company = str(listing['company']['name']) + except: + company = '' + + newjob = Job(title=listing['title'], + company=company, + location=location, + url=listing['url'], + data=json.dumps(listing), + created=listing['post_date']) + newjob.save() diff --git a/jobs/migrations/0002_auto__add_field_job_data.py b/jobs/migrations/0002_auto__add_field_job_data.py new file mode 100644 index 0000000..0bfa9bb --- /dev/null +++ b/jobs/migrations/0002_auto__add_field_job_data.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Adding field 'Job.data' + db.add_column(u'jobs_job', 'data', + self.gf('django.db.models.fields.TextField')(null=True, blank=True), + keep_default=False) + + + def backwards(self, orm): + # Deleting field 'Job.data' + db.delete_column(u'jobs_job', 'data') + + + models = { + u'jobs.job': { + 'Meta': {'object_name': 'Job'}, + 'company': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'data': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'location': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'url': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + } + } + + complete_apps = ['jobs'] \ No newline at end of file diff --git a/jobs/migrations/0003_auto__del_field_job_modified.py b/jobs/migrations/0003_auto__del_field_job_modified.py new file mode 100644 index 0000000..4e0c825 --- /dev/null +++ b/jobs/migrations/0003_auto__del_field_job_modified.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + # Deleting field 'Job.modified' + db.delete_column(u'jobs_job', 'modified') + + + def backwards(self, orm): + + # User chose to not deal with backwards NULL issues for 'Job.modified' + raise RuntimeError("Cannot reverse this migration. 'Job.modified' and its values cannot be restored.") + + models = { + u'jobs.job': { + 'Meta': {'object_name': 'Job'}, + 'company': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), + 'data': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'location': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'url': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + } + } + + complete_apps = ['jobs'] \ No newline at end of file diff --git a/jobs/migrations/0004_auto__chg_field_job_created.py b/jobs/migrations/0004_auto__chg_field_job_created.py new file mode 100644 index 0000000..60b2e82 --- /dev/null +++ b/jobs/migrations/0004_auto__chg_field_job_created.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +import datetime +from south.db import db +from south.v2 import SchemaMigration +from django.db import models + + +class Migration(SchemaMigration): + + def forwards(self, orm): + + # Changing field 'Job.created' + db.alter_column(u'jobs_job', 'created', self.gf('django.db.models.fields.DateTimeField')()) + + def backwards(self, orm): + + # Changing field 'Job.created' + db.alter_column(u'jobs_job', 'created', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True)) + + models = { + u'jobs.job': { + 'Meta': {'object_name': 'Job'}, + 'company': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'created': ('django.db.models.fields.DateTimeField', [], {}), + 'data': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), + u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), + 'location': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'title': ('django.db.models.fields.CharField', [], {'max_length': '255'}), + 'url': ('django.db.models.fields.CharField', [], {'max_length': '255'}) + } + } + + complete_apps = ['jobs'] \ No newline at end of file diff --git a/jobs/models.py b/jobs/models.py index 8b156df..ce03ed0 100644 --- a/jobs/models.py +++ b/jobs/models.py @@ -8,9 +8,9 @@ class Job(models.Model): company = models.CharField(max_length=255) location = models.CharField(max_length=255) url = models.CharField(max_length=255) + data = models.TextField(blank=True, null=True) - created = models.DateTimeField(auto_now_add=True, editable=False) - modified = models.DateTimeField(auto_now=True, editable=False) + created = models.DateTimeField() def __unicode__(self): return self.title diff --git a/jobs/templates/jobs/jobs.html b/jobs/templates/jobs/jobs.html index 18d47be..fa40cfe 100644 --- a/jobs/templates/jobs/jobs.html +++ b/jobs/templates/jobs/jobs.html @@ -1,5 +1,6 @@ {% extends "base.html" %} +{% load humanize %} {% load pagination_tags %} {% block page-title %}Snipt Jobs{% endblock %} @@ -15,13 +16,14 @@