diff --git a/bockus/bockus/__init__.py b/bockus/bockus/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/bockus/bockus/settings/__init__.py b/bockus/bockus/settings/__init__.py new file mode 100644 index 0000000..a54cfb5 --- /dev/null +++ b/bockus/bockus/settings/__init__.py @@ -0,0 +1 @@ +__author__ = 'kelseyhawley' diff --git a/bockus/bockus/settings/base.py b/bockus/bockus/settings/base.py new file mode 100644 index 0000000..cd46c7d --- /dev/null +++ b/bockus/bockus/settings/base.py @@ -0,0 +1,85 @@ +""" +Django settings for bockus project. + +For more information on this file, see +https://docs.djangoproject.com/en/1.6/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/1.6/ref/settings/ +""" + +# Build paths inside the project like this: os.path.join(BASE_DIR, ...) +import os +BASE_DIR = os.path.dirname(os.path.dirname(__file__)) + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/1.6/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = "abc123" + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +TEMPLATE_DEBUG = True + +ALLOWED_HOSTS = [] + + +# Application definition + +INSTALLED_APPS = ( + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + 'books', + 'profiles', + 'usercollections', +) + +MIDDLEWARE_CLASSES = ( + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +) + +ROOT_URLCONF = 'bockus.urls' + +WSGI_APPLICATION = 'bockus.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/1.6/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), + } +} + +# Internationalization +# https://docs.djangoproject.com/en/1.6/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/1.6/howto/static-files/ + +STATIC_URL = '/static/' diff --git a/bockus/bockus/settings/local.py b/bockus/bockus/settings/local.py new file mode 100644 index 0000000..2dbd789 --- /dev/null +++ b/bockus/bockus/settings/local.py @@ -0,0 +1,23 @@ +import os + +from base import * + +SECRET_KEY = os.environ["SECRET_KEY"] + +DEBUG = True +TEMPLATE_DEBUG = DEBUG + +EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' + +DATABASES = { + "default": { + "ENGINE": "django.db.backends.postgresql_psycopg2", + "NAME": "bockus", + "USER": "", + "PASSWORD": "", + "HOST": "localhost", + "PORT": "", + } +} + +INSTALLED_APPS += ("debug_toolbar",) \ No newline at end of file diff --git a/bockus/bockus/urls.py b/bockus/bockus/urls.py new file mode 100644 index 0000000..5f9db04 --- /dev/null +++ b/bockus/bockus/urls.py @@ -0,0 +1,12 @@ +from django.conf.urls import patterns, include, url + +from django.contrib import admin +admin.autodiscover() + +urlpatterns = patterns('', + # Examples: + # url(r'^$', 'bockus.views.home', name='home'), + # url(r'^blog/', include('blog.urls')), + + url(r'^admin/', include(admin.site.urls)), +) diff --git a/bockus/bockus/wsgi.py b/bockus/bockus/wsgi.py new file mode 100644 index 0000000..58ffd6e --- /dev/null +++ b/bockus/bockus/wsgi.py @@ -0,0 +1,14 @@ +""" +WSGI config for bockus project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/1.6/howto/deployment/wsgi/ +""" + +import os +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "bockus.settings") + +from django.core.wsgi import get_wsgi_application +application = get_wsgi_application() diff --git a/bockus/books/__init__.py b/bockus/books/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/bockus/books/admin.py b/bockus/books/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/bockus/books/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/bockus/books/models.py b/bockus/books/models.py new file mode 100644 index 0000000..488728b --- /dev/null +++ b/bockus/books/models.py @@ -0,0 +1,30 @@ +from django.db import models + + +COVER_TYPE_CHOICES = ( + ("Front", "Front"), + ("Spine", "Spine"), + ("Back", "Back"), + ("Full", "Full - Front, Spine & Back"), +) + +class Book(models.Model): + title = models.CharField(max_length=255) + author_first_name = models.CharField(max_length=100) + author_last_name = models.CharField(max_length=100) + summary = models.TextField() + + def __str__(self): + return self.title + " by " + self.author_last_name + ", " + self.author_first_name + +class Cover(models.Model): + book = models.ForeignKey(Book) + publisher = models.CharField(max_length=25) + publish_date = models.DateField() + # image = models.ImageField(upload_to="book_covers") + type = models.CharField(max_length=10, choices=COVER_TYPE_CHOICES) + + def __str__(self): + return self.type + " - " + self.book.title + " by " + \ + self.book.author_last_name + ", " + self.book.author_first_name + diff --git a/bockus/books/tests.py b/bockus/books/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/bockus/books/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/bockus/books/views.py b/bockus/books/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/bockus/books/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/bockus/manage.py b/bockus/manage.py new file mode 100755 index 0000000..0a4ccea --- /dev/null +++ b/bockus/manage.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python +import os +import sys + +if __name__ == "__main__": + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "bockus.settings") + + from django.core.management import execute_from_command_line + + execute_from_command_line(sys.argv) diff --git a/bockus/usercollections/__init__.py b/bockus/usercollections/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/bockus/usercollections/admin.py b/bockus/usercollections/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/bockus/usercollections/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/bockus/usercollections/models.py b/bockus/usercollections/models.py new file mode 100644 index 0000000..f66600d --- /dev/null +++ b/bockus/usercollections/models.py @@ -0,0 +1,32 @@ +from django.db import models +from django.contrib.auth.models import User + +from books.models import Book, Cover + +class UserBook(models.Model): + user = models.ForeignKey(User) + book = models.ForeignKey(Book) + cover = models.ForeignKey(Cover) + rating = models.PositiveSmallIntegerField(max_length=5) + +class Tag(models.Model): + name = models.CharField(max_length=25) + + # create intermediary manytomany table + # https://docs.djangoproject.com/en/dev/topics/db/models/#intermediary-manytomany + books = models.ManyToManyField(UserBook, through="TaggedUserBook") + + # self referencing ManyToMany stack-overflow question + # http://stackoverflow.com/questions/3880489/how-do-i-write-a-django-model-with-manytomany-relationsship-with-self-through-a + groups = models.ManyToManyField('self', through="TagGroup", symmetrical=False) + + +class TaggedUserBook(models.Model): + userBook = models.ForeignKey(UserBook) + tag = models.ForeignKey(Tag) + order_in_tag_list = models.PositiveIntegerField() + +class TagGroup(models.Model): + parent = models.ForeignKey(Tag, related_name='parent') + child = models.ForeignKey(Tag, related_name='child') + order_in_parent_list = models.PositiveIntegerField() \ No newline at end of file diff --git a/bockus/usercollections/tests.py b/bockus/usercollections/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/bockus/usercollections/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/bockus/usercollections/views.py b/bockus/usercollections/views.py new file mode 100644 index 0000000..91ea44a --- /dev/null +++ b/bockus/usercollections/views.py @@ -0,0 +1,3 @@ +from django.shortcuts import render + +# Create your views here. diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..27c9043 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,5 @@ +Django==1.7 +django-debug-toolbar==1.2.1 +psycopg2==2.5.4 +sqlparse==0.1.11 +wsgiref==0.1.2