示例#1
0
def test_region_serialization():
    memurl = 'sqlite://'
    schemadir = get_data_path('schema')
    session = emailschema.create_db(memurl, schemadir)

    ca_coords = [[[-125.771484, 41.957448], [-112.412109, 42.672339],
                  [-112.060547, 31.791221], [-126.298828, 31.416944],
                  [-125.771484, 41.957448]]]

    lon, lat = (-119.443359, 37.149371)
    regiondict = {
        'type': 'Feature',
        'properties': {
            'code': 'US_States-California',
            'desc': 'California'
        },
        'geometry': {
            'type': 'Polygon',
            'coordinates': ca_coords
        }
    }

    region = emailschema.Region()
    region.fromDict(session, regiondict)
    assert region.containsPoint(lat, lon) == True

    regiondict2 = region.toDict()
    assert regiondict == regiondict2

    session.close()
示例#2
0
def test_create_db():
    memurl = 'sqlite://'
    jsonfile = os.path.join(homedir, '..', 'data',
                            'anonymized_pager_users.json')
    session = emailschema.create_db(memurl,
                                    jsonfile,
                                    nusers=10,
                                    create_db=True)
    print('Checking to see that database has expected number of users.')
    assert len(session.query(emailschema.User).all()) == 10
    print('Database has 10 users in it.')
    session.close()
示例#3
0
def test_create_db(userfile=None, orgfile=None):
    memurl = 'sqlite://'
    #create a user in a dictionary
    threshold = {'alertscheme': 'eis', 'value': 'red'}
    region = {'name': 'UNSOUEU'}
    profile = {'regions': [region], 'thresholds': [threshold]}
    address = {
        'email': '*****@*****.**',
        'is_primary': True,
        'priority': 1,
        'format': 'long',
        'profiles': [profile]
    }
    userdict = {
        'lastname': 'Luthor',
        'firstname': 'Alexander',
        'createdon': datetime.utcnow().strftime(emailschema.TIME_FORMAT),
        'org': 'USGS',
        'addresses': [address]
    }
    tdir = tempfile.mkdtemp()
    if userfile is None:
        userfile = os.path.join(tdir, 'users.json')
        f = open(userfile, 'wt')
        users = [userdict]
        json.dump(users, f)
        f.close()
    try:
        schemadir = get_data_path('schema')
        session = emailschema.create_db(memurl,
                                        schemadir,
                                        users_jsonfile=userfile,
                                        orgs_jsonfile=orgfile)
        print('Testing contents of in-memory database...')
        assert session.query(emailschema.User).count() == 1
        assert session.query(emailschema.Region).count() == 47
        print('Passed test.')
    except:
        shutil.rmtree(tdir)
示例#4
0
if __name__ == '__main__':
    desc = 'Export PAGER users, regions, events, etc. from JSON file into Sqlite database.'
    parser = argparse.ArgumentParser(description=desc)
    parser.add_argument('jsonfile', help='Specify input JSON file name')
    parser.add_argument('dbfile', help='Specify output sqlite DB file name')
    parser.add_argument('-n',
                        '--num-users',
                        type=int,
                        default=None,
                        help='Specify number of users to export')

    args = parser.parse_args()

    tmpfile = 'anonymized_pager_users.db'
    fileurl = 'sqlite:///%s' % args.dbfile
    jsonfile = 'pager_profiles.json'
    session = emailschema.create_db(fileurl,
                                    args.jsonfile,
                                    nusers=args.num_users,
                                    create_db=True)
    nusers = session.query(emailschema.User).count()
    print('There are %i users in this new database.' % nusers)
    session.close()

    #do a quick test of the new database that we created...
    session = emailschema.get_session(fileurl)
    nusers = session.query(emailschema.User).count()
    print('There are %i users in this new database.' % nusers)
    sys.exit(0)
示例#5
0
def test_delete_cascade():
    memurl = 'sqlite://'
    schemadir = get_data_path('schema')
    session = emailschema.create_db(memurl, schemadir)

    #create a user in a dictionary
    threshold = {'alertscheme': 'eis', 'value': 'red'}
    region = {'name': 'UN_Regions-UNSOUEU'}
    profile = {'regions': [region], 'thresholds': [threshold]}
    address = {
        'email': '*****@*****.**',
        'is_primary': True,
        'priority': 1,
        'format': 'long',
        'profiles': [profile]
    }
    userdict = {
        'lastname': 'Luthor',
        'firstname': 'Alexander',
        'createdon': datetime.utcnow().strftime(emailschema.TIME_FORMAT),
        'org': 'USGS',
        'addresses': [address]
    }

    users_before_add = session.query(emailschema.User).count()
    addresses_before_add = session.query(emailschema.Address).count()
    print('Testing deleting users...')
    assert users_before_add == 0
    assert addresses_before_add == 0
    print('No users before insert.')
    user = emailschema.User()
    #inflate the user from the dictionary
    user.fromDict(session, userdict)
    session.add(user)
    users_after_add = session.query(emailschema.User).count()
    addresses_after_add = session.query(emailschema.Address).count()
    assert users_after_add == 1
    assert addresses_after_add == 1
    print('One user, one address after insert.')
    session.delete(user)
    session.commit()
    users_after_delete = session.query(emailschema.User).count()
    addresses_after_delete = session.query(emailschema.Address).count()
    assert users_after_delete == 0
    assert addresses_after_delete == 0
    print('No users, no addresses after deleting user.')

    #test deleting cascades with events
    event = emailschema.Event(eventcode='us2017abcd')
    version = emailschema.Version(versioncode='us2017abcd',
                                  time=datetime.utcnow(),
                                  country='US',
                                  lat=34.15,
                                  lon=-118.13,
                                  depth=10.0,
                                  magnitude=6.5,
                                  number=1,
                                  fatlevel=1,
                                  ecolevel=2,
                                  summarylevel=2,
                                  released=True,
                                  was_pending=False,
                                  processtime=datetime.utcnow(),
                                  maxmmi=7.1)

    print('Test cascade deletes with events and versions...')
    events_before_add = session.query(emailschema.Event).count()
    versions_before_add = session.query(emailschema.Version).count()
    assert events_before_add == 0
    assert versions_before_add == 0

    event.versions.append(version)
    session.add(event)
    session.commit()

    events_after_add = session.query(emailschema.Event).count()
    versions_after_add = session.query(emailschema.Version).count()

    assert events_after_add == 1
    assert versions_after_add == 1

    session.delete(event)
    session.commit()

    events_after_delete = session.query(emailschema.Event).count()
    versions_after_delete = session.query(emailschema.Version).count()

    assert events_after_delete == 0
    assert versions_after_delete == 0

    session.close()
示例#6
0
def test_get_polygon():
    memurl = 'sqlite://'
    schemadir = get_data_path('schema')
    session = emailschema.create_db(memurl, schemadir)

    POINTS = {
        'UNEASTAFR': [(-18.319329, 36.408691)],
        'UNNORAFR': [(29.051368, 20.478516)],
        'UNWESTAS': [(23.216107, 45.263672)],
        'UNWESTAFR': [(10.806328, -11.513672)],
        'UNSEAS': [(1.202915, 116.279297)],
        'UNNOREU': [(61.76013, 14.853516)],
        'UNCENTAMER': [(11.817621, -84.177246)],
        'UNMIC': [(13.444304, 144.793731)],
        'UNMIDAFR': [(-9.115656, 17.094727)],
        'UNSOUAMER': [(-21.314964, -59.150391)],
        'UNSOUEU': [(40.101185, -2.504883)],
        'UNWESTEU': [(47.567261, 3.999023)],
        'UNMEL': [(-9.975613, 149.128418)],
        'UNAUSNZ': [(-23.427969, 134.912109)],
        'UNCARIB': [(18.847812, -70.466309)],
        'UNSOUAFR': [(-31.814563, 24.038086)],
        'UNEASTEU': [(50.392761, 25.708008)],
        'UNEASTAS': [(29.59973, 111.577148)],
        'UNNORAMER': [(38.505191, -100.019531)],
        'UNCENTAS': [(40.033924, 66.225586)],
        'UNSOUAS': [(14.067317, 77.607422)],
        'UNPOL': [(-21.178986, -175.198242)],
        'FEMA01': [(44.585577, -69.147949)],
        'FEMA05': [(46.342188, -88.791504)],
        'FEMA10': [(44.80425, -120.651855), (65.924072, -151.347656)],
        'FEMA07': [(38.577158, -97.668457)],
        'FEMA02': [(42.645071, -74.992676)],
        'FEMA08': [(43.384092, -107.556152)],
        'FEMA09': [(37.434522, -120.695801), (13.444304, 144.793731),
                   (-14.30164, -170.696181)],
        'FEMA03': [(37.747915, -78.112793)],
        'FEMA06': [(30.215168, -98.195801)],
        'FEMA04': [(33.703207, -84.276123)],
        'SWAN': [(22.093275, -4.262695), (-29.71191, 21.181641)],
        'LAC': [(-26.613086, -61.083984)],
        'EAP': [(-28.042895, 140.449219), (-17.751956, -149.315186)],
        'SA': [(17.595594, 76.311035)],
        'ECA': [(6.389001, 42.84668)],
        'EMCA': [(49.772396, 16.479492), (55.463285, -105.732422)],
        'Cont_US': [(37.974515, -104.501953)],
        'US_Terr': [(19.639354, -155.577393)],
        'Not_US': [(-10.541821, 25.136719)],
        'USNORTHCOM': [(25.433353, -103.535156)],
        'USEUCOM': [(51.940032, 10.700684)],
        'USPACOM': [(21.441245, -157.922974)],
        'USSOUTHCOM': [(-1.331972, -60.073242)],
        'USAFRICOM': [(14.551684, 21.269531)],
        'USCENTCOM': [(21.767152, 49.350586)]
    }

    for regioncode, plist in POINTS.items():
        region = session.query(emailschema.Region).filter(
            emailschema.Region.name == regioncode).first()
        if region is None:
            raise Exception('Could not find region %s in database!' %
                            regioncode)
        for point in plist:
            lat, lon = point
            print('Checking region %s...' % regioncode)
            if not region.containsPoint(lat, lon):
                raise Exception(
                    'Region %s does not contain point (%.4f,%.4f).' %
                    (regioncode, lat, lon))

    session.close()
示例#7
0
def test_user_serialization():
    memurl = 'sqlite://'
    schemadir = get_data_path('schema')
    session = emailschema.create_db(memurl, schemadir)

    #create a user in a dictionary
    threshold = {'alertscheme': 'eis', 'value': 'red'}
    region = {'name': 'UN_Regions-UNSOUEU'}
    profile = {'regions': [region], 'thresholds': [threshold]}
    address = {
        'email': '*****@*****.**',
        'is_primary': True,
        'priority': 1,
        'format': 'long',
        'profiles': [profile]
    }
    userdict = {
        'lastname': 'Luthor',
        'firstname': 'Alexander',
        'createdon': datetime.utcnow().strftime(emailschema.TIME_FORMAT),
        'org': 'USGS',
        'addresses': [address]
    }

    user = emailschema.User()
    #inflate the user from the dictionary
    user.fromDict(session, userdict)

    #deflate the user into a dictionary
    userdict2 = user.toDict()

    #make sure the input/output dictionaries have the same content
    assert userdict['lastname'] == userdict2['lastname']
    assert userdict['firstname'] == userdict2['firstname']
    assert userdict['createdon'] == userdict2['createdon']
    assert userdict['org'] == userdict2['org']

    assert userdict['addresses'][0]['email'] == userdict2['addresses'][0][
        'email']
    assert userdict['addresses'][0]['is_primary'] == userdict2['addresses'][0][
        'is_primary']
    assert userdict['addresses'][0]['priority'] == userdict2['addresses'][0][
        'priority']
    assert userdict['addresses'][0]['format'] == userdict2['addresses'][0][
        'format']

    rname = userdict['addresses'][0]['profiles'][0]['regions'][0]['name']
    rname2 = userdict2['addresses'][0]['profiles'][0]['regions'][0]['name']
    assert rname == rname2

    tname = userdict['addresses'][0]['profiles'][0]['thresholds'][0][
        'alertscheme']
    tname2 = userdict2['addresses'][0]['profiles'][0]['thresholds'][0][
        'alertscheme']
    assert tname == tname2

    tvalue = userdict['addresses'][0]['profiles'][0]['thresholds'][0]['value']
    tvalue2 = userdict2['addresses'][0]['profiles'][0]['thresholds'][0][
        'value']
    assert tvalue == tvalue2

    session.close()