first commit
This commit is contained in:
parent
d5f3ef90e2
commit
96fa0509ab
0
best/__init__.py
Normal file
0
best/__init__.py
Normal file
14
best/clear_inbox.py
Normal file
14
best/clear_inbox.py
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
import pygsm
|
||||||
|
|
||||||
|
modem = pygsm.GsmModem("/dev/ttyS0", baudrate=115200, timeout=1)
|
||||||
|
modem.boot()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
for i in range(25):
|
||||||
|
try:
|
||||||
|
temp = modem.command('AT+CMGR=' + str(i+1)+',1')
|
||||||
|
if "REC READ" in temp[0]:
|
||||||
|
modem.query('AT+CMGD=' + str(i+1))
|
||||||
|
except:
|
||||||
|
pass
|
18
best/manage.py
Normal file
18
best/manage.py
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# vim: ai ts=4 sts=4 et sw=4
|
||||||
|
|
||||||
|
#import sys, os
|
||||||
|
|
||||||
|
from django.core.management import execute_manager
|
||||||
|
import settings
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
# project_root = os.path.abspath(
|
||||||
|
# os.path.dirname(__file__))
|
||||||
|
|
||||||
|
# path = os.path.join(project_root, "apps")
|
||||||
|
# sys.path.insert(0, path)
|
||||||
|
|
||||||
|
# sys.path.insert(0, project_root)
|
||||||
|
execute_manager(settings)
|
BIN
best/my_project_visualized.png
Normal file
BIN
best/my_project_visualized.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 278 KiB |
0
best/new_best/__init__.py
Normal file
0
best/new_best/__init__.py
Normal file
0
best/new_best/handlers/__init__.py
Normal file
0
best/new_best/handlers/__init__.py
Normal file
33
best/new_best/handlers/bus.py
Normal file
33
best/new_best/handlers/bus.py
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# vim: ai ts=4 sts=4 et sw=4
|
||||||
|
|
||||||
|
|
||||||
|
from rapidsms.contrib.handlers.handlers.keyword import KeywordHandler
|
||||||
|
from new_best.models import *
|
||||||
|
import datetime
|
||||||
|
try:
|
||||||
|
import json
|
||||||
|
except:
|
||||||
|
import simplejson as json
|
||||||
|
|
||||||
|
class BestHandler(KeywordHandler):
|
||||||
|
keyword = "route"
|
||||||
|
|
||||||
|
def help(self):
|
||||||
|
self.respond("Send route <bus_no>")
|
||||||
|
|
||||||
|
def handle(self, text):
|
||||||
|
bus_no = text.strip()
|
||||||
|
now = datetime.datetime.now()
|
||||||
|
try:
|
||||||
|
a = Atlas.get_atlas(bus_no, now)
|
||||||
|
self.respond("route %s from %s to %s" % (a['route'],a['from'], a['to']))
|
||||||
|
except:
|
||||||
|
self.respond("Did not find bus number %s. Sorry." % bus_no)
|
||||||
|
|
||||||
|
def time_str(no):
|
||||||
|
whole = int(no)
|
||||||
|
decimal = (no - whole) * 10
|
||||||
|
mins = int(((decimal + .0) / 10) * 60)
|
||||||
|
return str(whole) + ":" + str(mins)
|
||||||
|
|
37
best/new_best/handlers/bus.py.old
Normal file
37
best/new_best/handlers/bus.py.old
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# vim: ai ts=4 sts=4 et sw=4
|
||||||
|
|
||||||
|
|
||||||
|
from rapidsms.contrib.handlers.handlers.keyword import KeywordHandler
|
||||||
|
from buses.models import *
|
||||||
|
|
||||||
|
class BestHandler(KeywordHandler):
|
||||||
|
keyword = "routeold"
|
||||||
|
|
||||||
|
def help(self):
|
||||||
|
self.respond("Send route <bus_no>")
|
||||||
|
|
||||||
|
def handle(self, text):
|
||||||
|
bus_no = text.strip()
|
||||||
|
a = Atlas.objects.filter(route__iexact=bus_no)
|
||||||
|
if len(a) < 1:
|
||||||
|
self.respond("Did not find that bus number. Sorry.")
|
||||||
|
else:
|
||||||
|
a = a[0]
|
||||||
|
src = a.src
|
||||||
|
first_src = time_str(a.first_src)
|
||||||
|
last_src = time_str(a.last_src)
|
||||||
|
dest = a.dest
|
||||||
|
first_dest = time_str(a.first_dest)
|
||||||
|
last_dest = time_str(a.last_dest)
|
||||||
|
schedule = a.schedule
|
||||||
|
ret = "%s(%s-%s) to %s(%s-%s) from %s" % (src, str(first_src), str(last_src), dest, str(first_dest), str(last_dest), schedule)
|
||||||
|
self.respond(ret)
|
||||||
|
|
||||||
|
|
||||||
|
def time_str(no):
|
||||||
|
whole = int(no)
|
||||||
|
decimal = (no - whole) * 10
|
||||||
|
mins = int(((decimal + .0) / 10) * 60)
|
||||||
|
return str(whole) + ":" + str(mins)
|
||||||
|
|
123
best/new_best/models.py
Normal file
123
best/new_best/models.py
Normal file
|
@ -0,0 +1,123 @@
|
||||||
|
# This is an auto-generated Django model module.
|
||||||
|
# You'll have to do the following manually to clean this up:
|
||||||
|
# * Rearrange models' order
|
||||||
|
# * Make sure each model has one field with primary_key=True
|
||||||
|
# Feel free to rename the models, but don't rename db_table values or field names.
|
||||||
|
#
|
||||||
|
# Also note: You'll have to insert the output of 'django-admin.py sqlcustom [appname]'
|
||||||
|
# into your database.
|
||||||
|
|
||||||
|
from django.db import models
|
||||||
|
|
||||||
|
class Acexpressroutes(models.Model):
|
||||||
|
routecode = models.CharField(max_length=512)
|
||||||
|
stopserial = models.IntegerField()
|
||||||
|
stageno = models.IntegerField()
|
||||||
|
stopcode = models.ForeignKey('Stopmaster', db_column='stopcode')
|
||||||
|
stage = models.CharField(max_length=512)
|
||||||
|
km = models.FloatField()
|
||||||
|
stopname = models.CharField(max_length=512)
|
||||||
|
class Meta:
|
||||||
|
db_table = u'acexpressroutes'
|
||||||
|
|
||||||
|
class Atlas(models.Model):
|
||||||
|
routecode = models.CharField(max_length=512)
|
||||||
|
route = models.CharField(max_length=512)
|
||||||
|
busfrom = models.CharField(max_length=512)
|
||||||
|
firstfrom = models.CharField(max_length=512)
|
||||||
|
lastfrom = models.CharField(max_length=512)
|
||||||
|
busto = models.CharField(max_length=512)
|
||||||
|
firstto = models.CharField(max_length=512)
|
||||||
|
lastto = models.CharField(max_length=512)
|
||||||
|
routespan = models.CharField(max_length=512)
|
||||||
|
runtime7to11 = models.CharField(max_length=512)
|
||||||
|
runtime11to17 = models.CharField(max_length=512)
|
||||||
|
runtime17toend = models.CharField(max_length=512)
|
||||||
|
runtimenight = models.CharField(max_length=512)
|
||||||
|
headwaybefore7 = models.CharField(max_length=512)
|
||||||
|
headway7to11 = models.CharField(max_length=512)
|
||||||
|
headway11to17 = models.CharField(max_length=512)
|
||||||
|
headway17to20 = models.CharField(max_length=512)
|
||||||
|
headway20tolast = models.CharField(max_length=512)
|
||||||
|
reliefpoint = models.CharField(max_length=512)
|
||||||
|
traveltime = models.CharField(max_length=512)
|
||||||
|
scheduletype = models.CharField(max_length=512)
|
||||||
|
id = models.IntegerField(unique=True, primary_key=True)
|
||||||
|
class Meta:
|
||||||
|
db_table = u'atlas'
|
||||||
|
|
||||||
|
class Regularroutes(models.Model):
|
||||||
|
routecode = models.CharField(max_length=512)
|
||||||
|
stopserial = models.IntegerField()
|
||||||
|
stageno = models.IntegerField()
|
||||||
|
stopcode = models.ForeignKey('Stopmaster', db_column='stopcode')
|
||||||
|
stage = models.CharField(max_length=512)
|
||||||
|
km = models.FloatField()
|
||||||
|
stopname = models.CharField(max_length=512)
|
||||||
|
class Meta:
|
||||||
|
db_table = u'regularroutes'
|
||||||
|
|
||||||
|
class Routetype(models.Model):
|
||||||
|
typenumber = models.IntegerField()
|
||||||
|
routetype = models.CharField(max_length=512)
|
||||||
|
class Meta:
|
||||||
|
db_table = u'routetype'
|
||||||
|
|
||||||
|
class Stopmaster(models.Model):
|
||||||
|
stopcode = models.IntegerField(unique=True)
|
||||||
|
stopname = models.CharField(max_length=512)
|
||||||
|
areacode = models.ForeignKey('Areamaster', db_column='areacode')
|
||||||
|
displayname = models.CharField(max_length=512)
|
||||||
|
smlength = models.IntegerField()
|
||||||
|
class Meta:
|
||||||
|
db_table = u'stopmaster'
|
||||||
|
|
||||||
|
class Areamaster(models.Model):
|
||||||
|
areacode = models.IntegerField(unique=True)
|
||||||
|
areaname = models.CharField(max_length=512)
|
||||||
|
class Meta:
|
||||||
|
db_table = u'areamaster'
|
||||||
|
|
||||||
|
class Asroutes(models.Model):
|
||||||
|
routecode = models.CharField(max_length=512)
|
||||||
|
stopserial = models.IntegerField()
|
||||||
|
stageno = models.IntegerField()
|
||||||
|
stopcode = models.ForeignKey('Stopmaster', db_column='stopcode')
|
||||||
|
stage = models.CharField(max_length=512)
|
||||||
|
km = models.FloatField()
|
||||||
|
stopname = models.CharField(max_length=512)
|
||||||
|
class Meta:
|
||||||
|
db_table = u'asroutes'
|
||||||
|
|
||||||
|
class Expressroutes(models.Model):
|
||||||
|
routecode = models.CharField(max_length=512)
|
||||||
|
stopserial = models.IntegerField()
|
||||||
|
stageno = models.IntegerField()
|
||||||
|
stopcode = models.ForeignKey('Stopmaster', db_column='stopcode')
|
||||||
|
stage = models.CharField(max_length=512)
|
||||||
|
km = models.FloatField()
|
||||||
|
stopname = models.CharField(max_length=512)
|
||||||
|
class Meta:
|
||||||
|
db_table = u'expressroutes'
|
||||||
|
|
||||||
|
class LocationsPoint(models.Model):
|
||||||
|
id = models.IntegerField(primary_key=True)
|
||||||
|
latitude = models.DecimalField(max_digits=13, decimal_places=10)
|
||||||
|
longitude = models.DecimalField(max_digits=13, decimal_places=10)
|
||||||
|
class Meta:
|
||||||
|
db_table = u'locations_point'
|
||||||
|
|
||||||
|
class LocationsLocationtype(models.Model):
|
||||||
|
name = models.CharField(max_length=100)
|
||||||
|
slug = models.CharField(max_length=50, primary_key=True)
|
||||||
|
class Meta:
|
||||||
|
db_table = u'locations_locationtype'
|
||||||
|
|
||||||
|
class LocationsLocation(models.Model):
|
||||||
|
id = models.IntegerField(primary_key=True)
|
||||||
|
point = models.ForeignKey(LocationsPoint)
|
||||||
|
type = models.ForeignKey(LocationsLocationtype)
|
||||||
|
# parent_type = models.ForeignKey(DjangoContentType)
|
||||||
|
parent_id = models.IntegerField()
|
||||||
|
class Meta:
|
||||||
|
db_table = u'locations_location'
|
156
best/new_best/modelsOld.py
Normal file
156
best/new_best/modelsOld.py
Normal file
|
@ -0,0 +1,156 @@
|
||||||
|
# This is an auto-generated Django model module.
|
||||||
|
# You'll have to do the following manually to clean this up:
|
||||||
|
# * Rearrange models' order
|
||||||
|
# * Make sure each model has one field with primary_key=True
|
||||||
|
# Feel free to rename the models, but don't rename db_table values or field names.
|
||||||
|
#
|
||||||
|
# Also note: You'll have to insert the output of 'django-admin.py sqlcustom [appname]'
|
||||||
|
# into your database.
|
||||||
|
|
||||||
|
from django.db import models
|
||||||
|
|
||||||
|
|
||||||
|
class Acexpressroutes(models.Model):
|
||||||
|
routecode = models.CharField(max_length=255)
|
||||||
|
stopserial = models.IntegerField()
|
||||||
|
stageno = models.IntegerField()
|
||||||
|
stopcode = models.ForeignKey('Stopmaster', db_column='stopcode')
|
||||||
|
stage = models.CharField(max_length=255)
|
||||||
|
km = models.FloatField()
|
||||||
|
stopname = models.CharField(max_length=255)
|
||||||
|
class Meta:
|
||||||
|
db_table = u'acexpressroutes'
|
||||||
|
|
||||||
|
class Areamaster(models.Model):
|
||||||
|
areacode = models.IntegerField(unique=True)
|
||||||
|
areaname = models.CharField(max_length=255)
|
||||||
|
class Meta:
|
||||||
|
db_table = u'areamaster'
|
||||||
|
|
||||||
|
class Expressroutes(models.Model):
|
||||||
|
routecode = models.CharField(max_length=255)
|
||||||
|
stopserial = models.IntegerField()
|
||||||
|
stageno = models.IntegerField()
|
||||||
|
stopcode = models.ForeignKey('Stopmaster', db_column='stopcode')
|
||||||
|
stage = models.CharField(max_length=255)
|
||||||
|
km = models.FloatField()
|
||||||
|
stopname = models.CharField(max_length=255)
|
||||||
|
class Meta:
|
||||||
|
db_table = u'expressroutes'
|
||||||
|
|
||||||
|
DAYS_MAP = {
|
||||||
|
"Monday": ['MF', 'FW', 'MS+HOL'],
|
||||||
|
"Tuesday": ['MF', 'FW', 'MS+HOL'],
|
||||||
|
"Wednesday": ['MF', 'FW', 'MS+HOL'],
|
||||||
|
"Thursday": ['MF', 'FW', 'MS+HOL'],
|
||||||
|
"Friday": ['MF', 'FW', 'MS+HOL'],
|
||||||
|
"Saturday": ['SAT','FW', 'MS+HOL'],
|
||||||
|
"Sunday": ['SH', 'FW'],
|
||||||
|
"Holiday": ['HOL', 'SH', 'MS+HOL'],
|
||||||
|
}
|
||||||
|
|
||||||
|
DAYS_OF_WEEK = {
|
||||||
|
1: 'Monday',
|
||||||
|
2: 'Tuesday',
|
||||||
|
3: 'Wednesday',
|
||||||
|
4: 'Thursday',
|
||||||
|
5: 'Friday',
|
||||||
|
6: 'Saturday',
|
||||||
|
7: 'Sunday'
|
||||||
|
}
|
||||||
|
|
||||||
|
class Atlas(models.Model):
|
||||||
|
routecode = models.CharField(max_length=255)
|
||||||
|
route = models.CharField(max_length=255)
|
||||||
|
busfrom = models.CharField(max_length=255)
|
||||||
|
firstfrom = models.CharField(max_length=255)
|
||||||
|
lastfrom = models.CharField(max_length=255)
|
||||||
|
busto = models.CharField(max_length=255)
|
||||||
|
firstto = models.CharField(max_length=255)
|
||||||
|
lastto = models.CharField(max_length=255)
|
||||||
|
routespan = models.CharField(max_length=255)
|
||||||
|
runtime7to11 = models.CharField(max_length=255)
|
||||||
|
runtime11to17 = models.CharField(max_length=255)
|
||||||
|
runtime17toend = models.CharField(max_length=255)
|
||||||
|
runtimenight = models.CharField(max_length=255)
|
||||||
|
headwaybefore7 = models.CharField(max_length=255)
|
||||||
|
headway7to11 = models.CharField(max_length=255)
|
||||||
|
headway11to17 = models.CharField(max_length=255)
|
||||||
|
headway17to20 = models.CharField(max_length=255)
|
||||||
|
headway20tolast = models.CharField(max_length=255)
|
||||||
|
reliefpoint = models.CharField(max_length=255)
|
||||||
|
traveltime = models.CharField(max_length=255)
|
||||||
|
scheduletype = models.CharField(max_length=255)
|
||||||
|
# id = models.IntegerField(unique=True)
|
||||||
|
class Meta:
|
||||||
|
db_table = u'atlas'
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def get_schedule(qset, schedules):
|
||||||
|
for s in schedules:
|
||||||
|
res = qset.filter(scheduletype__exact=s)
|
||||||
|
if res.count() > 0:
|
||||||
|
return res
|
||||||
|
return qset[0]
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_atlas(kls, route, dateObj):
|
||||||
|
dayofweek = dateObj.isoweekday()
|
||||||
|
dayString = DAYS_OF_WEEK[dayofweek]
|
||||||
|
schedules = DAYS_MAP[dayString]
|
||||||
|
atlases = kls.objects.filter(route__iexact=route)
|
||||||
|
if atlases.count() < 1:
|
||||||
|
return False
|
||||||
|
a = kls.get_schedule(atlases, schedules)
|
||||||
|
if not a:
|
||||||
|
return False
|
||||||
|
return a.get_data(dateObj)
|
||||||
|
|
||||||
|
def get_data(self, dateObj):
|
||||||
|
d = {
|
||||||
|
'route': self.route,
|
||||||
|
'from': self.busfrom,
|
||||||
|
'to': self.busto,
|
||||||
|
# 'lastbusfrom': self.lastfrom,
|
||||||
|
# 'lastbusto': self.lastto,
|
||||||
|
|
||||||
|
}
|
||||||
|
return d
|
||||||
|
|
||||||
|
class Routetype(models.Model):
|
||||||
|
typenumber = models.IntegerField()
|
||||||
|
routetype = models.CharField(max_length=255)
|
||||||
|
class Meta:
|
||||||
|
db_table = u'routetype'
|
||||||
|
|
||||||
|
class Regularroutes(models.Model):
|
||||||
|
routecode = models.CharField(max_length=255)
|
||||||
|
stopserial = models.IntegerField()
|
||||||
|
stageno = models.IntegerField()
|
||||||
|
stopcode = models.ForeignKey('Stopmaster', db_column='stopcode')
|
||||||
|
stage = models.CharField(max_length=255)
|
||||||
|
km = models.FloatField()
|
||||||
|
stopname = models.CharField(max_length=255)
|
||||||
|
class Meta:
|
||||||
|
db_table = u'regularroutes'
|
||||||
|
|
||||||
|
class Stopmaster(models.Model):
|
||||||
|
stopcode = models.IntegerField(unique=True)
|
||||||
|
stopname = models.CharField(max_length=255)
|
||||||
|
areacode = models.ForeignKey(Areamaster, db_column='areacode')
|
||||||
|
displayname = models.CharField(max_length=255)
|
||||||
|
smlength = models.IntegerField()
|
||||||
|
class Meta:
|
||||||
|
db_table = u'stopmaster'
|
||||||
|
|
||||||
|
class Asroutes(models.Model):
|
||||||
|
routecode = models.CharField(max_length=255)
|
||||||
|
stopserial = models.IntegerField()
|
||||||
|
stageno = models.IntegerField()
|
||||||
|
stopcode = models.ForeignKey(Stopmaster, db_column='stopcode')
|
||||||
|
stage = models.CharField(max_length=255)
|
||||||
|
km = models.FloatField()
|
||||||
|
stopname = models.CharField(max_length=255)
|
||||||
|
class Meta:
|
||||||
|
db_table = u'asroutes'
|
||||||
|
|
23
best/new_best/tests.py
Normal file
23
best/new_best/tests.py
Normal file
|
@ -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
|
||||||
|
"""}
|
||||||
|
|
1
best/new_best/views.py
Normal file
1
best/new_best/views.py
Normal file
|
@ -0,0 +1 @@
|
||||||
|
# Create your views here.
|
191
best/settings.py
Normal file
191
best/settings.py
Normal file
|
@ -0,0 +1,191 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# vim: ai ts=4 sts=4 et sw=4
|
||||||
|
# encoding=utf-8
|
||||||
|
|
||||||
|
# -------------------------------------------------------------------- #
|
||||||
|
# MAIN CONFIGURATION #
|
||||||
|
# -------------------------------------------------------------------- #
|
||||||
|
|
||||||
|
|
||||||
|
# you should configure your database here before doing any real work.
|
||||||
|
# see: http://docs.djangoproject.com/en/dev/ref/settings/#databases
|
||||||
|
DATABASES = {
|
||||||
|
"default": {
|
||||||
|
"ENGINE": "django.db.backends.postgresql_psycopg2",
|
||||||
|
"NAME": "best",
|
||||||
|
"USER": "best",
|
||||||
|
"PASSWORD": 'SMSbest',
|
||||||
|
"HOST": "localhost",
|
||||||
|
"PORT": "5432"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# the rapidsms backend configuration is designed to resemble django's
|
||||||
|
# database configuration, as a nested dict of (name, configuration).
|
||||||
|
#
|
||||||
|
# the ENGINE option specifies the module of the backend; the most common
|
||||||
|
# backend types (for a GSM modem or an SMPP server) are bundled with
|
||||||
|
# rapidsms, but you may choose to write your own.
|
||||||
|
#
|
||||||
|
# all other options are passed to the Backend when it is instantiated,
|
||||||
|
# to configure it. see the documentation in those modules for a list of
|
||||||
|
# the valid options for each.
|
||||||
|
INSTALLED_BACKENDS = {
|
||||||
|
"att": {
|
||||||
|
"ENGINE": "rapidsms.backends.gsm",
|
||||||
|
"PORT": "/dev/ttyS0",
|
||||||
|
"baudrate": 115200,
|
||||||
|
"timeout": 5
|
||||||
|
},
|
||||||
|
#"verizon": {
|
||||||
|
# "ENGINE": "rapidsms.backends.gsm,
|
||||||
|
# "PORT": "/dev/ttyUSB1"
|
||||||
|
#},
|
||||||
|
"message_tester": {
|
||||||
|
"ENGINE": "rapidsms.backends.bucket"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# to help you get started quickly, many django/rapidsms apps are enabled
|
||||||
|
# by default. you may wish to remove some and/or add your own.
|
||||||
|
INSTALLED_APPS = [
|
||||||
|
|
||||||
|
# the essentials.
|
||||||
|
"django_nose",
|
||||||
|
"djtables",
|
||||||
|
"rapidsms",
|
||||||
|
"new_best",
|
||||||
|
"django_extensions",
|
||||||
|
# "buses",
|
||||||
|
# common dependencies (which don't clutter up the ui).
|
||||||
|
"rapidsms.contrib.handlers",
|
||||||
|
"rapidsms.contrib.ajax",
|
||||||
|
|
||||||
|
# enable the django admin using a little shim app (which includes
|
||||||
|
# the required urlpatterns), and a bunch of undocumented apps that
|
||||||
|
# the AdminSite seems to explode without.
|
||||||
|
"django.contrib.sites",
|
||||||
|
"django.contrib.auth",
|
||||||
|
"django.contrib.admin",
|
||||||
|
"django.contrib.sessions",
|
||||||
|
"django.contrib.contenttypes",
|
||||||
|
|
||||||
|
# the rapidsms contrib apps.
|
||||||
|
"rapidsms.contrib.default",
|
||||||
|
"rapidsms.contrib.export",
|
||||||
|
"rapidsms.contrib.httptester",
|
||||||
|
"rapidsms.contrib.locations",
|
||||||
|
"rapidsms.contrib.messagelog",
|
||||||
|
"rapidsms.contrib.messaging",
|
||||||
|
"rapidsms.contrib.registration",
|
||||||
|
"rapidsms.contrib.scheduler",
|
||||||
|
"rapidsms.contrib.echo",
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
# this rapidsms-specific setting defines which views are linked by the
|
||||||
|
# tabbed navigation. when adding an app to INSTALLED_APPS, you may wish
|
||||||
|
# to add it here, also, to expose it in the rapidsms ui.
|
||||||
|
RAPIDSMS_TABS = [
|
||||||
|
("rapidsms.contrib.messagelog.views.message_log", "Message Log"),
|
||||||
|
("rapidsms.contrib.registration.views.registration", "Registration"),
|
||||||
|
("rapidsms.contrib.messaging.views.messaging", "Messaging"),
|
||||||
|
("rapidsms.contrib.locations.views.locations", "Map"),
|
||||||
|
("rapidsms.contrib.scheduler.views.index", "Event Scheduler"),
|
||||||
|
("rapidsms.contrib.httptester.views.generate_identity", "Message Tester"),
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
# -------------------------------------------------------------------- #
|
||||||
|
# BORING CONFIGURATION #
|
||||||
|
# -------------------------------------------------------------------- #
|
||||||
|
|
||||||
|
|
||||||
|
# debug mode is turned on as default, since rapidsms is under heavy
|
||||||
|
# development at the moment, and full stack traces are very useful
|
||||||
|
# when reporting bugs. don't forget to turn this off in production.
|
||||||
|
DEBUG = TEMPLATE_DEBUG = True
|
||||||
|
|
||||||
|
|
||||||
|
# after login (which is handled by django.contrib.auth), redirect to the
|
||||||
|
# dashboard rather than 'accounts/profile' (the default).
|
||||||
|
LOGIN_REDIRECT_URL = "/"
|
||||||
|
|
||||||
|
|
||||||
|
# use django-nose to run tests. rapidsms contains lots of packages and
|
||||||
|
# modules which django does not find automatically, and importing them
|
||||||
|
# all manually is tiresome and error-prone.
|
||||||
|
TEST_RUNNER = "django_nose.NoseTestSuiteRunner"
|
||||||
|
|
||||||
|
|
||||||
|
# for some reason this setting is blank in django's global_settings.py,
|
||||||
|
# but it is needed for static assets to be linkable.
|
||||||
|
MEDIA_URL = "/static/"
|
||||||
|
|
||||||
|
|
||||||
|
# this is required for the django.contrib.sites tests to run, but also
|
||||||
|
# not included in global_settings.py, and is almost always ``1``.
|
||||||
|
# see: http://docs.djangoproject.com/en/dev/ref/contrib/sites/
|
||||||
|
SITE_ID = 1
|
||||||
|
|
||||||
|
|
||||||
|
# the default log settings are very noisy.
|
||||||
|
LOG_LEVEL = "DEBUG"
|
||||||
|
LOG_FILE = "logs/rapidsms.log"
|
||||||
|
LOG_FORMAT = "[%(name)s]: %(message)s"
|
||||||
|
LOG_SIZE = 8192 # 8192 bits = 8 kb
|
||||||
|
LOG_BACKUPS = 256 # number of logs to keep
|
||||||
|
|
||||||
|
|
||||||
|
# these weird dependencies should be handled by their respective apps,
|
||||||
|
# but they're not, so here they are. most of them are for django admin.
|
||||||
|
TEMPLATE_CONTEXT_PROCESSORS = [
|
||||||
|
"django.core.context_processors.auth",
|
||||||
|
"django.core.context_processors.debug",
|
||||||
|
"django.core.context_processors.i18n",
|
||||||
|
"django.core.context_processors.media",
|
||||||
|
"django.core.context_processors.request",
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
# -------------------------------------------------------------------- #
|
||||||
|
# HERE BE DRAGONS! #
|
||||||
|
# these settings are pure hackery, and will go away soon #
|
||||||
|
# -------------------------------------------------------------------- #
|
||||||
|
|
||||||
|
|
||||||
|
# these apps should not be started by rapidsms in your tests, however,
|
||||||
|
# the models and bootstrap will still be available through django.
|
||||||
|
TEST_EXCLUDED_APPS = [
|
||||||
|
"django.contrib.sessions",
|
||||||
|
"django.contrib.contenttypes",
|
||||||
|
"django.contrib.auth",
|
||||||
|
"rapidsms",
|
||||||
|
"rapidsms.contrib.ajax",
|
||||||
|
"rapidsms.contrib.httptester",
|
||||||
|
]
|
||||||
|
|
||||||
|
# the project-level url patterns
|
||||||
|
ROOT_URLCONF = "urls"
|
||||||
|
|
||||||
|
try:
|
||||||
|
from local_settings import *
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
# since we might hit the database from any thread during testing, the
|
||||||
|
# in-memory sqlite database isn't sufficient. it spawns a separate
|
||||||
|
# virtual database for each thread, and syncdb is only called for the
|
||||||
|
# first. this leads to confusing "no such table" errors. We create
|
||||||
|
# a named temporary instance instead.
|
||||||
|
import os
|
||||||
|
import tempfile
|
||||||
|
import sys
|
||||||
|
|
||||||
|
if 'test' in sys.argv:
|
||||||
|
for db_name in DATABASES:
|
||||||
|
DATABASES[db_name]['TEST_NAME'] = os.path.join(
|
||||||
|
tempfile.gettempdir(),
|
||||||
|
"%s.rapidsms.test.sqlite3" % db_name)
|
37
best/urls.py
Normal file
37
best/urls.py
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
from django.conf.urls.defaults import *
|
||||||
|
from django.conf import settings
|
||||||
|
from django.contrib import admin
|
||||||
|
|
||||||
|
admin.autodiscover()
|
||||||
|
|
||||||
|
urlpatterns = patterns('',
|
||||||
|
# Example:
|
||||||
|
# (r'^my-project/', include('my_project.foo.urls')),
|
||||||
|
|
||||||
|
# Uncomment the admin/doc line below to enable admin documentation:
|
||||||
|
# (r'^admin/doc/', include('django.contrib.admindocs.urls')),
|
||||||
|
|
||||||
|
(r'^admin/', include(admin.site.urls)),
|
||||||
|
|
||||||
|
# RapidSMS core URLs
|
||||||
|
(r'^account/', include('rapidsms.urls.login_logout')),
|
||||||
|
url(r'^$', 'rapidsms.views.dashboard', name='rapidsms-dashboard'),
|
||||||
|
|
||||||
|
# RapidSMS contrib app URLs
|
||||||
|
(r'^ajax/', include('rapidsms.contrib.ajax.urls')),
|
||||||
|
(r'^export/', include('rapidsms.contrib.export.urls')),
|
||||||
|
(r'^httptester/', include('rapidsms.contrib.httptester.urls')),
|
||||||
|
(r'^locations/', include('rapidsms.contrib.locations.urls')),
|
||||||
|
(r'^messagelog/', include('rapidsms.contrib.messagelog.urls')),
|
||||||
|
(r'^messaging/', include('rapidsms.contrib.messaging.urls')),
|
||||||
|
(r'^registration/', include('rapidsms.contrib.registration.urls')),
|
||||||
|
(r'^scheduler/', include('rapidsms.contrib.scheduler.urls')),
|
||||||
|
)
|
||||||
|
|
||||||
|
if settings.DEBUG:
|
||||||
|
urlpatterns += patterns('',
|
||||||
|
# helper URLs file that automatically serves the 'static' folder in
|
||||||
|
# INSTALLED_APPS via the Django static media server (NOT for use in
|
||||||
|
# production)
|
||||||
|
(r'^', include('rapidsms.urls.static_media')),
|
||||||
|
)
|
|
@ -1,3 +1,3 @@
|
||||||
-e svn+http://code.djangoproject.com/svn/django/branches/releases/1.1.X/#egg=django
|
# -e svn+http://code.djangoproject.com/svn/django/branches/releases/1.1.X/#egg=django
|
||||||
-e bzr+http://code.0xdb.org/python-oxdjango/#egg=python-oxdjango
|
-e bzr+http://code.0xdb.org/python-ox/#egg=python-ox
|
||||||
South
|
South
|
||||||
|
|
Loading…
Reference in New Issue
Block a user