def test_category_event_count(self): c = self.construct_category() ev = self.construct_event() rec = self.construct_resource() rc = ResourceCategory(resource_id=ev.id, category=c, type='event') rc2 = ResourceCategory(resource_id=rec.id, category=c, type='resource') db.session.add_all([rc, rc2]) rv = self.app.get( '/api/category/%i' % c.id, content_type="application/json") self.assert_success(rv) response = json.loads(rv.get_data(as_text=True)) self.assertEqual(1, response["event_count"])
def load_events(self): items = [] with open(self.event_file, newline='') as csvfile: reader = csv.reader(csvfile, delimiter=csv.excel.delimiter, quotechar=csv.excel.quotechar) next(reader, None) # skip the headers for row in reader: org = self.get_org_by_name(row[5]) if row[5] else None geocode = self.get_geocode( address_dict={'street': row[8], 'city': row[10], 'state': row[11], 'zip': row[12]}, lat_long_dict={'lat': row[15], 'lng': row[16]} ) event = Event(title=row[0], description=row[1], date=row[2], time=row[3], ticket_cost=row[4], organization=org, primary_contact=row[6], location_name=row[7], street_address1=row[8], street_address2=row[9], city=row[10], state=row[11], zip=row[12], website=row[13], phone=row[14], latitude=geocode['lat'], longitude=geocode['lng']) items.append(event) self.__increment_id_sequence(Resource) for i in range(17, len(row)): if row[i] and row[i] is not '': category = self.get_category_by_name(row[i].strip()) event_id = event.id category_id = category.id items.append(ResourceCategory(resource_id=event_id, category_id=category_id, type='event')) db.session.bulk_save_objects(items) db.session.commit() print("Events loaded. There are now %i events in the database." % db.session.query(Event).count()) print("There are now %i links between events and categories in the database." % db.session.query(ResourceCategory).filter(ResourceCategory.type == 'event').count())
def load_resources(self): items = [] with open(self.resource_file, newline='') as csvfile: reader = csv.reader(csvfile, delimiter=csv.excel.delimiter, quotechar=csv.excel.quotechar) next(reader, None) # skip the headers for row in reader: org = self.get_org_by_name(row[4]) if row[4] else None resource = Resource(title=row[0], description=row[1], organization=org, website=row[5], phone=row[6], ages=[]) for i in range(15, len(row)): if row[i]: resource.ages.extend(AgeRange.get_age_range_for_csv_data(row[i])) items.append(resource) self.__increment_id_sequence(Resource) for i in range(7, 14): if row[i] and row[i] is not '': category = self.get_category_by_name(row[i].strip()) resource_id = resource.id category_id = category.id items.append(ResourceCategory(resource_id=resource_id, category_id=category_id, type='resource')) db.session.bulk_save_objects(items) db.session.commit() print("Resources loaded. There are now %i resources in the database." % db.session.query( Resource).filter(Resource.type == 'resource').count()) print("There are now %i links between resources and categories in the database." % db.session.query(ResourceCategory).filter(ResourceCategory.type == 'resource').count())
def construct_location_category(self, location_id, category_name): c = self.construct_category(name=category_name) rc = ResourceCategory(resource_id=location_id, category=c, type='location') db.session.add(rc) db.session.commit() return c
def test_get_event_by_category_includes_category_details(self): c = self.construct_category(name="c1") c2 = self.construct_category(name="c2") ev = self.construct_event() rc = ResourceCategory(resource_id=ev.id, category=c, type='event') rc2 = ResourceCategory(resource_id=ev.id, category=c2, type='event') db.session.add_all([rc, rc2]) rv = self.app.get('/api/category/%i/event' % c.id, content_type="application/json", headers=self.logged_in_headers()) self.assert_success(rv) response = json.loads(rv.get_data(as_text=True)) self.assertEqual(ev.id, response[0]["resource_id"]) self.assertEqual(2, len(response[0]["resource"]["resource_categories"])) self.assertEqual( "c1", response[0]["resource"]["resource_categories"][0]["category"] ["name"])
def post(self, resource_id): request_data = request.get_json() resource_categories = self.schema.load(request_data, many=True).data db.session.query(ResourceCategory).filter_by(resource_id=resource_id).delete() for c in resource_categories: db.session.add(ResourceCategory(resource_id=resource_id, category_id=c.category_id)) db.session.commit() return self.get(resource_id)
def post(self, resource_id): request_data = request.get_json() resource_categories = self.schema.load(request_data, many=True).data db.session.query(ResourceCategory).filter_by(resource_id=resource_id).delete() for c in resource_categories: db.session.add(ResourceCategory(resource_id=resource_id, category_id=c.category_id, type='resource')) db.session.commit() instance = db.session.query(Resource).filter_by(id=resource_id).first() elastic_index.update_document(instance, 'Resource') return self.get(resource_id)
def post(self, event_id): request_data = request.get_json() event_categories = self.schema.load(request_data, many=True).data db.session.query(ResourceCategory).filter_by(resource_id=event_id).delete() for c in event_categories: db.session.add(ResourceCategory(resource_id=event_id, category_id=c.category_id, type='event')) db.session.commit() instance = db.session.query(Event).filter_by(id=event_id).first() elastic_index.update_document(instance, 'Event', latitude=instance.latitude, longitude=instance.longitude) return self.get(event_id)
def test_category_resource_count(self): c = self.construct_category() r = self.construct_resource() cr = ResourceCategory(resource=r, category=c, type='resource') db.session.add(cr) db.session.commit() rv = self.app.get('/api/category/%i' % c.id, content_type="application/json") self.assert_success(rv) response = json.loads(rv.get_data(as_text=True)) self.assertEqual(1, response["resource_count"])
def test_get_category_by_event(self): c = self.construct_category() ev = self.construct_event() rc = ResourceCategory(resource_id=ev.id, category=c, type='event') db.session.add(rc) rv = self.app.get('/api/event/%i/category' % ev.id, content_type="application/json") self.assert_success(rv) response = json.loads(rv.get_data(as_text=True)) self.assertEqual(1, len(response)) self.assertEqual(c.id, response[0]["category_id"]) self.assertEqual(c.name, response[0]["category"]["name"])
def test_get_category_by_resource(self): c = self.construct_category() r = self.construct_resource() cr = ResourceCategory(resource=r, category=c, type='resource') db.session.add(cr) db.session.commit() rv = self.app.get('/api/resource/%i/category' % r.id, content_type="application/json") self.assert_success(rv) response = json.loads(rv.get_data(as_text=True)) self.assertEqual(1, len(response)) self.assertEqual(c.id, response[0]["id"]) self.assertEqual(c.name, response[0]["category"]["name"])
def test_get_event_by_category(self): c = self.construct_category() ev = self.construct_event() rc = ResourceCategory(resource_id=ev.id, category=c, type='event') db.session.add(rc) rv = self.app.get( '/api/category/%i/event' % c.id, content_type="application/json", headers=self.logged_in_headers()) self.assert_success(rv) response = json.loads(rv.get_data(as_text=True)) self.assertEqual(1, len(response)) self.assertEqual(ev.id, response[0]["resource_id"]) self.assertEqual(ev.description, response[0]["resource"]["description"])
def test_get_resource_by_category(self): c = self.construct_category() r = self.construct_resource() cr = ResourceCategory(resource=r, category=c, type='resource') db.session.add(cr) db.session.commit() rv = self.app.get('/api/category/%i/resource' % c.id, content_type="application/json", headers=self.logged_in_headers()) self.assert_success(rv) response = json.loads(rv.get_data(as_text=True)) self.assertEqual(1, len(response)) self.assertEqual(r.id, response[0]["resource_id"]) self.assertEqual(r.description, response[0]["resource"]["description"])
def post(self, location_id): request_data = request.get_json() for item in request_data: item['resource_id'] = location_id location_categories = self.schema.load(request_data, many=True) db.session.query(ResourceCategory).filter_by(resource_id=location_id).delete() for c in location_categories: db.session.add(ResourceCategory(resource_id=location_id, category_id=c.category_id, type='location')) db.session.commit() instance = db.session.query(Location).filter_by(id=location_id).first() elastic_index.update_document(instance, 'Location', latitude=instance.latitude, longitude=instance.longitude) return self.get(location_id)
def construct_resource(self, title="A+ Resource", description="A delightful Resource destined to create rejoicing", phone="555-555-5555", website="http://stardrive.org", categories=[], ages=[]): resource = Resource(title=title, description=description, phone=phone, website=website, ages=ages) resource.organization_id = self.construct_organization().id db.session.add(resource) db.session.commit() for category in categories: rc = ResourceCategory(resource_id=resource.id, category=category, type='resource') db.session.add(rc) db_resource = db.session.query(Resource).filter_by(title=resource.title).first() self.assertEqual(db_resource.website, resource.website) elastic_index.add_document(db_resource, 'Resource') return db_resource
def load_resource_categories(self): with open(self.resource_category_file, newline='') as csvfile: reader = csv.reader(csvfile, delimiter=csv.excel.delimiter, quotechar=csv.excel.quotechar) next(reader, None) # use headers to set availability for row in reader: for i in range(4, 10): if not row[i]: continue resource_id = eval(row[0]) category_id = eval(row[i]) resource_category = ResourceCategory(resource_id=resource_id, category_id=category_id) db.session.add(resource_category) db.session.commit() print("There are now %i links between resources and categories in the database." % db.session.query(ResourceCategory).count())
def load_events(self): items = [] with open(self.event_file, newline='') as csvfile: reader = csv.reader(csvfile, delimiter=csv.excel.delimiter, quotechar=csv.excel.quotechar) next(reader, None) # skip the headers for row in reader: org = row[5] if row[5] else None geocode = self.get_geocode( address_dict={'street': row[8], 'city': row[10], 'state': row[11], 'zip': row[12]}, lat_long_dict={'lat': row[15], 'lng': row[16]} ) event = Event(title=row[0], description=row[1], date=row[2], time=row[3], ticket_cost=row[4], organization_name=org, primary_contact=row[6], location_name=row[7], street_address1=row[8], street_address2=row[9], city=row[10], state=row[11], zip=row[12], website=row[13], phone=row[14], latitude=geocode['lat'], longitude=geocode['lng'], ages=[], languages=[], covid19_categories=[], is_draft=False, is_uva_education_content=True) self.__increment_id_sequence(Resource) for i in range(26, 29): if row[i]: event.ages.extend(AgeRange.get_age_range_for_csv_data(row[i])) for i in range(29, 36): if row[i]: event.languages.append(row[i]) for i in range(36, len(row)): if row[i]: event.covid19_categories.append(row[i]) db.session.add(event) db.session.commit() for i in range(17, 25): if row[i] and row[i] != '': category = self.get_category_by_name(row[i].strip()) event_id = event.id category_id = category.id db.session.add(ResourceCategory(resource_id=event_id, category_id=category_id, type='event')) db.session.commit() print("Events loaded. There are now %i events in the database." % db.session.query(Event).count()) print("There are now %i links between events and categories in the database." % db.session.query(ResourceCategory).filter(ResourceCategory.type == 'event').count())
def load_locations(self): items = [] with open(self.location_file, newline='') as csvfile: reader = csv.reader(csvfile, delimiter=csv.excel.delimiter, quotechar=csv.excel.quotechar) next(reader, None) # skip the headers for row in reader: org = self.get_org_by_name(row[5]) if row[5] else self.get_org_by_name(row[1]) geocode = self.get_geocode( address_dict={'street': row[7], 'city': row[9], 'state': row[10], 'zip': row[11]}, lat_long_dict={'lat': row[16], 'lng': row[17]} ) location = Location(title=row[1], description=row[2], primary_contact=row[6], organization=org, street_address1=row[7], street_address2=row[8], city=row[9], state=row[10], zip=row[11], website=row[13], phone=row[15], email=row[14], latitude=geocode['lat'], longitude=geocode['lng'], ages=[]) self.__increment_id_sequence(Resource) for i in range(28, len(row)): if row[i]: location.ages.extend(AgeRange.get_age_range_for_csv_data(row[i])) items.append(location) for i in range(18, 27): if row[i] and row[i] is not '': category = self.get_category_by_name(row[i].strip()) location_id = location.id category_id = category.id items.append(ResourceCategory(resource_id=location_id, category_id=category_id, type='location')) db.session.bulk_save_objects(items) db.session.commit() print("Locations loaded. There are now %i locations in the database." % db.session.query( Location).filter(Location.type == 'location').count()) print("There are now %i links between locations and categories in the database." % db.session.query(ResourceCategory).filter(ResourceCategory.type == 'location').count())
def construct_resource( self, title="A+ Resource", description="A delightful Resource destined to create rejoicing", phone="555-555-5555", website="http://stardrive.org", is_draft=False, organization_name="Some Org", categories=[], ages=[], languages=[], covid19_categories=[], is_uva_education_content=False): resource = Resource(title=title, description=description, phone=phone, website=website, ages=ages, organization_name=organization_name, is_draft=is_draft, languages=languages, covid19_categories=covid19_categories, is_uva_education_content=is_uva_education_content) db.session.add(resource) db.session.commit() for category in categories: rc = ResourceCategory(resource_id=resource.id, category=category, type='resource') db.session.add(rc) db_resource = db.session.query(Resource).filter_by( title=resource.title).first() self.assertEqual(db_resource.website, resource.website) elastic_index.add_document(db_resource, 'Resource') return db_resource