This is an automated email from the ASF dual-hosted git repository.
potiuk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/master by this push:
new c9f9d2c Optimize json schema validation in providers_manager (#12420)
c9f9d2c is described below
commit c9f9d2cea807681008e6a280646a1ffc22c70f84
Author: Kamil BreguĊa <[email protected]>
AuthorDate: Wed Nov 18 07:07:53 2020 +0100
Optimize json schema validation in providers_manager (#12420)
---
airflow/providers_manager.py | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/airflow/providers_manager.py b/airflow/providers_manager.py
index cf5b1d9..e09b5d8 100644
--- a/airflow/providers_manager.py
+++ b/airflow/providers_manager.py
@@ -21,7 +21,6 @@ import json
import logging
import pkgutil
import traceback
-from typing import Dict
import jsonschema
import yaml
@@ -36,8 +35,11 @@ except ImportError:
log = logging.getLogger(__name__)
-def _load_schema() -> Dict:
- return json.loads(importlib_resources.read_text('airflow',
'provider.yaml.schema.json'))
+def _create_validator():
+ schema = json.loads(importlib_resources.read_text('airflow',
'provider.yaml.schema.json'))
+ cls = jsonschema.validators.validator_for(schema)
+ validator = cls(schema)
+ return validator
class ProvidersManager:
@@ -50,7 +52,7 @@ class ProvidersManager:
except ImportError as e:
log.warning("No providers are present or error when importing
them! :%s", e)
return
- self._schema = _load_schema()
+ self._validator = _create_validator()
self.__find_all_providers(providers.__path__)
def __find_all_providers(self, paths: str):
@@ -67,7 +69,7 @@ class ProvidersManager:
try:
provider = importlib_resources.read_text(imported_module,
'provider.yaml')
provider_info = yaml.safe_load(provider)
- jsonschema.validate(provider_info, schema=self._schema)
+ self._validator.validate(provider_info)
self._provider_directory[provider_info['package-name']] =
provider_info
except FileNotFoundError:
# This is OK - this is not a provider package