问题标签 [monkeypatching]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
998 浏览

javascript - Monkey 修补 CKEditor 以嵌入 YouTube 视频

我正在尝试配置 CKEditor 以便它可以直接嵌入 YouTube 视频......我看到有一个提议的补丁,但我想保持原来的 CKEditor 发行版不变,所以我想知道是否可以“猴子补丁”CKEditor在运行时,如果用户在 Flash 对话框中键入 YouTube URL,则 URL 会被转换为允许嵌入。

我试过这个:

但它不起作用,因为在f代码内部使用this,并且我的“补丁”改变了它......

0 投票
1 回答
1956 浏览

flash - 如何在 Flex 中修改或覆盖 swc 类?

我正在使用 Axiis 项目中的 swc 在我正在处理的项目中显示可视化。我遇到了一个错误,重新编译库 swc 将是一个简单的解决方案,但我只能使用错误版本的 swc。

我有 Axiis 源代码并编译了一个修复了错误的版本,但由于客户端版本限制,我不允许使用它。

有谁知道我如何在我的代码中使用更新的 Actionscript 类/文件,以便它覆盖 swc 类?

0 投票
2 回答
1458 浏览

python - 如何用另一个类的方法装饰(monkeypatch ...)一个Python类?

httplib.HTTPMessage和classes[1]都email.message.Message实现了 RFC822 标头解析的方法。不幸的是,它们有不同的实现[2],并且它们不提供相同级别的功能。

困扰我的一个例子是:

  • httplib.HTTPMessage缺少 中get_filename存在的方法email.Message,该方法使您可以轻松地从Content-disposition: attachment; filename="fghi.xyz"标题中检索文件名;

  • httplib.HTTPMessagehasgetparam和methods 但 AFAIK getplistparseplist它们不是也不能在content-type标头解析之外使用;

  • email.Message有一个通用的get_param方法来解析任何带有参数的 RFC822 标头,例如content-dispositioncontent-type.

因此,我想要 in 的orget_filename方法get_param,但当然,我不能像标准库中那样修补它...... :-qemail.message.Messagehttplib.HTTPMessagehttplib.HTTPMessage

最后,这里是装饰主题... :-)

我成功地创建了一个monkeypatch_http_message函数来装饰httplib.HTTPMessage我缺少的解析方法:

现在我可以这样做:

这里的问题是我从源类中复制了装饰方法代码,我想避免这种情况。

所以,我尝试通过引用源方法来装饰:

但这给了我:

我现在摸不着头脑......如何在不复制源方法的情况下装饰我的班级?

有什么建议么 ?:-)

问候,

乔治·马丁


  1. 在 Python 2.6 中。我不能在生产中使用 2.7 或 3.x。

  2. httplib.HTTPMessage继承自mimetools.Message并且rfc822.Messagewhileemail.Message有自己的实现。

0 投票
2 回答
74 浏览

ruby - 重新定义任何不以下划线开头的 Ruby 方法在理论上是否安全?

例如,如果您真的需要知道对象的 id 是什么,那么在理论上修改Object#object_id是否安全?Object#__id__

背景: object_id的另一个名称是什么?

0 投票
2 回答
3048 浏览

python - 鸭子在python中的属性中打孔

我希望能够将属性http://docs.python.org/library/functions.html#property添加到对象(类的特定实例)。这可能吗?

关于在 python 中打鸭子/猴子补丁的一些其他问题:

向现有对象实例添加方法

Python:在运行时更改方法和属性

更新:delnan 在评论中回答

在python中动态添加@property

0 投票
4 回答
10060 浏览

python - Django“满载”后如何运行任意代码

在我的 Django 环境“完全加载”之后,我需要执行一些相当简单的任务。

更具体地说,我需要做一些事情,比如Signal.disconnect()默认情况下由我的第三方库设置的一些 Django 信号和connect我自己的信号,我需要做一些“猴子补丁”来为来自另一个库的一些 Django 模型添加便利功能。

我一直在我的 Django 应用程序__init__.py文件中做这些事情,这似乎对猴子修补工作正常,但对我的信号断开连接不起作用。问题似乎是时间问题之一——无论出于何种原因,第三方图书馆似乎总是Signal.connect()在我尝试之后调用Signal.disconnect()它。

所以两个问题:

INSTALLED_APPS根据我的应用程序__init__.py模块加载顺序的顺序,我有什么保证吗?

在Django 应用程序完全加载到内存,是否有合适的位置放置需要运行的逻辑?

0 投票
1 回答
1424 浏览

ruby-on-rails-3 - 如何最大限度地减少监控请求的记录?

我的 rails 应用程序每分钟都会对运行状况进行 ping 操作,除非出现错误,否则我希望将它们保留在日志之外。通过在 application_controller.rb 中设置记录器,我可以在 Rails 2.3.5 中做到这一点:

但这在 Rails 3.0.5 中不起作用

我已经能够通过在 Rails::Rack::Dispatch 中对 before_dispatch 和 after_dispatch 进行monkeypatching 来组合一个新的解决方案:

我把补丁放在 config/initializers/monkey_patch.rb

这完全符合我的需要,我在日志中没有看到这个请求:

http://mydomain.com?__no_logging__=true

但所有其他请求仍保留在日志中不受影响

但是仍然存在两个问题:

1.我需要注释掉:

因为它会导致这个错误:

我现在明白这不是问题。我正在使用的 Rails 3.0.5 中不存在有问题的方法“request.filtered_pa​​th”。我无意中从 Rails 3.1.0.beta 复制了我的类,它确实定义了过滤路径。Rails 3.0.5 使用 request.fullpath ,如上所示。

2.我需要注释掉

因为它会导致这个错误:

我通过在上面添加这一行解决了第二个问题

我是猴子补丁的新手,我不知道如何在补丁中定义过滤路径或 Logger::Error。我尝试过其他要求,但还没有运气。

我还想对在我的项目中使用这个猴子补丁的稳健性提出任何建议。有一个更好的方法吗?

我知道有些人不相信更改日志,但我不希望日志中出现所有这些 ping,除非在请求期间出现错误。

0 投票
2 回答
1194 浏览

django - Monkey 修补了 django auth 的登录,现在它的测试失败了

我的应用程序试图用一些基本的审计/日志功能来包装 django.contrib.auth.views 登录和注销视图。我遵循django-axes项目中描述的处方,并在服务器上运行和其他一些测试,它按预期工作,透明而没有问题。

代码如下:

网址:

然而,在我们的构建工作流程中,我们在 django.contrib.auth.tests.views 中遇到了一些问题。

具体来说,这些是在 django.contrib.auth 中失败的测试:

只有这两个测试因包含包装的登录猴子补丁而失败。
似乎 django auth 测试中的 reverse() 调用的行为与未修补函数的行为方式不同。

我们之所以走这条路线来包装日志记录与使用 django 1.3 的新身份验证信号的原因是因为那里提供的日志记录方法只会告诉您是否发生了错误尝试 - 它不会让您访问请求对象记录有关该不当请求的其他信息。在这种情况下修补身份验证表单不会有帮助,因此我们需要包装登录功能。

我的登录功能包装有问题吗?或者,尽管整体功能没有变化,但由于其他副作用导致测试失败,这是否符合预期?

编辑:我正在运行 python 2.6.4,django 1.2.5

0 投票
2 回答
1799 浏览

django - Django 测试:如何存根 model.ForeignKey 属性?

我在 django 中有一个模型,该模型具有另一个模型的外键,在单元测试期间,我想避免两个模型的紧密耦合,并为另一个模型创建一个存根,该存根每次都会返回不同的值。

人为的例子:

上述示例:

现在我想在执行 update_mood() 调用后测试 Wolf().moon 属性,而实际上根本不接触 Moon 模型 - 因为它是一个非常复杂的模型,可以进入各种外部系统以找出它的相位.

通常我会为此使用猴子补丁,但由于 .mood 是一个属性......我不能真正以猴子补丁的方式分配给它。

帮助。

0 投票
1 回答
1752 浏览

gem - Rails 3:如何覆盖 gem 中的方法

我想将一些自定义代码添加到 gem 中的一种方法中。在 Rails 2.3.8 中,我在 config/initializers 目录下添加了一个 .rb 文件,一切正常。

自从搬到 Rail3 之后,以前的工作不再工作了。我尝试在 config/initializers 和 /lib 下添加一个 mongoid_slug.rb,并在 application.rb 中自动加载 /lib 路径。两者都没有工作。

在 mongoid_slug.rb 里面我试过:

然而,两者都失败了。任何人都可以提供一些关于如何在 Rails3 中修补 gem 的提示?谢谢!