def test_init(): """Test extension initialization.""" app = Flask('testapp') ext = InvenioOAIServer(app) assert 'invenio-oaiserver' in app.extensions app = Flask('testapp') ext = InvenioOAIServer() assert 'invenio-oaiserver' not in app.extensions ext.init_app(app) assert 'invenio-oaiserver' in app.extensions
def test_init(): """Test extension initialization.""" app = Flask('testapp') ext = InvenioOAIServer(app) assert 'invenio-oaiserver' in app.extensions app = Flask('testapp') ext = InvenioOAIServer() assert 'invenio-oaiserver' not in app.extensions ext.init_app(app) assert 'invenio-oaiserver' in app.extensions with app.app_context(): current_oaiserver.unregister_signals()
def test_no_id_prefix(): """Test warning and default value for OAISERVER_ID_PREFIX.""" with pytest.warns(UserWarning, match="specify the OAISERVER_ID_PREFIX"): app = Flask("testapp") ext = InvenioOAIServer(app) expected_id_prefix = "oai:{0}:".format(socket.gethostname()) assert app.config["OAISERVER_ID_PREFIX"] == expected_id_prefix
def test_no_id_prefix(): """Test warning and default value for OAISERVER_ID_PREFIX.""" with pytest.warns(UserWarning, match='specify the OAISERVER_ID_PREFIX'): app = Flask('testapp') ext = InvenioOAIServer(app) expected_id_prefix = 'oai:{0}:recid/'.format(socket.gethostname()) assert app.config['OAISERVER_ID_PREFIX'] == expected_id_prefix
def app(): """Flask application fixture.""" instance_path = tempfile.mkdtemp() app = Flask('testapp', instance_path=instance_path) app.config.update( CELERY_ALWAYS_EAGER=True, CELERY_TASK_ALWAYS_EAGER=True, CELERY_CACHE_BACKEND='memory', CELERY_EAGER_PROPAGATES_EXCEPTIONS=True, CELERY_TASK_EAGER_PROPAGATES=True, CELERY_RESULT_BACKEND='cache', JSONSCHEMAS_HOST='inveniosoftware.org', TESTING=True, SECRET_KEY='CHANGE_ME', SQLALCHEMY_DATABASE_URI=os.environ.get('SQLALCHEMY_DATABASE_URI', 'sqlite:///test.db'), SQLALCHEMY_TRACK_MODIFICATIONS=True, SERVER_NAME='app', OAISERVER_ID_PREFIX='oai:inveniosoftware.org:recid/', OAISERVER_QUERY_PARSER_FIELDS=["title_statement"], OAISERVER_RECORD_INDEX='_all', OAISERVER_REGISTER_SET_SIGNALS=True, ) if not hasattr(app, 'cli'): from flask_cli import FlaskCLI FlaskCLI(app) InvenioDB(app) FlaskCeleryExt(app) InvenioJSONSchemas(app) InvenioRecords(app) InvenioPIDStore(app) InvenioMARC21(app) client = Elasticsearch(hosts=[os.environ.get('ES_HOST', 'localhost')]) search = InvenioSearch(app, client=client) search.register_mappings('records', 'data') InvenioIndexer(app) InvenioOAIServer(app) app.register_blueprint(blueprint) with app.app_context(): if str(db.engine.url) != 'sqlite://' and \ not database_exists(str(db.engine.url)): create_database(str(db.engine.url)) db.create_all() list(search.delete(ignore=[404])) list(search.create()) search.flush_and_refresh('_all') with app.app_context(): yield app with app.app_context(): db.session.close() if str(db.engine.url) != 'sqlite://': drop_database(str(db.engine.url)) list(search.delete(ignore=[404])) search.client.indices.delete("*-percolators") shutil.rmtree(instance_path)
def app(request): """Flask application fixture.""" instance_path = tempfile.mkdtemp() app = Flask('testapp', instance_path=instance_path) app.config.update( TESTING=True, SECRET_KEY='CHANGE_ME', SQLALCHEMY_DATABASE_URI=os.environ.get('SQLALCHEMY_DATABASE_URI', 'sqlite://'), SQLALCHEMY_TRACK_MODIFICATIONS=True, SERVER_NAME='app', OAISERVER_RECORD_INDEX='records-record-v1.0.0', OAISERVER_METADATA_FORMATS={ 'oai_dc': { 'serializer': ('conftest:dump_etree', { 'xslt_filename': pkg_resources.resource_filename( 'invenio_oaiserver', 'static/xsl/oai2.v1.0.xsl') }), 'schema': 'http://www.openarchives.org/OAI/2.0/oai_dc.xsd', 'namespace': 'http://www.openarchives.org/OAI/2.0/oai_dc/', } }, ) FlaskCLI(app) InvenioDB(app) InvenioRecords(app) InvenioPIDStore(app) search = InvenioSearch(app) search.register_mappings('records', 'data') InvenioIndexer(app) InvenioOAIServer(app) with app.app_context(): db.create_all() search.client.indices.delete_alias('_all', '_all', ignore=[400, 404]) search.client.indices.delete('*') list(search.create(ignore=[400])) def teardown(): with app.app_context(): list(search.delete(ignore=[404])) db.drop_all() shutil.rmtree(instance_path) request.addfinalizer(teardown) return app
def oai_server(sender, app=None, **kwargs): #app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite://' app.config['CELERY_TASK_ALWAYS_EAGER'] = True if not hasattr(app, 'cli'): from flask_cli import FlaskCLI ext_cli = FlaskCLI(app) ext_db = InvenioDB(app) ext_indexer = InvenioIndexer(app) ext_pidstore = InvenioPIDStore(app) ext_records = InvenioRecords(app) ext_search = InvenioSearch(app) ext_celery = FlaskCeleryExt(app) app.config['OAISERVER_RECORD_INDEX'] = ['authors', 'records'] app.config['OAISERVER_ID_PREFIX'] = 'oai:example:' app.config['OAISERVER_QUERY_PARSER_FIELDS'] = ["title"] app.config['OAISERVER_METADATA_FORMATS'] = { 'oai_dc': { 'serializer': ('invenio_oaiserver.utils:dumps_etree', { 'xslt_filename': pkg_resources.resource_filename( 'testinvenio.records', 'static/xsl/MARC21slim2OAIDC.xsl'), 'xslt_filename': pathlib.Path( "/home/alzbeta/testinvenio/testinvenio/records/static/xsl/MARC21slim2OAIDC.xsl" ) }), 'schema': 'http://json-schema.org/draft-04/schema#', 'namespace': 'http://json-schema.org/draft-04/schema#', } } ext_oaiserver = InvenioOAIServer(app) app.register_blueprint(blueprint) ctx = app.app_context() ctx.push() db.create_all() ext_search.flush_and_refresh('_all') oaiset = OAISet(spec='pattern', name='Pattern', description='...') #nefunguje pokud search pattern ma pole ktere neni v obouch modelech... oaiset.search_pattern = 'title:Some title1' try: print("1") db.session.add(oaiset) db.session.commit() except: pass
def app(request): """Flask application fixture.""" instance_path = tempfile.mkdtemp() app = Flask('testapp', instance_path=instance_path) app.config.update( TESTING=True, CELERY_ALWAYS_EAGER=True, CELERY_CACHE_BACKEND="memory", CELERY_EAGER_PROPAGATES_EXCEPTIONS=True, CELERY_RESULT_BACKEND="cache", COMMUNITIES_MAIL_ENABLED=False, SECRET_KEY='CHANGE_ME', SECURITY_PASSWORD_SALT='CHANGE_ME_ALSO', SQLALCHEMY_DATABASE_URI=os.environ.get('SQLALCHEMY_DATABASE_URI', 'sqlite:///test.db'), SEARCH_ELASTIC_HOSTS=os.environ.get('SEARCH_ELASTIC_HOSTS', None), SQLALCHEMY_TRACK_MODIFICATIONS=True, OAISERVER_REGISTER_RECORD_SIGNALS=True, OAISERVER_REGISTER_SET_SIGNALS=False, OAISERVER_ID_PREFIX='oai:localhost:recid/', SERVER_NAME='inveniosoftware.org', THEME_SITEURL='https://inveniosoftware.org', MAIL_SUPPRESS_SEND=True, ) FlaskCeleryExt(app) Menu(app) Babel(app) InvenioDB(app) InvenioAccounts(app) InvenioAssets(app) InvenioSearch(app) InvenioRecords(app) InvenioIndexer(app) InvenioOAIServer(app) InvenioCommunities(app) InvenioMail(app) app.register_blueprint(ui_blueprint) app.register_blueprint(api_blueprint, url_prefix='/api/communities') with app.app_context(): yield app shutil.rmtree(instance_path)
def app(base_app): """Flask application fixture.""" base_app._internal_jsonschemas = InvenioJSONSchemas(base_app) InvenioREST(base_app) InvenioRecordsREST(base_app) InvenioRecords(base_app) InvenioPIDStore(base_app) base_app.url_map.converters['pid'] = PIDConverter OARepoMappingIncludesExt(base_app) LoginManager(base_app) search = InvenioSearch(base_app) search.flush_and_refresh('_all') Permission(base_app) InvenioAccess(base_app) InvenioOAIServer(base_app) Principal(base_app) base_app.register_blueprint( invenio_records_rest.views.create_blueprint_from_app(base_app)) login_manager = LoginManager() login_manager.init_app(base_app) login_manager.login_view = 'login' @login_manager.user_loader def basic_user_loader(user_id): user_obj = User.query.get(int(user_id)) return user_obj @base_app.route('/test/login/<int:id>', methods=['GET', 'POST']) def test_login(id): print("test: logging user with id", id) response = make_response() user = User.query.get(id) login_user(user) set_identity(user) return response app_loaded.send(None, app=base_app) with base_app.app_context(): yield base_app
def base_app(): """Flask applicat-ion fixture.""" instance_path = os.path.join(sys.prefix, 'var', 'test-instance') # empty the instance path if os.path.exists(instance_path): shutil.rmtree(instance_path) os.makedirs(instance_path) os.environ['INVENIO_INSTANCE_PATH'] = instance_path app_ = Flask('oai-testapp', instance_path=instance_path) app_.config.update( TESTING=True, JSON_AS_ASCII=True, SQLALCHEMY_TRACK_MODIFICATIONS=True, #SQLALCHEMY_DATABASE_URI=os.environ.get( # 'SQLALCHEMY_DATABASE_URI', # 'sqlite:///:memory:'), SQLALCHEMY_DATABASE_URI='sqlite://', SERVER_NAME='localhost:5000', SECURITY_PASSWORD_SALT='TEST_SECURITY_PASSWORD_SALT', SECRET_KEY='TEST_SECRET_KEY', INVENIO_INSTANCE_PATH=instance_path, SEARCH_INDEX_PREFIX='test-', JSONSCHEMAS_HOST='localhost:5000', SEARCH_ELASTIC_HOSTS=os.environ.get('SEARCH_ELASTIC_HOSTS', None), PIDSTORE_RECID_FIELD='id', FILES_REST_PERMISSION_FACTORY=allow_all, CELERY_ALWAYS_EAGER=True, OAISERVER_RECORDS_INDEX='max21', OAISERVER_ID_PREFIX='oai:example:', ) app_.register_blueprint(blueprint) InvenioDB(app_) InvenioIndexer(app_) InvenioSearch(app_) FlaskCeleryExt(app_) InvenioOAIServer(app_) if not hasattr(app_, 'cli'): ext_cli = FlaskCLI(app_) return app_
# Create Flask application app = Flask(__name__) app.config.update( OAISERVER_RECORD_INDEX='_all', OAISERVER_ID_PREFIX='oai:localhost:recid/', SECRET_KEY='CHANGE_ME', SQLALCHEMY_DATABASE_URI=os.getenv('SQLALCHEMY_DATABASE_URI', 'sqlite:///app.db'), ) InvenioDB(app) InvenioRecords(app) InvenioPIDStore(app) search = InvenioSearch(app) search.register_mappings('records', 'data') InvenioIndexer(app) InvenioOAIServer(app) admin = Admin(app, name='Test') model = set_adminview.pop('model') view = set_adminview.pop('modelview') admin.add_view(view(model, db.session, **set_adminview)) @app.cli.group() def fixtures(): """Initialize example data.""" @fixtures.command() @click.option('-s', 'sets', type=click.INT, default=27) @click.option('-r', 'records', type=click.INT, default=27)
def test_init(): """Test extension initialization.""" app = Flask("testapp") with pytest.warns(None): InvenioOAIServer(app)