-
Notifications
You must be signed in to change notification settings - Fork 0
/
seed.py
109 lines (100 loc) · 3.57 KB
/
seed.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
"""Seed process for populating db"""
import urllib
import requests
import time
import geoalchemy2
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime
from model import Bathroom, User, Location, Rating, Comment, db, connect_to_db
def load_data():
"""pull data from API and load into db"""
page_num = 1
# if type(num) == int:
# url = "https://refugerestrooms.org:443/api/v1/restrooms.json?page=1&per_page=" + str(page_num)
# else:
# pass
while True:
url = "https://www.refugerestrooms.org:443/api/v1/restrooms.json?per_page=100&page=" + str(page_num)
results = []
response = requests.get(url)
if response.status_code == 200:
results = response.json()
page_num += 1
# loop thru json data
for v in results:
# add bathroom and location
b = Bathroom(name=v['name'], unisex=v['unisex'],
accessible=v['accessible'],
changing_table=v['changing_table'])
db.session.add(b)
db.session.commit()
# add location
if v['latitude'] == None or v['longitude'] == None:
v['latitude'] = 0.00
v['longitude'] = 0.00
l = Location(bathroom_id=b.bathroom_id,street=v['street'],
city=v['city'], state=v['state'], \
country=v['country'], latitude=v['latitude'],
longitude=v['longitude'], directions=v['directions'])
db.session.add(l)
db.session.commit()
# add comment
if len(v['comment']) > 1:
c = Comment(comment=v['comment'],
bathroom_id=b.bathroom_id,
user_id=0)
db.session.add(c)
db.session.commit()
# add ratings
if v['downvote'] == 1:
r = Rating(bathroom_id=b.bathroom_id,
user_id= 0,
score=2)
db.session.add(r)
db.session.commit()
elif v['upvote'] == 1:
r = Rating(bathroom_id=b.bathroom_id,
user_id= 0,
score=5)
db.session.add(r)
db.session.commit()
time.sleep(1)
else:
break
return "finished loading data"
def setup():
"""create default user acct"""
with app.app_context():
password = User.set_password('letmein')
u = User(user_id=0, fname="refuge", lname="restrooms", \
email="whatever@refugerestrooms.com", pword=password)
db.session.add(u)
db.session.commit()
if __name__ == '__main__':
import os
app = Flask(__name__)
os.system("dropdb biobreak")
os.system("createdb biobreak")
# create extension postgis
import subprocess
try:
subprocess.check_call([
'psql', '-q',
'-U', 'vagrant',
'-f', '/home/vagrant/src/projects/biobreak/misc/cr_ext.sql',
'biobreak'
])
except subprocess.CalledProcessError, ex:
print "Failed to invoke psql: {}".format(ex)
connect_to_db(app)
# Make our tables
db.create_all()
# create default user needed to seed data
setup()
# load data from API into db
load_data()
# test that data is there
print "verify we have data:"
result = db.session.query(Bathroom.name).first()
print result[0] # pragma: no cover