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')
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
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
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')
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!")
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!")
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!")
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')
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)
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')
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()))
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)
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('/')
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
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' }, }
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!")
def get(self): site = Site.all().get() if(site): self.redirect("/") self.render_out("templates/install.html")
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' }, }
def lambda_handler(event, context): print("Recompiling All Sites static JSON") print("Uploading to S3") SiteContentCompiler.compileSiteJson(Site.all())
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)
def lambda_handler(event, context): print("Recompiling All Sites static JSON") print("Uploading to S3") SiteContentCompiler.compileSiteJson(Site.all())