标签: monkeypatching

gevent猴子补丁和断点

我一直在玩Gevent,我非常喜欢它.但是我遇到了一个问题.断点没有被击中,调试不起作用(使用Visual Studio Python工具和Eclipse PyDev).monkey.patch_all()调用后会发生这种情况.

这对我来说是一个大问题,不幸的是,这是使用gevent的阻碍.我发现一些线程似乎表明gevent打破了调试,但我想有一个解决方案.

有谁知道如何使调试和断点与gevent和猴子补丁一起工作?

python debugging monkeypatching pydev gevent

18
推荐指数
2
解决办法
3277
查看次数

修补Ruby的基类是否可以接受,例如Fixnum?

我仍然是Ruby的新手(阅读Pickaxe并花费大部分时间irb),现在我知道可以在Ruby中修补类,我想知道什么时候可以接受这样做,特别是它是否可以接受修补Ruby的基类.例如:我在这里回答了另一个Ruby问题,海报想要知道如何减去小时数DateTime.由于DateTime该类似乎没有提供此功能,我发布了一个答案,可以将这些DateTimeFixnum类补丁作为可能的解决方案.这是我提交的代码:

require 'date'

# A placeholder class for holding a set number of hours.
# Used so we can know when to change the behavior
# of DateTime#-() by recognizing when hours are explicitly passed in.

class Hours
   attr_reader :value

   def initialize(value)
      @value = value
   end
end

# Patch the #-() method to handle subtracting hours
# in addition to what it normally does

class DateTime

   alias old_subtract …
Run Code Online (Sandbox Code Playgroud)

ruby monkeypatching

17
推荐指数
3
解决办法
2427
查看次数

是否可以替换(monkeypatch)PHP函数?

你可以用Python做到这一点,但它可以用PHP吗?

>>> def a(): print 1
... 
>>> def a(): print 2
... 
>>> a()
2
Run Code Online (Sandbox Code Playgroud)

例如:

<? function var_dump() {} ?>
Fatal error: Cannot redeclare var_dump() in /tmp/- on line 1
Run Code Online (Sandbox Code Playgroud)

php monkeypatching function

17
推荐指数
3
解决办法
7150
查看次数

如何修改另一个函数接收的XMLHttpRequest响应文本?

我试图修改由我无法修改的函数收到的responseText.这个函数创建了一个我可以附加的XMLHttpRequest,但是我无法以允许我在原始函数接收内容之前修改内容的方式"包装"responseText.

这是完整的原始功能:

function Mj(a, b, c, d, e) {
    function k() {
        4 == (m && 'readyState' in m ? m.readyState : 0) && b && ff(b) (m)
    }
    var m = new XMLHttpRequest;
    'onloadend' in m ? m.addEventListener('loadend', k, !1)  : m.onreadystatechange = k;
    c = ('GET').toUpperCase();
    d = d || '';
    m.open(c, a, !0);
    m.send(d);
    return m
}
function ff(a) {
    return a && window ? function () {
        try {
            return a.apply(this, arguments)
        } catch(b) {
            throw …
Run Code Online (Sandbox Code Playgroud)

javascript ajax monkeypatching xmlhttprequest

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

共轭转置算子".H"在numpy中

在numpy中使用该.T属性获取转置版本是非常方便的ndarray.然而,没有类似的方法来获得共轭转置.Numpy的矩阵类有.H运算符,但不是ndarray.因为我喜欢可读的代码,而且因为我总是懒得写.conj().T,所以我希望这个.H属性永远都可供我使用.如何添加此功能?是否有可能添加它以便每次进口numpy时都可以无脑地使用它?

(类似的问题可以通过询问.I逆运算符.)

python arrays monkeypatching numpy matrix

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

将Google Analytics Cookie转换为本地/会话存储

更新 http://jsfiddle.net/musicisair/rsKtp/embedded/result/


Google Analytics会设置4个Cookie,这些Cookie将与该域的所有请求一起发送(并设置其子域).据我所知,没有服务器实际上直接使用它们; 它们只__utm.gif作为查询参数发送.

现在,显然Google Analytics会对其值进行读取,写入和操作,并且需要将其用于GA跟踪脚本.

所以,我想知道的是,是否有可能:

  • 写完__utm*后将cookie 重写到本地存储ga.js
  • ga.js运行后删除它们
  • ga.js读取之前,将cookie从本地存储重写回cookie表单
  • 重来

或者,猴子补丁ga.js在开始cookie读/写部分之前使用本地存储.

显然,如果我们想要删除__utm*cookie 那么远,我们也希望使用Async的分析变体.

我猜这次投票是因为我没有问一个问题.DOH!

我的问题是:
它可以如上所述完成吗?
如果是这样,为什么还没有这样做?


我有一个默认的HTML/CSS/JS样板模板,可以通过YSlow,PageSpeed和Chrome的审核获得近乎完美的分数.我真的在寻找一种方法来在支持本地存储的浏览器中从Google Analytics中挤出剩余的cookie字节.

javascript cookies google-analytics monkeypatching httpcookie

16
推荐指数
1
解决办法
4983
查看次数

如何模拟装饰功能

出于测试原因,我需要能够模拟在其他地方使用的装饰的内部/原始功能:

在mydecorator.py中:

def my_decorator(f):
    def wrapped_f():
        print "decorated"
        f()
    return wrapped_f


@my_decorator
def function_to_be_mocked():
    print 'original'


def function_to_be_mocked_undecorated():
    print 'original'


def run_decorated():
    function_to_be_mocked()


def run_undecorated():
    decorated_funtion = my_decorator(function_to_be_mocked_undecorated)
    decorated_funtion()
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我有几个版本的原始函数function_to_be_mocked,一个带有装饰器my_decorator,一个带有'裸'.runner函数run_decorated()调用function_to_be_mocked的装饰版本,run_undecorated()调用未修饰版本并"手动"应用装饰器.两者的结果是相同的:

decorated
original
Run Code Online (Sandbox Code Playgroud)

现在我想测试runner函数,但是我需要模拟原始函数function_to_be_mocked,但是还应该修饰模拟版本:

import unittest
import mydecorator
from mock import patch

def mock_function():
    print 'mockified'

class Test(unittest.TestCase):

    @patch('mydecorator.function_to_be_mocked_undecorated')
    def test_undecorated_mocked(self, mock_function_to_be_mocked_undecorated):
        mydecorator.function_to_be_mocked_undecorated = mock_function
        mydecorator.run_undecorated()
        assert 1==0

    @patch('mydecorator.function_to_be_mocked')
    def test_decoratorated_mocked(self, mock_function_to_be_mocked):
        mydecorator.function_to_be_mocked = mock_function
        mydecorator.run_decorated()
        assert 1==0
Run Code Online (Sandbox Code Playgroud)

这对于未修饰版本test_undecorated_mocked的预期效果如下:

decorated
mockified
Run Code Online (Sandbox Code Playgroud)

但装饰版本给出:

mockified
Run Code Online (Sandbox Code Playgroud)

所以装饰师消失了.

是否有可能使装饰版本的工作方式与未修改版本相同,其中装饰器是"手动"应用的?

我试图在装饰器中公开内部函数但没有成功.

我看到了这个问题你如何在单元测试中模拟一个装饰器适用于它的函数?但这对我没有帮助.

python unit-testing monkeypatching mocking decorator

16
推荐指数
1
解决办法
6416
查看次数

如果Ruby和Python都允许猴子修补,为什么在Ruby中更具争议性呢?

在许多讨论中,我听说过人们对语言有所保留的Ruby,猴子修补问题成为他们主要关注的问题之一.

但是,我很少听到在Python上下文中提出的相同论点,尽管在Python语言中也允许这样做.

为什么这个区别?

Python是否包含不同类型的安全措施以最大限度地降低此功能的风险?

ruby python language-features monkeypatching

15
推荐指数
4
解决办法
2470
查看次数

如何修补在Rails中自动加载的代码?

我正在修补一个Rails引擎,例如:

SomeClass.class_eval do
  # ...
end
Run Code Online (Sandbox Code Playgroud)

我第一次访问网站时,至少在开发模式下,它可以工作,但第二次就像我的补丁从未存在过.我认为它是Rails自动重新加载引擎(安装在vendor /中)而不是重新加载我的代码.这是Rails 2.3.

任何想法如何做到这样我的代码也被重新加载?

monkeypatching ruby-on-rails ruby-on-rails-2

15
推荐指数
4
解决办法
8535
查看次数

是否有可能在python3中完全使用Monkey Patch内置`str`

我正在尝试修补python的内置功能str,以便跟踪所有str分配的计数.我遇到了一些问题,并且想知道是否有人能够看到我做错了什么,或者是否可以通过python3中的猴子修补本地实现这一点?(以下在python 2.7.12中工作正常)

$ python
Python 3.5.2 (default, Nov 23 2017, 16:37:01)
[GCC 5.4.0 20160609] on linux
Run Code Online (Sandbox Code Playgroud)

我首先天真地尝试修补str,好像它是一个功能:

def patch_str_allocations():
  old_str = str
  def mystr(*args, **kwargs):
    return old_str(*args, **kwargs)

  builtins.str = mystr


def test():
  logger = logging.getLogger(__name__)
  patch_str_allocations()
  logger.debug(str('test'))
Run Code Online (Sandbox Code Playgroud)

但是当然这会使字符串用于所有类型的操作失败 isinstance

    logger.debug(route)
  File "/usr/lib/python3.5/logging/__init__.py", line 1267, in debug
    self._log(DEBUG, msg, args, **kwargs)
  File "/usr/lib/python3.5/logging/__init__.py", line 1403, in _log
    fn, lno, func, sinfo = self.findCaller(stack_info)
  File "/usr/lib/python3.5/logging/__init__.py", line 1360, in findCaller
    filename = os.path.normcase(co.co_filename)
  File "/home/ubuntu/.virtualenvs/papm/lib/python3.5/posixpath.py", …
Run Code Online (Sandbox Code Playgroud)

python oop monkeypatching python-3.x

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