def donate_csv_download(): csvHeaders = [ "id", "name", "email", "phone", "date", "address", "useragent", "dj", "thanks", "firsttime", "dcomment", "premiums", "address1", "address2", "city", "state", "zip", "amount", "recurring", "paiddate", "shippeddate", "shirtsize", "shirtcolor", "sweatshirtsize", "method", "custid", "donor_comment" ] orders = Order.query.\ order_by(db.desc(Order.id)) f = io.StringIO() writer = csv.writer(f) writer.writerow(csvHeaders) for o in orders: fields = [ o.id, o.name, o.email, o.phone, o.placed_date, o.remote_addr, o.user_agent, o.dj, o.thank_on_air, o.first_time, o.donor_comment, o.premiums, o.address1, o.address2, o.city, o.state, o.zipcode, o.amount, o.recurring, o.paid_date, o.shipped_date, o.tshirtsize, o.tshirtcolor, o.sweatshirtsize, o.method, o.custid, o.donor_comment ] writer.writerow(fields) f.seek(0) filename = "donor-premiums.csv" return f.read(), { "Content-Type": "text/csv; charset=utf-8", "Content-Disposition": "attachment; filename=\"{0}\"".format(filename), }
def missioncontrol_index(): cutoff = datetime.datetime.utcnow() - datetime.timedelta(hours=12) orders = Order.query.\ filter(Order.placed_date > cutoff).\ order_by(db.desc(Order.id)).limit(app.config['ARTISTS_PER_PAGE']) return render_template('donate/missioncontrol/index.html', plans=list_plans(), orders=orders)
def missioncontrol_index(): cutoff = datetime.datetime.utcnow() - datetime.timedelta(hours=12) orders = Order.query.\ filter(Order.placed_date > cutoff).\ order_by(db.desc(Order.id)).limit(app.config['ARTISTS_PER_PAGE']) return render_template('donate/missioncontrol/index.html', plans=list_plans(), orders=orders, premiums_config=load_premiums_config())
def last15(): tracks = TrackLog.query.order_by(db.desc(TrackLog.id)).limit(15).all() if request.wants_json(): return jsonify({ 'tracks': [t.full_serialize() for t in tracks], }) return render_template('last15.html', tracklogs=tracks)
def playlists_date_data(): try: start = datetime.datetime.strptime(request.args['start'], "%Y-%m-%dT%H:%M:%S.%fZ") end = datetime.datetime.strptime(request.args['end'], "%Y-%m-%dT%H:%M:%S.%fZ") except ValueError: abort(400) sets = DJSet.query.filter(db.and_(DJSet.dtstart >= start, DJSet.dtstart <= end)).\ order_by(db.desc(DJSet.dtstart)).limit(300).all() if request.wants_json(): return jsonify({'sets': [s.serialize() for s in sets]}) return Response("{start} {end}".format(start=start, end=end))
def playlist_cuesheet_ts(filename): match_re = re.compile(r'^(\d{10}0001)(.*)$') m = match_re.match(filename) if not m: abort(400) try: start = datetime.datetime.strptime(m.group(1), "%Y%m%d%H0001") except: abort(400) # assume time in URL is local time, so convert to UTC for DB lookup start = start.replace(tzinfo=dateutil.tz.tzlocal()).astimezone( dateutil.tz.tzutc()).replace(tzinfo=None) end = start + datetime.timedelta(hours=1) prev = db.session.query(TrackLog.id).filter(TrackLog.played <= start).\ order_by(db.desc(TrackLog.played)).limit(1) tracks = TrackLog.query.filter(db.and_( TrackLog.id >= prev.as_scalar(), TrackLog.played <= end)).order_by(TrackLog.played).all() return Response(generate_cuesheet(filename, start, tracks), mimetype="audio/x-cue")
def trackinfo(): track = TrackLog.query.order_by(db.desc(TrackLog.played)).first() if not track: return {'artist': "", 'title': "", 'album': "", 'label': "", 'dj': "", 'dj_id': 0, 'description': app.config['STATION_NAME'], 'contact': app.config['STATION_URL']} data = track.track.serialize() data['listeners'] = track.listeners if track.djset == None: dj = DJ.query.filter_by(name="Automation").first() data['dj'] = dj.airname data['dj_id'] = 0 else: data['dj'] = track.djset.dj.airname if track.djset.dj.visible: data['dj_id'] = track.djset.dj_id else: data['dj_id'] = 0 data['description'] = app.config['STATION_NAME'] data['contact'] = app.config['STATION_URL'] return data
def missioncontrol_index(): orders = Order.query.order_by(db.desc(Order.id)).limit(app.config['ARTISTS_PER_PAGE']) return render_template('donate/missioncontrol/index.html', plans=list_plans(), orders=orders)