小编myd*_*mon的帖子

Marshmallow 序列化与父字段嵌套

抱歉,如果之前有人问过这个问题,我实际上找不到解决方案或类似的问题(可能使用了错误的词语)。

我正在更新现有的 Flask API,该 API 使用 marshmallow 和 peewee 从我们无法控制的客户端接收数据(无法更改 JSON 数据格式)。

数据格式是这样的:

{
    "site_id": "0102931",
    "update_date": "2018/02/11-09:33:23",
    "updated_by": "chan1",
    "crc": "a82131cf232ff120aaf00001293f",
    "data": [{"num": 1,
              "id": "09213/12312/1",
              "chain": "chain2",
              "operator": "0000122",
              "op_name": "Fred",
              "oid": "12092109300293"
             },
             {"num": 2,
              "id": "09213/12312/2",
              "chain": "chain1",
              "operator": "0000021",
              "op_name": "Melissa",
              "oid": "8883390393"
             }]           
}
Run Code Online (Sandbox Code Playgroud)

我们对主块中的任何内容都不感兴趣,而是对 site_id 感兴趣,在反序列化以创建模型并存储数据时,必须将其复制到列表中的每个对象中。

这是 peeewee 中的模型:

class production_item(db.Model):
   site_id = TextField(null=False)
   id_prod = TextField(null=False)
   num = SmallIntegerField(null=False)
   chain = TextField(null=False)
   operator = TextField(null=False)
   operator_name = TextField(null=True)
   order_id = …
Run Code Online (Sandbox Code Playgroud)

flask marshmallow

5
推荐指数
1
解决办法
2547
查看次数

使用 pytest、tornado 和 aiopg 进行单元测试失败,任何查询都失败

我有一个在 Python 3.7 + Tornado 5 上运行的 REST API,使用 postgresql 作为数据库,使用带有 SQLAlchemy 核心的 aiopg(通过 aiopg.sa 绑定)。对于单元测试,我使用 py.test 和 pytest-tornado。

只要不涉及对数据库的查询,所有测试都会正常进行,我会得到这个:

运行时错误:任务 cb=[IOLoop.add_future..() at venv/lib/python3.7/site-packages/tornado/ioloop.py:719]> 将 Future 附加到不同的循环

相同的代码在测试中运行良好,到目前为止我能够处理 100 个请求。

这是@auth 装饰器的一部分,它将检查 JWT 令牌的 Authorization 标头,对其进行解码并获取用户数据并将其附加到请求中;这是查询的部分:

                partner_id = payload['partner_id']
                provided_scopes = payload.get("scope", [])
                for scope in scopes:
                    if scope not in provided_scopes:
                        logger.error(
                            'Authentication failed, scopes are not compliant - '
                            'required: {} - '
                            'provided: {}'.format(scopes, provided_scopes)
                        )
                        raise ForbiddenException(
                            "insufficient permissions or wrong user."
                        )
                db = self.settings['db'] …
Run Code Online (Sandbox Code Playgroud)

asynchronous tornado pytest python-3.x aiopg

4
推荐指数
1
解决办法
1313
查看次数

标签 统计

aiopg ×1

asynchronous ×1

flask ×1

marshmallow ×1

pytest ×1

python-3.x ×1

tornado ×1