def reset_filesystem(self, users=(), applications=()): """ Create in-memory DB that can be accessed by multiple threads. Set up auth requests, the rate limit bucket, and the request log. """ self._db_engine = sqlalchemy.create_engine( 'sqlite:///:memory:', connect_args={'check_same_thread': False}, poolclass=StaticPool, ) DbModel.metadata.create_all(self._db_engine) self._db_session_maker = sessionmaker(bind=self._db_engine, autoflush=True) self._db_session = self._db_session_maker() self._db_session.add(FolderModel(folder_id=0)) self._db_session.commit() self._rate_limit_bucket = (self.RATE_LIMIT_THRESHOLD, datetime.utcnow()) self._request_log = [] self._oauth_behavior = OAuth2Behavior(self._db_session) self._file_behavior = FileBehavior(self._db_session) self._folder_behavior = FolderBehavior(self._db_session) self._event_behavior = EventBehavior(self._db_session) self._user_behavior = UserBehavior(self._db_session) user_ids = [] for user_info in users: user_name, user_login = user_info user_id = self.add_user(user_name, user_login) user_ids.append(user_id) for app_info in applications: client_id, client_secret, user_index = app_info self.add_application(client_id, client_secret, user_ids[user_index])