コード例 #1
0
ファイル: customize.py プロジェクト: flsantanna/FQM
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))
コード例 #2
0
ファイル: main.py プロジェクト: jamesngangabest/queue
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