Пример #1
0
    def test_create_new(self):
        # Keep track of the initial set, so that we can discern which changes were caused by this test
        starting_sites = Site.all()

        site = Site()
        site.name = 'Chris\' Awesome Test Site #1'
        site.slug = 'chris-awesome-test-site-1'
        site.xstreet = '1234 Fake Street'
        site.xcity = 'Universal City'
        site.xzip = '78005'
        # site.latitude = Decimal('175.1')
        # site.longitude = Decimal('176.0')
        site.latitude = '175.1'
        site.longitude = '176.0'
        site.opentime = '10am'
        site.closetime = '6pm'
        site.days = 'M-T'
        site.sitecoordinator = None  # TODO: test variations of this too
        site.sitetype = 'Tax Preparation'

        site.is_open = True

        result = site.save()
        self.assertEqual(200, result, 'Failed to save the new site')
        # Validate that the record was indeed written out to the DB
        self.assertEqual(
            len(starting_sites) + 1, len(Site.all()),
            'No Site record was actually written')

        # # Now fetch the site data back out
        site2 = Site.find('chris-awesome-test-site-1')
        self.assertEqual('Chris\' Awesome Test Site #1', site2.name)
        self.assertEqual('chris-awesome-test-site-1', site2.slug)
        self.assertEqual("1234 Fake Street", site2.xstreet)
        self.assertEqual('Universal City', site2.xcity)
        self.assertEqual('78005', site2.xzip)
        # self.assertEqual(Decimal('175.1'), site2.latitude)
        # self.assertEqual(Decimal('176.0'), site2.longitude)
        self.assertEqual('175.1', site2.latitude)
        self.assertEqual('176.0', site2.longitude)
        self.assertEqual('10am', site2.opentime)
        self.assertEqual('6pm', site2.closetime)
        self.assertEqual('M-T', site2.days)
        self.assertEqual(None, site2.sitecoordinator)
        self.assertEqual(True, site2.is_open)

        # Delete the newly created site
        self.assertEqual(200, site2.delete())
        self.assertEqual(
            len(starting_sites), len(Site.all()),
            'The site creation test failed to clean up after itself')
Пример #2
0
 def __init__(self, handler):
   try:
     site = cache.get("site")
     if site:
       self.site = site
     else:
       site = Site.all().get()
       cache.add("site", site)
       self.site = site
   except:
     site = Site.all().get();
     cache.add("site", site)
     self.site = site
   self.handler = handler
Пример #3
0
 def post(self, *args, **kwargs):
   email = self.request.get("email")
   code = self.request.get("code")
   password = self.request.get("password")
   site = Site.all().get()
   if email and not code:
     if User.send_recovery_email(email, site.title):
       self.response.out.write("The email has been sent. Please check your email to reset your password.")
       return True
     else:
       self.response.out.write("The email was not sent. Please try again.")
       return False
   elif email and code and password:
     user = User.get_by_email(email)
     if user:
       if user.set_password(password, site.secret):
         login = User.login(email, password, site)
         self.session["user"] = login
         user.destroy_token()
         self.redirect('/')
         return True
       else:
         self.response.out.write("An Error Occurred Resetting Password, Please try again.")
         return False
     else:
       self.response.out.write("Cannot Reset Password For This User")
       return False
   return False
Пример #4
0
    def test_create_new(self):
        # Keep track of the initial set, so that we can discern which changes were caused by this test
        starting_sites = Site.all()

        site = Site()
        site.name = 'Chris\' Awesome Test Site #1'
        site.slug = 'chris-awesome-test-site-1'
        site.xstreet = '1234 Fake Street'
        site.xcity = 'Universal City'
        site.xzip = '78005'
        # site.latitude = Decimal('175.1')
        # site.longitude = Decimal('176.0')
        site.latitude = '175.1'
        site.longitude = '176.0'
        site.opentime = '10am'
        site.closetime = '6pm'
        site.days = 'M-T'
        site.sitecoordinator = None # TODO: test variations of this too
        site.sitetype = 'Tax Preparation'

        site.is_open = True

        result = site.save()
        self.assertEqual(200, result, 'Failed to save the new site')
        # Validate that the record was indeed written out to the DB
        self.assertEqual(len(starting_sites)+1, len(Site.all()), 'No Site record was actually written')

        # # Now fetch the site data back out
        site2 = Site.find('chris-awesome-test-site-1')
        self.assertEqual('Chris\' Awesome Test Site #1', site2.name)
        self.assertEqual('chris-awesome-test-site-1', site2.slug)
        self.assertEqual("1234 Fake Street", site2.xstreet)
        self.assertEqual('Universal City', site2.xcity)
        self.assertEqual('78005', site2.xzip)
        # self.assertEqual(Decimal('175.1'), site2.latitude)
        # self.assertEqual(Decimal('176.0'), site2.longitude)
        self.assertEqual('175.1', site2.latitude)
        self.assertEqual('176.0', site2.longitude)
        self.assertEqual('10am', site2.opentime)
        self.assertEqual('6pm', site2.closetime)
        self.assertEqual('M-T', site2.days)
        self.assertEqual(None, site2.sitecoordinator)
        self.assertEqual(True, site2.is_open)
        
        # Delete the newly created site
        self.assertEqual(200, site2.delete())
        self.assertEqual(len(starting_sites), len(Site.all()), 'The site creation test failed to clean up after itself')
Пример #5
0
    def test_create_site_nodata(self):
        # Make note of the starting site count
        starting_sites = Site.all()

        event = {
            'httpMethod': 'PUT',
            'path': '/site',
            'resource': '/site',
            'pathParameters': None,
            'body': None,
        }

        response = LambdaApiHandler.site_apis(event)
        self.assertEqual('400', response['statusCode'])
        # Cleanup validation
        self.assertEqual(len(starting_sites), len(Site.all()),
                         "Failed to clean up the site we created!")
Пример #6
0
    def test_delete_site(self):
        # Make note of the starting site count
        starting_sites = Site.all()

        # Create a Site manually first so that we isolate this test to only the Update API
        raw_site = Site()
        raw_site.name = 'tc_lambda_sites_test_delete_site'
        raw_site.address = '123 tc_lambda_sites_test_delete_site street'
        raw_site.availability_status = 'Green'
        raw_site.hours = '12-12'
        raw_site.is_open = True
        raw_site.save()
        self.assertEqual("123 tc_lambda_sites_test_delete_site street",
                         raw_site.address)
        self.assertEqual('tc_lambda_sites_test_delete_site', raw_site.name)
        self.assertEqual('Green', raw_site.availability_status)
        self.assertEqual(True, raw_site.is_open)
        self.assertEqual('12-12', raw_site.hours)

        event = {
            'httpMethod': 'DELETE',
            'path': '/site/tc_lambda_sites_test_delete_site',
            'resource': '/site/{sitename}',
            'pathParameters': {
                'sitename': 'tc_lambda_sites_test_delete_site'
            },
            'body': None,
        }

        response = LambdaApiHandler.site_apis(event)
        self.assertEqual('', response['body'])
        self.assertEqual('200', response['statusCode'])
        self.assertEqual(
            len(starting_sites), len(Site.all()),
            'The Delete Site API failed to destroy the record it created.')

        # Fetch the site separately and validate the content
        site = Site.find('tc_lambda_sites_test_delete_site')
        self.assertIsNone(site)

        # Cleanup.
        if raw_site != None:
            raw_site.delete()
        # Cleanup validation
        self.assertEqual(len(starting_sites), len(Site.all()),
                         "Failed to clean up the site we created!")
Пример #7
0
    def test_create_site(self):
        event = {
            'httpMethod':
            'PUT',
            'path':
            '/site',
            'resource':
            '/site',
            'pathParameters':
            None,
            'body':
            json.dumps({
                "Site": {
                    "name": "tc_lambda_sites_test_create_site",
                    "address": "1234 Fake Street",
                    "hours": "8-3",
                    "is_open": False,
                    "availability_status": "Red"
                }
            }),
        }
        # Make note of the starting site count
        starting_sites = Site.all()

        response = LambdaApiHandler.site_apis(event)
        self.assertEqual('200', response['statusCode'])
        self.assertEqual(len(starting_sites) + 1, len(Site.all()))

        # Fetch the site separately and validate the content
        site = Site.find('tc_lambda_sites_test_create_site')
        self.assertIsNotNone(site)
        self.assertEqual('tc_lambda_sites_test_create_site', site.name)
        self.assertEqual("1234 Fake Street", site.address)
        self.assertEqual('Red', site.availability_status)
        self.assertEqual(False, site.is_open)
        self.assertEqual('8-3', site.hours)

        # Cleanup.
        if site != None:
            site.delete()
        # Cleanup validation
        self.assertEqual(len(starting_sites), len(Site.all()),
                         "Failed to clean up the site we created!")
Пример #8
0
    def test_get_all(self):
        starting_sites = Site.all()

        sites = Site.all()
        self.assertTrue( len(sites) > 0, 'No sites found with Site.all()')
        site = sites[0]
        self.assertEqual('Chris\' Awesome Test Site #2', site.name)
        self.assertEqual('chris-awesome-test-site-2', site.slug)
        self.assertEqual("1234 Fake Street", site.xstreet)
        self.assertEqual('Universal City', site.xcity)
        self.assertEqual('78005', site.xzip)
        # self.assertEqual(Decimal('175.1'), site.latitude)
        # self.assertEqual(Decimal('176.0'), site.longitude)
        self.assertEqual('175.1', site.latitude)
        self.assertEqual('176.0', site.longitude)
        self.assertEqual('10am', site.opentime)
        self.assertEqual('6pm', site.closetime)
        self.assertEqual('M-T', site.days)
        self.assertEqual(None, site.sitecoordinator)
        self.assertEqual(True, site.is_open)

        self.assertEqual(len(starting_sites), len(Site.all()), 'Site.all() somehow altered the record count')
Пример #9
0
def lambda_handler(event, context):
    
    sites = Site.all()
    
    if sites == None:
        return respond('500', '{"errorCode":"500","errorMessage":"Unable to fetch a list of sites"}')
    
    sites_json = []
    for site in sites:
        sites_json.append(site.to_json())
    j = ','.join(sites_json)
    response_body = "[ " + j + " ]"

    return respond('200', response_body)
Пример #10
0
    def test_get_all(self):
        starting_sites = Site.all()

        sites = Site.all()
        self.assertTrue(len(sites) > 0, 'No sites found with Site.all()')
        site = sites[0]
        self.assertEqual('Chris\' Awesome Test Site #2', site.name)
        self.assertEqual('chris-awesome-test-site-2', site.slug)
        self.assertEqual("1234 Fake Street", site.xstreet)
        self.assertEqual('Universal City', site.xcity)
        self.assertEqual('78005', site.xzip)
        # self.assertEqual(Decimal('175.1'), site.latitude)
        # self.assertEqual(Decimal('176.0'), site.longitude)
        self.assertEqual('175.1', site.latitude)
        self.assertEqual('176.0', site.longitude)
        self.assertEqual('10am', site.opentime)
        self.assertEqual('6pm', site.closetime)
        self.assertEqual('M-T', site.days)
        self.assertEqual(None, site.sitecoordinator)
        self.assertEqual(True, site.is_open)

        self.assertEqual(len(starting_sites), len(Site.all()),
                         'Site.all() somehow altered the record count')
Пример #11
0
    def test_create_new(self):
        site = Site()
        site.name = 'test_site_2'
        site.address = '234 Fake Street'
        site.availability_status = 'Green'
        site.hours = '1-2'
        site.is_open = True

        result = site.save()
        self.assertTrue(result, 'Failed to save the new site')
        # Validate that the record was indeed written out to the DB
        self.assertEqual(2, len(Site.all()))

        # Now fetch the site data back out
        site2 = Site.find('test_site_2')
        self.assertEqual("234 Fake Street", site.address)
        self.assertEqual('test_site_2', site.name)
        self.assertEqual('Green', site.availability_status)
        self.assertEqual(True, site.is_open)
        self.assertEqual('1-2', site.hours)

        # Delete the newly created site
        site2.delete()
        self.assertEqual(1, len(Site.all()))
Пример #12
0
def lambda_handler(event, context):

    sites = Site.all()

    if sites == None:
        return respond(
            '500',
            '{"errorCode":"500","errorMessage":"Unable to fetch a list of sites"}'
        )

    sites_json = []
    for site in sites:
        sites_json.append(site.to_json())
    j = ','.join(sites_json)
    response_body = "[ " + j + " ]"

    return respond('200', response_body)
Пример #13
0
 def post(self):
   site = Site.all().get()
   if(site):
     self.redirect("/")
   save_items = {'site.title':'','site.admin':'','site.password':''}
   form_items = ['site.title','site.admin','site.password']
   for item in form_items:
     if item in self.request.arguments():
       if self.request.get(item) != "":
         save_items[item] = self.request.get(item)
       else:
         self.json_out({"success":False,"message":"%s is not entered" % item})
         return False
     else:
       self.json_out({"success":False,"message":"%s is not in the form" % item})
       return False
   user = self.ws.users.get_current_user(self)
   site = Site.create(save_items['site.admin'],save_items['site.password'],save_items['site.title'],user)
   self.redirect('/')
Пример #14
0
	def read(self, file):
		result = {
			"errors" : [],
			"data" : [],
			"dialect" : None
		}
		csvio = StringIO.StringIO(file)
		dialect = csv.Sniffer().sniff(file)
		csvreader = csv.DictReader(csvio, dialect = dialect)
		for row in csvreader:
			result["data"].append(row)
			"""
			Here we need to render each user account
			store it and get ready to start sending emails etc.
			"""
			if not row.get('             E-MAIL  ADDRESS', None):
				result['errors'].append({
					"message" : "Could not retrieve field             E-MAIL  ADDRESS",
					"row" : row
				})
				continue
			new_user = User.get_by_email(row.get('             E-MAIL  ADDRESS', 'CANCEL'))
			if not new_user:
				site = Site.all().get()
				new_user = User.create_user(row.get('             E-MAIL  ADDRESS', 'NONE'), 'NONE', site.secret)
			new_user.firstname = row.get('FIRST NAME', None)
			new_user.lastname = row.get('LAST NAME', None)
			new_user.spouse = row.get('SPOUSE', None)
			new_user.address = row.get('ADDRESS LINE 1', None) + '\n' + row.get('ADDRESS LINE 2', None) + '\n' + row.get('CITY', None) + '\n' + row.get('STATE', None) + ',' + row.get('ZIP', None) + '\n' + row.get('COUNTRY', None)
			if row.get('PHONE NUMBER', None):
				new_user.phone = row.get('PHONE NUMBER', None)
			if row.get('FAX NUMBER', None):
				new_user.fax = row.get('FAX NUMBER', None)
			
			new_user.put()
		
		#clear the user cache
		cache.Cache().clear()
		return result
Пример #15
0
    def site_apis(event):
        """ Handle all of the Site Management API endpoints """
        response_body = ''
        response_code = '200'

        site_name = None if event['pathParameters'] == None else event[
            'pathParameters']['sitename']
        site_data = LambdaApiHandler.deserialize_site(
            event
        )  # This will simply return None if there is no (correctly formatted) data in the request body

        if event['httpMethod'] == 'GET':
            if site_name == None:
                # Fetch all sites
                print("Fetching all sites")
                sites = Site.all()
                sites_json = []
                for site in sites:
                    sites_json.append(site.to_json())
                j = ','.join(sites_json)
                response_body = "[ " + j + " ]"
                response_code = '200'
                print("Compiled response: " + response_code + " : " +
                      response_body)
            else:
                # Fetch single site
                print("Querying a single site: " + site_name)
                site = Site.find(site_name)
                response_body = site.to_json()
                response_code = '200'

        elif event['httpMethod'] == 'PUT':
            # Create a new site
            if site_data == None:
                response_body = '{"error":"Invalid Site data in request body"}'
                response_code = '400'
            else:
                if site_data.save():
                    response_body = Site.find(site_data.name).to_json(
                    )  # Reload the object from the database to ensure that any on-save hooks are accounted for
                    response_code = '200'
                else:
                    response_body = '{"error":"failed to create site"}'
                    response_code = '500'

        elif event['httpMethod'] == 'POST':
            # Update an existing site status
            if site_name == None:
                response_body = '{"error":"bad request. Please specify the sitename path parameter"}'
                response_code = '400'
            elif site_data == None:
                response_body = '{"error":"Invalid Site data in request body"}'
                response_code = '400'
            else:
                if site_data.save():
                    response_body = ''
                    response_code = '200'
                else:
                    response_body = '{"error":"failed to update site"}'
                    response_code = '500'

        elif event['httpMethod'] == 'DELETE':
            # Destroy an existing Site
            if site_name == None:
                response_body = '{"error":"bad request. Please specify the sitename path parameter"}'
                response_code = '400'
            else:
                site = Site.find(site_name)
                if site == None:
                    response_body = '{"error":"Invalid site_name"}'
                    response_code = '400'
                elif site.delete():
                    response_body = ''
                    response_code = '200'
                else:
                    response_body = '{"error":"failed to delete site"}'
                    response_code = '400'
        else:
            response_body = '{"error":"bad request"}'
            response_code = '400'

        #utilities.respond(response_code, response_body) # TODO: test this method before implementing
        return {
            'statusCode': response_code,
            'body': response_body,
            'headers': {
                'Content-Type': 'application/json'
            },
        }
Пример #16
0
    def test_update_site(self):
        # Make note of the starting site count
        starting_sites = Site.all()

        # Create a Site manually first so that we isolate this test to only the Update API
        raw_site = Site()
        raw_site.name = 'tc_lambda_sites_test_update_site'
        raw_site.address = '123 tc_lambda_sites_test_update_site street'
        raw_site.availability_status = 'Green'
        raw_site.hours = '12-12'
        raw_site.is_open = True

        raw_site.save()
        self.assertEqual("123 tc_lambda_sites_test_update_site street",
                         raw_site.address)
        self.assertEqual('tc_lambda_sites_test_update_site', raw_site.name)
        self.assertEqual('Green', raw_site.availability_status)
        self.assertEqual(True, raw_site.is_open)
        self.assertEqual('12-12', raw_site.hours)

        event = {
            'httpMethod':
            'POST',
            'path':
            '/site/tc_lambda_sites_test_update_site',
            'resource':
            '/site/{sitename}',
            'pathParameters': {
                'sitename': 'tc_lambda_sites_test_update_site'
            },
            'body':
            json.dumps({
                "Site": {
                    "name": raw_site.name,
                    "address": "123 tc_lambda_sites_test_update_site parkway",
                    "hours": raw_site.hours,
                    "is_open": raw_site.is_open,
                    "availability_status": raw_site.availability_status
                }
            }),
        }

        response = LambdaApiHandler.site_apis(event)
        self.assertEqual('', response['body'])
        self.assertEqual('200', response['statusCode'])
        self.assertEqual(
            len(starting_sites) + 1, len(Site.all()),
            'Somehow the Update Site API created a new entry')

        # Fetch the site separately and validate the content
        site = Site.find('tc_lambda_sites_test_update_site')
        self.assertIsNotNone(site)
        self.assertEqual('tc_lambda_sites_test_update_site', site.name)
        self.assertEqual("123 tc_lambda_sites_test_update_site parkway",
                         site.address)
        self.assertEqual('Green', site.availability_status)
        self.assertEqual(True, site.is_open)
        self.assertEqual('12-12', site.hours)

        # Cleanup.
        if raw_site != None:
            raw_site.delete()
        # Cleanup validation
        self.assertEqual(len(starting_sites), len(Site.all()),
                         "Failed to clean up the site we created!")
Пример #17
0
 def get(self):
   site = Site.all().get()
   if(site):
     self.redirect("/")
   self.render_out("templates/install.html")
Пример #18
0
    def site_apis(event):
        """ Handle all of the Site Management API endpoints """
        response_body = ''
        response_code = '200'

        site_name = None if event['pathParameters'] == None else event['pathParameters']['sitename']
        site_data = LambdaApiHandler.deserialize_site(event) # This will simply return None if there is no (correctly formatted) data in the request body
        
        if event['httpMethod'] == 'GET':
            if site_name == None:
                # Fetch all sites
                print("Fetching all sites")
                sites = Site.all()
                sites_json = []
                for site in sites:
                    sites_json.append(site.to_json())
                j = ','.join(sites_json)
                response_body = "[ " + j + " ]"
                response_code = '200'
                print("Compiled response: " + response_code + " : " + response_body)
            else:
                # Fetch single site
                print("Querying a single site: " + site_name)
                site = Site.find(site_name)
                response_body = site.to_json()
                response_code = '200'
        
        elif event['httpMethod'] == 'PUT':
            # Create a new site
            if site_data == None:
                response_body = '{"error":"Invalid Site data in request body"}'
                response_code = '400'
            else:
                if site_data.save():
                    response_body = Site.find(site_data.name).to_json() # Reload the object from the database to ensure that any on-save hooks are accounted for
                    response_code = '200'
                else:
                    response_body = '{"error":"failed to create site"}'
                    response_code = '500'
        
        elif event['httpMethod'] == 'POST':
            # Update an existing site status
            if site_name == None:
                response_body = '{"error":"bad request. Please specify the sitename path parameter"}'
                response_code = '400'
            elif site_data == None:
                response_body = '{"error":"Invalid Site data in request body"}'
                response_code = '400'
            else:
                if site_data.save():
                    response_body = ''
                    response_code = '200'
                else:
                    response_body = '{"error":"failed to update site"}'
                    response_code = '500'
        
        elif event['httpMethod'] == 'DELETE':
            # Destroy an existing Site
            if site_name == None:
                response_body = '{"error":"bad request. Please specify the sitename path parameter"}'
                response_code = '400'
            else:
                site = Site.find(site_name)
                if site == None:
                    response_body = '{"error":"Invalid site_name"}'
                    response_code = '400'
                elif site.delete():
                    response_body = ''
                    response_code = '200'
                else:
                    response_body = '{"error":"failed to delete site"}'
                    response_code = '400'
        else:
            response_body = '{"error":"bad request"}'
            response_code = '400'
        
        #utilities.respond(response_code, response_body) # TODO: test this method before implementing
        return {
            'statusCode': response_code,
            'body': response_body,
            'headers': {
                'Content-Type': 'application/json'
            },
        }
Пример #19
0
def lambda_handler(event, context):
    print("Recompiling All Sites static JSON")

    print("Uploading to S3")
    SiteContentCompiler.compileSiteJson(Site.all())
Пример #20
0
 def test_get_all(self):
     sites = Site.all()
     self.assertEqual(1, len(sites),
                      'Incorrect number of sites fetched during scan')
     self.assertEqual("123 Fake Street", sites[0].address)
Пример #21
0
def lambda_handler(event, context):
    print("Recompiling All Sites static JSON")

    print("Uploading to S3")
    SiteContentCompiler.compileSiteJson(Site.all())