Blaggregator is a Django app with a Bootstrap frontend, that is deployed on Heroku and uses their Postgres and Scheduler add-ons.
This document aims to help you setup a development environment and to help you get started with the code.
Requires Docker and Docker-compose to simplify setup of development environment. See the traditional setup section if you don't wish to use docker.
In web-variables.env
fill out your credentials. See
Credentials for instructions on generating.
HS_PERSONAL_TOKEN=<token>
SOCIAL_AUTH_HS_KEY=<token>
SOCIAL_AUTH_HS_SECRET=<token>
docker-compose up
# Runs migrations and the app using runserver
# You can ssh into box to run other commands
It is possible to use Docker just for the DB and use the traditional setup for setting up your Python development environment.
docker-compose -f docker-compose.pg.yml up --build
This will start a Postgres server that the server running on your local host machine can connect to, with no additional changes to the configuration.
-
Set up your virtual environment
-
Install dependencies:
$ pip install -r requirements.txt
-
Install Postgres (it's easy on OSX with postgres.app) and
pip install psycopg2
. Open the app to start your database server running locally.It is possible to use Docker for running the DB, if you prefer. See section Using Docker for the DB above.
-
Open a Postgres shell:
$ psql
-
Create your database:
CREATE DATABASE blaggregator_dev;
The semicolon is critical. IMPORTANT: when you are creating your admin account on the db, don't use the same email address as your Recurse Center account or you won't be able to create a user account for yourself. Do username+root@example.com or something.
-
Create the user for Django to use. As the
postgres
user, you can run the following:
createuser --interactive --pwprompt
Set username and password to `sasha`. Let the new user create and delete databases.
-
-
Alternatively, you could use Sqlite instead of Postgres to get off the blocks, quickly. Change the value of
'ENGINE'
in theDATABASES['default']
dictionary to'django.db.backends.sqlite3'
. -
Set up initial tables:
$ python manage.py migrate
- Bring the tables up to date with the latest South migrations:
$ python manage.py migrate
If you get this error:
OperationalError: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?
then your server isn't running. Go fiddle with Postgres.app.
- Turn on debugging in your environment so you can get useful error messages:
$ export DJANGO_DEBUG=True
-
Blaggregator uses oauth2 to log in users against recurse.com and tokens to update user details. Store
SOCIAL_AUTH_HS_KEY
,SOCIAL_AUTH_HS_SECRET
, and HS_PERSONAL_TOKEN in your environment. See Credentials for instructions on generating these. -
Then run a local server:
$ python manage.py runserver
You can administer your app through the handy-dandy admin interface. To see this page, you'll need to give your user account superuser privileges:
- go to http://localhost:8000/ and auth in through HS's oauth
$ python manage.py shell
to open Django's shell and use its ORM>>> from django.contrib.auth.models import User
import the User model (should you need the other models defined inmodels.py
, import fromhome.models
. User uses Django's built-in User model)>>> u = User.objects.get(first_name="Sasha")
or whatever your first name is. Grab your user object from the db.>>> u.is_superuser = True
make your account a superuser so you can access the admin>>> u.save()
Save these changes to the db.- You should now be able to access localhost:8000/admin while logged in!
Go to your settings on recurse.com, make a new app. Name it something like "blaggregator-local" and the url should be http://localhost:8000/complete/hackerschool/ (WITH trailing slash). There you can get SOCIAL_AUTH_HS_KEY
and SOCIAL_AUTH_HS_SECRET
.
Also create a personal access token and give it a name. This will generate the token to use for HS_PERSONAL_TOKEN
.
Key files:
home/views.py
: the heart of the app. all of the views ("controllers" if you're coming from Ruby)blaggregator/settings.py
: app settingshome/management/commands/crawlposts.py
: background crawler scripthome/feedergrabber27.py
: feed parserhome/templates/home
: all templates live here