From 1b32f0e0cdbb3c543018eda95e5a46aa521690cb Mon Sep 17 00:00:00 2001 From: Sanj Date: Sun, 11 Dec 2011 04:45:26 +0530 Subject: [PATCH] first commit --- campslides/__init__.py | 0 campslides/manage.py | 11 ++++ campslides/settings.py | 117 ++++++++++++++++++++++++++++++++++ campslides/slides/__init__.py | 0 campslides/slides/admin.py | 15 +++++ campslides/slides/models.py | 36 +++++++++++ campslides/slides/tests.py | 23 +++++++ campslides/slides/views.py | 15 +++++ campslides/urls.py | 17 +++++ 9 files changed, 234 insertions(+) create mode 100644 campslides/__init__.py create mode 100755 campslides/manage.py create mode 100644 campslides/settings.py create mode 100644 campslides/slides/__init__.py create mode 100755 campslides/slides/admin.py create mode 100644 campslides/slides/models.py create mode 100644 campslides/slides/tests.py create mode 100644 campslides/slides/views.py create mode 100644 campslides/urls.py diff --git a/campslides/__init__.py b/campslides/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/campslides/manage.py b/campslides/manage.py new file mode 100755 index 0000000..bcdd55e --- /dev/null +++ b/campslides/manage.py @@ -0,0 +1,11 @@ +#!/usr/bin/python +from django.core.management import execute_manager +try: + import settings # Assumed to be in the same directory. +except ImportError: + import sys + sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__) + sys.exit(1) + +if __name__ == "__main__": + execute_manager(settings) diff --git a/campslides/settings.py b/campslides/settings.py new file mode 100644 index 0000000..2d30215 --- /dev/null +++ b/campslides/settings.py @@ -0,0 +1,117 @@ +# Django settings for campslides project. +import os +from os.path import join + +DEBUG = True +TEMPLATE_DEBUG = DEBUG +PROJECT_ROOT = os.path.dirname(__file__) + +ADMINS = ( + # ('Your Name', 'your_email@domain.com'), +) + +MANAGERS = ADMINS + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. + 'NAME': 'slides.db', # Or path to database file if using sqlite3. + 'USER': '', # Not used with sqlite3. + 'PASSWORD': '', # Not used with sqlite3. + 'HOST': '', # Set to empty string for localhost. Not used with sqlite3. + 'PORT': '', # Set to empty string for default. Not used with sqlite3. + } +} + +# Local time zone for this installation. Choices can be found here: +# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name +# although not all choices may be available on all operating systems. +# On Unix systems, a value of None will cause Django to use the same +# timezone as the operating system. +# If running in a Windows environment this must be set to the same as your +# system time zone. +TIME_ZONE = 'America/Chicago' + +# Language code for this installation. All choices can be found here: +# http://www.i18nguy.com/unicode/language-identifiers.html +LANGUAGE_CODE = 'en-us' + +SITE_ID = 1 + +# If you set this to False, Django will make some optimizations so as not +# to load the internationalization machinery. +USE_I18N = True + +# If you set this to False, Django will not format dates, numbers and +# calendars according to the current locale +USE_L10N = True + +# Absolute path to the directory that holds media. +# Example: "/home/media/media.lawrence.com/" +MEDIA_ROOT = join(PROJECT_ROOT, 'static') + +# URL that handles the media served from MEDIA_ROOT. Make sure to use a +# trailing slash if there is a path component (optional in other cases). +# Examples: "http://media.lawrence.com", "http://example.com/media/" +MEDIA_URL = '/static/' + +# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a +# trailing slash. +# Examples: "http://foo.com/media/", "/media/". +ADMIN_MEDIA_PREFIX = '/admin/media/' + +# Make this unique, and don't share it with anybody. +try: + SECRET_KEY +except NameError: + SECRET_FILE = os.path.join(PROJECT_ROOT, 'secret.txt') + try: + SECRET_KEY = open(SECRET_FILE).read().strip() + except IOError: + try: + from random import choice + SECRET_KEY = ''.join([choice('abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*(-_=+)') for i in range(50)]) + secret = file(SECRET_FILE, 'w') + secret.write(SECRET_KEY) + secret.close() + except IOError: + Exception('Please create a %s file with random characters to generate your secret key!' % SECRET_FILE) + + + +# List of callables that know how to import templates from various sources. +TEMPLATE_LOADERS = ( + 'django.template.loaders.filesystem.Loader', + 'django.template.loaders.app_directories.Loader', +# 'django.template.loaders.eggs.Loader', +) + +MIDDLEWARE_CLASSES = ( + 'django.middleware.common.CommonMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', +) + +ROOT_URLCONF = 'campslides.urls' + +TEMPLATE_DIRS = ( + join(PROJECT_ROOT, 'templates'), + # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". + # Always use forward slashes, even on Windows. + # Don't forget to use absolute paths, not relative paths. +) + +INSTALLED_APPS = ( + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.sites', + 'django.contrib.messages', + # Uncomment the next line to enable the admin: + 'django.contrib.admin', + # Uncomment the next line to enable admin documentation: + 'django.contrib.admindocs', + 'slides', +) diff --git a/campslides/slides/__init__.py b/campslides/slides/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/campslides/slides/admin.py b/campslides/slides/admin.py new file mode 100755 index 0000000..0905621 --- /dev/null +++ b/campslides/slides/admin.py @@ -0,0 +1,15 @@ +from django.contrib import admin +from models import * + + +class SlideInline(admin.StackedInline): + model = Slide + extra = 12 + + +class SlideshowAdmin(admin.ModelAdmin): + inlines = [SlideInline] + prepopulated_fields = {'slug': ('title',)} + + +admin.site.register(Slideshow, SlideshowAdmin) diff --git a/campslides/slides/models.py b/campslides/slides/models.py new file mode 100644 index 0000000..f2c08fc --- /dev/null +++ b/campslides/slides/models.py @@ -0,0 +1,36 @@ +from django.db import models + +class Slideshow(models.Model): + title = models.CharField(max_length=255) + slug = models.SlugField() + + def __unicode__(self): + return self.title + +CLASS_CHOICES = ( + ('defaultStyle', 'Default Style'), +) + +class Slide(models.Model): + slideshow = models.ForeignKey(Slideshow) + position = models.IntegerField(null=True, blank=True) + title = models.CharField(max_length=512, blank=True) + text = models.TextField(blank=True) + url = models.URLField(blank=True) + css_class = models.CharField(max_length=255, choices=CLASS_CHOICES) + + class Meta: + ordering = ['position'] + + def __unicode__(self): + return "%d: %s" (self.position, self.title,) + + def get_dict(self): + ret = {} + ret['title'] = self.title + if self.url.trim() != '': + ret['iframe'] = self.url + else: + ret['text'] = self.text + ret['css_class'] = self.css_class + return ret diff --git a/campslides/slides/tests.py b/campslides/slides/tests.py new file mode 100644 index 0000000..2247054 --- /dev/null +++ b/campslides/slides/tests.py @@ -0,0 +1,23 @@ +""" +This file demonstrates two different styles of tests (one doctest and one +unittest). These will both pass when you run "manage.py test". + +Replace these with more appropriate tests for your application. +""" + +from django.test import TestCase + +class SimpleTest(TestCase): + def test_basic_addition(self): + """ + Tests that 1 + 1 always equals 2. + """ + self.failUnlessEqual(1 + 1, 2) + +__test__ = {"doctest": """ +Another way to test that 1 + 1 is equal to 2. + +>>> 1 + 1 == 2 +True +"""} + diff --git a/campslides/slides/views.py b/campslides/slides/views.py new file mode 100644 index 0000000..332ad38 --- /dev/null +++ b/campslides/slides/views.py @@ -0,0 +1,15 @@ +# Create your views here. +import json +from ox.django.shortcuts import render_to_json_response +from django.shortcuts import get_object_or_404, render_to_response +from models import * + +def slideshow(request, slug): + slideshow = get_object_or_404(Slideshow, slug=slug) + return render_to_response("index.html", {'slideshow': slideshow}) + +def slideshow_json(request): + id = request.GET.get('id', 0) + slideshow = get_object_or_404(Slideshow, pk=id) + slides = [s.get_dict() for s in Slide.objects.filter(slideshow=slideshow)] + return render_to_json_response(slides) diff --git a/campslides/urls.py b/campslides/urls.py new file mode 100644 index 0000000..138527a --- /dev/null +++ b/campslides/urls.py @@ -0,0 +1,17 @@ +from django.conf.urls.defaults import * + +# Uncomment the next two lines to enable the admin: +from django.contrib import admin +admin.autodiscover() + +urlpatterns = patterns('', + # Example: + # (r'^campslides/', include('campslides.foo.urls')), + + # Uncomment the admin/doc line below to enable admin documentation: + # (r'^admin/doc/', include('django.contrib.admindocs.urls')), + (r'^s/(?P.*)', 'slides.views.slideshow'), + (r'^slideshow_json/$', 'slides.views.slideshow_json'), + # Uncomment the next line to enable the admin: + (r'^admin/', include(admin.site.urls)), +)