def background_tasks(): ''' view for background tasks customization ''' form = BackgroundTasksForms() cache_tts = data.BackgroundTask.get(name='CacheTicketsAnnouncements') delete_tickets = data.BackgroundTask.get(name='DeleteTickets') def _resolve_time(every, time): return time if every in EVERY_TIME_OPTIONS else None if form.validate_on_submit(): cache_tts.enabled = form.cache_tts_enabled.data cache_tts.every = form.cache_tts_every.data delete_tickets.enabled = form.delete_tickets_enabled.data delete_tickets.every = form.delete_tickets_every.data delete_tickets.time = _resolve_time(delete_tickets.every, form.delete_tickets_time.data) db.session.commit() stop_tasks() start_tasks() flash('Notice: background tasks got updated successfully.', 'info') return redirect(url_for('cust_app.background_tasks')) if not form.errors: form.cache_tts_enabled.data = cache_tts.enabled form.cache_tts_every.data = cache_tts.every form.delete_tickets_enabled.data = delete_tickets.enabled form.delete_tickets_every.data = delete_tickets.every form.delete_tickets_time.data = delete_tickets.time return render_template('background_tasks.html', page_title='Background Tasks', navbar='#snb2', form=form, hash='#da9', vtrue=data.Vid.get().enable, strue=data.Slides_c.get().status, time_options=','.join(EVERY_TIME_OPTIONS))
def bundle_app(config={}): ''' Create a Flask app, set settings, load extensions, blueprints and create database. ''' app = create_app(config) # NOTE: avoid creating or interacting with the database during migration if not app.config.get('MIGRATION', False): create_db(app, testing=app.config.get('TESTING', False)) start_tasks(app) if os.name != 'nt': # !!! it did not work creates no back-end available error !!! # !!! strange bug , do not remove !!! if get_printers_usb(): pass @app.route('/language_switch/<language>') def language_switch(language): ''' Endpoint to switch the default language. Parameters ---------- language: str language short form to switch to. ''' session['lang'] = language if current_user.is_authenticated: return redirect(str(request.referrer)) return redirect(url_for('core.root')) @app.before_first_request def default_language(): ''' Set the default language before the first request. ''' if session.get('lang') not in list(SUPPORTED_LANGUAGES.keys()): session['lang'] = 'en' @app.errorhandler(404) @app.errorhandler(500) @app.errorhandler(413) def page_not_found(error): ''' Adding error handlers on main app instance. ''' if getattr(error, 'code', None) == 413: flash('Error: file uploaded is too large ', 'danger') if current_user.is_authenticated: return redirect(url_for('cust_app.multimedia', nn=1)) return redirect(url_for('core.root')) getattr(error, 'code', None) != 404 and log_error(error) flash('Error: something wrong , or the page is non-existing', 'danger') return redirect(url_for('core.root')) @app.route('/nojs/<int:enabled_js>') def nojs(enabled_js): ''' Handle JavaScript disabled or not supported. ''' if enabled_js == 1: next_url = session.get('next_url', '/') if next_url != '/': return redirect(next_url) return redirect(url_for('core.root')) return render_template('nojs.html', page_title='Javascript is disabled') def moment_wrapper(moment): ''' Temproray moment wrapper to add `.toTime()` and `.toNow()` TODO: Remove and update Flask-Moment when PR's mereged. ''' def toTime(*args, **kwargs): content = str(moment.fromTime(*args, **kwargs)) return Markup(content.replace('from(', 'to(')) def toNow(*args, **kwargs): content = str(moment.fromNow(*args, **kwargs)) return Markup(content.replace('fromNow(', 'toNow(')) setattr(moment, 'toTime', toTime) setattr(moment, 'toNow', toNow) return moment @app.context_processor def inject_vars(): ''' Injecting default variables to all templates. ''' ar = session.get('lang') == 'AR' # adding language support var # modifying side bar spacing for specific paths path = request.path admin_routes = ['/users', '/user_a', '/admin_u', '/user_u', '/csv', '/settings'] admin_route = any([path in admin_routes, path[:7] in admin_routes, path[:5] in admin_routes]) return dict(path=path, adme=admin_route, brp=Markup('<br>'), ar=ar, version=VERSION, str=str, defLang=session.get('lang'), getattr=getattr, settings=Settings.get(), Serial=Serial, checkId=lambda id, records: id in [i.id for i in records], offices=Office.query.all(), moment_wrapper=moment_wrapper, current_path=quote(request.path, safe=''), windows=os.name == 'nt', unix=os.name != 'nt') return app