Job stuff.
parent
21023b6781
commit
7329cef618
|
@ -3,6 +3,7 @@ from jobs.models import Job
|
||||||
|
|
||||||
|
|
||||||
class JobAdmin(admin.ModelAdmin):
|
class JobAdmin(admin.ModelAdmin):
|
||||||
list_display = ('title', 'company', 'location', 'url',)
|
list_display = ('title', 'created', 'company', 'url',)
|
||||||
|
ordering = ('-created',)
|
||||||
|
|
||||||
admin.site.register(Job, JobAdmin)
|
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)
|
company = models.CharField(max_length=255)
|
||||||
location = models.CharField(max_length=255)
|
location = models.CharField(max_length=255)
|
||||||
url = 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)
|
created = models.DateTimeField()
|
||||||
modified = models.DateTimeField(auto_now=True, editable=False)
|
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return self.title
|
return self.title
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
{% load humanize %}
|
||||||
{% load pagination_tags %}
|
{% load pagination_tags %}
|
||||||
|
|
||||||
{% block page-title %}Snipt Jobs{% endblock %}
|
{% block page-title %}Snipt Jobs{% endblock %}
|
||||||
|
@ -15,13 +16,14 @@
|
||||||
<ul>
|
<ul>
|
||||||
{% for job in jobs %}
|
{% for job in jobs %}
|
||||||
<li>
|
<li>
|
||||||
<a href="{{ job.url }}" class="group">
|
<a href="{{ job.url }}?aff=dbe7e" class="group">
|
||||||
<span class="left">
|
<span class="left">
|
||||||
<span class="job">{{ job.title }}</span>
|
<span class="job">{{ job.title }}</span>
|
||||||
<span class="company">{{ job.company }}</span>
|
<span class="company">{{ job.company }}</span>
|
||||||
</span>
|
</span>
|
||||||
<span class="right">
|
<span class="right">
|
||||||
<span class="location">{{ job.location }}</span>
|
<span class="location">{{ job.location }}</span>
|
||||||
|
<span class="date">{{ job.created|naturalday }}</span>
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</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>
|
<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>
|
||||||
<div class="post-job">
|
<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>
|
<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>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% 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-bottom: 0;
|
||||||
margin-top: 15px;
|
margin-top: 15px;
|
||||||
}
|
}
|
||||||
|
a {
|
||||||
|
width: 103px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
body.pro {
|
body.pro {
|
||||||
|
|
Loading…
Reference in New Issue