Example #1
0
async def get_db(db_name: str,
                 where_query: str,
                 where_values: Optional[DataType] = None,
                 limit: Optional[int] = None):
    res = dict()
    res["status"] = "error"
    if db_name not in db.get_all_tables():
        res["error"] = f"'{db_name}' is not a valid database, see /api/db"
        return res

    model = models.get(db_name)
    if model is None:
        res["status"] = "unknown"
        return res

    fields = list(model.__fields__.keys())
    schema_model = jsto(model.schema_json())

    where = None
    if where_query is not None:
        where = where_query, where_values
        if where_values is None:
            where = where_query, tuple()

    entries = db.lookup(db_name, fields, where=where, limit=limit)

    res["status"] = "success"
    res["data"] = dict()
    res["data"]["entries"] = entries
    res["data"]["schema"] = schema_model
    return res
Example #2
0
    def parse(self):
        sql = self._parse_sql()
        model = self._parse_model()

        for schema_file in self.path.glob("*.json"):
            schema_name = schema_file.name.replace(".json", "")
            schema_data = jsto(schema_file.read_text())
            if schema_data is None:
                continue

            self.raw[schema_name] = schema_data

            for key, value in schema_data.items():
                entry = schema_name, key, value
                sql.send(entry)
                model.send(entry)

        if self.debug:
            print("Graph", self.graph)
            for table, entries in self.sql.items():
                print("SQL", table)
                for entry in entries:
                    print("\t", entry)

                meta_entries = self.sql_meta[table]
                if len(meta_entries) > 0:
                    for m_entry in meta_entries:
                        print("\t", m_entry)

                print()
Example #3
0
async def get_schema(schema_name: str):
    res = dict()

    model = models.get(schema_name)
    if model is None:
        res["status"] = "unknown"
        return res

    schema_model = jsto(model.schema_json())

    res["status"] = "success"
    res["data"] = schema_model
    return res
Example #4
0
def is_valid(db_name: str, data: KeyedDict) -> int:
    res = dict()
    res["status"] = "error"
    if db_name not in db.get_all_tables():
        res["data"] = f"'{db_name}' is not a valid database, see /api/db"
        return 1, res

    model = models.get(db_name)
    if model is None:
        res["status"] = "unknown"
        res["data"] = None
        return 2, res

    schema_model = jsto(model.schema_json())
    try:
        validate(instance=data, schema=schema_model)
        return 0, res

    except ValidationError as e:
        res["data"] = str(e)
        return 3, res
Example #5
0
async def get_dynamic_schema():
    res = dict()
    res["status"] = "success"
    res["data"] = jsto(DynamicEntry.schema_json())
    return res