# Path: core/exceptions.py
# class MethodUnsupported(Exception):
#     """Exception thrown when an HTTP request method isn't supported by the REST
#        API"""
#     pass
# 
# class NonAjaxRequest(Exception):
#     """Exception thrown when an API call is made that is not an AJAX request
#        and we don't want to allow this kind of (potentially) cross-site 
#        call
#     
#     """
#     pass
# 
# Path: users/exceptions.py
# class BadUsernameOrPassword(Exception):
#    def __init__(self, msg='Bad username or password.'):
#        self.msg = msg 
# 
#    def __str__(self):
#        return self.msg
# 
# class UserAccountDisabled(Exception):
#    def __init__(self, msg='User account has been disabled.'):
#        self.msg = msg 
# 
#    def __str__(self):
#        return self.msg
# 
# class UserUsernameExists(Exception):
#    def __init__(self, msg='The username is taken, please try another'):
#        self.msg = msg 
# 
#    def __str__(self):
#        return self.msg
# 
# class UserEmailExists(Exception):
#    def __init__(self, msg='This email already exists, please try another'):
#        self.msg = msg 
# 
#    def __str__(self):
#        return self.msg
# 
# class NoFacebookUser(Exception):
#     def __init__(self, msg='No Facebook user detected.'):
#         self.msg = msg
#     
#     def __str__(self):
#         return self.msg


import json
import core.utils
from django.http import HttpResponseRedirect, HttpResponse
from django.shortcuts import render_to_response
from django.conf import settings
from django.template import RequestContext
from django.contrib.auth import authenticate, login, logout
from fbapi import facebook 
from core.exceptions import MethodUnsupported, NonAjaxRequest
from users.exceptions import BadUsernameOrPassword, UserAccountDisabled, \
                             UserUsernameExists, UserEmailExists, \
                             NoFacebookUser
from models import UserProfile
from models import User
from models import ActivationKeyValue
from forms import LoginForm, RegisterForm, InviteForm, ActivateUnactivatedForm
from registration.models import RegistrationProfile

                try:
                    user = User.objects.get(email=email)
                    raise UserEmailExists("It looks like you've already requested an invitation.") 
                except User.DoesNotExist:
                    username = email # Username defaults to e-mail address
                    if len(email) > 30:
                        #print email
                        # Django usernames can't be longer than 30 characters
                        # Just take the first 30 characters of the part of
                        # the email address before the '@'
                        email_parts = email.partition('@')
                        username = email_parts[0][:30]

                    user = User.objects.create_user(username=username,
                                                    email=email)
                    user.is_active = False
                    user.set_unusable_password()
                    user.save()
                    #print "DEBUG: saved user"
                    user_profile = UserProfile(user=user, interest=interest)
                    user_profile.save()
                    #print "DEBUG: saved user profile"

            else:
                #print "DEBUG: %s" % (form.errors)
                status = 400 # Caught in a bad request
                data['error'] = "Invalid e-mail address."

        else:

# Path: core/exceptions.py
# class MethodUnsupported(Exception):
#     """Exception thrown when an HTTP request method isn't supported by the REST
#        API"""
#     pass
# 
# class NonAjaxRequest(Exception):
#     """Exception thrown when an API call is made that is not an AJAX request
#        and we don't want to allow this kind of (potentially) cross-site 
#        call
#     
#     """
#     pass
# 
# Path: users/exceptions.py
# class BadUsernameOrPassword(Exception):
#    def __init__(self, msg='Bad username or password.'):
#        self.msg = msg 
# 
#    def __str__(self):
#        return self.msg
# 
# class UserAccountDisabled(Exception):
#    def __init__(self, msg='User account has been disabled.'):
#        self.msg = msg 
# 
#    def __str__(self):
#        return self.msg
# 
# class UserUsernameExists(Exception):
#    def __init__(self, msg='The username is taken, please try another'):
#        self.msg = msg 
# 
#    def __str__(self):
#        return self.msg
# 
# class UserEmailExists(Exception):
#    def __init__(self, msg='This email already exists, please try another'):
#        self.msg = msg 
# 
#    def __str__(self):
#        return self.msg
# 
# class NoFacebookUser(Exception):
#     def __init__(self, msg='No Facebook user detected.'):
#         self.msg = msg
#     
#     def __str__(self):
#         return self.msg


# Path: users/views.py
import json
import core.utils
from django.http import HttpResponseRedirect, HttpResponse
from django.shortcuts import render_to_response
from django.conf import settings
from django.template import RequestContext
from django.contrib.auth import authenticate, login, logout
from fbapi import facebook 
from core.exceptions import MethodUnsupported, NonAjaxRequest
from users.exceptions import BadUsernameOrPassword, UserAccountDisabled, \
                             UserUsernameExists, UserEmailExists, \
                             NoFacebookUser
from models import UserProfile
from models import User
from models import ActivationKeyValue
from forms import LoginForm, RegisterForm, InviteForm, ActivateUnactivatedForm
from registration.models import RegistrationProfile


                try:
                    user = User.objects.get(email=email)
                    raise UserEmailExists("It looks like you've already requested an invitation.") 
                except User.DoesNotExist:
                    username = email # Username defaults to e-mail address
                    if len(email) > 30:
                        #print email
                        # Django usernames can't be longer than 30 characters
                        # Just take the first 30 characters of the part of
                        # the email address before the '@'
                        email_parts = email.partition('@')
                        username = email_parts[0][:30]

                    user = User.objects.create_user(username=username,
                                                    email=email)
                    user.is_active = False
                    user.set_unusable_password()
                    user.save()
                    #print "DEBUG: saved user"
                    user_profile = UserProfile(user=user, interest=interest)
                    user_profile.save()
                    #print "DEBUG: saved user profile"

            else:
                #print "DEBUG: %s" % (form.errors)
                status = 400 # Caught in a bad request
                data['error'] = "Invalid e-mail address."

        else:

            raise MethodUnsupported("%s is not supported at this time." % \