def test_agency_with_user_no_incident_report(self):
     Agency.insert_agencies()
     agency = Agency.get_agency_by_name('SEPTA')
     u1 = User(email='*****@*****.**', password='******')
     u2 = User(email='*****@*****.**', password='******')
     agency.users = [u1, u2]
     self.assertEqual(agency.name, 'SEPTA')
     self.assertTrue(agency.is_official)
     self.assertFalse(agency.is_public)
     self.assertEqual(agency.users, [u1, u2])
 def test_agency_with_incident_report_no_user(self):
     Agency.insert_agencies()
     agency = Agency.get_agency_by_name('SEPTA')
     incident1 = IncidentReport(description='Truck idling on the road!',
                                send_email_upon_creation=False)
     incident2 = IncidentReport(description='Another one!',
                                send_email_upon_creation=False)
     agency.incident_reports = [incident1, incident2]
     self.assertEqual(agency.name, 'SEPTA')
     self.assertTrue(agency.is_official)
     self.assertFalse(agency.is_public)
     self.assertEqual(agency.incident_reports, [incident1, incident2])
Esempio n. 3
0
def setup_dev():
    """Runs the set-up needed for local development."""
    setup_general()

    # Create a default admin user
    admin = User(email='*****@*****.**',
                 phone_number='+12345678910',
                 password='******',
                 first_name='Admin',
                 last_name='User',
                 role=Role.query.filter_by(permissions=Permission.ADMINISTER)
                 .first(),
                 confirmed=True)

    # Create a default agency worker user
    worker = User(email='*****@*****.**',
                  phone_number='+11098764321',
                  password='******',
                  first_name='AgencyWorker',
                  last_name='User',
                  role=Role.query
                  .filter_by(permissions=Permission.AGENCY_WORKER)
                  .first(),
                  confirmed=True)
    worker.agencies = [Agency.get_agency_by_name('SEPTA')]

    # Create a default general user
    general = User(email='*****@*****.**',
                   phone_number='+15434549876',
                   password='******',
                   first_name='General',
                   last_name='User',
                   role=Role.query.filter_by(permissions=Permission.GENERAL)
                   .first(),
                   confirmed=True)

    db.session.add(admin)
    db.session.add(worker)
    db.session.add(general)

    db.session.commit()
 def test_agency_no_user_no_incident_report(self):
     Agency.insert_agencies()
     agency = Agency.get_agency_by_name('SEPTA')
     self.assertEqual(agency.name, 'SEPTA')
     self.assertTrue(agency.is_official)
     self.assertFalse(agency.is_public)
 def test_agency_case_insensitive(self):
     db.session.add(Agency(name='sEpTa'))
     db.session.commit()
     agency = Agency.get_agency_by_name('septa')
     self.assertEqual(agency.name, 'SEPTA')
Esempio n. 6
0
def parse_to_db(db, filename):
    """Reads a csv and imports the data into a database."""
    # The indices in the csv of different data
    vehicle_id_index = 8
    license_plate_index = 9
    location_index = 4
    date_index = 0
    agency_index = 6
    picture_index = 13
    description_index = 11

    validator_form = IncidentReportForm()

    with open(filename, 'rb') as csv_file:
        reader = csv.reader(csv_file)
        columns = reader.next()

        for i, row in enumerate(reader, start=2):  # i is the row number

            address_text = row[location_index]
            coords = geocode(address_text)

            # Ignore rows that do not have correct geocoding
            if coords[0] is None or coords[1] is None:
                print_error(i, 'Failed to geocode "{:s}"'.format(address_text))

            # Insert correctly geocoded row to database
            else:
                loc = Location(
                    latitude=coords[0],
                    longitude=coords[1],
                    original_user_text=address_text)
                db.session.add(loc)

                time1, time2 = parse_start_end_time(date_index, row)

                # Assign correct agency id
                agency_name = row[agency_index].rstrip()
                if agency_name.upper() == 'OTHER':
                    agency_name = row[agency_index + 1].rstrip()
                agency = Agency.get_agency_by_name(agency_name)

                # Create new agency object if not in database
                if agency is None:
                    agency = Agency(name=agency_name)
                    agency.is_public = True
                    agency.is_official = False
                    db.session.add(agency)
                    db.session.commit()

                vehicle_id_text = row[vehicle_id_index].strip()
                license_plate_text = row[license_plate_index].strip()

                # If the license plate is too short, just ignore it
                if len(strip_non_alphanumeric_chars(license_plate_text)) < 3:
                    license_plate_text = ''

                # Validate all the fields
                validate_field = functools.partial(
                    validate_field_partial,
                    form=validator_form,
                    row_number=i
                )

                errors = 0

                if not validate_field(
                    field=validator_form.vehicle_id,
                    data=vehicle_id_text
                ):
                    errors += 1

                if not validate_field(
                    field=validator_form.description,
                    data=row[description_index]
                ):
                    errors += 1

                if not validate_field(
                    field=validator_form.picture_url,
                    data=row[picture_index]
                ):
                    errors += 1

                if errors == 0:
                    vehicle_id_text = strip_non_alphanumeric_chars(
                        vehicle_id_text)
                    license_plate_text = strip_non_alphanumeric_chars(
                        license_plate_text)

                    incident = IncidentReport(
                        vehicle_id=vehicle_id_text if len(vehicle_id_text) > 0
                        else None,
                        license_plate=license_plate_text if
                        len(license_plate_text) > 0 else None,
                        location=loc,
                        date=time1,
                        duration=time2 - time1,
                        agency=agency,
                        picture_url=row[picture_index],
                        description=row[description_index],
                        send_email_upon_creation=False,
                    )
                    db.session.add(incident)

        db.session.commit()
        return columns