File size: 1,636 Bytes
6216ecd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
from cerberus import Validator
import importlib
import os

def validate_config(config):
    basic_schema = {
        "task": {
            "type":"string",
            "required":True
        },
        "dataset": {
            "type":"string",
            "required":True
        },
        "model": {
            "type":"string",
            "required":True
        },
    }
    basic_v = Validator(basic_schema,allow_unknown=True)
    
    if not basic_v.validate(config.config_dict):
        raise Exception(f"Invalid config file:",basic_v.errors)
    
    # check if such task exists
    if not os.path.exists(os.path.join("src",config.task)):
        raise Exception("Invalid config file:",f"no such task {config.task}")

    # check if valid dataset
    all_datasets = importlib.import_module(f"src.{config.task}.data.register_datasets").datasets
    if config.dataset not in all_datasets:
        raise Exception("Invalid config file:",f"no {config.dataset} dataset found in registered datasets: {all_datasets}")
    
    # check if valid model
    all_models = importlib.import_module(f"src.{config.task}.model.register_models").models
    if config.model not in all_models:
        raise Exception("Invalid config file:",f"no {config.model} model found in registered models: {all_models}")
    
    
    
    # check the sub_task's validate_config schema
    task_schema = importlib.import_module(f"src.{config.task}.validate_config").schema
    sub_task_v = Validator(task_schema,allow_unknown=True)

    if not sub_task_v.validate(config.config_dict):
        raise Exception(f"Invalid config file:",sub_task_v.errors)