def setup_app(command, conf, vars): """Place any commands to setup tracking here""" load_environment(conf.global_conf, conf.local_conf) filename = os.path.split(conf.filename)[-1] if filename == 'test.ini': # Permanently drop any existing tables log.info("Dropping existing tables...") meta.Base.metadata.drop_all(bind=meta.engine, checkfirst=True) log.info("Creating tables...") # Create the tables if they don't already exist meta.Base.metadata.create_all(bind=meta.engine) log.info("Successfully set up.") if filename == 'development.ini': # load sample data during setup-app db = SQLAlchemyFixture( env=model, style=NamedDataStyle(), engine=meta.engine) data = db.data(PageviewsData) log.info("Loading sample data...") data.setup() log.info("Successfully set up.")
class TestListView(TestCase): """Tests for DetailView.""" urls = 'tests.integration.views.generic.urls' def setUp(self): setup_environment() self.fixture = SQLAlchemyFixture( env=models, session=session, style=NamedDataStyle(), ) def test_list_view(self): """Test the list view.""" with self.fixture.data(fixtures.PersonData) as data: response = self.client.get('/people/') self.assertEqual(response.status_code, 200) self.assertIn(data.PersonData.John.name, response.content) def test_list_view_allow_empty(self): """Test getting an empty list with allow_empty = True.""" response = self.client.get('/people/') self.assertEqual(response.status_code, 200) def test_list_view_404(self): """Test getting an empty list with allow_empty = False.""" response = self.client.get('/non_empty_people/') self.assertEqual(response.status_code, 404)
def install(app, *args): engine = m.create_tables(app) db = SQLAlchemyFixture(env=m, style=NamedDataStyle(), engine=engine) data = db.data(*args) data.setup() db.dispose() return data
def setup_app(command, conf, vars): """Place any commands to setup tracking here""" load_environment(conf.global_conf, conf.local_conf) filename = os.path.split(conf.filename)[-1] if filename == 'test.ini': # Permanently drop any existing tables log.info("Dropping existing tables...") meta.Base.metadata.drop_all(bind=meta.engine, checkfirst=True) log.info("Creating tables...") # Create the tables if they don't already exist meta.Base.metadata.create_all(bind=meta.engine) log.info("Successfully set up.") if filename == 'development.ini': # load sample data during setup-app db = SQLAlchemyFixture(env=model, style=NamedDataStyle(), engine=meta.engine) data = db.data(PageviewsData) log.info("Loading sample data...") data.setup() log.info("Successfully set up.")
def test_fixture_can_be_disposed(): if sa_major < 0.5: from sqlalchemy.exceptions import InvalidRequestError else: from sqlalchemy.exc import InvalidRequestError engine = create_engine(conf.LITE_DSN) metadata.bind = engine metadata.create_all() Session = get_transactional_session() session = Session() fixture = SQLAlchemyFixture( env={'CategoryData':Category}, engine=metadata.bind ) class CategoryData(DataSet): class cars: name = 'cars' class free_stuff: name = 'get free stuff' clear_mappers() mapper(Category, categories) data = fixture.data(CategoryData) data.setup() data.teardown() fixture.dispose() # cannot use fixture anymore : try: data.setup() except InvalidRequestError: pass else: assert False, "data.setup() did not raise InvalidRequestError after connection was disposed" # a new instance of everything is needed : metadata.create_all() fixture = SQLAlchemyFixture( env={'CategoryData':Category}, engine=metadata.bind ) data = fixture.data(CategoryData) data.setup() data.teardown()
def setUp(self): # Create tables models.db.create_all() # Load data fix = SQLAlchemyFixture(env=models, engine=models.db.engine) self.data = fix.data(*test_data.all_data) self.data.setup()
def setUp(self): self.app = create_app('config/test.ini').test_client() init_db() # TODO move this to the proper place in the code dbfixture = SQLAlchemyFixture( env={'UserData': User}, engine=dailylog.db.engine) self.data = dbfixture.data(UserData) self.data.setup()
class DBFixture(fixtures.Fixture): def setUp(self): super(DBFixture, self).setUp() self.dbfixture = SQLAlchemyFixture(engine=get_engine(), env={'TreeNodeData': TreeNode}) self.data = self.dbfixture.data(TreeNodeData) self.data.setup() self.addCleanup(self.data.teardown)
def test_fixture_can_be_disposed(): from sqlalchemy.exceptions import InvalidRequestError engine = create_engine(conf.LITE_DSN) metadata.bind = engine metadata.create_all() Session = get_transactional_session() session = Session() fixture = SQLAlchemyFixture( env={'CategoryData':Category}, engine=metadata.bind ) class CategoryData(DataSet): class cars: name = 'cars' class free_stuff: name = 'get free stuff' clear_mappers() mapper(Category, categories) data = fixture.data(CategoryData) data.setup() data.teardown() fixture.dispose() # cannot use fixture anymore : try: data.setup() except InvalidRequestError: pass else: assert False, "data.setup() did not raise InvalidRequestError after connection was disposed" # a new instance of everything is needed : metadata.create_all() fixture = SQLAlchemyFixture( env={'CategoryData':Category}, engine=metadata.bind ) data = fixture.data(CategoryData) data.setup() data.teardown()
class DBFixture(fixtures.Fixture): def setUp(self): super(DBFixture, self).setUp() self.dbfixture = SQLAlchemyFixture( engine=get_engine(), env={'AssetInfoData': AssetInfoModel}) self.data = self.dbfixture.data(AssetInfoData) self.data.setup() self.addCleanup(self.data.teardown)
class DBFixture(fixtures.Fixture): def setUp(self): super(DBFixture, self).setUp() self.dbfixture = SQLAlchemyFixture( engine=get_engine(), env={'MpProviderData': Provider}) self.data = self.dbfixture.data(MpProviderData) self.data.setup() self.addCleanup(self.data.teardown)
def setup_testdata(connectable): dbfixture = SQLAlchemyFixture(engine=connectable or db.engine, env={ 'VerificationCodeData': db_models.VerificationCode, }) fixture_datas = [ dbfixture.data(VerificationCodeData), ] return dbfixture, fixture_datas
class DBFixture(fixtures.Fixture): def setUp(self): super(DBFixture, self).setUp() self.dbfixture = SQLAlchemyFixture( engine=get_engine(), env={'DeviceStateData': DeviceState}) self.data = self.dbfixture.data(DeviceStateData) BASE.metadata.create_all(get_engine()) self.data.setup() self.addCleanup(self.data.teardown)
class DBFixture(fixtures.Fixture): def setUp(self): super(DBFixture, self).setUp() print get_engine() self.dbfixture = SQLAlchemyFixture( engine=get_engine(), env={'InOutData': InOutReason}) self.data = self.dbfixture.data(InOutData) self.data.setup() self.addCleanup(self.data.teardown)
def test_cannot_teardown_unloaded_fixture(): class CategoryData(DataSet): class cars: name = 'cars' engine = create_engine(conf.LITE_DSN) metadata.bind = engine db = SQLAlchemyFixture(env=globals(), engine=metadata.bind) data = db.data(CategoryData) data.teardown()
def setUp(self): db.create_all() fixture = SQLAlchemyFixture( env=models, style=TrimmedNameStyle(suffix="Data"), session=db.session) try: self.data = fixture.data(*self.fixtures) except TypeError: raise Error('You need overide "fixtures = None" with the name of some real fixtures') self.data.setup()
class DBFixture(fixtures.Fixture): def setUp(self): super(DBFixture, self).setUp() self.session = get_session() self.dbfixture = SQLAlchemyFixture( engine=get_engine(), env=dict(UserData=UserHstore) ) self.data = self.dbfixture.data(UserData) self.data.setup() self.addCleanup(self.data.teardown)
class DBFixture(fixtures.Fixture): def setUp(self): super(DBFixture, self).setUp() self.engine = db_api.get_engine() self.engine.connect() self.dbfixture = SQLAlchemyFixture(engine=self.engine, env={"StoreStateMock": StoreState}) self.data = self.dbfixture.data(StoreStateMock) self.session = db_api.get_session() BASE.metadata.create_all(bind=self.engine) self.data.setup() self.addCleanup(self.data.teardown)
class DBFixture(fixtures.Fixture): def setUp(self): super(DBFixture, self).setUp() self.dbfixture = SQLAlchemyFixture( engine=get_engine(), env={'AssetConsumeInfoData': AssetConsumeInfoModel}) self.data = self.dbfixture.data(AssetConsumeInfoData) BASE.metadata.create_all(get_engine()) self.data.setup() self.addCleanup(self.data.teardown)
class TestCollidingSessions(unittest.TestCase): class CategoryData(DataSet): class cars: name = 'cars' class free_stuff: name = 'get free stuff' def setUp(self): self.engine = create_engine(conf.LITE_DSN) # self.conn = self.engine.connect() metadata.bind = self.engine # metadata.bind.echo = True metadata.create_all() # metadata.bind.echo = False self.ScopedSession = scoped_session(get_transactional_session()) self.session = self.ScopedSession() self.fixture = SQLAlchemyFixture( env={'CategoryData':Category}, engine=metadata.bind ) clear_mappers() mapper(Category, categories) def tearDown(self): metadata.drop_all() self.session.close() @attr(functional=1) def test_setup_then_teardown(self): eq_(self.session.query(Category).all(), []) data = self.fixture.data(self.CategoryData) data.setup() self.session.clear() cats = self.session.query(Category).order_by('name').all() eq_(cats[0].name, 'cars') eq_(cats[1].name, 'get free stuff') # simulate the application running into some kind of error: new_cat = Category() new_cat.name = "doomed to non-existance" self.session.save(new_cat) self.session.rollback() self.ScopedSession.remove() data.teardown() self.session.clear() print [(c.id, c.name) for c in self.session.query(Category).all()] eq_(list(self.session.query(Category)), [])
def load_fixtures(self, *args): # TODO: Check https://github.com/mitsuhiko/flask-sqlalchemy/pull/89 # and update version of Flask-Sqlalchemy from api import models from fixture import SQLAlchemyFixture from fixture.style import NamedDataStyle db = SQLAlchemyFixture(env=models, style=NamedDataStyle(), engine=self.engine) data = db.data(*args) data.setup() db.dispose()
class TestCollidingSessions(unittest.TestCase): class CategoryData(DataSet): class cars: name = 'cars' class free_stuff: name = 'get free stuff' def setUp(self): self.engine = create_engine(conf.LITE_DSN) # self.conn = self.engine.connect() metadata.bind = self.engine # metadata.bind.echo = True metadata.create_all() # metadata.bind.echo = False self.ScopedSession = scoped_session(get_transactional_session()) self.session = self.ScopedSession() self.fixture = SQLAlchemyFixture( env={'CategoryData':Category}, engine=metadata.bind ) clear_mappers() mapper(Category, categories) def tearDown(self): metadata.drop_all() self.session.close() @attr(functional=1) def test_setup_then_teardown(self): eq_(self.session.query(Category).all(), []) data = self.fixture.data(self.CategoryData) data.setup() clear_session(self.session) cats = self.session.query(Category).order_by('name').all() eq_(cats[0].name, 'cars') eq_(cats[1].name, 'get free stuff') # simulate the application running into some kind of error: new_cat = Category() new_cat.name = "doomed to non-existance" save_session(self.session, new_cat) self.session.rollback() self.ScopedSession.remove() data.teardown() clear_session(self.session) print [(c.id, c.name) for c in self.session.query(Category).all()]
class TestElixir(unittest.TestCase): class CategoryData(DataSet): class cars: name = 'cars' class free_stuff: name = 'get free stuff' def setUp(self): if not env_supports.elixir: raise SkipTest("elixir module not found") import elixir self.engine = create_engine(conf.LITE_DSN) metadata.bind = self.engine metadata.create_all() class CategoryEntity(elixir.Entity): elixir.using_options(tablename=str(categories)) # save_on_init IS VERY IMPORTANT elixir.using_mapper_options(save_on_init=False) self.CategoryEntity = CategoryEntity self.fixture = SQLAlchemyFixture( env={'CategoryData':CategoryEntity}, engine=metadata.bind ) elixir.metadata.bind = self.engine elixir.setup_all() def tearDown(self): metadata.drop_all() @attr(functional=1) def test_setup_then_teardown(self): try: from elixir import session as elixir_session except ImportError: from elixir import objectstore as elixir_session eq_(len(elixir_session.query(self.CategoryEntity).all()), 0) data = self.fixture.data(self.CategoryData) data.setup() eq_(len(elixir_session.query(self.CategoryEntity).all()), 2) data.teardown() eq_(elixir_session.query(self.CategoryEntity).all(), [])
def test_cannot_teardown_unloaded_fixture(): class CategoryData(DataSet): class cars: name = 'cars' engine = create_engine(conf.LITE_DSN) metadata.bind = engine db = SQLAlchemyFixture( env=globals(), engine=metadata.bind ) data = db.data(CategoryData) data.teardown()
class TestQuerySessionMappedClass(HandlerQueryTest): def setUp(self): from fixture import SQLAlchemyFixture, NamedDataStyle import sqlalchemy from sqlalchemy.orm import ( mapper, relation, clear_mappers, sessionmaker, scoped_session) from sqlalchemy import create_engine metadata.bind = create_engine(conf.LITE_DSN) metadata.create_all() class options: dsn = conf.LITE_DSN env = ['fixture.examples.db.sqlalchemy_examples'] self.options = options self.generator = DataSetGenerator(self.options, template=StubTemplate()) ScopedSession = scoped_session(sessionmaker(autoflush=False, transactional=True)) ScopedSession.mapper(Category, categories, save_on_init=False) ScopedSession.mapper(Product, products, properties={ 'category': relation(Category), }, save_on_init=False) ScopedSession.mapper(Offer, offers, properties={ 'category': relation(Category, backref='products'), 'product': relation(Product) }, save_on_init=False) self.fixture = SQLAlchemyFixture( env=sqlalchemy_examples, style=NamedDataStyle(), engine=metadata.bind) self.data = self.fixture.data(self.CategoryData) self.data.setup() self.hnd = self.generator.get_handler( "%s.Category" % (Category.__module__), obj=Category, connection=metadata.bind) self.hnd.begin() def tearDown(self): from sqlalchemy.orm import clear_mappers self.data.teardown() metadata.drop_all() clear_mappers()
class TestImplicitSABinding(unittest.TestCase): class CategoryData(DataSet): class cars: name = 'cars' class free_stuff: name = 'get free stuff' def setUp(self): engine = create_engine(conf.LITE_DSN) metadata.bind = engine # metadata.bind.echo = True metadata.create_all() Session = get_transactional_session() self.session = Session() # note the lack of explicit binding : self.fixture = SQLAlchemyFixture( env={'CategoryData':Category}, ) clear_mappers() # since categories is assigned to metadata, SA should handle binding for us mapper(Category, categories) def tearDown(self): # metadata.bind.echo = False metadata.drop_all() self.session.close() @attr(functional=1) def test_setup_then_teardown(self): eq_(self.session.query(Category).all(), []) data = self.fixture.data(self.CategoryData) data.setup() clear_session(self.session) cats = self.session.query(Category).order_by('name').all() eq_(cats[0].name, 'cars') eq_(cats[1].name, 'get free stuff') data.teardown() clear_session(self.session) eq_(list(self.session.query(Category)), [])
class TestImplicitSABinding(unittest.TestCase): class CategoryData(DataSet): class cars: name = 'cars' class free_stuff: name = 'get free stuff' def setUp(self): engine = create_engine(conf.LITE_DSN) metadata.bind = engine # metadata.bind.echo = True metadata.create_all() Session = get_transactional_session() self.session = Session() # note the lack of explicit binding : self.fixture = SQLAlchemyFixture( env={'CategoryData':Category}, ) clear_mappers() # since categories is assigned to metadata, SA should handle binding for us mapper(Category, categories) def tearDown(self): # metadata.bind.echo = False metadata.drop_all() self.session.close() @attr(functional=1) def test_setup_then_teardown(self): eq_(self.session.query(Category).all(), []) data = self.fixture.data(self.CategoryData) data.setup() self.session.clear() cats = self.session.query(Category).order_by('name').all() eq_(cats[0].name, 'cars') eq_(cats[1].name, 'get free stuff') data.teardown() self.session.clear() eq_(list(self.session.query(Category)), [])
def main(argv=sys.argv): if len(argv) != 2: usage(argv) config_uri = argv[1] setup_logging(config_uri) settings = get_appsettings(config_uri) engine = engine_from_config(settings, 'sqlalchemy.') metadata = MetaData() metadata.bind = engine DBSession.configure(bind=engine) metadata.create_all() dbfixture = SQLAlchemyFixture(env={ 'WorkspaceData': Workspace, 'MapData': Map }, engine=metadata.bind) data = dbfixture.data(WorkspaceData, MapData) data.setup()
def setup_app(command, conf, vars): """Place any commands to setup addressbook here""" load_environment(conf.global_conf, conf.local_conf) log.info("Creating tables") # Create the tables if they don't already exist meta.metadata.create_all(bind=meta.engine) log.info("Successfully setup") # load some initial data during setup-app : db = SQLAlchemyFixture( env=model, style=NamedDataStyle(), engine=meta.engine) data = db.data(PersonData) log.info("Inserting initial data") data.setup() log.info("Done")
def test_with_engine_connection(self): fixture = SQLAlchemyFixture( # maps to a table object : env={'CategoryData': categories}, # this should overwrite the default bind: engine=self.litemeta.bind) data = fixture.data(CategoryData) data.setup() rs = self.heavysession.query(Category).all() assert rs == [], "unexpected records in HEAVY_DSN db: %s" % rs rs = self.litesession.query(Category).all() eq_(len(rs), 2) data.teardown() rs = self.litesession.query(Category).all() eq_(len(rs), 0)
def load_fixtures(suffix='', truncate_tables_first=False): from invenio.sqlalchemyutils import db from fixture import SQLAlchemyFixture from invenio.importutils import autodiscover_modules if len(suffix) > 0: related_name_re = ".+_fixtures_%s\.py" % (suffix, ) else: related_name_re = ".+_fixtures\.py" fixture_modules = autodiscover_modules(['invenio'], related_name_re=related_name_re) model_modules = autodiscover_modules(['invenio'], related_name_re=".+_model\.py") fixtures = dict((f, getattr(ff, f)) for ff in fixture_modules for f in dir(ff) if f[-4:] == 'Data') fixture_names = fixtures.keys() models = dict((m + 'Data', getattr(mm, m)) for mm in model_modules for m in dir(mm) if m + 'Data' in fixture_names) dbfixture = SQLAlchemyFixture(env=models, engine=db.metadata.bind, session=db.session) data = dbfixture.data(*fixtures.values()) if len(models) != len(fixtures): print ">>> ERROR: There are", len(models), "tables and", len( fixtures), "fixtures." else: print ">>> There are", len(models), "tables to be loaded." if truncate_tables_first: print ">>> Going to truncate following tables:", print map(lambda t: t.__name__, models.values()) db.session.execute("TRUNCATE %s" % ('collectionname', )) db.session.execute("TRUNCATE %s" % ('collection_externalcollection', )) for m in models.values(): db.session.execute("TRUNCATE %s" % (m.__tablename__, )) db.session.commit() data.setup() db.session.commit()
def test_with_engine_connection(self): fixture = SQLAlchemyFixture( # maps to a table object : env={'CategoryData':categories}, # this should overwrite the default bind: engine = self.litemeta.bind ) data = fixture.data(CategoryData) data.setup() rs = self.heavysession.query(Category).all() assert rs==[], "unexpected records in HEAVY_DSN db: %s" % rs rs = self.litesession.query(Category).all() eq_(len(rs), 2) data.teardown() rs = self.litesession.query(Category).all() eq_(len(rs), 0)
def load_fixtures(packages=['invenio.modules.*'], truncate_tables_first=False): from invenio.base.utils import import_module_from_packages from invenio.ext.sqlalchemy import db, models from fixture import SQLAlchemyFixture fixture_modules = list(import_module_from_packages('fixtures', packages=packages)) model_modules = list(models) fixtures = dict((f, getattr(ff, f)) for ff in fixture_modules for f in dir(ff) if f[-4:] == 'Data') fixture_names = fixtures.keys() models = dict((m+'Data', getattr(mm, m)) for mm in model_modules for m in dir(mm) if m+'Data' in fixture_names) dbfixture = SQLAlchemyFixture(env=models, engine=db.metadata.bind, session=db.session) data = dbfixture.data( *[f for (n, f) in iteritems(fixtures) if n in models] ) if len(models) != len(fixtures): print( ">>> ERROR: There are", len(models), "tables and", len(fixtures), "fixtures." ) print(">>>", set(fixture_names) ^ set(models.keys())) else: print(">>> There are", len(models), "tables to be loaded.") if truncate_tables_first: print(">>> Going to truncate following tables:", map(lambda t: t.__tablename__, models.values())) db.session.execute("TRUNCATE %s" % ('collectionname', )) db.session.execute("TRUNCATE %s" % ('collection_externalcollection', )) for m in models.values(): db.session.execute("TRUNCATE %s" % (m.__tablename__, )) db.session.commit() data.setup() db.session.commit()
class TestTableObjects(unittest.TestCase): class CategoryData(DataSet): class cars: name = 'cars' class free_stuff: name = 'get free stuff' def setUp(self): self.engine = create_engine(conf.LITE_DSN) metadata.bind = self.engine metadata.create_all() Session = get_transactional_session() self.session = Session() self.fixture = SQLAlchemyFixture( # maps to a table object : env={'CategoryData':categories}, engine=metadata.bind ) clear_mappers() mapper(Category, categories) def tearDown(self): metadata.drop_all() self.session.close() @attr(functional=1) def test_setup_then_teardown(self): eq_(self.session.query(Category).all(), []) data = self.fixture.data(self.CategoryData) data.setup() self.session.clear() cats = self.session.execute(categories.select()).fetchall() eq_(cats[0].name, 'cars') eq_(cats[1].name, 'get free stuff') data.teardown() self.session.clear() eq_(self.session.execute(categories.select()).fetchall(), [])
class TestTableObjects(unittest.TestCase): class CategoryData(DataSet): class cars: name = 'cars' class free_stuff: name = 'get free stuff' def setUp(self): self.engine = create_engine(conf.LITE_DSN) metadata.bind = self.engine metadata.create_all() Session = get_transactional_session() self.session = Session() self.fixture = SQLAlchemyFixture( # maps to a table object : env={'CategoryData':categories}, engine=metadata.bind ) clear_mappers() mapper(Category, categories) def tearDown(self): metadata.drop_all() self.session.close() @attr(functional=1) def test_setup_then_teardown(self): eq_(self.session.query(Category).all(), []) data = self.fixture.data(self.CategoryData) data.setup() clear_session(self.session) cats = self.session.execute(categories.select()).fetchall() eq_(cats[0].name, 'cars') eq_(cats[1].name, 'get free stuff') data.teardown() clear_session(self.session) eq_(self.session.execute(categories.select()).fetchall(), [])
def main(argv=sys.argv): if len(argv) != 2: usage(argv) config_uri = argv[1] setup_logging(config_uri) settings = get_appsettings(config_uri) engine = engine_from_config(settings, 'sqlalchemy.') metadata = MetaData() metadata.bind = engine DBSession.configure(bind=engine) metadata.create_all() dbfixture = SQLAlchemyFixture( env={ 'WorkspaceData': Workspace, 'MapData': Map }, engine=metadata.bind) data = dbfixture.data( WorkspaceData, MapData ) data.setup()
class TestSetupTeardown(unittest.TestCase): class CategoryData(DataSet): class cars: name = 'cars' class free_stuff: name = 'get free stuff' def setUp(self): engine = create_engine(conf.LITE_DSN) metadata.bind = engine metadata.create_all() Session = get_transactional_session() self.session = Session() self.fixture = SQLAlchemyFixture( env={'CategoryData':Category}, engine=metadata.bind ) clear_mappers() mapper(Category, categories) def tearDown(self): metadata.drop_all() self.session.close() @attr(functional=1) def test_setup_then_teardown(self): eq_(self.session.query(Category).all(), []) data = self.fixture.data(self.CategoryData) data.setup() self.session.clear() cats = self.session.query(Category).order_by('name').all() eq_(cats[0].name, 'cars') eq_(cats[1].name, 'get free stuff') data.teardown() self.session.clear() eq_(list(self.session.query(Category)), [])
class TestScopedSessions(unittest.TestCase): class CategoryData(DataSet): class cars: name = 'cars' class free_stuff: name = 'get free stuff' def setUp(self): self.engine = create_engine(conf.LITE_DSN) metadata.bind = self.engine metadata.create_all() ScopedSession = scoped_session(get_transactional_session()) self.session = ScopedSession() self.fixture = SQLAlchemyFixture( env={'CategoryData':Category}, engine=metadata.bind ) clear_mappers() mapper(Category, categories) def tearDown(self): metadata.drop_all() self.session.close() @attr(functional=1) def test_setup_then_teardown(self): eq_(self.session.query(Category).all(), []) data = self.fixture.data(self.CategoryData) data.setup() clear_session(self.session) cats = self.session.query(Category).order_by('name').all() eq_(cats[0].name, 'cars') eq_(cats[1].name, 'get free stuff') data.teardown() clear_session(self.session) eq_(list(self.session.query(Category)), [])
class TestDetailView(TestCase): """Tests for DetailView.""" urls = 'tests.integration.views.generic.urls' def setUp(self): setup_environment() self.fixture = SQLAlchemyFixture( env=models, session=session, style=NamedDataStyle(), ) def test_detail_view(self): with self.fixture.data(fixtures.PersonData) as data: response = self.client.get('/people/%s/' % data.PersonData.John.id) self.assertEqual(response.status_code, 200) self.assertIn(data.PersonData.John.name, response.content) def test_detail_view_not_found(self): response = self.client.get('/people/100000000001/') self.assertEqual(response.status_code, 404)
def install(*args): dbfixture = SQLAlchemyFixture( env={ 'LocaleData': video_models.Locale, 'CategoryData': video_models.Category, 'CategoryTranslationData': video_models.CategoryTranslation, 'RockpackCoverArtData': RockpackCoverArt, 'SourceData': video_models.Source, 'UserData': User, 'ChannelData': video_models.Channel, 'ChannelLocaleMetaData': video_models.ChannelLocaleMeta, 'VideoData': video_models.Video, 'VideoInstanceData': video_models.VideoInstance, 'MoodData': video_models.Mood, 'ExternalTokenData': oauth_models.ExternalToken, }, session=db.session, ) data = dbfixture.data(*args) with app.test_request_context(): data.setup() db.session.commit()
def post_handler_demosite_populate(sender, default_data='', *args, **kwargs): """Loads data after records are created.""" if default_data != 'demosite': print '>>> You can define your own post hadler for `demosite populate`' print '>>> Loading demosite data for BibCirculation ...' class CrcLIBRARYData(DataSet): class CrcLIBRARY_1: phone = u'1234567' name = u'Atlantis Main Library' address = u'CH-1211 Geneva 23' notes = u'' type = None id = 1L email = u'*****@*****.**' class CrcLIBRARY_2: phone = u'1234567' name = u'Atlantis HEP Library' address = u'CH-1211 Geneva 21' notes = u'' type = None id = 2L email = u'*****@*****.**' class CrcITEMData(DataSet): class CrcITEM_bc21001: id_crcLIBRARY = CrcLIBRARYData.CrcLIBRARY_2.ref('id') status = u'available' id_bibrec = 21 description = u'Book' modification_date = datetime(2008, 7, 21, 0, 0) barcode = u'bc-21001' collection = u'' creation_date = datetime(2008, 7, 21, 0, 0) loan_period = u'4 weeks' location = u'MLL-DS.63' number_of_requests = 0L expected_arrival_date = u'' class CrcITEM_bc22001: id_crcLIBRARY = CrcLIBRARYData.CrcLIBRARY_1.ref('id') status = u'requested' id_bibrec = 22 description = u'Book' modification_date = datetime(2008, 7, 21, 0, 0) barcode = u'bc-22001' collection = u'' creation_date = datetime(2008, 7, 21, 0, 0) loan_period = u'1 week' location = u'AZD4E-865' number_of_requests = 0L expected_arrival_date = u'' class CrcITEM_bc23001: id_crcLIBRARY = CrcLIBRARYData.CrcLIBRARY_1.ref('id') status = u'requested' id_bibrec = 23 description = u'Book' modification_date = datetime(2008, 7, 21, 0, 0) barcode = u'bc-23001' collection = u'' creation_date = datetime(2008, 7, 21, 0, 0) loan_period = u'4 weeks' location = u'JHL-465.DS' number_of_requests = 0L expected_arrival_date = u'' class CrcITEM_bc24001: id_crcLIBRARY = CrcLIBRARYData.CrcLIBRARY_2.ref('id') status = u'available' id_bibrec = 24 description = u'Book' modification_date = datetime(2008, 7, 21, 0, 0) barcode = u'bc-24001' collection = u'' creation_date = datetime(2008, 7, 21, 0, 0) loan_period = u'4 weeks' location = u'J56-475' number_of_requests = 0L expected_arrival_date = u'' class CrcITEM_bc25001: id_crcLIBRARY = CrcLIBRARYData.CrcLIBRARY_2.ref('id') status = u'on loan' id_bibrec = 25 description = u'Book' modification_date = datetime(2008, 7, 21, 0, 0) barcode = u'bc-25001' collection = u'' creation_date = datetime(2008, 7, 21, 0, 0) loan_period = u'4 weeks' location = u'AGT-MLL5' number_of_requests = 0L expected_arrival_date = u'' class CrcITEM_bc26001: id_crcLIBRARY = CrcLIBRARYData.CrcLIBRARY_1.ref('id') status = u'missing' id_bibrec = 26 description = u'Book' modification_date = datetime(2008, 7, 21, 0, 0) barcode = u'bc-26001' collection = u'' creation_date = datetime(2008, 7, 21, 0, 0) loan_period = u'1 week' location = u'AZD456-465' number_of_requests = 0L expected_arrival_date = u'' class CrcITEM_bc27001: id_crcLIBRARY = CrcLIBRARYData.CrcLIBRARY_2.ref('id') status = u'available' id_bibrec = 27 description = u'Book' modification_date = datetime(2008, 7, 21, 0, 0) barcode = u'bc-27001' collection = u'' creation_date = datetime(2008, 7, 21, 0, 0) loan_period = u'4 weeks' location = u'JLMQ-45-SQ' number_of_requests = 0L expected_arrival_date = u'' class CrcITEM_bc28001: id_crcLIBRARY = CrcLIBRARYData.CrcLIBRARY_1.ref('id') status = u'available' id_bibrec = 28 description = u'Book' modification_date = datetime(2008, 7, 21, 0, 0) barcode = u'bc-28001' collection = u'' creation_date = datetime(2008, 7, 21, 0, 0) loan_period = u'4 weeks' location = u'AZD5-456' number_of_requests = 0L expected_arrival_date = u'' class CrcITEM_bc29001: id_crcLIBRARY = CrcLIBRARYData.CrcLIBRARY_1.ref('id') status = u'requested' id_bibrec = 29 description = u'Book' modification_date = datetime(2008, 7, 21, 0, 0) barcode = u'bc-29001' collection = u'' creation_date = datetime(2008, 7, 21, 0, 0) loan_period = u'4 weeks' location = u'AZD456-465' number_of_requests = 0L expected_arrival_date = u'' class CrcITEM_bc30001: id_crcLIBRARY = CrcLIBRARYData.CrcLIBRARY_1.ref('id') status = u'available' id_bibrec = 30 description = u'Book' modification_date = datetime(2008, 7, 21, 0, 0) barcode = u'bc-30001' collection = u'Reference' creation_date = datetime(2008, 7, 21, 0, 0) loan_period = u'Not for loan' location = u'QSQS-52-S' number_of_requests = 0L expected_arrival_date = u'' class CrcITEM_bc31001: id_crcLIBRARY = CrcLIBRARYData.CrcLIBRARY_2.ref('id') status = u'on loan' id_bibrec = 31 description = u'Book' modification_date = datetime(2008, 7, 21, 0, 0) barcode = u'bc-31001' collection = u'' creation_date = datetime(2008, 7, 21, 0, 0) loan_period = u'1 week' location = u'123LSKD' number_of_requests = 0L expected_arrival_date = u'' class CrcITEM_bc31002: id_crcLIBRARY = CrcLIBRARYData.CrcLIBRARY_1.ref('id') status = u'available' id_bibrec = 31 description = u'Book' modification_date = datetime(2008, 7, 21, 0, 0) barcode = u'bc-31002' collection = u'' creation_date = datetime(2008, 7, 21, 0, 0) loan_period = u'1 week' location = u'QSQ452-S' number_of_requests = 0L expected_arrival_date = u'' class CrcITEM_bc32001: id_crcLIBRARY = CrcLIBRARYData.CrcLIBRARY_1.ref('id') status = u'available' id_bibrec = 32 description = u'Book' modification_date = datetime(2008, 7, 21, 0, 0) barcode = u'bc-32001' collection = u'Reference' creation_date = datetime(2008, 7, 21, 0, 0) loan_period = u'Not for loan' location = u'WDFG-54' number_of_requests = 0L expected_arrival_date = u'' class CrcITEM_bc32002: id_crcLIBRARY = CrcLIBRARYData.CrcLIBRARY_2.ref('id') status = u'available' id_bibrec = 32 description = u'Book' modification_date = datetime(2008, 7, 21, 0, 0) barcode = u'bc-32002' collection = u'' creation_date = datetime(2008, 7, 21, 0, 0) loan_period = u'4 weeks' location = u'RZ.612-MK' number_of_requests = 0L expected_arrival_date = u'' class CrcITEM_bc32003: id_crcLIBRARY = CrcLIBRARYData.CrcLIBRARY_1.ref('id') status = u'missing' id_bibrec = 32 description = u'Book' modification_date = datetime(2008, 7, 21, 0, 0) barcode = u'bc-32003' collection = u'' creation_date = datetime(2008, 7, 21, 0, 0) loan_period = u'4 weeks' location = u'RT-4654-E' number_of_requests = 0L expected_arrival_date = u'' class CrcITEM_bc33001: id_crcLIBRARY = CrcLIBRARYData.CrcLIBRARY_1.ref('id') status = u'on loan' id_bibrec = 33 description = u'Book' modification_date = datetime(2008, 7, 21, 0, 0) barcode = u'bc-33001' collection = u'' creation_date = datetime(2008, 7, 21, 0, 0) loan_period = u'4 weeks' location = u'AZ.12-AK' number_of_requests = 0L expected_arrival_date = u'' class CrcITEM_bc34001: id_crcLIBRARY = CrcLIBRARYData.CrcLIBRARY_1.ref('id') status = u'available' id_bibrec = 34 description = u'Book' modification_date = datetime(2008, 7, 21, 0, 0) barcode = u'bc-34001' collection = u'' creation_date = datetime(2008, 7, 21, 0, 0) loan_period = u'4 weeks' location = u'ABC-123' number_of_requests = 0L expected_arrival_date = u'' class CrcITEM_bc34002: id_crcLIBRARY = CrcLIBRARYData.CrcLIBRARY_2.ref('id') status = u'requested' id_bibrec = 34 description = u'Book' modification_date = datetime(2008, 7, 21, 0, 0) barcode = u'bc-34002' collection = u'' creation_date = datetime(2008, 7, 21, 0, 0) loan_period = u'4 weeks' location = u'HEP-12A' number_of_requests = 0L expected_arrival_date = u'' class CrcBORROWERData(DataSet): class CrcBORROWER_1: name = u'Admin' notes = u'' borrower_until = datetime(1900, 1, 1, 0, 0) phone = u'20003' borrower_since = datetime(2008, 7, 21, 0, 0) email = u'*****@*****.**' address = u'99-Z-019' mailbox = None id = 1L ccid = None class CrcBORROWER_2: name = u'Jekyll' notes = u'' borrower_until = datetime(1900, 1, 1, 0, 0) phone = u'01234' borrower_since = datetime(2008, 7, 21, 0, 0) email = u'*****@*****.**' address = u'21-Z-019' mailbox = None id = 2L ccid = None class CrcBORROWER_3: name = u'Hyde' notes = u'' borrower_until = datetime(1900, 1, 1, 0, 0) phone = u'01574' borrower_since = datetime(2008, 7, 21, 0, 0) email = u'*****@*****.**' address = u'22-Z-119' mailbox = None id = 3L ccid = None class CrcBORROWER_4: name = u'Dorian Gray' notes = u'' borrower_until = datetime(1900, 1, 1, 0, 0) phone = u'33234' borrower_since = datetime(2008, 7, 21, 0, 0) email = u'*****@*****.**' address = u'38-Y-819' mailbox = None id = 4L ccid = None class CrcBORROWER_5: name = u'Romeo Montague' notes = u'' borrower_until = datetime(1900, 1, 1, 0, 0) phone = u'93844' borrower_since = datetime(2008, 7, 21, 0, 0) email = u'*****@*****.**' address = u'98-W-859' mailbox = None id = 5L ccid = None class CrcBORROWER_6: name = u'Juliet Capulet' notes = u'' borrower_until = datetime(1900, 1, 1, 0, 0) phone = u'99874' borrower_since = datetime(2008, 7, 21, 0, 0) email = u'*****@*****.**' address = u'91-X-098' mailbox = None id = 6L ccid = None class CrcBORROWER_7: name = u'Benvolio Montague' notes = u'' borrower_until = datetime(1900, 1, 1, 0, 0) phone = u'32354' borrower_since = datetime(2008, 7, 21, 0, 0) email = u'*****@*****.**' address = u'93-P-019' mailbox = None id = 7L ccid = None class CrcBORROWER_8: name = u'Balthasar Montague' notes = u'' borrower_until = datetime(1900, 1, 1, 0, 0) phone = u'78644' borrower_since = datetime(2008, 7, 21, 0, 0) email = u'*****@*****.**' address = u'20-M-349' mailbox = None id = 8L ccid = None class CrcLOANData(DataSet): class CrcLOAN_1: status = u'on loan' due_date = datetime.now() + timedelta(days=30) id_bibrec = 33 overdue_letter_date = datetime(1900, 1, 1, 0, 0) notes = u'' barcode = CrcITEMData.CrcITEM_bc33001.ref('barcode') id_crcBORROWER = CrcBORROWERData.CrcBORROWER_4.ref('id') number_of_renewals = 0L loaned_on = datetime.now() returned_on = None overdue_letter_number = 0L type = u'normal' id = 1L class CrcLOAN_2: status = u'on loan' due_date = datetime.now() + timedelta(days=7) id_bibrec = 31 overdue_letter_date = datetime(1900, 1, 1, 0, 0) notes = u'' barcode = CrcITEMData.CrcITEM_bc31001.ref('barcode') id_crcBORROWER = CrcBORROWERData.CrcBORROWER_5.ref('id') number_of_renewals = 0L loaned_on = datetime.now() returned_on = None overdue_letter_number = 0L type = u'normal' id = 2L class CrcLOAN_3: status = u'on loan' due_date = datetime.now() + timedelta(days=30) id_bibrec = 31 overdue_letter_date = datetime(1900, 1, 1, 0, 0) notes = u'' barcode = CrcITEMData.CrcITEM_bc25001.ref('barcode') id_crcBORROWER = CrcBORROWERData.CrcBORROWER_5.ref('id') number_of_renewals = 0L loaned_on = datetime.now() returned_on = None overdue_letter_number = 0L type = u'normal' id = 3L class CrcLOANREQUESTData(DataSet): class CrcLOANREQUEST_1: status = u'pending' period_of_interest_from = datetime.now() id_bibrec = 34 request_date = datetime.now() notes = u'' barcode = CrcITEMData.CrcITEM_bc34002.ref('barcode') id_crcBORROWER = CrcBORROWERData.CrcBORROWER_5.ref('id') period_of_interest_to = datetime.now() + timedelta(days=60) id = 1L class CrcLOANREQUEST_2: status = u'pending' period_of_interest_from = datetime.now() id_bibrec = 29 request_date = datetime.now() notes = u'' barcode = CrcITEMData.CrcITEM_bc29001.ref('barcode') id_crcBORROWER = CrcBORROWERData.CrcBORROWER_6.ref('id') period_of_interest_to = datetime.now() + timedelta(days=45) id = 2L class CrcLOANREQUEST_3: status = u'waiting' period_of_interest_from = datetime.now() id_bibrec = 33 request_date = datetime.now() notes = u'' barcode = CrcITEMData.CrcITEM_bc33001.ref('barcode') id_crcBORROWER = CrcBORROWERData.CrcBORROWER_5.ref('id') period_of_interest_to = datetime.now() + timedelta(days=45) id = 3L class CrcLOANREQUEST_4: status = u'pending' period_of_interest_from = datetime.now() id_bibrec = 22 request_date = datetime.now() notes = u'' barcode = CrcITEMData.CrcITEM_bc22001.ref('barcode') id_crcBORROWER = CrcBORROWERData.CrcBORROWER_7.ref('id') period_of_interest_to = datetime.now() + timedelta(days=90) id = 4L fixtures = [CrcLIBRARYData, CrcBORROWERData, CrcITEMData, CrcLOANData, CrcLOANREQUESTData] try: from invenio.ext.sqlalchemy import db from fixture import SQLAlchemyFixture from invenio.modules.circulation import models as bibcirculation_model models = dict((m.__name__, getattr(bibcirculation_model, m.__name__[:-4])) for m in fixtures) dbfixture = SQLAlchemyFixture(env=models, engine=db.metadata.bind, session=db.session) data = dbfixture.data(*fixtures) print ">>> There are", len(models), "tables to be loaded." data.setup() print ">>> BibCirculation demosite data has been loaded." except Exception as e: print ">>> FAIL: data has not been loaded", e
class TestCascadingReferences(unittest.TestCase): CategoryData = CategoryData ProductData = ProductData OfferData = OfferData def setUp(self): if not conf.HEAVY_DSN: raise SkipTest("conf.HEAVY_DSN not defined") engine = create_engine(conf.HEAVY_DSN) metadata.bind = engine metadata.create_all() Session = get_transactional_session() self.session = Session() self.fixture = SQLAlchemyFixture( env=globals(), engine=metadata.bind, style=NamedDataStyle(), ) clear_mappers() mapper(Category, categories) mapper(Product, products, properties={ 'category': relation(Category, backref='products') }) mapper(Offer, offers, properties={ 'product': relation(Product, backref='offers'), 'category': relation(Category, backref='offers') }) def tearDown(self): metadata.drop_all() self.session.close() clear_mappers() # self.conn.close() metadata.bind.dispose() @attr(functional=1) def test_setup_then_teardown(self): eq_(self.session.query(Category).all(), []) eq_(self.session.query(Product).all(), []) eq_(self.session.query(Offer).all(), []) data = self.fixture.data(self.OfferData) data.setup() self.session.clear() cats = self.session.query(Category).order_by('name').all() eq_(cats[0].name, 'cars') eq_(cats[1].name, 'get free stuff') prods = self.session.query(Product).order_by('name').all() eq_(prods[0].name, 'truck') eq_(prods[0].category, cats[0]) off = self.session.query(Offer).order_by('name').all() eq_(off[0].name, "it's a free TV") eq_(off[0].product, prods[0]) eq_(off[0].category, cats[1]) eq_(off[1].name, "it's a free spaceship") eq_(off[1].product, prods[0]) eq_(off[1].category, cats[1]) eq_(off[2].name, "it's a free truck") eq_(off[2].product, prods[0]) eq_(off[2].category, cats[1]) data.teardown() self.session.clear() eq_(self.session.query(Category).all(), []) eq_(self.session.query(Product).all(), []) eq_(self.session.query(Offer).all(), [])
def post_handler_demosite_populate(sender, default_data='', *args, **kwargs): """Loads data after records are created.""" if default_data != 'demosite': print '>>> You can define your own post hadler for `demosite populate`' print '>>> Loading demosite data for BibCirculation ...' class CrcLIBRARYData(DataSet): class CrcLIBRARY_1: phone = u'1234567' name = u'CERN Document Server' address = u'CH-1211 Geneva 23' notes = u'Access articles, reports and multimedia content in HEP' type = None id = 1L email = u'*****@*****.**' class CrcLIBRARY_2: phone = u'1234567' name = u'CDS HEP Library' address = u'CH-1211 Geneva 21' notes = u'' type = None id = 2L email = u'*****@*****.**' class CrcITEMData(DataSet): class CrcITEM_bc21001: id_crcLIBRARY = CrcLIBRARYData.CrcLIBRARY_2.ref('id') status = u'available' id_bibrec = 21 description = u'Book' modification_date = datetime(2008, 7, 21, 0, 0) barcode = u'bc-21001' collection = u'' creation_date = datetime(2008, 7, 21, 0, 0) loan_period = u'4 weeks' location = u'MLL-DS.63' number_of_requests = 0L expected_arrival_date = u'' class CrcITEM_bc22001: id_crcLIBRARY = CrcLIBRARYData.CrcLIBRARY_1.ref('id') status = u'requested' id_bibrec = 22 description = u'Book' modification_date = datetime(2008, 7, 21, 0, 0) barcode = u'bc-22001' collection = u'' creation_date = datetime(2008, 7, 21, 0, 0) loan_period = u'1 week' location = u'AZD4E-865' number_of_requests = 0L expected_arrival_date = u'' class CrcITEM_bc23001: id_crcLIBRARY = CrcLIBRARYData.CrcLIBRARY_1.ref('id') status = u'requested' id_bibrec = 23 description = u'Book' modification_date = datetime(2008, 7, 21, 0, 0) barcode = u'bc-23001' collection = u'' creation_date = datetime(2008, 7, 21, 0, 0) loan_period = u'4 weeks' location = u'JHL-465.DS' number_of_requests = 0L expected_arrival_date = u'' class CrcITEM_bc24001: id_crcLIBRARY = CrcLIBRARYData.CrcLIBRARY_2.ref('id') status = u'available' id_bibrec = 24 description = u'Book' modification_date = datetime(2008, 7, 21, 0, 0) barcode = u'bc-24001' collection = u'' creation_date = datetime(2008, 7, 21, 0, 0) loan_period = u'4 weeks' location = u'J56-475' number_of_requests = 0L expected_arrival_date = u'' class CrcITEM_bc25001: id_crcLIBRARY = CrcLIBRARYData.CrcLIBRARY_2.ref('id') status = u'on loan' id_bibrec = 25 description = u'Book' modification_date = datetime(2008, 7, 21, 0, 0) barcode = u'bc-25001' collection = u'' creation_date = datetime(2008, 7, 21, 0, 0) loan_period = u'4 weeks' location = u'AGT-MLL5' number_of_requests = 0L expected_arrival_date = u'' class CrcITEM_bc26001: id_crcLIBRARY = CrcLIBRARYData.CrcLIBRARY_1.ref('id') status = u'missing' id_bibrec = 26 description = u'Book' modification_date = datetime(2008, 7, 21, 0, 0) barcode = u'bc-26001' collection = u'' creation_date = datetime(2008, 7, 21, 0, 0) loan_period = u'1 week' location = u'AZD456-465' number_of_requests = 0L expected_arrival_date = u'' class CrcITEM_bc27001: id_crcLIBRARY = CrcLIBRARYData.CrcLIBRARY_2.ref('id') status = u'available' id_bibrec = 27 description = u'Book' modification_date = datetime(2008, 7, 21, 0, 0) barcode = u'bc-27001' collection = u'' creation_date = datetime(2008, 7, 21, 0, 0) loan_period = u'4 weeks' location = u'JLMQ-45-SQ' number_of_requests = 0L expected_arrival_date = u'' class CrcITEM_bc28001: id_crcLIBRARY = CrcLIBRARYData.CrcLIBRARY_1.ref('id') status = u'available' id_bibrec = 28 description = u'Book' modification_date = datetime(2008, 7, 21, 0, 0) barcode = u'bc-28001' collection = u'' creation_date = datetime(2008, 7, 21, 0, 0) loan_period = u'4 weeks' location = u'AZD5-456' number_of_requests = 0L expected_arrival_date = u'' class CrcITEM_bc29001: id_crcLIBRARY = CrcLIBRARYData.CrcLIBRARY_1.ref('id') status = u'requested' id_bibrec = 29 description = u'Book' modification_date = datetime(2008, 7, 21, 0, 0) barcode = u'bc-29001' collection = u'' creation_date = datetime(2008, 7, 21, 0, 0) loan_period = u'4 weeks' location = u'AZD456-465' number_of_requests = 0L expected_arrival_date = u'' class CrcITEM_bc30001: id_crcLIBRARY = CrcLIBRARYData.CrcLIBRARY_1.ref('id') status = u'available' id_bibrec = 30 description = u'Book' modification_date = datetime(2008, 7, 21, 0, 0) barcode = u'bc-30001' collection = u'Reference' creation_date = datetime(2008, 7, 21, 0, 0) loan_period = u'Not for loan' location = u'QSQS-52-S' number_of_requests = 0L expected_arrival_date = u'' class CrcITEM_bc31001: id_crcLIBRARY = CrcLIBRARYData.CrcLIBRARY_2.ref('id') status = u'on loan' id_bibrec = 31 description = u'Book' modification_date = datetime(2008, 7, 21, 0, 0) barcode = u'bc-31001' collection = u'' creation_date = datetime(2008, 7, 21, 0, 0) loan_period = u'1 week' location = u'123LSKD' number_of_requests = 0L expected_arrival_date = u'' class CrcITEM_bc31002: id_crcLIBRARY = CrcLIBRARYData.CrcLIBRARY_1.ref('id') status = u'available' id_bibrec = 31 description = u'Book' modification_date = datetime(2008, 7, 21, 0, 0) barcode = u'bc-31002' collection = u'' creation_date = datetime(2008, 7, 21, 0, 0) loan_period = u'1 week' location = u'QSQ452-S' number_of_requests = 0L expected_arrival_date = u'' class CrcITEM_bc32001: id_crcLIBRARY = CrcLIBRARYData.CrcLIBRARY_1.ref('id') status = u'available' id_bibrec = 32 description = u'Book' modification_date = datetime(2008, 7, 21, 0, 0) barcode = u'bc-32001' collection = u'Reference' creation_date = datetime(2008, 7, 21, 0, 0) loan_period = u'Not for loan' location = u'WDFG-54' number_of_requests = 0L expected_arrival_date = u'' class CrcITEM_bc32002: id_crcLIBRARY = CrcLIBRARYData.CrcLIBRARY_2.ref('id') status = u'available' id_bibrec = 32 description = u'Book' modification_date = datetime(2008, 7, 21, 0, 0) barcode = u'bc-32002' collection = u'' creation_date = datetime(2008, 7, 21, 0, 0) loan_period = u'4 weeks' location = u'RZ.612-MK' number_of_requests = 0L expected_arrival_date = u'' class CrcITEM_bc32003: id_crcLIBRARY = CrcLIBRARYData.CrcLIBRARY_1.ref('id') status = u'missing' id_bibrec = 32 description = u'Book' modification_date = datetime(2008, 7, 21, 0, 0) barcode = u'bc-32003' collection = u'' creation_date = datetime(2008, 7, 21, 0, 0) loan_period = u'4 weeks' location = u'RT-4654-E' number_of_requests = 0L expected_arrival_date = u'' class CrcITEM_bc33001: id_crcLIBRARY = CrcLIBRARYData.CrcLIBRARY_1.ref('id') status = u'on loan' id_bibrec = 33 description = u'Book' modification_date = datetime(2008, 7, 21, 0, 0) barcode = u'bc-33001' collection = u'' creation_date = datetime(2008, 7, 21, 0, 0) loan_period = u'4 weeks' location = u'AZ.12-AK' number_of_requests = 0L expected_arrival_date = u'' class CrcITEM_bc34001: id_crcLIBRARY = CrcLIBRARYData.CrcLIBRARY_1.ref('id') status = u'available' id_bibrec = 34 description = u'Book' modification_date = datetime(2008, 7, 21, 0, 0) barcode = u'bc-34001' collection = u'' creation_date = datetime(2008, 7, 21, 0, 0) loan_period = u'4 weeks' location = u'ABC-123' number_of_requests = 0L expected_arrival_date = u'' class CrcITEM_bc34002: id_crcLIBRARY = CrcLIBRARYData.CrcLIBRARY_2.ref('id') status = u'requested' id_bibrec = 34 description = u'Book' modification_date = datetime(2008, 7, 21, 0, 0) barcode = u'bc-34002' collection = u'' creation_date = datetime(2008, 7, 21, 0, 0) loan_period = u'4 weeks' location = u'HEP-12A' number_of_requests = 0L expected_arrival_date = u'' class CrcBORROWERData(DataSet): class CrcBORROWER_1: name = u'Admin' notes = u'' borrower_until = datetime(1900, 1, 1, 0, 0) phone = u'20003' borrower_since = datetime(2008, 7, 21, 0, 0) email = u'*****@*****.**' address = u'99-Z-019' mailbox = None id = 1L ccid = None class CrcBORROWER_2: name = u'Jekyll' notes = u'' borrower_until = datetime(1900, 1, 1, 0, 0) phone = u'01234' borrower_since = datetime(2008, 7, 21, 0, 0) email = u'*****@*****.**' address = u'21-Z-019' mailbox = None id = 2L ccid = None class CrcBORROWER_3: name = u'Hyde' notes = u'' borrower_until = datetime(1900, 1, 1, 0, 0) phone = u'01574' borrower_since = datetime(2008, 7, 21, 0, 0) email = u'*****@*****.**' address = u'22-Z-119' mailbox = None id = 3L ccid = None class CrcBORROWER_4: name = u'Dorian Gray' notes = u'' borrower_until = datetime(1900, 1, 1, 0, 0) phone = u'33234' borrower_since = datetime(2008, 7, 21, 0, 0) email = u'*****@*****.**' address = u'38-Y-819' mailbox = None id = 4L ccid = None class CrcBORROWER_5: name = u'Romeo Montague' notes = u'' borrower_until = datetime(1900, 1, 1, 0, 0) phone = u'93844' borrower_since = datetime(2008, 7, 21, 0, 0) email = u'*****@*****.**' address = u'98-W-859' mailbox = None id = 5L ccid = None class CrcBORROWER_6: name = u'Juliet Capulet' notes = u'' borrower_until = datetime(1900, 1, 1, 0, 0) phone = u'99874' borrower_since = datetime(2008, 7, 21, 0, 0) email = u'*****@*****.**' address = u'91-X-098' mailbox = None id = 6L ccid = None class CrcBORROWER_7: name = u'Benvolio Montague' notes = u'' borrower_until = datetime(1900, 1, 1, 0, 0) phone = u'32354' borrower_since = datetime(2008, 7, 21, 0, 0) email = u'*****@*****.**' address = u'93-P-019' mailbox = None id = 7L ccid = None class CrcBORROWER_8: name = u'Balthasar Montague' notes = u'' borrower_until = datetime(1900, 1, 1, 0, 0) phone = u'78644' borrower_since = datetime(2008, 7, 21, 0, 0) email = u'*****@*****.**' address = u'20-M-349' mailbox = None id = 8L ccid = None class CrcLOANData(DataSet): class CrcLOAN_1: status = u'on loan' due_date = datetime.now() + timedelta(days=30) id_bibrec = 33 overdue_letter_date = datetime(1900, 1, 1, 0, 0) notes = u'' barcode = CrcITEMData.CrcITEM_bc33001.ref('barcode') id_crcBORROWER = CrcBORROWERData.CrcBORROWER_4.ref('id') number_of_renewals = 0L loaned_on = datetime.now() returned_on = None overdue_letter_number = 0L type = u'normal' id = 1L class CrcLOAN_2: status = u'on loan' due_date = datetime.now() + timedelta(days=7) id_bibrec = 31 overdue_letter_date = datetime(1900, 1, 1, 0, 0) notes = u'' barcode = CrcITEMData.CrcITEM_bc31001.ref('barcode') id_crcBORROWER = CrcBORROWERData.CrcBORROWER_5.ref('id') number_of_renewals = 0L loaned_on = datetime.now() returned_on = None overdue_letter_number = 0L type = u'normal' id = 2L class CrcLOAN_3: status = u'on loan' due_date = datetime.now() + timedelta(days=30) id_bibrec = 31 overdue_letter_date = datetime(1900, 1, 1, 0, 0) notes = u'' barcode = CrcITEMData.CrcITEM_bc25001.ref('barcode') id_crcBORROWER = CrcBORROWERData.CrcBORROWER_5.ref('id') number_of_renewals = 0L loaned_on = datetime.now() returned_on = None overdue_letter_number = 0L type = u'normal' id = 3L class CrcLOANREQUESTData(DataSet): class CrcLOANREQUEST_1: status = u'pending' period_of_interest_from = datetime.now() id_bibrec = 34 request_date = datetime.now() notes = u'' barcode = CrcITEMData.CrcITEM_bc34002.ref('barcode') id_crcBORROWER = CrcBORROWERData.CrcBORROWER_5.ref('id') period_of_interest_to = datetime.now() + timedelta(days=60) id = 1L class CrcLOANREQUEST_2: status = u'pending' period_of_interest_from = datetime.now() id_bibrec = 29 request_date = datetime.now() notes = u'' barcode = CrcITEMData.CrcITEM_bc29001.ref('barcode') id_crcBORROWER = CrcBORROWERData.CrcBORROWER_6.ref('id') period_of_interest_to = datetime.now() + timedelta(days=45) id = 2L class CrcLOANREQUEST_3: status = u'waiting' period_of_interest_from = datetime.now() id_bibrec = 33 request_date = datetime.now() notes = u'' barcode = CrcITEMData.CrcITEM_bc33001.ref('barcode') id_crcBORROWER = CrcBORROWERData.CrcBORROWER_5.ref('id') period_of_interest_to = datetime.now() + timedelta(days=45) id = 3L class CrcLOANREQUEST_4: status = u'pending' period_of_interest_from = datetime.now() id_bibrec = 22 request_date = datetime.now() notes = u'' barcode = CrcITEMData.CrcITEM_bc22001.ref('barcode') id_crcBORROWER = CrcBORROWERData.CrcBORROWER_7.ref('id') period_of_interest_to = datetime.now() + timedelta(days=90) id = 4L fixtures = [CrcLIBRARYData, CrcBORROWERData, CrcITEMData, CrcLOANData, CrcLOANREQUESTData] try: from invenio.ext.sqlalchemy import db from fixture import SQLAlchemyFixture from invenio.modules.circulation import models as bibcirculation_model models = dict((m.__name__, getattr(bibcirculation_model, m.__name__[:-4])) for m in fixtures) dbfixture = SQLAlchemyFixture(env=models, engine=db.metadata.bind, session=db.session) data = dbfixture.data(*fixtures) print ">>> There are", len(models), "tables to be loaded." data.setup() print ">>> BibCirculation demosite data has been loaded." except Exception as e: print ">>> FAIL: data has not been loaded", e
class TestCascadingReferences(unittest.TestCase): CategoryData = CategoryData ProductData = ProductData OfferData = OfferData def setUp(self): if not conf.HEAVY_DSN: raise SkipTest("conf.HEAVY_DSN not defined") engine = create_engine(conf.HEAVY_DSN) metadata.bind = engine metadata.create_all() Session = get_transactional_session() self.session = Session() self.fixture = SQLAlchemyFixture( env=globals(), engine=metadata.bind, style=NamedDataStyle(), ) clear_mappers() mapper(Category, categories) mapper(Product, products, properties={ 'category': relation(Category, backref='products') }) mapper(Offer, offers, properties={ 'product': relation(Product, backref='offers'), 'category': relation(Category, backref='offers') }) def tearDown(self): metadata.drop_all() self.session.close() clear_mappers() # self.conn.close() metadata.bind.dispose() @attr(functional=1) def test_setup_then_teardown(self): eq_(self.session.query(Category).all(), []) eq_(self.session.query(Product).all(), []) eq_(self.session.query(Offer).all(), []) data = self.fixture.data(self.OfferData) data.setup() clear_session(self.session) cats = self.session.query(Category).order_by('name').all() eq_(cats[0].name, 'cars') eq_(cats[1].name, 'get free stuff') prods = self.session.query(Product).order_by('name').all() eq_(prods[0].name, 'truck') eq_(prods[0].category, cats[0]) off = self.session.query(Offer).order_by('name').all() eq_(off[0].name, "it's a free TV") eq_(off[0].product, prods[0]) eq_(off[0].category, cats[1]) eq_(off[1].name, "it's a free spaceship") eq_(off[1].product, prods[0]) eq_(off[1].category, cats[1]) eq_(off[2].name, "it's a free truck") eq_(off[2].product, prods[0]) eq_(off[2].category, cats[1]) data.teardown() clear_session(self.session) eq_(self.session.query(Category).all(), []) eq_(self.session.query(Product).all(), []) eq_(self.session.query(Offer).all(), [])
def install(app, *args): dbfixture = SQLAlchemyFixture(env=models, style=NamedDataStyle(), engine=db.engine) data = dbfixture.data(*args) data.setup() dbfixture.dispose()
def install(app, *args): engine = create_engine(app.config['SQLALCHEMY_DATABASE_URI']) db = SQLAlchemyFixture(env=models, style=NamedDataStyle(), engine=engine) data = db.data(*args) data.setup() db.dispose()