예제 #1
0
파일: validate.py 프로젝트: bertsky/core
def validate_parameters(ocrd_tool, executable, param_json):
    '''
    Validate PARAM_JSON against parameter definition of EXECUTABLE in OCRD_TOOL
    '''
    with codecs.open(ocrd_tool, encoding='utf-8') as f:
        ocrd_tool = loads(f.read())
    _inform_of_result(
        ParameterValidator(ocrd_tool['tools'][executable]).validate(
            parse_json_string_or_file(param_json)))
예제 #2
0
파일: test_utils.py 프로젝트: cclauss/core
 def test_parameter_file_comments(self):
     with TemporaryDirectory() as tempdir:
         jsonpath = Path(tempdir, 'test.json')
         jsonpath.write_text("""\
                 {
                     # Metasyntactical variables are rarely imaginative
                     "foo": 42,
                     # case in point:
                     "bar": 23
                 }""")
         self.assertEqual(parse_json_string_or_file(str(jsonpath)), {'foo': 42, 'bar': 23})
예제 #3
0
파일: test_utils.py 프로젝트: cclauss/core
 def test_parse_json_string_or_file(self):
     self.assertEqual(parse_json_string_or_file(), {})
     self.assertEqual(parse_json_string_or_file(''), {})
     self.assertEqual(parse_json_string_or_file(' '), {})
     self.assertEqual(parse_json_string_or_file('{}'), {})
     self.assertEqual(parse_json_string_or_file('{"foo": 32}'), {'foo': 32})
     self.assertEqual(parse_json_string_or_file(
       '{"dpi": -1, "textequiv_level": "word", "overwrite_words": false, "raw_lines": false, "char_whitelist": "", "char_blacklist": "", "char_unblacklist": ""}'
     ), {"dpi": -1, "textequiv_level": "word", "overwrite_words": False, "raw_lines": False, "char_whitelist": "", "char_blacklist": "", "char_unblacklist": ""})
예제 #4
0
 def validate(self):
     if not which(self.executable):
         raise Exception("Executable not found in PATH: %s" %
                         self.executable)
     if not self.input_file_grps:
         raise Exception("Task must have input file group")
     parameters = {}
     if self.parameter_path:
         parameters = parse_json_string_or_file(self.parameter_path)
     param_validator = ParameterValidator(self.ocrd_tool_json)
     report = param_validator.validate(parameters)
     if not report.is_valid:
         raise Exception(report.errors)
     if 'output_file_grp' in self.ocrd_tool_json and not self.output_file_grps:
         raise Exception(
             "Processor requires output_file_grp but none was provided.")
     return report
예제 #5
0
파일: task_sequence.py 프로젝트: wrznr/core
 def validate(self):
     if not which(self.executable):
         raise Exception("Executable not found in PATH: %s" %
                         self.executable)
     if not self.input_file_grps:
         raise Exception("Task must have input file group")
     result = run([self.executable, '--dump-json'],
                  stdout=PIPE,
                  check=True,
                  universal_newlines=True)
     ocrd_tool_json = json.loads(result.stdout)
     parameters = {}
     if self.parameter_path:
         parameters = parse_json_string_or_file(self.parameter_path)
     param_validator = ParameterValidator(ocrd_tool_json)
     report = param_validator.validate(parameters)
     if not report.is_valid:
         raise Exception(report.errors)
     if 'output_file_grp' in ocrd_tool_json and not self.output_file_grps:
         raise Exception(
             "Processor requires output_file_grp but none was provided.")
     return True
예제 #6
0
파일: test_utils.py 프로젝트: b2m/core
 def test_parameters_invalid(self):
     with self.assertRaisesRegex(ValueError, 'Not a valid JSON object'):
         parse_json_string_or_file('[]')
     with self.assertRaisesRegex(ValueError, 'Error parsing'):
         parse_json_string_or_file('[}')
예제 #7
0
파일: test_utils.py 프로젝트: wrznr/core
 def test_parse_json_string_or_file(self):
     self.assertEqual(parse_json_string_or_file(), {})
     self.assertEqual(parse_json_string_or_file('{}'), {})
     self.assertEqual(parse_json_string_or_file('{"foo": 32}'), {'foo': 32})
예제 #8
0
def _handle_param_option(ctx, param, value):
    return parse_json_string_or_file(*list(value))
예제 #9
0
파일: decorators.py 프로젝트: wrznr/core

loglevel_option = click.option(
    '-l',
    '--log-level',
    help="Log level",
    type=click.Choice(['OFF', 'ERROR', 'WARN', 'INFO', 'DEBUG', 'TRACE']),
    default=None,
    callback=_set_root_logger_version)

parameter_option = click.option(
    '-p',
    '--parameter',
    help="Parameters, either JSON string or path to JSON file",
    default='{}',
    callback=lambda ctx, param, value: parse_json_string_or_file(value))


def ocrd_cli_wrap_processor(processorClass,
                            ocrd_tool=None,
                            mets=None,
                            working_dir=None,
                            dump_json=False,
                            version=False,
                            **kwargs):
    LOG = getLogger('ocrd_cli_wrap_processor')
    if dump_json:
        processorClass(workspace=None, dump_json=True)
    elif version:
        try:
            p = processorClass(workspace=None)