小编zer*_*dge的帖子

pytest ScopeMismatch 错误:如何正确使用夹具

对于以下代码:

@pytest.fixture(scope="module")
def dummy_article(request, db):
    return mixer.blend("core.article", title="this one price", internal_id=3000)


def test_article_str_method(dummy_article):
    assert (
        str(dummy_article)
        == f"article with ID {dummy_article.internal_id} and title: {dummy_article.title}"
    )
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

ScopeMismatch: You tried to access the 'function' scoped fixture 'db' with a 'module' scoped request object, involved factories
core/tests/test_article_model.py:13:  def dummy_article(request, db)
Run Code Online (Sandbox Code Playgroud)

如果我将夹具更改为 use scope="function",错误就会消失,但这违背了将其用于其他测试而不必为每个测试“设置”的目的。

我怎样才能拥有可db访问范围大于 的装置function

python pytest pytest-django

12
推荐指数
1
解决办法
9055
查看次数

如何告诉 mypy 类装饰器向装饰类添加方法

Python 库pure_protobuf强制其用户使用数据类,用另一个装饰器装饰它们:

# to be clear: these two decorators are library code (external)
@message
@dataclass
class SearchRequest:
    query: str = field(1, default='')
    page_number: int32 = field(2, default=int32(0))
    result_per_page: int32 = field(3, default=int32(0))
Run Code Online (Sandbox Code Playgroud)

@message装饰器为实例分配SearchRequest一个名为的方法dumps

SearchRequest(
    query='hello',
    page_number=int32(1),
    result_per_page=int32(10),
).dumps() == b'\x0A\x05hello\x10\x01\x18\x0A'
Run Code Online (Sandbox Code Playgroud)

在我的应用程序代码中,我有一个特定的用例,我需要传递一个具有该dumps()方法的对象。它可以是pure_protobuf Message像上面这样的实例,也可以是任何其他类型,只要它实现dumps().

对于我自己定义并实现dumps()“接口”的类,它工作得很好,但对于pure_protobuf数据类,它一直抱怨它们没有 attribute dumps()

使这更具挑战性的是我pure_protobuf自己没有定义这些数据类,这些数据类将由我的库的客户定义,所以我不能简单地做一些(愚蠢的)事情,比如:

@message
@dataclass
class SearchRequest:
    query: str = field(1, default='')
    page_number: int32 …
Run Code Online (Sandbox Code Playgroud)

python mypy

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

在ES6中导入包:“无法解析模块说明符“ vue””

尝试按照一些Vue教程进行操作,目前我无法将Vue导入.js文件中,然后将该文件导入到我的index.html。这就是我在我的脚本中导入脚本的方式index.html

<script src="./js/main.js" type="module"></script>
Run Code Online (Sandbox Code Playgroud)

如果我在main.js文件中这样做:

import Vue from 'vue';
Run Code Online (Sandbox Code Playgroud)

我在浏览器控制台中收到以下错误:

未捕获的TypeError:无法解析模块说明符“ vue”。相对引用必须以“ /”、“./”或“ ../”开头。

如果我的导入行为:

import Vue from '../../node_modules/vue';
Run Code Online (Sandbox Code Playgroud)

然后我得到另一个错误:

http:// localhost:63342 / vue-official-tutorial / node_modules / vue net :: ERR_ABORTED 404(未找到)

我究竟做错了什么?

javascript vue.js

10
推荐指数
2
解决办法
8388
查看次数

SwiftUI:动画变化取决于@ObjectBinding

SwiftUI 具有使用 的隐式动画.animate()和使用 的显式动画.withAnimation()。但是,我无法弄清楚如何为图像更改设置动画:

struct ImageViewWidget : View {
  @ObjectBinding var imageLoader: ImageLoader

  init(imageURL: URL) {
    imageLoader = ImageLoader(imageURL: imageURL)
  }

  var body: some View {
    Image(uiImage:
      (imageLoader.data.count == 0) ? UIImage(named: "logo-old")! :  UIImage(data: imageLoader.data)!)
        .resizable()
        .cornerRadius(5)
        .frame(width: 120, height:120)
  }
}
Run Code Online (Sandbox Code Playgroud)

ImageuiImage参数传递的old-logo(预留),如果有中没有数据imageLoader(一BindableObject),并用正确的一个替换它一旦这样异步加载:

class ImageLoader : BindableObject {
  let didChange = PassthroughSubject<Data, Never>()

  var data = Data() {
    didSet {
      didChange.send(data)
    }
  }

  init(imageURL: URL) …
Run Code Online (Sandbox Code Playgroud)

swiftui combine

9
推荐指数
1
解决办法
2567
查看次数

iOS PWA:如何(重新)启用拉动刷新?

Stack Overflow 上有几个问题询问如何禁用下拉刷新,无论是在本机 iOS Safari 浏览器中访问其 Web 应用程序,还是作为独立(主屏幕)应用程序访问它们。

我的问题是如何启用它。不知何故,在我的应用程序中,拉动刷新功能在 Safari 中运行良好,但当应用程序作为独立的主屏幕应用程序打开时则不然。

我想添加所需的任何相关信息,但我不知道要指定什么。这是缩写manifest.json

{
  "name": "x",
  "short_name": "x",
  "description": "x",
  "dir": "auto",
  "id": "https://www.myapp.io/",
  "lang": "en-US",
  "display": "standalone"
}
Run Code Online (Sandbox Code Playgroud)

mobile-safari ios progressive-web-apps

9
推荐指数
1
解决办法
2671
查看次数

Python 和 MS Word:将 .doc 转换为 .docx?

我发现了几个与我相似的问题,但没有一个答案与我需要的很接近。

规格:我正在使用 Python 3 并且没有 MS Word。我的编程机运行的是 OS X,云机也是 linux/ubuntu。

我正在使用python-docx.doc每晚发送给我的文件中提取值。但是,python-docx仅适用于.docx文件,因此我需要先将文件转换为该扩展名。

所以,我有一个.doc文件需要转换为.docx. 此脚本可能必须在云中运行,因此我无法安装任何类型的 Office 或类似 Office 的软件。这能做到吗?

python linux ubuntu automation ms-word

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

如何用Python和lxml抓取这个网页?空列表返回

出于教育目的,我试图用Python和lxml逐步抓取这个页面,从电影名称开始.

从我到目前为止读到的关于lxml上的Python文档和XPath上的W3Schools来看,这段代码应该会让我看到列表中的所有电影片段:

from lxml import html
import requests

page = requests.get('http://www.rottentomatoes.com/browse/dvd-top-rentals/')
tree = html.fromstring(page.text)

movies = tree.xpath('//h3[@class="movieTitle"]/text()')

print movies
Run Code Online (Sandbox Code Playgroud)

基本上,它应该给我文件中任何class具有值为"movieTitle" 的属性的每个h3元素.在运行代码时,我只打印出一个空列表.

我无法弄清楚为什么.

我自己试过,所以我跑了:

movies = tree.xpath('//h3[@class]/text()')

print movies
Run Code Online (Sandbox Code Playgroud)

那么这个应该返回任何具有属性类的H3,但它返回此列表:

['From RT Users Like You!', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
Run Code Online (Sandbox Code Playgroud)

我尝试通过定位其类值("noSpacing center")来定位此列表中的第一个字符串,并成功返回此唯一字符串.所以我确信有一些我误解了lxml/XPath的工作原理.有人能指出我有用的方向吗?提前致谢!

python xpath lxml web-scraping

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

SQLAlchemy:__ init __()需要1个位置参数,但是给出了2个(多对多)

SQLAlchemy无疑是非常强大的,但是文档隐含地假定了许多先验知识和关系的主题,混合backref了新优选的back_populates()方法,我觉得很困惑.

以下模型设计几乎是文档中指南的精确镜像,该文档处理多对多关系关联对象.您可以看到评论仍然与原始文章中的评论相同,我只更改了实际代码.

class MatchTeams(db.Model):
    match_id = db.Column(db.String, db.ForeignKey('match.id'), primary_key=True)
    team_id = db.Column(db.String, db.ForeignKey('team.id'), primary_key=True)
    team_score = db.Column(db.Integer, nullable="True")

    # bidirectional attribute/collection of "user"/"user_keywords"
    match = db.relationship("Match",
                            backref=db.backref("match_teams",
                                            cascade="all, delete-orphan")
                            )
    # reference to the "Keyword" object
    team = db.relationship("Team")


class Match(db.Model):
    id = db.Column(db.String, primary_key=True)

    # Many side of many to one with Round
    round_id = db.Column(db.Integer, ForeignKey('round.id'))
    round = db.relationship("Round", back_populates="matches")
    # Start of M2M

    # association proxy of "match_teams" collection …
Run Code Online (Sandbox Code Playgroud)

python sqlite sqlalchemy flask-sqlalchemy

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

为什么 Celery 会劝阻工人并一起殴打?

从芹菜帮助功能:

> celery worker -h

...

Embedded Beat Options:
  -B, --beat            Also run the celery beat periodic task scheduler. Please note that there must only be
                        one instance of this service. .. note:: -B is meant to be used for development
                        purposes. For production environment, you need to start celery beat separately.
Run Code Online (Sandbox Code Playgroud)

这也出现在文档中

您还可以通过启用 worker -B 选项将 beat 嵌入到 worker 中,如果您永远不会运行多个 worker 节点,这会很方便,但它并不常用,因此不建议用于生产用途:

celery -A proj worker -B

但实际上并没有解释为什么在生产中使用它是“糟糕的”。会喜欢一些见解。

celery celerybeat

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

Django:TypeError - 'QuerySet' 类型的参数不可迭代

所以这个错误很神秘,怎么可能是一个Queryset对象,即使是空的,也不是可迭代的?

这是我看到的罕见错误:

TypeError: argument of type 'QuerySet' is not iterable
Run Code Online (Sandbox Code Playgroud)

这是产生此错误的代码:

artist_object = Artist.objects.get(id=id)
artist_release_groups = artist_object.release_groups.all()
if rg not in artist_release_groups: # this is the line where the error is  happening
    artist_object.release_groups.add(rg)
Run Code Online (Sandbox Code Playgroud)

我不知道这是否相关,但这是在 celery 任务中发生的,并且在 Sentry(异常报告服务)中报告了错误。

我拥有的回溯:

TypeError: argument of type 'QuerySet' is not iterable
  File "celery/app/trace.py", line 382, in trace_task
    R = retval = fun(*args, **kwargs)
  File "celery/app/trace.py", line 641, in __protected_call__
    return self.run(*args, **kwargs)
  File "core/tasks.py", line 234, in refresh_artist_task
    get_apple_release_groups_for_artist(applemusic_id)
  File "celery/local.py", line 191, …
Run Code Online (Sandbox Code Playgroud)

python django

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