def feeds(): ''' the back end list of feeds. ''' if request.method == 'POST': if not user_session.is_admin(): flash('Only Admins can do this!') return redirect(url_for('feeds')) action = request.form.get('action', 'create') if action == 'create': if not request.form.get('title', '').strip(): flash("I'm not making you an un-named feed!") return redirect(url_for('feeds')) Feed(name=request.form.get('title', 'blank').strip()).save() try: user = user_session.get_user() except user_session.NotLoggedIn as e: user = User() return render_template('feeds.html', feeds=Feed.select(), user=user, external_sources=ExternalSource.select(), source_types=external_source_types.types())
def external_source_run(source_id): ''' use the importer specified to see if there is any new data, and if there is, then import it. ''' try: source = ExternalSource.get(id=source_id) except ExternalSource.DoesNotExist: return 'Invalid Source', 404 time_now = now() if user_session.is_admin() and request.form.get('force', 'no') == 'yes': flash("Update forced.") else: if source.last_checked: next_check = source.last_checked + timedelta( minutes=source.frequency) if next_check > time_now: return "Nothing to do. Last: {0}, Next: {1}, Now: {2} ".format( source.last_checked, next_check, time_now) module = external_source_types.load(source.type) settings_data = json.loads(source.settings) new_posts = module.get_new(settings_data) if new_posts: for fresh_data in new_posts: post = Post(type=fresh_data.get('type', 'html'), \ author=source.post_as_user) post_type_module = post_types.load(fresh_data.get('type', 'html')) post.feed = source.feed fresh_data['active_start'] = source.current_lifetime_start() fresh_data['active_end'] = source.current_lifetime_end() post_form_intake(post, fresh_data, post_type_module) post.display_time = source.display_time if source.publish: post.publisher = source.post_as_user post.publish_date = now() post.published = True post.save() # else, no new posts! oh well! source.settings = json.dumps(settings_data) source.last_checked = now() source.save() return 'Done!'
def external_source_run(source_id): ''' use the importer specified to see if there is any new data, and if there is, then import it. ''' try: source = ExternalSource.get(id=source_id) except ExternalSource.DoesNotExist: return 'Invalid Source', 404 time_now = now() if user_session.is_admin() and request.form.get('force', 'no') == 'yes': flash("Update forced.") else: if source.last_checked: next_check = source.last_checked + timedelta(minutes=source.frequency) if next_check > time_now: return "Nothing to do. Last: {0}, Next: {1}, Now: {2} ".format( source.last_checked, next_check, time_now) module = external_source_types.load(source.type) settings_data = json.loads(source.settings) new_posts = module.get_new(settings_data) if new_posts: for fresh_data in new_posts: post = Post(type=fresh_data.get('type', 'html'), \ author=source.post_as_user) post_type_module = post_types.load(fresh_data.get('type', 'html')) post.feed = source.feed fresh_data['active_start'] = source.current_lifetime_start() fresh_data['active_end'] = source.current_lifetime_end() post_form_intake(post, fresh_data, post_type_module) post.display_time = source.display_time if source.publish: post.publisher = source.post_as_user post.publish_date = now() post.published = True post.save() # else, no new posts! oh well! source.settings = json.dumps(settings_data) source.last_checked = now() source.save() return 'Done!'
def feeds(): ''' the back end list of feeds. ''' if request.method == 'POST': action = request.form.get('action', 'create') if action == 'create': if not request.form.get('title', '').strip(): flash("I'm not making you an un-named feed!") return redirect(url_for('feeds')) Feed(name=request.form.get('title', 'blank').strip()).save() try: user = user_session.get_user() except user_session.NotLoggedIn: user = User() return render_template('feeds.html', feeds=Feed.select(), user=user, external_sources=ExternalSource.select(), source_types=external_source_types.types())
def external_data_sources_update_all(): ''' update all external data sources. ''' sources = [x[0] for x in ExternalSource.select(ExternalSource.id).tuples()] return json.dumps([(external_source_run(s), s) for s in sources])
def external_data_source_edit(source_id): ''' Editing a external data source ''' if not user_session.is_admin(): flash('Only Admins can do this!') return redirect(url_for('feeds')) # first find the data type: if request.method == 'DELETE': ExternalSource.delete() \ .where(ExternalSource.id == int(source_id)) \ .execute() return 'deleted' if source_id == None: try: source = ExternalSource() source.type = request.args['type'] source.name = "new " + source.type + " source" source.feed = Feed.get() # set initial feed except KeyError: return 'No type specified.', 500 else: try: source = ExternalSource.get(id=source_id) except peewee.DoesNotExist: return 'Invalid id.', 404 # Try and load the external source type ( and check it's valid): try: module = external_source_types.load(source.type) except ImportError: return 'Invalid External Source Type', 404 # if it's a post, then update the data with 'receive': if request.method == 'POST': source.post_as_user = user_session.get_user() source.settings = json.dumps(module.receive(request)) source.name = request.form.get('name', source.name) source.frequency = getint('frequency', 60) source.publish = getbool('publish', False) source.lifetime_start = request.form.get('active_start', source.lifetime_start) source.lifetime_end = request.form.get('active_end', source.lifetime_end) source.display_time = getint('display_time', source.display_time) source.post_template = request.form.get('post_template', source.post_template) try: source.feed = Feed.get(Feed.id == getint('feed', 100)) source.save() if source_id == None: # new source! return redirect(url_for('external_data_source_edit', source_id=source.id)) else: flash('Updated.') except Feed.DoesNotExist: flash("Can't save! Invalid Feed!{}".format( getint('feed', '-11'))) return render_template("external_source.html", source=source, feeds=Feed.select(), form=module.form(json.loads(source.settings)))
def external_data_source_edit(source_id): ''' Editing a external data source ''' if not user_session.is_admin(): flash('Only Admins can do this!') return redirect(url_for('feeds')) # first find the data type: if request.method == 'DELETE': ExternalSource.delete() \ .where(ExternalSource.id == int(source_id)) \ .execute() return 'deleted' if source_id == None: try: source = ExternalSource() source.type = request.args['type'] source.name = "new " + source.type + " source" source.feed = Feed.get() # set initial feed except KeyError: return 'No type specified.', 500 else: try: source = ExternalSource.get(id=source_id) except peewee.DoesNotExist: return 'Invalid id.', 404 # Try and load the external source type ( and check it's valid): try: module = external_source_types.load(source.type) except ImportError: return 'Invalid External Source Type', 404 # if it's a post, then update the data with 'receive': if request.method == 'POST': source.post_as_user = user_session.get_user() source.settings = json.dumps(module.receive(request)) source.name = request.form.get('name', source.name) source.frequency = getint('frequency', 60) source.publish = getbool('publish', False) source.lifetime_start = getstr('active_start', source.lifetime_start, validate=DATESTR) source.lifetime_end = getstr('active_end', source.lifetime_end, validate=DATESTR) source.display_time = getint('display_time', source.display_time) source.post_template = request.form.get('post_template', source.post_template) try: source.feed = Feed.get(Feed.id == getint('feed', 100)) source.save() if source_id == None: # new source! return redirect( url_for('external_data_source_edit', source_id=source.id)) else: flash('Updated.') except Feed.DoesNotExist: flash("Can't save! Invalid Feed!{}".format(getint('feed', '-11'))) return render_template("external_source.html", source=source, feeds=Feed.select(), form=module.form(json.loads(source.settings)))