def save(self, instance): """Save the instance to the database :param instance: an instance of modeled data object """ _model = getattr(db_model, instance.__class__.__name__) session = self._engine_facade.session with session.begin(): _pk = getattr(instance, instance.PK_NAME) if _pk is not None: _row = session.query(_model).get(_pk) _row = model_util.to_db(instance, _row) else: _row = model_util.to_db(instance) session.add(_row) _row.save(session) return model_util.from_db(_row)
def test_to_db(self): self.assertIsNone(model_util.to_db(None)) _tor = api_model.Torrent.make_empty() _tor.torrent_id = 1 _tor.name = 'fake.torrent' _db_tor = model_util.to_db(_tor) self.assertIsInstance(_db_tor, db_model.Torrent) _mf = api_model.MediaFile.make_empty() _mf.media_id = 1 _mf.filename = 'media.mp4' _mf.file_ext = '.mp4' _mf.torrent_id = _tor.torrent_id _tor.media_files = [_mf] _db_tor = model_util.to_db(_tor) self.assertIsInstance(_db_tor, db_model.Torrent)
def bulk_create(self, instances): """Save the instances in bulk to the database. :param list instances: a list of instance of modeled data object """ if not instances: return _instances = [model_util.to_db(item) for item in instances] session = self._engine_facade.session with session.begin(): session.add_all(_instances) for _row in _instances: yield model_util.from_db(_row)