Job stuff.
parent
21023b6781
commit
7329cef618
|
@ -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)
|
||||
|
|
|
@ -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()
|
|
@ -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']
|
|
@ -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']
|
|
@ -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']
|
|
@ -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
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
{% extends "base.html" %}
|
||||
|
||||
{% load humanize %}
|
||||
{% load pagination_tags %}
|
||||
|
||||
{% block page-title %}Snipt Jobs{% endblock %}
|
||||
|
@ -15,13 +16,14 @@
|
|||
<ul>
|
||||
{% for job in jobs %}
|
||||
<li>
|
||||
<a href="{{ job.url }}" class="group">
|
||||
<a href="{{ job.url }}?aff=dbe7e" class="group">
|
||||
<span class="left">
|
||||
<span class="job">{{ job.title }}</span>
|
||||
<span class="company">{{ job.company }}</span>
|
||||
</span>
|
||||
<span class="right">
|
||||
<span class="location">{{ job.location }}</span>
|
||||
<span class="date">{{ job.created|naturalday }}</span>
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
|
@ -36,9 +38,9 @@
|
|||
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>
|
||||
</div>
|
||||
<div class="post-job">
|
||||
<strong>Want to post a job?</strong>
|
||||
<a href="http://www.authenticjobs.com/post/?aff=dbe7e" class="btn btn-large btn-success">Post a job</a>
|
||||
<p>
|
||||
Job posts are currently <i>invite only</i>. If you'd like to be considered for future posts, please email <a href="mailto:jobs@snipt.net">jobs@snipt.net</a>.
|
||||
We use <a href="http://www.authenticjobs.com?aff=dbe7e">Authentic Jobs</a> for our job board provider. Once you post your ad, it will appear on Snipt within 24 hours.
|
||||
</p>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1857,6 +1857,9 @@ body.jobs {
|
|||
margin-bottom: 0;
|
||||
margin-top: 15px;
|
||||
}
|
||||
a {
|
||||
width: 103px;
|
||||
}
|
||||
}
|
||||
}
|
||||
body.pro {
|
||||
|
|
Loading…
Reference in New Issue