标签: monkeypatching

你在哪里猴子修补Django用户模型?

我想从Django中修改用户模型.

我的代码:

from django.db import models

from django.contrib.auth.models import User
User.add_to_class('secret_question', models.CharField(max_length="100"))
User.add_to_class('answer', models.CharField(max_length="100"))
User.add_to_class('DOB', models.DateField())
Run Code Online (Sandbox Code Playgroud)

我在哪里放置此代码以便python manage.py syncdb创建正确的表格?

我尝试了主目录models.py,我尝试了一个应用程序的目录models.py(这两个没有产生正确的表),我尝试将它放在settings.py项目中(错误,无法运行).

python django monkeypatching

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

Ruby:Monkey修补String类

我有点困惑为什么以下代码实际工作:

String.instance_eval do # self is set to String
  [:readlink, :symlink?, :expand_path].each do |method| # self is still String
    define_method(method) do # self is still String
      File.send(method, self) # what exactly is this self?
    end
  end
end
"asdf".expand_path # => "C:/users/some_user/asdf"
Run Code Online (Sandbox Code Playgroud)

我不明白为什么最后一行有效.当每个方法定义的方法体不等同于File.send(method, String)?上述块中没有一个实际发生变化self.唯一更改的行selfString.instance_eval,它会更改selfString.

ruby monkeypatching metaprogramming

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

使用 Django 的 LiveServerTestCase 对视图进行 Monkeypatching

我正在尝试使用 Selenium 为我的应用程序的前端行为编写测试。但是,我尝试测试的页面从 Solr 获取数据,并且我不想启动 Solr 实例来运行测试。

我正在使用 py.test 和py.test-django进行测试,并且尝试对视图进行 Monkeypatch,以便对 Selenium 浏览器发送的数据做出断言。

例如,这是一个我预计会失败的测试:

def test_search(self, live_server, browser, monkeypatch):
    def mockview(request):
        from django.http import HttpResponse
        assert True == False
        return HttpResponse('Test')

    monkeypatch.setattr(project.app.views, 'search', mockview)

    browser.get(live_server.url + reverse('app:search'))
Run Code Online (Sandbox Code Playgroud)

当浏览器尝试加载“app:search”页面时,我预计此操作会失败。相反,它加载页面的正常版本并且测试成功。

有没有办法获得这种行为?或者有更好的方法来进行这些测试吗?

django monkeypatching django-testing pytest

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

PC寄存器上的ARM LDR指令

我在这里理解这个故事:

  • PC寄存器保存指向下一条指令的指针
  • LDR指令将第二个操作数的值加载到第一个操作数中(例如)
    LDR r0, [pc, 0x5678]
    相当于这个"C代码"
    r0 = *(pc + 0x5678)
    
    它是使用基本偏移量解引用的指针.

我的问题是:

我找到了这段代码

LDR PC, [PC,-4]

它被评论为猴子修补等.

我如何理解这段代码

pc = *(pc - 4)

在这种情况下,"pc"寄存器将取消引用前一条指令的地址,并将包含指令的"机器代码"(不是指令的地址),程序将跳转到该无效地址继续执行,可能我们将"分段故障".那么我缺少或不理解?



让我思考的是LDR指令中第二个操作数的括号.据我所知,x86架构上的括号已经取消引用指针,但我无法理解ARM架构中的含义.

mov r1, 0x5678
add r1, pc
mov r0, [r1]

这段代码相当于?

LDR r0, [pc, 0x5678]

assembly patch arm monkeypatching

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

eventlet.greenthread.sleep在猴子修补环境中的VS time.sleep

我们正在运行一个服务器上的事件绿线程和猴子修补一切.我需要定期检查实现wait循环,我想把睡眠放在里面.

之间有什么区别:

eventlet.greenthread.sleep(1) AND time.sleep(1) 
Run Code Online (Sandbox Code Playgroud)

在猴子修补的环境?我想知道猴子补丁是否处理time.sleep

python monkeypatching green-threads eventlet python-2.7

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

MonkeyPatching:PrimeFaces小部件扩展/覆盖

我目前正在使用(工作正常)

PrimeFaces.widget.OverlayPanel.prototype._old_init = PrimeFaces.widget.OverlayPanel.prototype.init;
PrimeFaces.widget.OverlayPanel.prototype.init = function(cfg) 
{
    this._old_init(cfg);
    this.align();
}
Run Code Online (Sandbox Code Playgroud)

但我想使用更具可读性和“ jQuery-ish”的功能,例如完全发明的不现实代码:

PrimeFaces.widget.OverlayPanel.patch(
{
    init: function(cfg) 
    {
        super.init(cfg);
        this.align();
    },

    show: function()
    {
        console.log('blah blah blah');
        super.show();
    }
});
Run Code Online (Sandbox Code Playgroud)

我尝试过,PrimeFaces.widget.Xxx.extend({...})但是在这种情况下,我无法使用super方法。

请记住我对Java语言完全不了解

谢谢

javascript jquery jsf monkeypatching primefaces

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

为什么使用monkeypatch.setenv 而不是os.putenv

pytest 的monkeypatch模块提供了一个setenv函数,Set environment variable name to value.为什么会monkeypatch提供这个?听起来一样os.putenv吗?它提供prepend参数是为了方便,但这似乎是拥有一个用于设置环境变量的新函数的弱理由。

python monkeypatching environment-variables pytest

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

从重新定义的方法调用原始方法

我的问题基于主题 \xe2\x80\x9credefining a single ruby​​ method on a single instance with a lambda\xe2\x80\x9d 的答案

\n\n

如何重新定义方法并在新方法中调用原始定义?some_object\ 类的其他实例不应受到影响。

\n\n
def some_object.some_method\n  # call original `some_object.some_method` here\n  do_something_else\nend\n
Run Code Online (Sandbox Code Playgroud)\n

ruby monkeypatching

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

如何在自定义Object.prototype.xxx函数中获取对象本身?

Object.prototype.getB = function() {

  // how to get the current value a
  return a.b;

};
const a = {b: 'c'};
a.getB();
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我想为所有对象值创建一个函数。我需要获取这个函数中的对象值然后做一些事情。

javascript monkeypatching object

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

使用 testbook 测试 Jupyter notebook 单元时如何修补 input()?

我参与的一个项目使用testbook来测试 Jupyter 笔记本的代码单元。修补工作正常吗?—?除非要测试的代码要求用户输入input(). 我只是不知道如何正确修补它。

使用的版本:Python:3.8.10,测试书:0.4.2

要在 Jupyter 代码单元中测试的代码,标记为name_checking

def fix(text):
    return text.strip().title()

def check(text):
    return len(text) > 1

firstname = input("What's your first name?")
lastname = input("What's your last name?")
fixed_first = fix(firstname)
fixed_last = fix(lastname)
if check(fixed_first) and check(fixed_last):
    print(f"Your name is {fixed_first} {fixed_last}.")
else:
    print("You entered an invalid name.")
Run Code Online (Sandbox Code Playgroud)

尝试 1:测试代码补丁 builtins.input

@testbook(path)
def test_name_checking1(tb): # execute cell tagged "name_checking"
    with tb.patch("builtins.input") as mock_input:
        mock_input.return_value = ["   haRrY   ", " …
Run Code Online (Sandbox Code Playgroud)

python testing monkeypatching jupyter-notebook testbook

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