Skip to content

Commit 60e2935

Browse files
committed
partial attempt
1 parent 79ded60 commit 60e2935

29 files changed

+987
-12
lines changed

home/admin.py

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from django.contrib import admin
2+
3+
# Register your models here.

home/apps.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from django.apps import AppConfig
22

33

4-
class TestConfig(AppConfig):
4+
class HomeConfig(AppConfig):
55
name = 'home'

home/migrations/__init__.py

Whitespace-only changes.

home/models.py

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from django.db import models
2+
3+
# Create your models here.

home/tests.py

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from django.test import TestCase
2+
3+
# Create your tests here.

home/urls.py

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from django.conf.urls import url
2+
from home import views
3+
4+
urlpatterns = [
5+
url(r'^$', views.home),
6+
]

home/views.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from django.shortcuts import render
2-
from django.http import HttpResponse
32

43

5-
def index(request):
6-
return HttpResponse("Hello, world!")
4+
def home(request):
5+
return render(request, 'home/home.html', {
6+
'15sof': ''
7+
})

people/__init__.py

Whitespace-only changes.

people/admin.py

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from django.contrib import admin
2+
3+
# Register your models here.

people/apps.py

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
from django.apps import AppConfig
2+
3+
4+
class PeopleConfig(AppConfig):
5+
name = 'people'

people/migrations/__init__.py

Whitespace-only changes.

people/models.py

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from django.db import models
2+
3+
# Create your models here.

people/tests.py

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from django.test import TestCase
2+
3+
# Create your tests here.

people/urls.py

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from django.conf.urls import url
2+
from people import views
3+
4+
urlpatterns = [
5+
#url(r'^$', views.home),
6+
]

people/views.py

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from django.shortcuts import render
2+
3+
# Create your views here.

sdb/__init__.py

Whitespace-only changes.

sdb/admin.py

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from django.contrib import admin
2+
3+
# Register your models here.

sdb/apps.py

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
from django.apps import AppConfig
2+
3+
4+
class SdbConfig(AppConfig):
5+
name = 'sdb'

sdb/migrations/__init__.py

Whitespace-only changes.

sdb/models.py

+127
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
from django.db import models
2+
from .utils import NullableTextField
3+
4+
5+
class SDB_sds_users_all(models.Model):
6+
username = models.TextField(primary_key=True)
7+
# password = NullableTextField(null=True, blank=True)
8+
# salt = NullableTextField(null=True, blank=True)
9+
active = models.BooleanField(default=True)
10+
# hosts_allow = models.TextField(default='%')
11+
# immortal = models.BooleanField(default=False)
12+
13+
class Meta:
14+
db_table = 'sds_users_all'
15+
managed = False
16+
17+
def __str__(self):
18+
return self.username
19+
20+
21+
class SDB_rooms(models.Model):
22+
room = models.TextField(primary_key=True)
23+
floor = models.IntegerField(null=True)
24+
type = models.TextField()
25+
size = models.IntegerField(null=True)
26+
# phone1
27+
# phone2
28+
grt = models.TextField(null=True)
29+
frosh = models.NullBooleanField()
30+
handicapped = models.NullBooleanField()
31+
32+
class Meta:
33+
db_table = 'rooms'
34+
managed = False
35+
36+
def __str__(self):
37+
return self.room
38+
39+
40+
class SDB_user_types(models.Model):
41+
type = models.TextField(primary_key=True)
42+
description = NullableTextField(null=True, blank=True)
43+
active = models.BooleanField(default=True)
44+
45+
class Meta:
46+
db_table = 'user_types'
47+
managed = False
48+
49+
def __str__(self):
50+
return self.type
51+
52+
53+
class SDB_lounges(models.Model):
54+
lounge = models.TextField(primary_key=True)
55+
description = models.TextField()
56+
# url = NullableTextField(null=True, blank=True,
57+
# default='http://simmons.mit.edu/atria/')
58+
contact = models.ForeignKey(SDB_sds_users_all,
59+
related_name='lounge_contact1')
60+
contact2 = models.ForeignKey(SDB_sds_users_all, null=True,
61+
related_name='lounge_contact2')
62+
active = models.BooleanField(default=True)
63+
# allocation = models.DecimalField(10, 2, null=True)
64+
# allocation2 = models.DecimalField(10, 2, null=True)
65+
66+
class Meta:
67+
db_table = 'lounges'
68+
managed = False
69+
70+
def __str__(self):
71+
return self.lounge
72+
73+
74+
class SDB_public_active_directoryManager(models.Manager):
75+
def get_queryset(self):
76+
return super(SDB_public_active_directoryManager, self) \
77+
.get_query_set().filter(
78+
private=False,
79+
username__active=True)
80+
81+
82+
class SDB_directory(models.Model):
83+
username = models.OneToOneField(SDB_sds_users_all, primary_key=True)
84+
firstname = models.TextField()
85+
lastname = models.TextField()
86+
room = models.ForeignKey(SDB_rooms, null=True)
87+
# phone = NullableTextField(null=True, blank=True)
88+
year = models.IntegerField(null=True)
89+
cellphone = NullableTextField(null=True, blank=True)
90+
homepage = NullableTextField(null=True, blank=True)
91+
home_city = NullableTextField(null=True, blank=True)
92+
home_state = NullableTextField(null=True, blank=True)
93+
home_country = NullableTextField(null=True, blank=True)
94+
quote = NullableTextField(null=True, blank=True)
95+
favorite_category = NullableTextField(null=True, blank=True)
96+
favorite_value = NullableTextField(null=True, blank=True)
97+
private = models.BooleanField(default=False)
98+
type = models.ForeignKey(SDB_user_types)
99+
email = models.TextField()
100+
lounge = models.ForeignKey(SDB_lounges, null=True, blank=True)
101+
title = NullableTextField(null=True, blank=True)
102+
loungevalue = models.IntegerField(null=True, blank=True)
103+
showreminders = models.BooleanField(default=True)
104+
guest_list_expiration = models.TextField(null=True, blank=True)
105+
106+
objects_public_active_directory = SDB_public_active_directoryManager()
107+
108+
def save(self, *args, **kwargs):
109+
raise Exception('Save called on directory')
110+
111+
def delete(self, *args, **kwargs):
112+
raise Exception(
113+
'You should not be calling delete on this model (directory)')
114+
115+
@staticmethod
116+
def random():
117+
import random as r
118+
count = SDB_directory.objects.count()
119+
random_index = r.randint(0, count - 1)
120+
return SDB_directory.objects.all()[random_index]
121+
122+
class Meta:
123+
db_table = 'directory' # 'public_active_directory'
124+
managed = False
125+
126+
def __str__(self):
127+
return '%s %s (%s)' % (self.firstname, self.lastname, self.username)

sdb/tests.py

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from django.test import TestCase
2+
3+
# Create your tests here.

sdb/utils.py

+81
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
from django.db import models
2+
3+
# DB_MAP = {
4+
# ('simdb', 'lounges'): 'sdb',
5+
# ('people', 'directory'): 'sdb',
6+
# ('people', 'public_active_directory'): 'sdb',
7+
# ('people', 'sds_users_all'): 'sdb',
8+
# ('people', 'medlinks'): 'sdb',
9+
# ('people', 'officers'): 'sdb',
10+
# ('packages', 'packages'): 'sdb',
11+
# ('guestlist', 'guest_list'): 'sdb',
12+
# ('api_server', 'sds_users_all'): 'sdb',
13+
# ('api_server', 'sds_groups'): 'sdb',
14+
# ('api_server', 'sds_group_membership_cache'): 'sdb',
15+
# ('auth', 'sds_users_all'): 'sdb',
16+
# ('auth', 'sds_groups'): 'sdb',
17+
# ('admin', 'django_admin_log'): 'sdb',
18+
# ('govtracker', 'gov_fin_accounts'): 'sdb',
19+
# ('govtracker', 'gov_fin_subaccounts'): 'sdb',
20+
# ('govtracker', 'gov_fin_ledger'): 'sdb',
21+
22+
# ('rooming', 'rooming_room'): 'scripts_rooming',
23+
# ('rooming', 'rooming_grt'): 'scripts_rooming',
24+
# ('rooming', 'rooming_resident'): 'scripts_rooming',
25+
# }
26+
27+
# READONLY_TABLES = (
28+
# ('api_server', 'sds_groups'),
29+
# ('api_server', 'sds_users_all'),
30+
# ('auth', 'sds_users_all'),
31+
# # ('api_server', 'sds_group_membership_cache'),
32+
# )
33+
34+
35+
def get_db_for_model(model):
36+
if model._meta.app_label == 'sdb':
37+
return 'sdb'
38+
return 'default'
39+
40+
41+
class SdbRouter(object):
42+
def db_for_read(self, model, **hints):
43+
return get_db_for_model(model)
44+
45+
def db_for_write(self, model, **hints):
46+
db = get_db_for_model(model)
47+
if db == 'sdb':
48+
raise Exception('writes not allowed on sdb')
49+
return db
50+
51+
def allow_relation(self, obj1, obj2, **hints):
52+
if get_db_for_model(obj1) == get_db_for_model(obj2):
53+
return True
54+
return False
55+
56+
def allow_syncdb(self, db, model):
57+
if db == 'sdb' or db == 'scripts_rooming':
58+
return False
59+
else:
60+
return True
61+
62+
63+
class SdbManager(models.Manager):
64+
def get_queryset(self):
65+
return super(SdbManager, self).get_query_set().using('sdb')
66+
67+
68+
class NullableCharField(models.CharField):
69+
def get_db_prep_value(self, value, *args, **kwargs):
70+
if self.null is True and value == '':
71+
value = None
72+
return super(NullableCharField,
73+
self).get_db_prep_value(value, *args, **kwargs)
74+
75+
76+
class NullableTextField(models.TextField):
77+
def get_db_prep_value(self, value, *args, **kwargs):
78+
if self.null is True and value == '':
79+
value = None
80+
return super(NullableCharField,
81+
self).get_db_prep_value(value, *args, **kwargs)

sdb/views.py

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from django.shortcuts import render
2+
3+
# Create your views here.

simdb/database.py

+5-3
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@
1010
}
1111

1212

13-
def config(service_name = 'DEFAULT'):
13+
def config(service_name='DEFAULT'):
1414
"""Get Django Database configuration parameters for the given service. This
15-
function looks in the environment for parameters for the form
15+
function looks in the environment for parameters of the form
1616
<service_name>_DATABASE_<config> and uses those values for the django DB
1717
configs
1818
@@ -23,7 +23,9 @@ def config(service_name = 'DEFAULT'):
2323
Returns:
2424
The Django database configuration for the given service name
2525
"""
26-
engine = engines.get(os.getenv('{}_DATABASE_ENGINE'.format(service_name)), engines['sqlite'])
26+
engine = engines.get(
27+
os.getenv('{}_DATABASE_ENGINE'.format(service_name)),
28+
engines['sqlite'])
2729
name = os.getenv('{}_DATABASE_NAME'.format(service_name))
2830
if not name and engine == engines['sqlite']:
2931
name = os.path.join(settings.BASE_DIR, 'db.sqlite3')

simdb/settings.py

+18-3
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212

1313
import os
1414

15+
from . import database
16+
1517
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
1618
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
1719

@@ -40,7 +42,14 @@
4042
'django.contrib.sessions',
4143
'django.contrib.messages',
4244
'django.contrib.staticfiles',
45+
46+
# Libraries
4347
'oidc_auth',
48+
49+
# Apps
50+
'home',
51+
'people',
52+
'sdb',
4453
]
4554

4655
MIDDLEWARE = [
@@ -80,7 +89,9 @@
8089
TEMPLATES = [
8190
{
8291
'BACKEND': 'django.template.backends.django.DjangoTemplates',
83-
'DIRS': [],
92+
'DIRS': [
93+
os.path.join(BASE_DIR, 'templates'),
94+
],
8495
'APP_DIRS': True,
8596
'OPTIONS': {
8697
'context_processors': [
@@ -99,13 +110,13 @@
99110
# Database
100111
# https://docs.djangoproject.com/en/1.10/ref/settings/#databases
101112

102-
from . import database
103-
104113
DATABASES = {
105114
'default': database.config(),
106115
'sdb': database.config('SDB'),
107116
}
108117

118+
DATABASE_ROUTERS = ['sdb.utils.SdbRouter']
119+
109120

110121
# Password validation
111122
# https://docs.djangoproject.com/en/1.10/ref/settings/#auth-password-validators
@@ -145,3 +156,7 @@
145156

146157
STATIC_URL = '/static/'
147158
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
159+
160+
STATICFILES_DIRS = [
161+
os.path.join(BASE_DIR, 'static'),
162+
]

simdb/urls.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@
1515
"""
1616
from django.conf.urls import url, include
1717
from django.contrib import admin
18-
import home.views
1918

2019
urlpatterns = [
2120
url(r'^admin/', admin.site.urls),
2221
url(r'^oidc/', include('oidc_auth.urls')),
23-
url(r'^$', home.views.index, name="index"),
22+
url(r'^people/', include('people.urls')),
23+
url(r'', include('home.urls')),
2424
]

0 commit comments

Comments
 (0)