小编Joh*_*aly的帖子

如何在运行 Django 的 docker-compose 设置中在单元测试中命中 Vscode 断点

我想做的事情看起来很简单,但真正实现却非常困难。我有一个在 docker-compose 环境中运行的 Django 应用程序,我想在 Vscode 中使用断点运行和调试单元测试。

由于这是一个大项目,团队不一定使用 vscode,因此我无法随意添加库(例如 ptvsd)。我希望有一个神奇的配置tasks.jsonlaunch.json可以让事情顺利进行。

我有一个用于 postgres 数据库的容器,一个用于 django,一个用于 redis,所有这些都在 docker-compose.yml 中定义。我可以在终端中运行一个命令来运行测试,它是:

docker-compose run --rm app python manage.py test 
Run Code Online (Sandbox Code Playgroud)

appdjango 应用程序容器在哪里。我希望能够以能够在 vscode 中命中断点的方式运行此命令。

我对launch.json文件的不完整分析如下所示:

docker-compose run --rm app python manage.py test 
Run Code Online (Sandbox Code Playgroud)

和我的tasks.json

{
  "configurations": [{
    "name": "Docker: Python - Django",
    "type": "docker",
    "request": "launch",
    "preLaunchTask": "compose-for-debug",
    "python": {
      "pathMappings": [{
        "localRoot": "${workspaceFolder}",
        "remoteRoot": "/app"
      }],
      "projectType": "django"
    }
  }]
}
Run Code Online (Sandbox Code Playgroud)

我想我需要以某种方式将构建任务转换为 docker compose 任务,但我只是不知道它是如何完成的。在终端中运行容器并以某种方式使 vscode 在启用断点的情况下附加到它们也可能是有意义的。 …

django docker docker-compose visual-studio-code

11
推荐指数
1
解决办法
2200
查看次数

如何使用 FastAPI、SQLalchemy 和 SQLModel 生成 UUID 字段

在 FastAPI 应用程序中创建模型时,我正在努力获取创建 UUID 字段的语法。我正在使用SQLModel

基本上,我的 models.py 文件如下所示:

from datetime import datetime
from typing import Optional
import uuid

from sqlalchemy import Column, DateTime
from sqlalchemy.dialects import postgresql as psql
from sqlmodel import SQLModel, Field


class ModelBase(SQLModel):
    """
    Base class for database models.
    """
    id: Optional[int] = Field(default=None, primary_key=True)
    created_at: datetime = Field(sa_column=Column(DateTime(timezone=True), default=datetime.utcnow))
    updated_at: datetime = Field(sa_column=Column(DateTime(timezone=True),
                                 onupdate=datetime.utcnow, default=datetime.utcnow))


class UUIDModelBase(ModelBase, table=True):
    """
    Base class for UUID-based models.
    """
    uuid: uuid.UUID = Field(sa_column=Column(psql.UUID(as_uuid=True)), default=uuid.uuid4)

Run Code Online (Sandbox Code Playgroud)

上述错误与

AttributeError: 'FieldInfo' object …
Run Code Online (Sandbox Code Playgroud)

python postgresql sqlalchemy fastapi sqlmodel

8
推荐指数
1
解决办法
2万
查看次数

为什么 npm 尝试编译我的代码的旧版本?

我对 npm 和 node.js 完全陌生,所以如果我没有提供正确的细节,请原谅我。我正在为一个网站编写一个插件,该网站使用 npm 中的开箱即用框架。当我愉快地编码时,它工作得很好,但在某些时候它开始尝试编译一个不再存在的文件。

\n\n

我用来npm run start编译我的 html 文件(其中也包含所有 javascript 代码)并收到此错误:

\n\n
\n\n
\xe2\x84\xb9 info Compiler will compile ./src/plugin.html\n\xe2\x84\xb9 info Transpiling with babel\n \xe2\x9c\x96 error Error\n  SyntaxError: unknown: Unexpected token (555:3)\n\n    553 | \n    554 | \n  > 555 | });\n        |    ^\n
Run Code Online (Sandbox Code Playgroud)\n\n

让我伤脑筋的是这个简单的语法错误不存在于./src/plugin.html(我已经四次检查了这个事实)。这显然属于该文件的早期版本。

\n\n

npm 是否有某种缓存会导致它编译旧版本的文件?我注意到,如果删除大部分代码,它会再次编译,但是当我替换代码时,它会再次中断。看起来,如果文件与其缓存版本有些相似,它会尝试编译缓存版本而不是当前版本。

\n\n

我尝试过清除缓存npm --force cache clear但没有效果。

\n\n

有什么建议么?

\n

javascript node.js npm

7
推荐指数
1
解决办法
1万
查看次数

如何修改 Starlette/FastAPI 中 Request 对象的范围字段以进行单元测试

假设我有一个带有基本 get 请求的 FastAPI 路由,如下所示:

@router.get("/reports")
async def get_reports(request: Request) -> Dict:
    return 
Run Code Online (Sandbox Code Playgroud)

我想用以下方法测试它:

def test_method_can_access_request_fields():
    client = TestClient()
    response = client.get("/")
Run Code Online (Sandbox Code Playgroud)

现在,如果您检查request路由中的变量,您将看到一个starlette.requests.request对象。该对象有一个 Dict 字段,request.scope.

我们使用 Mangum 将应用程序作为 AWS 上的 Lambda 提供服务,并且我们的实际应用程序能够接收调用aws.event此对象的字段 ( docs )。我正在尝试弄清楚如何为端点编写测试。

我想我想做的是以某种方式修改传入的字典以使用 TestClientrequest.scope包含此自定义字段。aws.event

有没有办法将某些内容传递到测试配置中,从而将自定义字段传播到对象中Request

python pytest aws-api-gateway starlette fastapi

7
推荐指数
1
解决办法
2095
查看次数

如何使用特定(但已卸载)Python 版本在我的项目目录中创建 Python virtualenv

我是虚拟环境的粉丝,我也喜欢将我的virtualenvs 保留在项目根目录中。这有助于我跟踪它们的位置,并允许我给它们起通用名称,例如.venv.

但我需要一种方法来安装特定版本的 python 以便与我的virtualenvs 一起使用。所有的道路似乎都指向pyenv

除非我误解了如何工作pyenvpyenv-virtualenv工作,否则这个库似乎坚持将我的实际 virtualenv 埋在~/.pyenv文件夹中的某个位置,并给我留下一个.python-version我不想拥有的文件。

有没有一种方法可以方便地安装特定版本的python pyenv,然后在我的项目目录中以传统方式创建我的虚拟环境,从而在pyenv创建虚拟环境后消除我的项目的依赖?

python virtualenv pyenv pyenv-virtualenv

6
推荐指数
1
解决办法
2735
查看次数

Virtualenv 找不到新安装的 Python 版本

我正在运行 Ubuntu 20.04,我想使用 Python 3.10 启动一个项目。我使用了 Python 3.10 的安装指南(这个),使用 deadsnakes PPA 安装它,这很好:

$ python3.10
Python 3.10.5 (main, Jun 11 2022, 16:53:24) [GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 
Run Code Online (Sandbox Code Playgroud)

为了更好的衡量,我什至将我的默认 python 切换到 3.10,使用this,这也有效。

$ python
Python 3.10.5 (main, Jun 11 2022, 16:53:24) [GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 
Run Code Online (Sandbox Code Playgroud)

但我无法构建虚拟环境:

$ virtualenv myenv -p python3.10         
RuntimeError: failed to find interpreter for Builtin discover …
Run Code Online (Sandbox Code Playgroud)

python ubuntu virtualenv python-3.10

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