小编Geo*_*lin的帖子

如何覆盖类的__dir__方法?

我想改变dir()我班级的输出.通常,对于所有其他对象,通过__dir__在类中定义自己的方法来完成.但如果我为我的班级做这个,那就不叫了.

class X(object):
    def __dir__():
        raise Exception("No!")

>>>dir(X)
['__class__', '__delattr__', '__dict__',....
Run Code Online (Sandbox Code Playgroud)

如何更改dir()课程的输出?

python metaprogramming class

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

页面刷新期间selenium.common.exceptions.StaleElementReferenceException

页面包含一些数据(包含少量行的表).有"刷新"按钮可以重新加载和重绘页面上的一些元素,而无需重新加载静态数据(ajax).

我正在尝试为该页面创建正确的测试,但有时会收到StaleElementReferenceException.

我的代码(python):

from selenium import webdriver
browser=webdriver.Firefox()
browser.get('http://mytisite')
browser.implicitly_wait(10)
browser.find_element_by_id('start').click()
while browser.find_element_by_id('status').text!='Done':
    browser.find_element_by_id('refresh').click()
    for row in browser.find_elements_by_class_name('datarow'):
        if not is_correct(row.text):
           print "incorrect"
    time.sleep(10)
Run Code Online (Sandbox Code Playgroud)

5次迭代中的1次失败就行"if not is_correct(row.text)":

selenium.common.exceptions.StaleElementReferenceException: 
 Message: u'Element not found in the cache - perhaps the page 
 has changed since it was looked up' ; Stacktrace: Method 
 fxdriver.cache.getElementAt threw an error in 
 resource://fxdriver/modules/web_element_cache.js 
Run Code Online (Sandbox Code Playgroud)

主要问题:页面已包含以前的数据,所以我在ajax刷新和webdriver的元素查询之间进行竞争find_elements_by_class_name('datarow').

我怎样才能正确解决ajax refresh和webdriver之间的竞争?谢谢.

selenium webdriver

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

如何使用dpkg-buildpackage清理源代码以重建包?

我正在玩dpkg,但是我遇到了一个相当奇怪的问题:第一个包成功构建后第二次无法构建包.

dpkg-buildpackage -sa
....
dpkg-source: warning: newly created empty file 'build/lib.linux-x86_64-2.7/neutron/api/__init__.py' will not be represented in diff
(repeats 100500 times for different files).
Run Code Online (Sandbox Code Playgroud)

我怎样才能第二次重建deb?

看起来我错过了一些清理命令.

debian packaging dpkg deb

5
推荐指数
3
解决办法
9467
查看次数

在ansible变量中添加变量周围的引号

我的 ansible 剧本之一(enrise.postgresql)有问题。

它接受变量 postgresql_listen_addresses (/etc/postgresql/9.3/main/postgresql.conf 中的listen_addresses 值列表)。

我想使用值ansible_default_ipv4.address,但ansible提供的值不带引号,而postgress希望它带有单引号(如'192.168.0.1')。

我有这样的变量:

postgresql_listen_addresses: '{{ [ ansible_default_ipv4.address ] }}'
Run Code Online (Sandbox Code Playgroud)

当地址不带引号时,postgress 会抱怨不带引号的 IP 地址(语法错误)。

如何在 ansible_default_ipv4.address 的值周围添加引号?

谢谢。

更新:

我能够用这个丑陋的代码解决它。如果有人可以更好,请帮忙。

print_quotes: "'%s'"
postgresql_listen_addresses: [ "{{print_quotes|format(ansible_default_ipv4.address) }}"
Run Code Online (Sandbox Code Playgroud)

postgresql jinja2 ansible

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

缺少 pytest-cov 类声明的测试覆盖率

我正在努力实现 100% 的覆盖率。

我有文件(app/ifaces.py):

import netifaces

class NoIPException(Exception):
    pass

def get_local_ips():
    ...(code here)
Run Code Online (Sandbox Code Playgroud)

我有测试:

import pytest
import mock
import netifaces

from app import ifaces

def test_get_local_ips_normal_case():
....
Run Code Online (Sandbox Code Playgroud)

当我手动运行测试时:

py.test -v --cov app --cov-report term-missing

它报告 100% 的代码覆盖率:app/ifaces 16 0 100%

但是当我将它作为“自运行”添加到测试中时,它报告前六行没有被覆盖:

if __name__ == "__main__":
    import sys
    pytest.main("-v %s --cov app/ifaces.py --cov-report term-missing" % sys.argv[0])
Run Code Online (Sandbox Code Playgroud)

报告:

Name           Stmts   Miss  Cover   Missing
--------------------------------------------
app/ifaces        16      4    75%   1-6
Run Code Online (Sandbox Code Playgroud)

如何添加自运行测试以获得与手动 py.test 执行相同的结果?结果之间有什么区别?为什么 app/ifaces.py 中的 6 行被报告为在第二种情况下未涵盖?

谢谢。

python unit-testing code-coverage pytest

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

如何强制 MagicMock 复制函数签名?

我想为测试对象模拟一些不重要的功能(其他功能) - time.sleep() 等。

我可以用简单的模拟替换它们,这会起作用。但是我希望它报告错误,如果它们被调用的参数数量不正确,没有命名参数等。

有什么办法可以说模拟“如果您的参数列表与给定函数不同,则引发异常”?

我想模拟的函数示例:

def mockme(arg1, arg2):
    pass
Run Code Online (Sandbox Code Playgroud)

我想要的是:

>>> m = mock.CallableMock(signature=mockme)
>>> m(1,2)
<MagicMock name='mockme()' id='140435553563920'>
>>> m(1,2,3)
TypeError: <MagicMock name='mockme()' id='140435553563920'> takes exactly 2 arguments (3 given)
Run Code Online (Sandbox Code Playgroud)

知道如何制作吗?

python testing pytest python-unittest

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

为什么可以在没有分号的情况下定义 Rust 结构?

我正在学习 Rust,结构一章给出了一个;在末尾没有 a 的结构的例子。它可以编译,但我不知道为什么允许这样做。

fn main() {
    struct User {
        username: String,
        email: String,
        sign_in_count: u64,
        active: bool,
    }
}
Run Code Online (Sandbox Code Playgroud)

...实际上,同样的问题也适用于函数。

rust

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

在 Rust 中将结构解包为左值元组

我有以下结构:

struct Pixel{x:f64, y:f64, dx:f64, dy:f64}
Run Code Online (Sandbox Code Playgroud)

我把这个结构作为函数的参数。我想减少打字并解压它:

fn foo(pixel:Pixel){
    let (x, y, dx, dy) = pixel;
}
Run Code Online (Sandbox Code Playgroud)

这段代码无法编译。是否有任何语法糖可以避免无休止的pixel.x,pixel.dx等?我想要一些简单的方法来将结构值“提取”(别名)到我的函数中。我想避免冗长的let x = pixel.x; let dx = pixel.dx等等。

有没有一个简洁的方法来做到这一点?

struct tuples rust

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

如何枚举ansible中的列表?

我有这个结构:

addresses:
 - 192.168.1.1
 - 192.168.2.2
 - 192.168.3.3
Run Code Online (Sandbox Code Playgroud)

我需要在任务中处理它们:

- tasks:
      - name: Iterating
      - template: src=template.j2 dest=/etc/addresses/{{index}}.conf
        with_items: addresses
Run Code Online (Sandbox Code Playgroud)

但我找不到任何方法来填充索引变量(或任何其他类似的技巧).

注意:我知道j2模板中的索引,但我在谈论任务.

ansible ansible-playbook

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

在 Rust 中为 Option&lt;number&gt; 做 max 的惯用方法

我有一个号码Option。我需要用它的最大值和其他一些值来替换它,或者如果我的号码是None.

我写了一个函数来这样做:

fn max(a: Option<u32>, b: u32) -> Option<u32> {
    if a.is_some() {
        Some(std::cmp::max(a.unwrap(), b))
    } else {
        Some(b)
    }
}
Run Code Online (Sandbox Code Playgroud)

但我不能停止认为有一种更好、更简洁的方法可以使用Option. 你能帮助我吗?

optional rust

3
推荐指数
2
解决办法
169
查看次数