Skip to content

Commit

Permalink
Code cleanups.
Browse files Browse the repository at this point in the history
  • Loading branch information
bogdan2412 committed Jan 25, 2013
1 parent 6aaeae8 commit 45ed512
Show file tree
Hide file tree
Showing 10 changed files with 156 additions and 102 deletions.
1 change: 1 addition & 0 deletions CodeStreak/.gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
static_collected
media
7 changes: 3 additions & 4 deletions CodeStreak/contests/utils/tasks.py
Original file line number Diff line number Diff line change
@@ -1,26 +1,25 @@
class InvalidProblemOrderingException:
pass


class ProblemHandler:
def __init__(self, seen_ids, indexed_task_ids):
self.seen_ids = seen_ids
self.indexed_task_ids = indexed_task_ids


def get_current_task(self):
bla = self.indexed_task_ids
for ind, id in self.indexed_task_ids:
if ind >= len(self.seen_ids):
return (ind, id) # found it
test = self.seen_ids[ind]
if self.seen_ids[ind] != id:
raise self.seen_ids[ind]
# raise InvalidProblemOrderingException # invalid order
raise InvalidProblemOrderingException # invalid order
return None # no next problem


def get_visible_tasks(self):
# no try catch, let
# no try catch, let
next = self.get_current_task()
if next == None:
return self.indexed_task_ids
Expand Down
126 changes: 88 additions & 38 deletions CodeStreak/contests/views.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from django.http import HttpResponse, HttpResponseRedirect, Http404
from django.db import IntegrityError
from django.contrib.auth.decorators import login_required
from django.contrib.auth import logout
from django.contrib import messages
from django.shortcuts import render_to_response
from django.http import Http404
Expand Down Expand Up @@ -56,13 +57,8 @@ def pula(request):
else:
raise Http404

def connectrequired(request):
return _contest_list(request, True)

def contest_list(request):
return _contest_list(request, False)

def _contest_list(request, alert_login):
limit = request.GET.get('limit')
offset = request.GET.get('offset')
contests = Contest.get_all_contests(offset, limit)
Expand All @@ -73,12 +69,6 @@ def _contest_list(request, alert_login):
<cs:page request={request} title={title}>
<cs:header-home />
<cs:content>
{ <div class="alert alert-error">
<button type="button" class="close" data-dismiss="alert">x</button>
<h4>Error!</h4>
You need to connect with Facebook to proceed.
</div>
if alert_login else <x:frag /> }
<h2>Contest List</h2>
<cs:contest-list contests={contests} />
</cs:content>
Expand All @@ -87,6 +77,7 @@ def _contest_list(request, alert_login):

return HttpResponse(str(page))


@login_required
def contest_home(request, contest_id):
try:
Expand All @@ -95,46 +86,48 @@ def contest_home(request, contest_id):
raise Http404

title = 'CodeStreak - {}'.format(contest.name)
content = <textarea />
content = <pre />
page = \
<cs:page request={request} title={title}>
<cs:header-contest contest={contest} active_tab="contest-home" />
<cs:content>{content}</cs:content>
<cs:content>
<h2>{'{} Problem Set'.format(contest.name)}</h2>
{content}
</cs:content>
<cs:footer />
</cs:page>

user_id = request.user.id

try:
scores = Score.get_visible_scores(contest_id, user_id)
indexed_task_ids = Contest.get_task_ordering(contest_id)
except Score.DoesNotExist:
raise Http404
except Contest.DoesNotExist:
raise Http404

seen_ids = [s.task.id for s in scores]
handler = ProblemHandler(seen_ids, indexed_task_ids)
tasks = handler.get_visible_tasks()
# (ind, id) | None | raise exception = handler.get_current_task()
# handler.is_task_visible(task_id)
seen_ids = [s.task.id for s in scores]
handler = ProblemHandler(seen_ids, indexed_task_ids)
tasks = handler.get_visible_tasks()
# (ind, id) | None | raise exception = handler.get_current_task()
# handler.is_task_visible(task_id)

output = ''
output = ''

output += '<p>Indexed tasks</p>'
for ind, id in indexed_task_ids:
output += '<p>Index {} -> Task_id {}</p>'.format(ind, id)
output += '<p>Indexed tasks</p>'
for ind, id in indexed_task_ids:
output += '<p>Index {} -> Task_id {}</p>'.format(ind, id)

output += '<p>Scores</p>'
for s in scores:
output += \
'<p> Task_id {} -> Diff {} -> Score {}</p>'.format(s.task.id, s.task.difficulty, s.score)
output += '<p>Scores</p>'
for s in scores:
output += \
'<p> Task_id {} -> Diff {} -> Score {}</p>'.format(s.task.id, s.task.difficulty, s.score)

output += '<p>Visible Tasks</p>'
for id in tasks:
output += '<p>Task_id {}</p>'.format(id)
content.appendChild(output)
return HttpResponse(str(page))
except Score.DoesNotExist:
raise Http404
except Contest.DoesNotExist:
raise Http404
output += '<p>Visible Tasks</p>'
for id in tasks:
output += '<p>Task_id {}</p>'.format(id)
content.appendChild(output)
return HttpResponse(str(page))


def contest_ranking(request, contest_id):
Expand All @@ -144,11 +137,14 @@ def contest_ranking(request, contest_id):
raise Http404

title = 'CodeStreak - {}'.format(contest.name)
content = <textarea />
content = <pre />
page = \
<cs:page request={request} title={title}>
<cs:header-contest contest={contest} active_tab="contest-ranking" />
<cs:content>{content}</cs:content>
<cs:content>
<h2>{'{} Ranking'.format(contest.name)}</h2>
{content}
</cs:content>
<cs:footer />
</cs:page>

Expand Down Expand Up @@ -207,3 +203,57 @@ def unregister_from_contest(request, contest_id):
messages.info(request,
'You are no longer registered for {}'.format(contest.name))
return HttpResponseRedirect(contest_url)


def login_view(request):
if not request.user.is_authenticated():
messages.error(request, 'You need to login first.')
return HttpResponseRedirect(url_reverse('contest-list'))


@require_POST
def logout_view(request):
if request.user.is_authenticated():
logout(request)
messages.info(request, 'You are now logged out.')
return HttpResponseRedirect(url_reverse('contest-list'))


# TODO: ajax
def getScores():
return {
'scores' : 'scores',
}


def getLogs():
return {
'logs' : 'logs',
}

data_providers = {
'getScores' : getScores,
}

restricted_data_providers = {
'getLogs' : getLogs,
}

def pula(request):
global data_providers
if request.is_ajax() and request.method == 'POST':
action = request.POST.get('action', '')
response = None
if action in data_providers:
data_function = data_providers.get(action)
response = data_function()
if (response == None and action in restricted_data_providers and
request.user.is_staff):
data_function = restricted_data_providers.get(action)
response = data_function()
if response == None:
raise Http404
else:
return HttpResponse(json.dumps(response))
else:
raise Http404
8 changes: 3 additions & 5 deletions CodeStreak/static/base/js/base.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,12 @@ $(document).ready(function(){
$(this).button('loading');
});
});
$(".alert").alert()
$(".alert").alert();

facebookAppId = '377224379022058';
facebookDefaultScope = ["email", "user_about_me", "user_birthday", "user_website"];
staticUrl = '/static/';
function facebookJSLoaded(){
function facebookJSLoaded(){
FB.init({appId: facebookAppId, status: true, cookie: true, xfbml: true, oauth: true});
}
}
window.fbAsyncInit = facebookJSLoaded;
F = new facebookClass(facebookAppId);
F.load();
4 changes: 0 additions & 4 deletions CodeStreak/static/base/js/facebook.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,3 @@

/* Ugly as fuck */
facebookDefaultScope = ["email", "user_about_me", "user_birthday", "user_website"]

/*
Maps locale from django to Facebook
scraped like this from FB:
Expand Down
8 changes: 4 additions & 4 deletions CodeStreak/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,10 @@
name='contest-list'),

url(r'^facebook/', include('django_facebook.urls')),
url(r'^accounts/', include('django_facebook.auth_urls')),

url(r'^accounts/login/$', 'CodeStreak.contests.views.login_view',
name='auth_login'),
url(r'^accounts/logout/$', 'CodeStreak.contests.views.logout_view',
name='auth_logout'),

url(r'^contest/(?P<contest_id>\d+)/register$',
'CodeStreak.contests.views.register_to_contest',
Expand All @@ -34,6 +36,4 @@
}),

url(r'^pula', 'CodeStreak.contests.views.pula'),

url(r'^login_required', 'CodeStreak.contests.views.connectrequired'),
)
87 changes: 54 additions & 33 deletions CodeStreak/xhpy/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ def render(self):
settings.STATIC_URL + 'js/bootstrap.min.js',
settings.STATIC_URL + 'js/facebook.js',
settings.STATIC_URL + 'js/base.js',
]
]
# Compose head of page
head = \
<head>
Expand Down Expand Up @@ -54,8 +54,12 @@ def render(self):
{content}
{footer}
</div>
<div id="fb-root">
</div>
<div id="fb-root" />
<script type="text/javascript">{ """
var facebookAppId = '{}';
var staticUrl = '{}';
""".format(settings.FACEBOOK_APP_ID, settings.STATIC_URL)
}</script>
</body>

# Add CSS files to header
Expand Down Expand Up @@ -93,14 +97,50 @@ def render(self):
fb_image = None
user_displayname = None
if user.is_authenticated():
if user.first_name and user.last_name:
user_displayname = user.first_name + ' ' + user.last_name
else:
user_displayname = user.username
fb_user = FacebookProfile.objects.filter(user_id = user.id)
if len(fb_user) > 0 and fb_user[0].image:
fb_image = fb_user[0].image.url

if user.first_name and user.last_name:
user_displayname = user.first_name + ' ' + user.last_name
else:
user_displayname = user.username
fb_user = FacebookProfile.objects.filter(user_id = user.id)
if len(fb_user) > 0 and fb_user[0].image:
fb_image = fb_user[0].image.url

user_info = \
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
{user_displayname}
{<img class="navbar-img" src={fb_image} />
if fb_image else <x:frag />}
</a>
<ul class="dropdown-menu" role="menu">
<li>
<a tabindex="-1" href="#">
View Profile (coming soon)
</a>
</li>
<li class="divider"></li>
<li>
<a tabindex="-1" href={settings.LOGOUT_URL}>
Log out
</a>
</li>
</ul>
</li>
else:
user_info = \
<li>
<form action="/facebook/connect/?facebook_login=1"
method="post">
<input type="hidden" value="/" name="next" />
<button id="facebook-button" type="button"
class="btn btn-primary pull-right"
data-loading-text="Loading..."
onclick="F.connect(this.parentNode); return false;">
Connect with Facebook
</button>
</form>
</li>

return \
<div class="navbar navbar-fixed-top">
<div class="navbar-inner">
Expand All @@ -113,28 +153,7 @@ def render(self):
{self.getChildren()}
</ul>
<ul class="nav pull-right">
{ <li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
{user_displayname}
{<img class="navbar-img" src={fb_image} />
if fb_image else <x:frag />}
</a>
<ul class="dropdown-menu" role="menu">
<li><a tabindex="-1" href="#">View Profile (coming
soon)</a></li>
<li class="divider"></li>
<li><a tabindex="-1" href="http://manticore.chu.cam.ac.uk/accounts/logout/">Log out</a></li>
</ul>
</li>
if user.is_authenticated() else
<li><form action="/facebook/connect/?facebook_login=1" method="post">
<input type="hidden" value="" name="next" />
<button id="facebook-button" type="button" class="btn \
btn-primary pull-right" data-loading-text="Loading..." \
onclick="F.connect(this.parentNode); return false;">
Connect with Facebook
</button>
</form></li>}
{user_info}
</ul>
{<div class="navbar-text pull-right">Time left:{' '}
<span id="timeLeft" class={end_timestamp}>
Expand Down Expand Up @@ -183,6 +202,8 @@ def render(self):
for message in messages:
messages_xhp.appendChild(
<div class={"alert alert-{}".format(message.tags)}>
<button type="button" class="close"
data-dismiss="alert">x</button>
{message.message}
</div>)

Expand Down
Loading

0 comments on commit 45ed512

Please sign in to comment.