def admin_client(self, host): """Return host MongoClient authenticated as admin. Args: host (str): MongoDB host Returns: pymongo.mongo_client.MongoClient: host MongoClient as admin Raises: ConfigError: if authentication fails or cannot connect to host. """ if host not in self._admin_client: config = self.cfg.load() try: client = MongoClient(config["auth"][host], connect=False, serverSelectionTimeoutMS=5000) client.server_info() self._admin_client[host] = client except pymongo.errors.OperationFailure as e: raise ConfigError("Auth error: {}".format(e)) except pymongo.errors.ServerSelectionTimeoutError as e: return ConfigError("Cannot connect: {}".format(e)) return self._admin_client[host]
def check(config: dict): """Verify config is properly formatted. Args: config (dict): config spec Raises: ConfigError: if config is improperly formatted. """ if not set(config.keys()) >= {"mgdb_uri", "mailer", "auth"}: raise ConfigError("config missing one of " "{mgdb_uri,mailer,auth} keys") if not (isinstance(config["mgdb_uri"], str) and isinstance( config["mailer"], dict) and isinstance(config["auth"], dict)): raise ConfigError("config field of wrong type") if not set(config["mailer"].keys()) >= {"class", "kwargs"}: raise ConfigError("mailer config missing fields") if config["mgdb_uri"]: if not re.match("mongodb://[^:]+:[^@]+@[^/]+/.+", config["mgdb_uri"]): raise ConfigError("mgdb_uri must be of form " "mongodb://{username}:{password}@{host}/{db}")
def check(config): """Verify config is properly formatted. Args: config (dict): config spec Raises: ConfigError: if config is improperly formatted. """ fetch = config["fetch"] auth = config["auth"] if not set(config.keys()) >= {"fetch", "auth"}: raise ConfigError("config missing fetch and auth keys") if not set(fetch.keys()) >= {"remotes", "host_aliases", "db_aliases"}: raise ConfigError("fetch config missing fields") if not (isinstance(fetch["remotes"], list) and isinstance(fetch["host_aliases"], dict) and isinstance(fetch["db_aliases"], dict)): raise ConfigError("fetch config field of wrong type") if not (isinstance(auth, list) and all( set(a.keys()) == {'host', 'db', 'role', 'username', 'password'} for a in auth)): raise ConfigError("auth config of wrong type")
def check(config): if not ("req_list_field" in config and isinstance(config["req_list_field"], list)): raise ConfigError("bad config")