-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathweshappening.py
165 lines (142 loc) · 4.97 KB
/
weshappening.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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
from flask import Flask, render_template
from flask.ext.sqlalchemy import SQLAlchemy
from pygeocoder import Geocoder
import simplejson
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///events.db'
db = SQLAlchemy(app)
cats = {0: "Auditions", 1: "Theater", 2: "Sports",
3: "Admissions", 4: "Concert", 5:"Other"}
class Event(db.Model):
__tablename__ = 'event'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100), unique=True)
location_id = db.Column(db.Integer, db.ForeignKey('location.id'))
location = db.relationship('Location')
time = db.Column(db.DateTime)
link = db.Column(db.String(200))
description = db.Column(db.Text)
category = db.Column(db.Integer)
lat = db.Column(db.Float)
lon = db.Column(db.Float)
def __init__(self, name, location, time, link, description, category, lat=0.0, lon=0.0):
self.name = name
self.location = location
self.time = time
self.link = link
self.description = description
self.category = category
self.lat = lat
self.lon = lon
def __repr__(self):
return '<Event %s>' % self.name
class Location(db.Model):
__tablename__ = 'location'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100), unique=True)
short_name = db.Column(db.String(50))
addr = db.Column(db.String(100))
def __init__(self, name, short_name, addr):
self.name = name
self.short_name = short_name
self.addr = addr
def __repr__(self):
return '<Location %s>' % self.name
def serialize(locs):
locations = []
for loc in locs:
l = {'name': loc.name}
locations.append(l)
return simplejson.dumps(locations)
def serialize_events(events):
evs = []
for event in events:
time = '%s,%s,%s,%s,%s' % (event.time.year, event.time.month, event.time.day, event.time.hour, event.time.minute)
ev = {'name': event.name, 'location': event.location.name,
'time': time, 'link': event.link,
'description': event.description,
'lat': event.lat, 'lon': event.lon,
'category': cats[event.category]}
evs.append(ev)
return simplejson.dumps(evs)
def query_name(pattern, d):
patterns = pattern.split(" ")
if d == "location":
locs = Location.query.all()
for p in patterns:
match = []
for loc in locs:
if not (loc.name.find(p) == -1):
match.append(loc)
if len(match) > 0:
locs = match
return locs[0]
elif d == "event":
evs = Event.query.all()
for p in patterns:
match = []
for ev in evs:
if not (ev.name.find(p) == -1):
match.append(ev)
if len(match) > 0:
evs = match
return evs[0]
return None
@app.route('/')
def index():
# locations = simplejson.dumps(Location.query.all())
locations = serialize(Location.query.all())
#events = ['option_1','option_2','option_3','option_4']
events = serialize_events(Event.query.all())
events2 = Event.query.all()
ite = 0
for i in events2:
events2[ite].time = i.time.strftime("%b %e at %I:%M %p")
ite += 1
categories = ['cat 1','cat 2','cat 3']
return render_template("index.html", locations = locations, events = events, events2=events2,categories = categories)
# @app.route("/#<regex('.*'):param>")
# def to_pin(param):
def add_event(event):
name = event["name"]
print "EVENT NAME",name
exists = Event.query.filter_by(name=name).first()
if not exists:
loc = event["location"]
print "LOCCC",loc
#location = Location.query.filter(Location.name.startswith(loc)).first()
location = query_name(loc, "location")
print "location",location
if not location:
loc = Location.query.filter_by(name="Unknown").first()
lat, lon = (0.0, 0.0)
else:
loc = location
if loc.addr == "":
lat, lon = (0.0, 0.0)
else:
try:
lat, lon = Geocoder.geocode(loc.name + ", Middletown, CT, 06457").coordinates
print "success on ",name,loc,lat,lon
except:
lat, lon = (41.5555, -72.6575)
time = event["time"]
link = event["link"]
desc = event["description"]
cat = event["category"]
ev = Event(name, loc, time, link, desc, cat, lat, lon)
#print ev.name, ev.location, ev.lat, ev.lon
db.session.add(ev)
db.session.commit()
# else:
# print "EXISTS",name,loc
# delete_event(exists.name)
# add_event(event)
def delete_event(event):
ev = Event.query.filter_by(name=event).first()
if ev:
db.session.delete(ev)
db.session.commit()
if __name__ == "__main__":
app.debug = True
app.run()