问题列表 - 第18328页

Python:拦截类加载动作

简介:当导入某个python模块时,我希望能够拦截这个动作,而不是加载所需的类,我想加载我选择的另一个类.

原因:我正在研究一些遗留代码.在开始一些增强/重构之前,我需要编写一些单元测试代码.但是,代码会导入某个模块,该模块在单元测试设置中会失败.(由于数据库服务器依赖性)

Pseduo代码:

from LegacyDataLoader import load_me_data
...
def do_something():
   data = load_me_data()
Run Code Online (Sandbox Code Playgroud)

因此,理想情况下,当python在单元测试中使用上面的导入行时,会加载替代类MockDataLoader.

我还在使用2.4.3.我想有一个我可以操纵的导入钩子

编辑

非常感谢到目前为止的答案.他们都非常有帮助.

一种特殊类型的建议是关于操纵PYTHONPATH.它在我的情况下不起作用.所以我将在这里阐述我的具体情况.

原始代码库以这种方式组织

./dir1/myapp/database/LegacyDataLoader.py
./dir1/myapp/database/Other.py
./dir1/myapp/database/__init__.py
./dir1/myapp/__init__.py
Run Code Online (Sandbox Code Playgroud)

我的目标是在Other模块中增强Other类.但是因为它是遗留代码,所以如果不首先将测试套件捆绑在一起,我会感到很自在.

现在我介绍一下这个单元测试代码

./unit_test/test.py
Run Code Online (Sandbox Code Playgroud)

内容很简单:

from myapp.database.Other import Other

def test1():
            o = Other()
            o.do_something()

if __name__ == "__main__":
            test1()
Run Code Online (Sandbox Code Playgroud)

当CI服务器运行上述测试时,测试失败.这是因为类Other使用LegacyDataLoader,而LegacydataLoader无法从CI框建立与数据库服务器的数据库连接.

现在让我们按照建议添加一个假类:

./unit_test_fake/myapp/database/LegacyDataLoader.py
./unit_test_fake/myapp/database/__init__.py
./unit_test_fake/myapp/__init__.py
Run Code Online (Sandbox Code Playgroud)

将PYTHONPATH修改为

export PYTHONPATH=unit_test_fake:dir1:unit_test
Run Code Online (Sandbox Code Playgroud)

现在测试失败了另一个原因

  File "unit_test/test.py", line 1, in <module>
    from myapp.database.Other import Other
ImportError: No module named Other
Run Code Online (Sandbox Code Playgroud)

它与python解析模块中的类/属性的方式有关

python unit-testing

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

在失去焦点时以编程方式关闭NSWindow

我正在制作一个图像选择器,当弹出选择器时,它将显示n×n可选按钮网格.这个按钮网格将包含在NSWindow中,但是如果用户点击屏幕,我希望窗口自动关闭.是否有可以设置的标志,以便当窗口失去焦点时它会自动关闭?

macos cocoa nswindow

6
推荐指数
2
解决办法
3280
查看次数

Django的可疑行动

我在尝试删除上传的图片时遇到了问题.

错误是这样的:

SuspiciousOperation: Attempted access to '/media/artists/12-stones/154339.jpg' denied.
Run Code Online (Sandbox Code Playgroud)

看完后看起来错误是因为它正在寻找错误位置的图像(注意第一个斜杠,/ media /文件系统上不存在)

我的MEDIA_ROOT和MEDIA_URL是:

MEDIA_ROOT = '/home/tsoporan/site/media/'
MEDIA_URL = "/media/
Run Code Online (Sandbox Code Playgroud)

我的模型upload_to参数传递了这个函数:

def get_artist_path(instance, filename):
  return os.path.join('artists', slugify(instance.name), filename)
Run Code Online (Sandbox Code Playgroud)

我的问题是:

1)如何解决此问题以备将来上传?

2)是否可以修复当前图像的路径而无需重新上载?

此致,提图斯

python django

28
推荐指数
3
解决办法
3万
查看次数

在XSD中将元素标记为已弃用

我有一个XSD正在经历从一组元素到另一组元素的转换.在转换过程中,会有代码期望新元素和代码期望旧元素.因此,我需要保留XSD中的旧元素; 我将它们记录为已弃用(在xs:documentation元素中使用自由文本).

有没有办法将元素标记为已弃用,以便xmllint等工具会在有人使用不推荐使用的元素时自动发出警告?

xsd deprecated

25
推荐指数
1
解决办法
7204
查看次数

在Grails中重定向301

我目前使用以下非常繁琐的"servlet样式"方法进行Grails 301 URL重定向:

def action = {
  ...
  if (shouldRedirect) {
    response.status = 301
    response.setHeader("Location", "http://url/to/redirect/to.html")
    render("")
    return false
  }
  ...
}
Run Code Online (Sandbox Code Playgroud)

是否有更清洁,更紧凑的Groovy/Grails'y方式来执行301重定向?

请注意,我所说的是301重定向,而不是使用标准Grails redirect(...)机制可以实现的标准302重定向.

seo grails http-status-code-301

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

Axis2生成的存根是否是线程安全的?

是否通过Axis2线程安全从WSDL生成客户端存根?

当然,"线程安全"不是一个严格定义的术语,所以我至少对以下内容感兴趣:

不同的不同的线程同时访问相同的stub类的实例,用同样有效的行为作为单线程运行?

同一个存根类的单个实例是否可以由不同的线程并发访问,并且在单线程执行中以相同的方式交错相同的有效行为?

您可能还希望使用此处描述的术语(并在此处起源)来更精确地讨论这一术语.

java multithreading axis2 web-services thread-safety

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

有一个好的整数只有行光栅化算法吗?

我一直在努力构建一个简单的3D图形引擎,我正在尝试找到一个好的基于整数的线光栅化算法.(我不是想重新发明轮子,我试图更深入地了解轮子).

是否有任何线光栅化算法不依赖于任何浮点数学?

谢谢.

algorithm graphics rasterizing

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

在内核ASM(NASM汇编程序)中将视频模式设置为1920x1080(HD)或更高

我想在ASM内核中设置视频模式我正在处理视频模式1920x1080或更高(或至少高于VESA中的通常限制).反正有没有这样做,如果有,提供示例代码?

我正在使用NASM来编写内核代码.

video assembly kernel nasm vesa

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

有没有办法在Android SDK模拟器中获得可复制和可管理的调试输出?

我在Android模拟器中生成了一些信息,我能看到的唯一方法就是使用Log类.

但是,您无法从DDMS日志窗口进行复制和粘贴.这真的很烦人,因为我无法在其他应用程序中使用这些信息,例如,无需重新输入.

有没有更好的方法从模拟器中获取调试信息?编写更复杂的应用程序会发生什么?当您需要验证它是否正在将正确的信息写入URL,数据库,文件等时,您会怎么做?

谢谢!

sdk android

9
推荐指数
2
解决办法
2870
查看次数

Python是否有任何for循环等效(不是foreach)

Python的迭代器很棒,但有时候我确实想要一个C风格的循环 - 而不是一个foreach循环.例如,我有一个开始日期和结束日期,我想在该范围内的每一天做一些事情.当然,我可以使用while循环执行此操作:

    current = start
    while current <= finish:
        do_stuff(current)
        current += timedelta(1)
Run Code Online (Sandbox Code Playgroud)

这是有效的,但它是3行而不是1行(在基于C或C的语言中),我经常发现自己忘记编写递增行,特别是如果循环体非常复杂.在Python中有没有更优雅,更不容易出错的方法?

python loops for-loop

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