diff --git a/mypy_requirements.txt b/mypy_requirements.txt
index d8f3601a..1f438395 100644
--- a/mypy_requirements.txt
+++ b/mypy_requirements.txt
@@ -1,4 +1,3 @@
mypy==0.910
types-pkg_resources
types-requests
-pytest
diff --git a/schema_salad/codegen_base.py b/schema_salad/codegen_base.py
index 02a6072b..17d26cf4 100644
--- a/schema_salad/codegen_base.py
+++ b/schema_salad/codegen_base.py
@@ -66,7 +66,7 @@ def prologue(self) -> None:
@staticmethod
def safe_name(name: str) -> str:
"""Generate a safe version of the given name."""
- return schema.avro_name(name)
+ return schema.avro_field_name(name)
def begin_class(
self, # pylint: disable=too-many-arguments
diff --git a/schema_salad/java_codegen.py b/schema_salad/java_codegen.py
index 37ae62b7..9d80d6e8 100644
--- a/schema_salad/java_codegen.py
+++ b/schema_salad/java_codegen.py
@@ -151,7 +151,7 @@ def prologue(self) -> None:
@staticmethod
def property_name(name: str) -> str:
- avn = schema.avro_name(name)
+ avn = schema.avro_field_name(name)
return avn
@staticmethod
diff --git a/schema_salad/makedoc.py b/schema_salad/makedoc.py
index 29a190ce..f152b00b 100644
--- a/schema_salad/makedoc.py
+++ b/schema_salad/makedoc.py
@@ -315,7 +315,7 @@ def typefmt(
"https://w3id.org/cwl/salad#record",
"https://w3id.org/cwl/salad#enum",
):
- frg = schema.avro_name(tp["name"])
+ frg = schema.avro_type_name(tp["name"])
if tp["name"] in redirects:
return """{}""".format(redirects[tp["name"]], frg)
if tp["name"] in self.typemap:
@@ -325,7 +325,7 @@ def typefmt(
and len(tp["symbols"]) == 1
):
return "constant value {}
".format(
- schema.avro_name(tp["symbols"][0])
+ schema.avro_field_name(tp["symbols"][0])
)
return frg
if isinstance(tp["type"], MutableMapping):
@@ -335,7 +335,7 @@ def typefmt(
return """{}""".format(redirects[tp], redirects[tp])
if str(tp) in basicTypes:
return """{}""".format(
- self.primitiveType, schema.avro_name(str(tp))
+ self.primitiveType, schema.avro_type_name(str(tp))
)
frg2 = urldefrag(tp)[1]
if frg2 != "":
@@ -443,7 +443,7 @@ def extendsfrom(item: Dict[str, Any], ex: List[Dict[str, Any]]) -> None:
desc = i["doc"]
- rfrg = schema.avro_name(i["name"])
+ rfrg = schema.avro_field_name(i["name"])
tr = """
{}
@@ -472,7 +472,7 @@ def extendsfrom(item: Dict[str, Any], ex: List[Dict[str, Any]]) -> None:
for e in ex:
for i in e.get("symbols", []):
doc += "
"
- efrg = schema.avro_name(i)
+ efrg = schema.avro_field_name(i)
doc += "{} | {} | ".format(
efrg, enumDesc.get(efrg, "")
)
diff --git a/schema_salad/python_codegen.py b/schema_salad/python_codegen.py
index 8fd79ae1..71150ada 100644
--- a/schema_salad/python_codegen.py
+++ b/schema_salad/python_codegen.py
@@ -14,7 +14,7 @@
from pkg_resources import resource_stream
-from . import schema
+from . import schema, validate
from .codegen_base import CodeGenBase, TypeDef
from .exceptions import SchemaException
from .schema import shortname
@@ -56,7 +56,9 @@ def __init__(self, out: IO[str], copyright: Optional[str]) -> None:
@staticmethod
def safe_name(name): # type: (str) -> str
- avn = schema.avro_name(name)
+ avn = schema.avro_field_name(name)
+ if avn.startswith("anon."):
+ avn = avn[5:]
if avn in ("class", "in"):
# reserved words
avn = avn + "_"
@@ -498,8 +500,8 @@ def typedsl_loader(self, inner, ref_scope):
# type: (TypeDef, Union[int, None]) -> TypeDef
return self.declare_type(
TypeDef(
- f"typedsl_{inner.name}_{ref_scope}",
- f"_TypeDSLLoader({inner.name}, {ref_scope})",
+ f"typedsl_{self.safe_name(inner.name)}_{ref_scope}",
+ f"_TypeDSLLoader({self.safe_name(inner.name)}, {ref_scope})",
)
)
diff --git a/schema_salad/schema.py b/schema_salad/schema.py
index 23874d09..cf5e03ad 100644
--- a/schema_salad/schema.py
+++ b/schema_salad/schema.py
@@ -376,13 +376,13 @@ def validate_doc(
except ClassValidationException as exc1:
errors = [
ClassValidationException(
- f"tried `{name}` but", sourceline, [exc1]
+ f"tried `{validate.friendly(name)}` but", sourceline, [exc1]
)
]
break
except ValidationException as exc2:
errors.append(
- ValidationException(f"tried `{name}` but", sourceline, [exc2])
+ ValidationException(f"tried `{validate.friendly(name)}` but", sourceline, [exc2])
)
objerr = "Invalid"
diff --git a/schema_salad/validate.py b/schema_salad/validate.py
index d5cdb57c..71c4cb84 100644
--- a/schema_salad/validate.py
+++ b/schema_salad/validate.py
@@ -41,10 +41,12 @@ def validate(
LONG_MIN_VALUE = -(1 << 63)
LONG_MAX_VALUE = (1 << 63) - 1
+def avro_shortname(name: str) -> str:
+ return name.split(".")[-1]
def friendly(v): # type: (Any) -> Any
if isinstance(v, avro.schema.NamedSchema):
- return v.name
+ return avro_shortname(v.name)
if isinstance(v, avro.schema.ArraySchema):
return "array of <{}>".format(friendly(v.items))
elif isinstance(v, avro.schema.PrimitiveSchema):
@@ -52,7 +54,7 @@ def friendly(v): # type: (Any) -> Any
elif isinstance(v, avro.schema.UnionSchema):
return " or ".join([friendly(s) for s in v.schemas])
else:
- return v
+ return avro_shortname(v)
def vpformat(datum): # type: (Any) -> str
@@ -139,7 +141,7 @@ def validate_ex(
"value is a {} but expected a string".format(type(datum).__name__)
)
return False
- if expected_schema.name == "Expression":
+ if expected_schema.name == "w3id.org.cwl.cwl.Expression":
if "$(" in datum or "${" in datum:
return True
if raise_ex:
@@ -279,7 +281,7 @@ def validate_ex(
raise ValidationException(f"Missing '{f.name}' field")
else:
return False
- if expected_schema.name != d:
+ if avro_shortname(expected_schema.name) != d:
if raise_ex:
raise ValidationException(
"Expected class '{}' but this is '{}'".format(
diff --git a/setup.py b/setup.py
index e9054760..5e38e87f 100644
--- a/setup.py
+++ b/setup.py
@@ -98,7 +98,7 @@
setup(
name="schema-salad",
- version="7.1", # update the VERSION prefix in the Makefile as well 🙂
+ version="8.0", # update the VERSION prefix in the Makefile as well 🙂
description="Schema Annotations for Linked Avro Data (SALAD)",
long_description=open(README).read(),
long_description_content_type="text/x-rst",