Example #1
0
 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"])
Example #2
0
    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())
Example #3
0
    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())
Example #4
0
 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
Example #5
0
 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)
Example #8
0
 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)
Example #9
0
 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"])
Example #10
0
 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"])
Example #11
0
 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"])
Example #12
0
 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"])
Example #13
0
 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)
Example #15
0
    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
Example #16
0
    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())
Example #17
0
    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())
Example #18
0
    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())
Example #19
0
    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