Exemplo n.º 1
0
def test_load_online_icon_qrcode():
    qrcode = QRcode()
    old_qr = qrcode('Test Data')
    new_qr = qrcode('Test Data',
                    icon_img='http://localhost:5000/tests/icon.jpg')
    assert "data:image/png;base64," in new_qr
    assert len(new_qr) > len(old_qr)
Exemplo n.º 2
0
def closing_pdf(request, key=""):
    report = Report.objects.get(key=key)
    closing = Closing.objects.get(report_id=report.report_id)
    enumeration = Enumeration.objects.get(report_id=report.report_id)
    car = report.car
    contract = report.contract
    customer = contract.customer
    qrcode = get_qrc_code(qr_company=report.pdf_qr_code_company)
    context = {
        'enumeration':
        enumeration,
        'closing':
        closing,
        'report':
        report,
        'qrcode':
        check_qr_code(qrcode),
        'contract':
        contract,
        'car':
        car,
        'customer':
        customer,
        'qrcode_some':
        QRcode.qrcode(
            "http://e-otsenka.uz/pdf/{id}".format(id=report.report_id))
    }

    pdf = generate_pdf(default_template="closing.html",
                       css_name="finish_report.css",
                       context=context)
    reponse = FileResponse(ContentFile(pdf), content_type='application/pdf')
    return reponse
Exemplo n.º 3
0
def test_error_correction_qrcode():
    qrcode = QRcode()
    generated_b64 = qrcode('You can read me even if I\'m 30% hurt.',
                           error_correction='H')
    expected_b64 = 'data:image/png;base64,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'

    assert generated_b64 == expected_b64
Exemplo n.º 4
0
def create_app(test_config=None):
    app = Flask(__name__, instance_relative_config=True)
    qrcode = QRcode(app)

    app.config.from_mapping(SECRET_KEY='dev',
                            DATABASE=os.path.join(app.instance_path,
                                                  'flaskr.sqlite'))

    if test_config is None:
        # Load the instance config, if it exists, when not testing
        app.config.from_pyfile('config.py', silent=True)
    else:
        app.config.from_mapping(test_config)

    # ensure the instance folder exists
    try:
        os.makedirs(app.instance_path)
    except OSError:
        pass

    # a simple page that says hello

    @app.route('/hello')
    def hello():
        return 'Hello, World'

    from . import db
    db.init_app(app)

    from . import auth
    app.register_blueprint(auth.bp)

    from . import blog
    app.register_blueprint(blog.bp)

    from . import qr
    app.register_blueprint(qr.bp)

    from . import journal
    app.register_blueprint(journal.bp)
    """
    Unlike the auth blueprint, the blog blueprint does not have a url_prefix. 
    So the index view will be at /, the create view at /create, and so on. 
    The blog is the main feature of Flaskr, so it makes sense that the blog 
    index will be the main index.

    However, the endpoint for the index view defined below will be blog.index. 
    Some of the authentication views referred to a plain index endpoint. 
    app.add_url_rule() associates the endpoint name 'index' with the / url so 
    that url_for('index') or url_for('blog.index') will both work,
    generating the same / URL either way.

    In another application you might give the blog blueprint a url_prefix and 
    define a separate index view in the application factory, similar to the 
    hello view. Then the index and blog.index endpoints and URLs would be different.    
    """

    app.add_url_rule('/', endpoint='index')

    return app
Exemplo n.º 5
0
def init_app(app, specter=None):
    '''  see blogpost 19nd Feb 2020 '''
    app.logger.info("Initializing QRcode")
    QRcode(app)  # enable qr codes generation
    # Login via Flask-Login
    app.logger.info("Initializing LoginManager")
    login_manager = LoginManager()
    login_manager.init_app(app)  # Enable Login
    login_manager.login_view = "login"  # Enable redirects if unauthorized

    @login_manager.user_loader
    def load_user(user_id):
        return AuthenticatedUser()

    # let's make it a bit more convenient
    def login():
        login_user(load_user(""))

    app.login = login
    if specter == None:
        # the default. If not None, then it got injected for testing
        app.logger.info("Initializing Specter")
        specter = Specter(DATA_FOLDER)
    # Attach specter instance so child views (e.g. hwi) can access it
    app.specter = specter
    if specter.config.get('auth') == "none":
        app.logger.info("Login disabled")
        app.config["LOGIN_DISABLED"] = True
    else:
        app.logger.info("Login enabled")
    app.logger.info("Initializing Controller ...")
    app.register_blueprint(hwi_views, url_prefix='/hwi')
    with app.app_context():
        from . import controller
    return app
Exemplo n.º 6
0
    def __init__(self):
        super().__init__(__name__)
        cache.init_app(self)
        QRcode(self)
        self.debug = False
        self.config['SECRET_KEY'] = FLASK_SECRET_KEY

        @self.route('/')
        @cache.memoize(timeout=600)
        def index():
            return redirect(url_for('home.index'))

        @self.errorhandler(404)
        @cache.memoize(timeout=600)
        def page_not_found(e):
            return redirect(url_for('home.index'))

        self.admin = Admin(app=self, url='/')
        self.admin.add_view(HomeView(name='Home', endpoint='home'))
        self.admin.add_view(TipView(name='Send a Tip', endpoint='tip'))
        self.admin.add_view(
            PendingChannelsModelView(PendingChannels,
                                     endpoint='pending-channels',
                                     name='Pending Channels',
                                     category='LND'))
        self.admin.add_view(
            OpenChannelsModelView(Channels,
                                  endpoint='channels',
                                  name='Open Channels',
                                  category='LND'))
Exemplo n.º 7
0
def converted_qrcode():

    data = request.form['qrcode']
    qrcode = QRcode()
    img = qrcode(data, border=10)

    return render_template("qrcode.html", img=img, data=data)
Exemplo n.º 8
0
def generate_finish_pdf(report):
    id = report.report_id
    car = report.car
    try:
        enumeration = Enumeration.objects.get(report_id=id)
    except Enumeration.DoesNotExist:
        enumeration = None
    contract = report.contract
    customer = contract.customer
    qrcode = get_qrc_code(qr_company=report.pdf_qr_code_company)
    context = {
        'car':
        car,
        'customer':
        customer,
        'enumeration':
        enumeration,
        'report':
        report,
        'qrcode':
        check_qr_code(qrcode),
        'contract':
        contract,
        'qrcode_some':
        QRcode.qrcode("{url}/pdf/{link}".format(
            url=s.URL_FILES, link=createQRcodeForReport(report))),
        # 'qrcode_some': QRcode.qrcode('https://people.ischool.berkeley.edu/~buckland/20THCENT.pdf')
    }
    file_path = get_name(TemplateMixing.objects.last())
    return generate_pdf(default_template="finishing_report.html",
                        main_template_path=file_path,
                        css_name="finish_report.css",
                        context=context)
Exemplo n.º 9
0
def test_load_online_icon_qrcode():
    qrcode = QRcode()
    old_qr = qrcode('Test Data')
    new_qr = qrcode('Test Data',
                    icon_img='https://www.agner.io/icon.jpg')
    assert "data:image/png;base64," in new_qr
    assert len(new_qr) > len(old_qr)
Exemplo n.º 10
0
def test_load_local_icon_qrcode():
    qrcode = QRcode()
    old_qr = qrcode('Test Data')
    new_qr = qrcode('Test Data',
                    icon_img=os.path.join(testdir, 'icon.jpg'))
    assert "data:image/png;base64," in new_qr
    assert len(new_qr) > len(old_qr)
Exemplo n.º 11
0
def test_error_correction_qrcode():
    qrcode = QRcode()
    generated_b64 = qrcode('You can read me even if I\'m 30% hurt.',
                           error_correction='H')
    expected_b64 = 'data:image/png;base64,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'

    assert generated_b64 == expected_b64
Exemplo n.º 12
0
def create_app():
    if getattr(sys, 'frozen', False):

        # Best understood with the snippet below this section:
        # https://pyinstaller.readthedocs.io/en/v3.3.1/runtime-information.html#using-sys-executable-and-sys-argv-0
        template_folder = os.path.join(sys._MEIPASS, 'templates')
        static_folder = os.path.join(sys._MEIPASS, 'static')
        logging.info("pyinstaller based instance running in {}".format(
            sys._MEIPASS))
        app = Flask(__name__,
                    template_folder=template_folder,
                    static_folder=static_folder)
    else:
        app = Flask(__name__,
                    template_folder="templates",
                    static_folder="static")
    QRcode(app)  # enable qr codes generation
    specter = Specter(DATA_FOLDER)
    specter.check()
    # Attach specter instance so child views (e.g. hwi) can access it
    app.specter = specter
    app.register_blueprint(hwi_views, url_prefix='/hwi')
    with app.app_context():
        import controller
    return app
Exemplo n.º 13
0
def create_app():
    global application
    if not application:
        application = ipsec_me()

        application.app.url_map.converters['vpn_server'] = VPNServerConverter
        application.app.url_map.converters[
            'device_class'] = DeviceClassConverter
        application.app.url_map.converters['device'] = DeviceConverter
        application.app.url_map.converters[
            'device_secure'] = DeviceSecureConverter

        application.facet("configuration")
        application.facet("logs")
        application.facet("database")
        application.facet("marshalling")
        application.facet("blueprints")
        application.facet("accounts")
        application.facet("signals")
        application.facet("forms")
        application.facet("error_handlers")
        application.facet("request_handlers")
        application.facet("administration")
        # application.facet("rest", api_map=api_map)
        # application.facet("webassets")
        # application.facet("email")
        application.facet("debugger")
        # application.facet("task_queue")

        Bootstrap(application.app)
        Babel(application.app)
        QRcode(application.app)

    # print application.app.url_map
    return application.app
Exemplo n.º 14
0
def create_app():
    app = Flask(__name__)

    qrcode = QRcode(app)
    app.config['SECRET_KEY'] = os.urandom(24)
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.sqlite'
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

    db.init_app(app)

    from . import initdb
    initdb.init_app(app)

    login_manager.login_view = 'auth.login'
    login_manager.init_app(app)

    # blueprint for auth routes in our app
    from .auth import auth as auth_blueprint
    app.register_blueprint(auth_blueprint)

    # blueprint for non-auth parts of app
    from .main import main as main_blueprint
    app.register_blueprint(main_blueprint)

    return app
Exemplo n.º 15
0
Arquivo: main.py Projeto: KsAmJ/FQM
def create_app(config={}):
    ''' Create the flask app and setup extensions and blueprints.

    Returns
    -------
        app: Flask app
            app with settings and blueprints loadeds.
    '''
    app = Flask(__name__,
                static_folder=absolute_path('static'),
                template_folder=absolute_path('templates'))
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
    app.config[
        'SQLALCHEMY_DATABASE_URI'] = f'sqlite:///{absolute_path(DATABASE_FILE)}?check_same_thread=False'
    app.config['DB_NAME'] = DATABASE_FILE
    # Autoreload if templates change
    app.config['TEMPLATES_AUTO_RELOAD'] = True
    # flask_upload settings
    # app.config['MAX_CONTENT_LENGTH'] = 500 * 1024 * 1024 # Remove Upload limit. FIX ISSUE
    app.config['UPLOADED_FILES_DEST'] = absolute_path('static/multimedia')
    app.config['UPLOADED_FILES_ALLOW'] = reduce(lambda sum, group: sum + group,
                                                SUPPORTED_MEDIA_FILES)
    app.config['SECRET_KEY'] = os.urandom(24)
    app.config.update(config)

    # Initiating extensions before registering blueprints
    Moment(app)
    QRcode(app)
    configure_uploads(app, files)
    login_manager.init_app(app)
    db.init_app(app)
    migrate.init_app(app, db=db)
    datepicker(
        app, local=['static/css/jquery-ui.min.css', 'static/jquery-ui.min.js'])
    colorpicker(app,
                local=['static/css/spectrum.css', 'static/spectrum.min.js'])
    fontpicker(app,
               local=[
                   'static/jquery-ui.min.js', 'static/css/jquery-ui.min.css',
                   'static/webfont.min.js', 'static/webfont.select.min.js',
                   'static/css/webfont.select.css'
               ])
    minify(app,
           js=True,
           cssless=True,
           caching_limit=3,
           fail_safe=True,
           bypass=['.min.*'])
    gTTs.init_app(app)
    gtranslator.init_app(app)

    # Register blueprints
    app.register_blueprint(administrate)
    app.register_blueprint(core)
    app.register_blueprint(cust_app)
    app.register_blueprint(manage_app)
    app.jinja_env.add_extension('jinja2.ext.loopcontrols')

    return app
Exemplo n.º 16
0
def test_color_qrcode():
    qrcode = QRcode()
    generated_b64 = qrcode('You can see green front color and #CCC back color.',
                           error_correction='H', back_color='ccc',
                           fill_color='green')
    expected_b64 = 'data:image/png;base64,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'

    assert generated_b64 == expected_b64
Exemplo n.º 17
0
def test_local_icon_image_qrcode():
    qrcode = QRcode()
    generated_b64 = qrcode('Load icon image from static folder.',
                           error_correction='H',
                           icon_img=os.path.join(testdir, 'icon.jpg'))
    expected_b64 = 'data:image/png;base64,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'

    assert generated_b64 == expected_b64
Exemplo n.º 18
0
 def insert_images(self, sign, number_pages, location_sign):
     if sign is not None:
         sign = QRcode.qrcode(sign, mode='raw')
         for i in range(0, number_pages):
             page = self._pdf_file[i]
             size_page = page.rect
             image_rectangle = location_sign(size_page)
             page.insertImage(image_rectangle, stream=sign)
Exemplo n.º 19
0
def test_remote_icon_image_qrcode():
    qrcode = QRcode()
    generated_b64 = qrcode('You can see a icon in QR code.',
                           error_correction='H',
                           icon_img='https://www.agner.io/icon.jpg')
    expected_b64 = 'data:image/png;base64,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'

    assert generated_b64 == expected_b64
Exemplo n.º 20
0
def test_remote_icon_image_qrcode():
    qrcode = QRcode()
    generated_b64 = qrcode('You can see a icon in QR code.',
                           error_correction='H',
                           icon_img='https://www.agner.io/icon.jpg')
    expected_b64 = 'data:image/png;base64,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'

    assert generated_b64 == expected_b64
Exemplo n.º 21
0
def test_color_qrcode():
    qrcode = QRcode()
    generated_b64 = qrcode('You can see green front color and #CCC back color.',
                           error_correction='H', back_color='ccc',
                           fill_color='green')
    expected_b64 = 'data:image/png;base64,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'

    assert generated_b64 == expected_b64
Exemplo n.º 22
0
def create_app():
    app = Flask(__name__)
    app.secret_key = config.settings["secret_key"]

    update_config()
    define_routes(app)
    define_filters(app)
    QRcode(app)
    return app
Exemplo n.º 23
0
def create_app():

    app = Flask(__name__)

    QRcode(app)

    @app.route('/')
    def home():
        return render_template('index.html',
            verse = randomVerse()
        )
    
    return app
Exemplo n.º 24
0
def create_app():
    app = Flask(__name__,
                static_folder=r_path('static'),
                template_folder=r_path('templates'))
    if getattr(sys, 'frozen', False):
        basedir = os.path.dirname(sys.executable)
    else:
        basedir = os.path.abspath(os.path.dirname(__file__))
    # bootstrap = Bootstrap(app)
    pagedown = PageDown(app)
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + r_path(
        'data.sqlite')
    # Autoreload if templates change
    app.config['TEMPLATES_AUTO_RELOAD'] = True
    # flask_upload settings
    # app.config['MAX_CONTENT_LENGTH'] = 500 * 1024 * 1024 # Remove Upload limit. FIX ISSUE
    app.config['UPLOADED_FILES_DEST'] = r_path('static/multimedia')
    app.config['UPLOADED_FILES_ALLOW'] = mdal
    app.config['SECRET_KEY'] = os.urandom(24)
    # Intiating extensions before registering blueprints
    moment = Moment(app)
    qrc = QRcode(app)
    configure_uploads(app, files)
    login_manager.init_app(app)
    db.init_app(app)
    datepicker(
        app, local=['static/css/jquery-ui.min.css', 'static/jquery-ui.min.js'])
    colorpicker(app, local=['static/css/spectrum.css', 'static/spectrum.js'])
    fontpicker(app,
               local=[
                   'static/jquery-ui.min.js', 'static/css/jquery-ui.min.css',
                   'static/webfont.js', 'static/webfont.select.js',
                   'static/css/webfont.select.css'
               ])
    lessc(app)
    minify(app,
           js=True,
           cache=True,
           fail_safe=True,
           bypass=['/touch/<int:a>', '/serial/<int:t_id>', '/display'])
    gtts(app=app, route=True)
    gtranslator.init_app(app)
    # Register blueprints
    app.register_blueprint(administrate)
    app.register_blueprint(core)
    app.register_blueprint(cust_app)
    app.register_blueprint(errorsh_app)
    app.register_blueprint(manage_app)
    app.jinja_env.add_extension('jinja2.ext.loopcontrols')
    return app
Exemplo n.º 25
0
def create_app():
    """Construct the core application."""
    app = Flask(__name__, instance_relative_config=False)
    bootstrap = Bootstrap(app)
    app.config.from_object('config.Config')
    app.config['RECAPTCHA_PUBLIC_KEY'] = 'iubhiukfgjbkhfvgkdfm'
    app.config['RECAPTCHA_PARAMETERS'] = {'size': '100%'}
    qrcode = QRcode(app)


    with app.app_context():
        # Import parts of our application
        from . import routes
        return app
Exemplo n.º 26
0
def create_app():
    """Construct the core application."""
    app = Flask(__name__, instance_relative_config=False)
    bootstrap = Bootstrap(app)
    qrcode = QRcode(app)
    app.config.from_object('config.Config')
    app.config['SECRET_KEY'] = os.environ['APP_SECRET_KEY']
    app.config['RECAPTCHA_USE_SSL'] = False
    app.config['RECAPTCHA_PUBLIC_KEY'] = os.environ['APP_RECAPTCHA_PUBLIC_KEY']
    app.config['RECAPTCHA_PRIVATE_KEY'] = os.environ[
        'APP_RECAPTCHA_PRIVATE_KEY']
    app.config['RECAPTCHA_OPTIONS'] = {'theme': 'white'}

    with app.app_context():
        # Import parts of our application
        from . import routes
        return app
Exemplo n.º 27
0
def create_app(config_name):
    app = Flask(__name__)
    QRcode(app)
    app.config.from_object(config[config_name])
    config[config_name].init_app(app)

    bootstrap.init_app(app)

    if not app.debug and not app.testing and not app.config['SSL_DISABLE']:
        from flask.ext.sslify import SSLify
        sslify = SSLify(app)

    from .main import main as main_blueprint
    app.register_blueprint(main_blueprint)


    return app
Exemplo n.º 28
0
def create_app(config_name=None):
	app = Flask(__name__, instance_relative_config=True)
	app.config.from_object(ProductionConfig)
	app.config.from_pyfile('config.py')
	app.config.update(
	CELERY_BROKER_URL='amqp://guest@localhost//',
	CELERY_RESULT_BACKEND='amqp://guest@localhost//'
)

	from app.oauth2 import (
		query_client, save_token, 
		require_oauth, authorization
		)

	from extensions import db, login_manager

	with app.app_context():
		db.init_app(app)
		authorization.init_app(app, query_client, save_token)
		login_manager.init_app(app)
   
	Bootstrap(app)
	QRcode(app)
	login_manager.login_message = "You must be logged in to access this page."
	login_manager.login_view = "auth.login"
	migrate = Migrate(app, db, compare_type=True)


	#DEFINING BLUEPRINTS
	from .home import home as home_blueprint
	app.register_blueprint(home_blueprint)

	from .auth import auth as auth_blueprint
	app.register_blueprint(auth_blueprint)

	from .member import member as member_blueprint
	app.register_blueprint(member_blueprint)

	from .payments import payments as payments_blueprint
	app.register_blueprint(payments_blueprint)

	return app
Exemplo n.º 29
0
def create_app():
    if getattr(sys, 'frozen', False):
        template_folder = os.path.join(os.path.realpath(__file__), 'templates')
        static_folder = os.path.join(os.path.realpath(__file__), 'static')
        app = Flask(__name__,
                    template_folder=template_folder,
                    static_folder=static_folder)
    else:
        app = Flask(__name__,
                    template_folder="templates",
                    static_folder="static")
    QRcode(app)  # enable qr codes generation
    specter = Specter(DATA_FOLDER)
    specter.check()
    # Attach specter instance so child views (e.g. hwi) can access it
    app.specter = specter
    app.register_blueprint(hwi_views, url_prefix='/hwi')
    with app.app_context():
        import controller
    return app
Exemplo n.º 30
0
def creat_app(config_name):
    app = Flask(__name__, static_folder='adminDashboard/base/static')
    app.config.from_object(config_by_name[config_name])
    app.config['GOOGLEMAPS_KEY'] = "AIzaSyBp1G6tb0v3JzSfcPtmKGwLI018Q-DL41E"
    GoogleMaps(app)
    db.init_app(app)
    cors.init_app(app)
    login_manager.init_app(app)
    bcrypt.init_app(app)
    rq.init_app(app)
    QRcode(app)
    # register blueprints

    # test
    app.register_blueprint(root)

    # Admin Dashboard blueprints
    app.register_blueprint(api_bl)
    app.register_blueprint(base_admin)
    app.register_blueprint(home_admin)
    app.register_blueprint(factory_admin)
    app.register_blueprint(company_admin)
    app.register_blueprint(driver_admin)
    app.register_blueprint(orders_admin)

    # Company Dashboard blueprint
    app.register_blueprint(home_company)
    app.register_blueprint(cars_company)
    app.register_blueprint(drivers_company)
    app.register_blueprint(orders_company)

    # Factory Dashboard blueprint
    app.register_blueprint(factory_blueprint)
    app.register_blueprint(orders_factory)
    app.register_blueprint(new_order_factory)

    r = Redis(os.getenv('REDIS_URL', 'redis://localhost:6379'))

    return app, r