小编Jas*_*mbs的帖子

标记 Pytest 夹具而不是使用该夹具的所有测试

有没有办法在 PyTest 夹具中定义标记?

当我在 pytest.txt 中指定时,我试图禁用慢速测试-m "not slow"

我已经能够禁用单个测试,但不能禁用用于多个测试的固定装置。

我的夹具代码如下所示:

@pytest.fixture()
@pytest.mark.slow
def postgres():
    # get a postgres connection (or something else that uses a slow resource)
    yield conn 
Run Code Online (Sandbox Code Playgroud)

一些测试具有以下一般形式:

def test_run_my_query(postgres):
    # Use my postgres connection to insert test data, then run a test
    assert ...
Run Code Online (Sandbox Code Playgroud)

我在https://docs.pytest.org/en/latest/mark.html更新的链接)中找到了以下评论:

“标记只能用于测试,对灯具没有影响。” 这个评论的原因是固定装置本质上是函数调用并且标记只能在编译时指定?

有没有一种方法可以指定使用特定固定装置(在本例中为 postgres)的所有测试都可以标记为慢,而无需@pytest.mark.slow在每个测试上指定?

pytest

15
推荐指数
1
解决办法
4537
查看次数

推动mercurial repo而不推动subrepos

我正在使用Mercurial 1.6.我有一个带有一些subrepos(11)的回购.我想将父回购推送到默认的远程仓库而不推送子回购.想要这样做的原因包括:

  • 我正在使用SSH repos,并且需要很长时间来建立连接并且不向每个子目录推送任何内容.
  • 我在subrepos中提交我不想传播到远程存储库(尚未).
  • 子目录已经命名了不应该传播到repote repos的分支(并且显然没有办法将分支名称传递给subrepos的push操作).

但是,我一直无法找到实现这一目标的方法.我尝试删除.hgsub和.hgsubstate的内容(没有提交),但仍然坚持推动subrepos.

如何将更改从本地存储库推送到远程存储库并暂时忽略子存取?

mercurial subrepos

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

什么是pycryptodomex,它与pycryptodome有何不同?

今天我看到PySNMP安装了pycryptodomex.这个x名字看起来很可疑而且令人惊讶.

我试图追踪它,但看起来pycryptodomepycryptodomex都归同一个帐户所有并指向同一个Github存储库.

特别是因为加密库是核心安全功能,我怀疑是重复.

这种重复的目的是什么?我可以从公开来源发现这些信息吗?

python fork pycryptodome

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

以编程方式配置Eclipse Installed JRE

我想配置我的Eclipse环境以使用JDK而不是标准JRE.我这样做是因为我使用m2eclipse,这需要JDK中的tools.jar来运行.

我正在使用JDK 1.6.0_16在Windows 7 32位上运行Eclipse 3.5.1.

在我的系统上,我将JDK安装到"C:\ Program Files\Java\jdk"(最新安装的符号链接).

我将-vm选项添加到eclipse.ini以指向JDK

-vm
C:/Program Files/Java/jdk/bin
Run Code Online (Sandbox Code Playgroud)

我已经确认eclipse实际上是从所需的JVM开始的.在配置细节中

eclipse.vm=c:/Program Files/Java/jdk/bin\..\jre\bin\client\jvm.dll
Run Code Online (Sandbox Code Playgroud)

另外,在我的环境中,

JAVA_HOME=c:\Program Files\Java\jdk
Run Code Online (Sandbox Code Playgroud)

但是,在Window |中 偏好| Java | 安装的JRE,列出的唯一JRE是"C:\ Program Files\Java\jre6"中的JRE.这个JRE最终成为运行Maven的那个,所以我的maven构建失败了.

我知道我可以手动将Installed JRE更改为指向JDK,这就是我过去所做的.但是,我想找到一种方法来编写此更改的脚本,以便我可以自动安装开发环境.

这个设置存储在哪里?自动配置Eclipse以将JDK用作唯一安装的JRE的最佳方法是什么?

eclipse

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

确定Windows进程是否具有创建符号链接的权限

我想以编程方式确定当前用户(或进程)是否有权创建符号链接.在Windows(Vista和更高版本)中,如果没有SeCreateSymbolicLinkPrivilege,则无法创建符号链接,默认情况下,此操作仅分配给管理员.如果尝试创建没有此权限的符号链接,则会发生Windows错误1314(客户端未保留所需的权限).

为了演示此限制,我创建了一个Windows的全新安装,以初始管理员帐户登录(通过UAC限制),并且无法在主目录中创建符号链接.

命令提示符表明由于权限不足导致mklink失败

以管理员身份运行命令提示符或禁用UAC后,该命令将无错执行.

根据这篇文章,"代表用户执行的每个进程都有[access]令牌的副本".

所以我创建了一个Python脚本来查询权限.为了方便和后人,我在下面列出了一段摘录.

该脚本背后的想法是枚举所有特权并确定该进程是否具有所需的特权.不幸的是,我发现当前进程实际上并没有所需的权限,即使它可以创建符号链接.

我怀疑问题在于即使当前用户的权限没有明确包含该权限,他的组成员资格确实提供了该权限.

简而言之,我如何确定给定进程是否有权创建符号链接(而不尝试创建符号链接)?最好使用C或C++或Python中的示例,但使用Windows API的任何内容都是合适的.

def get_process_token():
    token = wintypes.HANDLE()
    TOKEN_ALL_ACCESS = 0xf01ff
    res = OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, token)
    if not res > 0: raise RuntimeError("Couldn't get process token")
    return token

def get_privilege_information():
    # first call with zero length to determine what size buffer we need

    return_length = wintypes.DWORD()
    params = [
        get_process_token(),
        TOKEN_INFORMATION_CLASS.TokenPrivileges,
        None,
        0,
        return_length,
        ]

    res = GetTokenInformation(*params)

    # assume we now have the necessary length in return_length

    buffer = …
Run Code Online (Sandbox Code Playgroud)

windows permissions privileges winapi

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

使用类属性在 Java 中格式化字符串

我有一个带有属性和 getter 方法的类:

public Class MyClass
{
  private String myValue = "foo";

  public String getMyValue();
}
Run Code Online (Sandbox Code Playgroud)

我希望能够在格式化字符串中使用 foo 的值,如下所示:

String someString = "Your value is {myValue}."
String result = Formatter.format(someString, new MyClass());
// result is now "Your value is foo."
Run Code Online (Sandbox Code Playgroud)

也就是说,我想要一些像.format上面这样的函数,它采用指定某个对象属性的格式字符串以及具有这些属性的实例,并相应地格式化字符串。

用Java可以实现这个壮举吗?

java string-formatting

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

MongoEngine如何处理索引(创建,更新,删除)?

关于设置Mongo索引的最佳实践问题.Mongoengine是Python ORM包装器,允许您在Document元类中设置索引.

这个元类何时被内省并添加了索引?我可以通过mongoengine Document类构建一个集合,然后在事后添加一个索引吗?

如果我从元类中删除索引,是否会从相应的集合中自动删除索引?

谢谢,

python indexing mongodb mongoengine

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

设置 mongoDB 树莓派

我刚刚从https://github.com/RickP/mongopi安装了 mongopi,主要做了一些调整后它可以正常工作$ sudo chown $USER /data/db。然而,我的 mongo 和 mongod 调用不是持久的PATH=$PATH:/opt/mongo/bin/export PATH但我不会在下一个 ssh 会话中持续。另外如何在启动时使 mongo 初始化?我完成了 github repo 中的所有步骤。

mongodb raspberry-pi

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

如何构建一个像 PostgreSQL 那样对字符串进行排序的 Python 比较器?

这个问题本质上与这个问题相同,除了Python。

我希望查询 PostgreSQL 数据库中按电子邮件地址列排序的行,然后在 Python 中执行依赖于该排序的操作。

我正在查询的数据库正在使用en_US.UTF8排序规则,经过一些测试,我发现该排序规则对于@电子邮件地址中的符号有一些特殊的行为:

mydb=> SELECT '0'  < '@';
 ?column? 
----------
 f
(1 row)

mydb=> SELECT '0'  < '@0';
 ?column? 
----------
 t
(1 row)
Run Code Online (Sandbox Code Playgroud)

这个答案表明@某些排序规则可能会忽略某个符号,但如果是这种情况,我预计t第二个查询会出现 a 。

尽管Python提供了一个语言环境模块,但该模块在某些平台上的行为不一致,因此我似乎无法使用该模块来实现此目的。

根据该报告,我尝试了使用PyICU 包的建议,这似乎很有希望:

>>> import icu
>>> collator = icu.Collator.createInstance()
>>> collator.getLocale()
<Locale: en_US>
>>> collator.getSortKey('0') < collator.getSortKey('@')
False
>>> collator.getSortKey('0') < collator.getSortKey('@0')
False
Run Code Online (Sandbox Code Playgroud)

但正如您所看到的,在最后的比较中,它产生的顺序与 postgres 不同。

我尝试为查询指定不同的排序规则,例如:

SELECT email COLLATE posix FROM mytable …
Run Code Online (Sandbox Code Playgroud)

python postgresql collation

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

如何在py.test中跨测试累积状态

我目前有一个类似于这些的项目和测试.

class mylib:
    @classmethod
    def get_a(cls):
        return 'a'

    @classmethod
    def convert_a_to_b(cls, a):
        return 'b'

    @classmethod
    def works_with(cls, a, b):
        return True

class TestMyStuff(object):
    def test_first(self):
        self.a = mylib.get_a()

    def test_conversion(self):
        self.b = mylib.convert_a_to_b(self.a)

    def test_a_works_with_b(self):
        assert mylib.works_with(self.a, self.b)
Run Code Online (Sandbox Code Playgroud)

使用py.test 0.9.2,这些测试(或类似测试)通过.对于更高版本的py.test,test_conversion和test_a_works_with_b失败并且'TestMyStuff没有属性a'.

我猜这是因为在py.test的后续版本中,为每个被测试的方法创建了一个单独的TestMyStuff实例.

编写这些测试的正确方法是什么,以便可以为序列中的每个步骤提供结果,但是可以(必须)使用先前(成功)测试的状态来执行后续测试?

python testing pytest

4
推荐指数
3
解决办法
3412
查看次数

Powershell和网络路径

我从网络路径调用我的一个脚本.脚本基本上只调用另一个程序并将当前目录作为参数传递给它.

当我传递$ PWD作为参数时,我的程序看到的路径是"Microsoft.PowerShell.Core\FileSystem ::\my_server\public",它当然会失败,因为它需要标准的UNC路径.

我的临时解决方案是简单地做,.Replace("Microsoft.PowerShell.Core\FileSystem::", "")并且它有效,但我想知道将路径从这种"powershell"格式转换为标准UNC的真正方法是什么.

有更好的解决方案吗?

powershell

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

为什么这个datetime子类在Python 3上失败?

我最近惊讶地发现这个代码可以在Python 2.7上运行,但在Python 3上会失败.

import datetime

class MyTime(datetime.datetime):
    def __new__(cls, year):
        ob = datetime.datetime.__new__(cls, year, 1, 1)
        return ob

class MySpecialTime(MyTime):
    def __init__(self, *args, **kwargs):
        super(MySpecialTime, self).__init__(*args, **kwargs)

MyTime(2013)
MySpecialTime(2013)
Run Code Online (Sandbox Code Playgroud)

在Python 3.3上,最后一行崩溃时出现此错误:

Traceback (most recent call last):
  File "file.py", line 13, in <module>
    MySpecialTime(2013)
  File "file.py", line 10, in __init__
    super(MySpecialTime, self).__init__(*args, **kwargs)
TypeError: object.__init__() takes no parameters
Run Code Online (Sandbox Code Playgroud)

Python 2和3之间有什么不同导致此代码仅在3上失败?提示 - 向__init__MyTime 添加和方法可以解决问题.我对纠正错误或编写更好的代码不感兴趣(我已经完成了这两个代码).相反,我想了解为什么会发生这种情况,特别是为什么Python 3.3的行为不同.

python-3.x

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

在Git中,如何解决冲突后创建分支?

我经常发现自己处于这种情况:

  • 从上游存储库中提取更改(暗示合并)
  • 合并导致冲突
  • 解决冲突
  • 决定不提交给当前分支,而是提交给新分支

在最后一步中,我使用git checkout -b new-branch-name,但是在调用该命令后,当前磁头不再引用已拉出的更改。它只有一个父母。它不再是合并。

在执行合并时,如何将合并提交到新分支?

git merge

3
推荐指数
1
解决办法
63
查看次数