def form_for_now_middle(fieldname, form, description, do_events=False): """ Render a form, or the response to the form. Pulls out the specified fied and uses that to generate a TimeGhost.middle. TimeGhost.now is Event.now(). """ try: # Render requested timeghost if request.method == "POST": now = Event.now() middle_key_or_date = request.form[fieldname] middle = Event.get_from_key_or_date(middle_key_or_date, description) timeghost = TimeGhostFactory.build(now=now, middle=middle) if not do_events: timeghost.display_prefix = "" return render_template('timeghost.html', timeghost=timeghost) # draw the form: else: events = None if do_events: events = Event.query().order(-Event.date).fetch() return render_template(form, events=events) except TimeGhostError as err: return render_template('error.html', err=err), 404
def timeghost_json(): """JSON page: generate a random Timeghost and return it as a JSON object""" now = Event.now() middle = Event.get_random(before=now) timeghost = TimeGhostFactory.build(now=now, middle=middle) tg_dict = { 'factoid': timeghost.factoid, 'permalink': timeghost.permalink } return jsonify(tg_dict)
def timeghost_json(): """JSON page: generate a random Timeghost and return it as a JSON object""" middle = Event.get_random(before=Event.now()) tg = TimeGhostFactory.build(middle=middle) tg_dict = dict( factoid=tg.factoid, permalink=tg.permalink_fully_qualified, tweet="{} #timeghost {}".format( tg.factoid[:110], tg.permalink_fully_qualified), ) return jsonify(tg_dict)
def events_json_server(middle_key_or_date=None): """ Either all events, or all events in the 'timeghost range' between than a given middle event key/date and now. """ if request.method == "POST": middle_key_or_date = request.form['middle_event_key'] events = Event.get_events_in_range(Event.now(), middle_key_or_date, sort_asc=False) events_in_dicts = [{'key': e.key.urlsafe(), 'description': e.description, 'date': "({0.year}-{0.month}-{0.day})".format(e.date), } for e in events] json_events = json.dumps({'events': events_in_dicts}) return json_events
def chosen_event_pair(): try: # Render requested timeghost if request.method == "POST": now = Event.now() middle_kod = request.form['middle'] middle = Event.get_from_key_or_date(middle_kod) long_ago_kod = request.form['long_ago'] long_ago = Event.get_from_key_or_date(long_ago_kod) timeghost = TimeGhost(now=now, middle=middle, long_ago=long_ago) return render_template('timeghost.html', timeghost=timeghost) # draw the form: else: events = Event.query().order(-Event.date).fetch() return render_template('specific_both.html', events=events) except TimeGhostError as err: return render_template('error.html', err=err), 404
def permalink_server(middle_key_urlsafe, long_ago_key_urlsafe=None): """ Handles permalinks for a particular timeghost if both arguments are given, and TimeGhosts between now and a particular middle event if only the middle event key is given. """ try: now = Event.now() middle = Event.get_from_key_or_date(middle_key_urlsafe) long_ago = None if long_ago_key_urlsafe is not None: long_ago = Event.get_from_key_or_date(long_ago_key_urlsafe) timeghost = TimeGhostFactory.build(now=now, middle=middle, long_ago=long_ago) return render_template('timeghost.html', timeghost=timeghost) except TimeGhostError as err: return render_template('error.html', err=err), 404
def fast_timeghost_server(middle_date_str=None, now_date_str=None): """ Generates a random timeghost, a timeghost between now and a particular time, or a timeghost between two specified times, depending on the number of arguments given. """ try: if now_date_str is None: now = Event.now() else: now = Event.build(date_str=now_date_str) if middle_date_str is None: middle = Event.get_random(before=now) else: middle = Event.build(date_str=middle_date_str) timeghost = TimeGhostFactory.build(middle=middle) return render_template('timeghost.html', timeghost=timeghost) except TimeGhostError as err: return render_template('error.html', err=err), 404
def timeghost_server(middle_date_str=None, now_date_str=None): """ Generates a random timeghost, a timeghost between now and a particular time, or a timeghost between two specified times, depending on the number of arguments given. """ try: if now_date_str is None: now = Event.now() else: now = Event.build(date_str=now_date_str) if middle_date_str is None: middle = Event.get_random(before=now) else: middle = Event.build(date_str=middle_date_str) timeghost = TimeGhostFactory.build(now=now, middle=middle) logging.debug("output timeghost: %s", timeghost) return render_template('timeghost.html', timeghost=timeghost) except TimeGhostError as err: return render_template('error.html', err=err), 404
def build(cls, now=None, middle=None, long_ago=None, get_earliest=False): """ Create TimeGhost objects from triplets of events. """ timeghost = TimeGhost(now=now, middle=middle, long_ago=long_ago) # Set the .now Event to "now" if not specified: if timeghost.now is None: timeghost.set(Event.now(), "now") # Generate a .middle Event if not specified: if timeghost.middle is None: timeghost.set(Event.get_random(), "middle") # Generate a .long_ago Event if not specified: if timeghost.long_ago is None: try: long_ago = timeghost.find_best_long_ago(get_earliest) except TimeGhostError: long_ago = Event.get_earliest() timeghost.set(long_ago, "long_ago") # Return a new instance to insure the init validation is run properlhy: return TimeGhost(timeghost.now, timeghost.middle, timeghost.long_ago)