Moved conflicting code into 'types' submodule

This commit is contained in:
Joel Collins 2020-01-10 19:44:50 +00:00
parent 9fa403b212
commit 4862c7a474
2 changed files with 66 additions and 62 deletions

View file

@ -1,64 +1,2 @@
# Marshmallow fields
from marshmallow.fields import *
# Marshmallow fields to JSON schema types
# Note: We shouldn't ever need to use this directly. We should go via the apispec converter
from apispec.ext.marshmallow.field_converter import DEFAULT_FIELD_MAPPING
# Extra standard library Python types
from datetime import date, datetime, time, timedelta
from decimal import Decimal
from typing import Dict, List, Tuple, Union
from uuid import UUID
"""
TODO: Use this to convert arbitrary dictionary into its own schema, for W3C TD
First: Convert Python non-builtins to builtins using DEFAULT_BUILTIN_CONVERSIONS
Then match types of each element to Field using DEFAULT_TYPE_MAPPING
Finally convert Fields to JSON using converter (preferred due to extra metadata), or DEFAULT_FIELD_MAPPING
"""
# Python types to Marshmallow fields
DEFAULT_TYPE_MAPPING = {
bool: Boolean,
date: Date,
datetime: DateTime,
Decimal: Decimal,
float: Float,
int: Integer,
str: String,
time: Time,
timedelta: TimeDelta,
UUID: UUID,
dict: Dict,
Dict: Dict,
}
# Functions to handle conversion of common Python types into serialisable Python types
def ndarray_to_list(o):
return o.tolist()
def to_int(o):
return int(o)
def to_float(o):
return float(o)
def to_string(o):
return str(o)
# Map of Python type conversions
DEFAULT_BUILTIN_CONVERSIONS = {
"numpy.ndarray": ndarray_to_list,
"numpy.int": to_int,
"fractions.Fraction": to_float,
}
# Use with [x.__module__+"."+x.__name__ for x in inspect.getmro(type(POSSIBLE_MATCHER))]
# Resulting array will contain strings with the same format as keys in DEFAULT_BUILTIN_CONVERSIONS

View file

@ -0,0 +1,66 @@
# Marshmallow fields to JSON schema types
# Note: We shouldn't ever need to use this directly. We should go via the apispec converter
from apispec.ext.marshmallow.field_converter import DEFAULT_FIELD_MAPPING
from . import fields
# Extra standard library Python types
from datetime import date, datetime, time, timedelta
from decimal import Decimal
from typing import Dict, List, Tuple, Union
from uuid import UUID
"""
TODO: Use this to convert arbitrary dictionary into its own schema, for W3C TD
First: Convert Python non-builtins to builtins using DEFAULT_BUILTIN_CONVERSIONS
Then match types of each element to Field using DEFAULT_TYPE_MAPPING
Finally convert Fields to JSON using converter (preferred due to extra metadata), or DEFAULT_FIELD_MAPPING
"""
# Python types to Marshmallow fields
DEFAULT_TYPE_MAPPING = {
bool: fields.Boolean,
date: fields.Date,
datetime: fields.DateTime,
Decimal: fields.Decimal,
float: fields.Float,
int: fields.Integer,
str: fields.String,
time: fields.Time,
timedelta: fields.TimeDelta,
UUID: fields.UUID,
dict: fields.Dict,
Dict: fields.Dict,
}
# Functions to handle conversion of common Python types into serialisable Python types
def ndarray_to_list(o):
return o.tolist()
def to_int(o):
return int(o)
def to_float(o):
return float(o)
def to_string(o):
return str(o)
# Map of Python type conversions
DEFAULT_BUILTIN_CONVERSIONS = {
"numpy.ndarray": ndarray_to_list,
"numpy.int": to_int,
"fractions.Fraction": to_float,
}
# TODO: Deserialiser with inverse defaults
# TODO: Option to switch to .npy serialisation/deserialisation (or look for a better common array format)
# Use with [x.__module__+"."+x.__name__ for x in inspect.getmro(type(POSSIBLE_MATCHER))]
# Resulting array will contain strings with the same format as keys in DEFAULT_BUILTIN_CONVERSIONS