使用 JSON 可序列化枚举自动生成棉花糖模式

2024-05-03

创建与我的模型相同的棉花糖模式的日子已经一去不复返了。我发现这个优秀的答案 https://stackoverflow.com/a/42892443/4097322这解释了我如何使用简单的装饰器从 SQA 模型自动生成模式,因此我实现了它并替换了已弃用的ModelSchema对于较新的SQLAlchemyAutoSchema:

def add_schema(cls):
    class Schema(SQLAlchemyAutoSchema):
        class Meta:
            model = cls
    cls.Schema = Schema
return cls

这很有效……直到我撞到了一个身上有血迹的模型Enum.

错误:Object of type MyEnum is not JSON serializable

我在网上搜索了一下,发现这个有用的答案 https://stackoverflow.com/a/45026116.

但我想将它实现为装饰器的一部分,以便它也自动生成。换句话说,我想自动覆盖模型中的所有枚举EnumField(TheEnum, by_value=True)当使用生成模式时add_schema装饰器;这样我就不必手动覆盖所有字段。

最好的方法是什么?


我发现最初建议的对枚举类型的支持仅在以下情况下才有效OneOf是唯一存在于的验证类field_details。我添加了一些参数解析(通过寻找基本的方式choices对结果进行字符串化后_repr_args() from OneOf https://marshmallow.readthedocs.io/en/stable/_modules/marshmallow/validate.html#OneOf)来检查验证类,以期使该实现更加通用:

def add_schema(cls):
    class Schema(ma.SQLAlchemyAutoSchema):
        class Meta:
            model = cls

    fields = Schema._declared_fields

    # support for enum types
    for field_name, field_details in fields.items():
        if len(field_details.validate) > 0:
            check = str(field_details.validate[0]._repr_args)
            if check.__contains__("choices") :
                enum_list = field_details.validate[0].choices
                enum_dict = {enum_list[i]: enum_list[i] for i in range(0, len(enum_list))}
                enum_clone = Enum(field_name.capitalize(), enum_dict)
                fields[field_name] = EnumField(enum_clone, by_value=True, validate=validate.OneOf(enum_list))

    cls.Schema = Schema
    return cls

谢谢jgozal对于最初的解决方案,因为我当前的项目确实需要这个领导。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 JSON 可序列化枚举自动生成棉花糖模式 的相关文章

  • 与区域指示符字符类匹配的 python 正则表达式

    我在 Mac 上使用 python 2 7 10 表情符号中的标志由一对表示区域指示符号 https en wikipedia org wiki Regional Indicator Symbol 我想编写一个 python 正则表达式来在
  • 使用特定的类/函数预加载 Jupyter Notebook

    我想预加载一个笔记本 其中包含我在另一个文件中定义的特定类 函数 更具体地说 我想用 python 来做到这一点 比如加载一个配置文件 包含所有相关的类 函数 目前 我正在使用 python 生成笔记本并在服务器上自动启动它们 因为不同的
  • 在 django ORM 中查询时如何将 char 转换为整数?

    最近开始使用 Django ORM 我想执行这个查询 select student id from students where student id like 97318 order by CAST student id as UNSIG
  • Python 中的哈希映射

    我想用Python实现HashMap 我想请求用户输入 根据他的输入 我从 HashMap 中检索一些信息 如果用户输入HashMap的某个键 我想检索相应的值 如何在 Python 中实现此功能 HashMap
  • 将html数据解析成python列表进行操作

    我正在尝试读取 html 网站并提取其数据 例如 我想查看公司过去 5 年的 EPS 每股收益 基本上 我可以读入它 并且可以使用 BeautifulSoup 或 html2text 创建一个巨大的文本块 然后我想搜索该文件 我一直在使用
  • 使用 Python 从文本中删除非英语单词

    我正在 python 上进行数据清理练习 我正在清理的文本包含我想删除的意大利语单词 我一直在网上搜索是否可以使用像 nltk 这样的工具包在 Python 上执行此操作 例如给出一些文本 Io andiamo to the beach w
  • 跟踪 pypi 依赖项 - 谁在使用我的包

    无论如何 是否可以通过 pip 或 PyPi 来识别哪些项目 在 Pypi 上发布 可能正在使用我的包 也在 PyPi 上发布 我想确定每个包的用户群以及可能尝试积极与他们互动 预先感谢您的任何答案 即使我想做的事情是不可能的 这实际上是不
  • Python zmq SUB 套接字未接收 MQL5 Zmq PUB 套接字

    我正在尝试在 MQL5 中设置一个 PUB 套接字 并在 Python 中设置一个 SUB 套接字来接收消息 我在 MQL5 中有这个 include
  • 如何将张量流模型部署到azure ml工作台

    我在用Azure ML Workbench执行二元分类 到目前为止 一切正常 我有很好的准确性 我想将模型部署为用于推理的 Web 服务 我真的不知道从哪里开始 azure 提供了这个doc https learn microsoft co
  • Python beautifulsoup 仅限 1 级文本

    我看过其他 beautifulsoup 得到相同级别类型的问题 看来我的有点不同 这是网站 我正试图拿到右边那张桌子 请注意表的第一行如何展开为该数据的详细细分 我不想要那个数据 我只想要最顶层的数据 您还可以看到其他行也可以展开 但在本例
  • Python,将函数的输出重定向到文件中

    我正在尝试将函数的输出存储到Python中的文件中 我想做的是这样的 def test print This is a Test file open Log a file write test file close 但是当我这样做时 我收到
  • 如何使用 Mysql Python 连接器检索二进制数据?

    如果我在 MySQL 中创建一个包含二进制数据的简单表 CREATE TABLE foo bar binary 4 INSERT INTO foo bar VALUES UNHEX de12 然后尝试使用 MySQL Connector P
  • Docker 中的 Python 日志记录

    我正在 Ubuntu Web 服务器上的 Docker 容器中测试运行 python 脚本 我正在尝试查找由 Python Logger 模块生成的日志文件 下面是我的Python脚本 import time import logging
  • Numpy - 根据表示一维的坐标向量的条件替换数组中的值

    我有一个data多维数组 最后一个是距离 另一方面 我有距离向量r 例如 Data np ones 20 30 100 r np linspace 10 50 100 最后 我还有一个临界距离值列表 称为r0 使得 r0 shape Dat
  • Cython 和类的构造函数

    我对 Cython 使用默认构造函数有疑问 我的 C 类 Node 如下 Node h class Node public Node std cerr lt lt calling no arg constructor lt lt std e
  • 不同编程语言中的浮点数学

    我知道浮点数学充其量可能是丑陋的 但我想知道是否有人可以解释以下怪癖 在大多数编程语言中 我测试了 0 4 到 0 2 的加法会产生轻微的错误 而 0 4 0 1 0 1 则不会产生错误 两者计算不平等的原因是什么 在各自的编程语言中可以采
  • 仅第一个加载的 Django 站点有效

    我最近向 stackoverflow 提交了一个问题 标题为使用mod wsgi在apache上多次请求后Django无限加载 https stackoverflow com questions 71705909 django infini
  • 如何解决 PDFBox 没有 unicode 映射错误?

    我有一个现有的 PDF 文件 我想使用 python 脚本将其转换为 Excel 文件 目前正在使用PDFBox 但是存在多个类似以下错误 org apache pdfbox pdmodel font PDType0Font toUnico
  • Python ImportError:无法导入名称 __init__.py

    我收到此错误 ImportError cannot import name life table from cdc life tables C Users tony OneDrive Documents Retirement retirem
  • 使用for循环时如何获取前一个元素? [复制]

    这个问题在这里已经有答案了 可能的重复 Python 循环内的上一个和下一个值 https stackoverflow com questions 1011938 python previous and next values inside

随机推荐

  • 如何解析使用YUI数据源返回的NULL值

    我正在使用 YUI 数据表和数据源来渲染我的项目之一中的数据 返回的数据恰好为NULL YUI数据源无法解析它 下面是数据源和数据表的声明代码 为了便于阅读 我将每个声明分开 列说明声明 var columnDescription key
  • 在 ASP.NET MVC5 中使用 Ninject 注入实体框架 DbContext

    我刚刚进入依赖注入世界 我有以下自定义 DbContext public partial class SkyTrackerContext DbContext public SkyTrackerContext base Database Se
  • Tensorflow:提要字典错误:您必须为占位符张量提供值

    我有一个错误 我无法找出原因 这是代码 with tf Graph as default global step tf Variable 0 trainable False images tf placeholder tf float32
  • 如何对 Slim 框架应用程序进行单元测试

    我一直在尝试对修改其他人代码的示例进行单元测试 每次我到达测试运行时都没有错误的程度 当我期望它们通过时 我只是遇到相同的失败 网上没有大量文档 我真的不知道还能去哪里 任何人都可以看到我的代码哪里出错了 bootstrap php php
  • 使用 PIL 合并图像时模式不匹配

    我正在传递 jpg 文件的名称 def split image into bands filename img Image open filename data img getdata red d 0 0 0 for d in data L
  • 天气预报算法多样

    目前 英国气象局的预测引发了一场巨大的 风暴 他们预测冬季将是温和 潮湿的冬季 而北爱尔兰的气温却是有记录以来最冷的 地面上有厚厚的积雪 这在 12 月通常很少见 这是我很想尝试的东西 并不是我声称我可以击败他们 而是想知道人们目前正在使用
  • Capistrano 部署:从独角兽开始

    使用 capistrano 进行部署 一切都很顺利 然后当部署 启动 在部署 冷期间 时 它会产生错误 32m2013 03 14 15 03 05 executing deploy start 0m 33mexecuting etc in
  • 如何克服 numpy.unique 的 MemoryError

    我正在使用 Numpy 版本 1 11 1 并且必须处理一个二维数组 my arr shape 25000 25000 所有值都是整数 我需要一个唯一的数组值列表 使用时lst np unique my arr 我正进入 状态 Traceb
  • 如何在c#中打印全尺寸图像

    我正在尝试用 C 打印图像 它是由 Adob e Acrobat 从 PDF 创建的完整 8 5x11 尺寸的 tiff 当我使用下面的代码用 C 打印它时 它垂直打印正确 但水平打印不正确 水平方向被推了大约半英寸 我将图像的原点设置为
  • 在Python中计算矩阵乘以其转置(AA^T)的最快方法

    在Python中将矩阵与其转置 AA T 相乘的最快方法是什么 我认为 NumPy SciPy 没有考虑使用例如时涉及的对称性 np dot or np matmul 得到的矩阵总是对称的 所以我可以想象有一个更快的解决方案 None
  • Java HashMap 与 ArrayList 相比的内存开销

    我想知道java HashMap与ArrayList相比的内存开销是多少 Update 我想提高搜索一大包 600 万以上 相同对象的特定值的速度 因此 我正在考虑使用一个或多个HashMap来代替ArrayList 但我想知道 HashM
  • 反应本机中的“未知命名模块”错误

    我正在使用 React Native 创建一个应用程序 但某些导入会引发标题中的错误 Unknown named module 两个包都会发生这种情况 react native material design and react nativ
  • Excel Power Query:如何将巨大的表格逆透视并转置为可读格式以进行分析

    I have this table that looks similar to this 我想将其改造为如下所示 这个想法是对表进行逆透视 或转置 以便可以将其输入到其他 BI 工具中 并且可以读取以进行分析 我有大约 20 个这样的表 有
  • 从字符串构造简单的 Scala 案例类,严格不使用样板

    我寻求简洁的代码来从字符串 例如 csv 行 初始化简单的 Scala 案例类 case class Person name String age Double case class Book title String author Str
  • CURL请求问题

    我正在尝试验证 paypal pdt 信息 我生成了模型表单并提交了它 IT 部门也开始工作并返回了信息 我尝试了同样的事情来发出卷曲请求 但我的当前请求对我来说返回空白 我的模型形式
  • 如何将 logcat 输出复制到剪贴板?

    我正在 Eclipse 中开发 Android 应用程序 如何将 logcat 消息发送到剪贴板 Select the message and press ctrl c You can save it in a text file usin
  • 如何使用 Carbon 获取上个月的第一天和最后一天 - Laravel

    I need First and Last Day of 前一个月使用Carbon Library 我尝试过如下 firstDayofPreviousMonth Carbon now gt startOfMonth gt subMonth
  • 如何提交表单 onkeyup 操作

    我正在尝试保存表格onkeyup行动 我是 jQuery 新手 这可能吗 我很感激任何帮助 编辑1 保存表单意味着保存到服务器 有没有办法增加0 2秒的延迟 此代码将在 keyup 上提交您的表单 element bind keyup fu
  • 如何在Android Studio中启动Dart项目?

    在安装 Flutter 插件的过程中据说还会安装 Dart 插件 所以我把它们都安装了 但是当我打开 文件 gt 新建 菜单时 我看到 新建 Flutter 项目 新建项目 但没有看到有关 Dart 的内容 在 新建项目 对话框中 我仅看到
  • 使用 JSON 可序列化枚举自动生成棉花糖模式

    创建与我的模型相同的棉花糖模式的日子已经一去不复返了 我发现这个优秀的答案 https stackoverflow com a 42892443 4097322这解释了我如何使用简单的装饰器从 SQA 模型自动生成模式 因此我实现了它并替换