Source code for knitlib.knitpat

__author__ = 'tian'

import jsonschema
import logging
import json
import pkg_resources


__SCHEMA_DATA = pkg_resources.resource_string(__name__, "knitting_pattern_schema.json")
# file("./knitting_pattern_schema.json", "rb")
__SCHEMA_DICT = json.loads(__SCHEMA_DATA)


[docs]def validate_dict(loaded_json_data): """Checks if a dict is a valid Knitpat format. Validates if a dict, loaded from a json file, is valid according to the Knitpat scheme. Returns: True if valid, False if not. """ try: jsonschema.validate(loaded_json_data, __SCHEMA_DICT) return True except Exception as e: logging.error(e) return False
[docs]def parse_ustring(string_data): """Parses a string into a dict and validates it.""" loaded_json_data = json.loads(string_data) if validate_dict(loaded_json_data): return loaded_json_data else: raise ValueError("Invalid data string")
[docs]def parse_dict_from_cli(cli_dict): """Parses from CLI dict into a valid Knitpat.""" # TODO add parsing for size and measurement. parsed_dict = {} for k, v in cli_dict.items(): if k in ["colors"]: parsed_dict[k] = int(v) else: parsed_dict[k] = v if validate_dict(parsed_dict): return parsed_dict else: return dict()