問題タブ [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 動画を埋め込む

YouTubeの動画を直接埋め込めるようにCKEditorを設定しようとしています...提案されたパッチがあるのを見ましたが、元の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 - Pythonクラスを別のクラスのメソッドで装飾(モンキーパッチ...)する方法は?

httplib.HTTPMessageおよびemail.message.Messageclasses[1]は、RFC822ヘッダー解析のメソッドを実装します。残念ながら、それらには異なる実装があり[2]、同じレベルの機能を提供していません。

私を悩ませている1つの例はそれです:

  • httplib.HTTPMessageに存在するget_filenameメソッドがありません。これにより、ヘッダーemail.Messageからファイル名を簡単に取得できます。Content-disposition: attachment; filename="fghi.xyz"

  • httplib.HTTPMessagegetparamgetplistおよびメソッドがありますが、AFAIKですが、ヘッダー解析parseplistの外部では使用できません。content-type

  • email.Messageまたはget_paramなどのパラメータを使用してRFC822ヘッダーを解析する一般的なメソッドがあります。content-dispositioncontent-type

したがって、get_filenameまたはget_paramのメソッドが必要email.message.Messageですhttplib.HTTPMessageが、もちろん、httplib.HTTPMessage標準ライブラリにあるため、パッチを適用することはできません...:-q

そして最後に、ここにデコレータの主題があります... :-)

不足している解析メソッドでmonkeypatch_http_messageを装飾する関数を正常に作成しました。httplib.HTTPMessage

今私はすることができます:

ここでの問題は、装飾メソッドのコードをソースクラスから文字通りコピーしたことです。これは避けたいと思います。

そこで、ソースメソッドを参照して装飾を試みました。

しかし、それは私に与えます:

私は今頭を悩ませています...文字通りソースメソッドをコピーせずにクラスを装飾するにはどうすればよいですか?

助言がありますか ?:-)

よろしく、

ジョージ・マーティン


  1. Python2.6の場合。本番環境では2.7も3.xも使用できません。

  2. httplib.HTTPMessageから継承しmimetools.Message、独自の実装がありますrfc822.Messageemail.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: 実行時にメソッドと属性を変更する

更新:コメントでデルナンが回答

Pythonで@propertyを動的に追加する

0 投票する
4 に答える
10060 参照

python - Djangoが「完全にロードされた」後に任意のコードを実行する方法

Django環境が「完全にロード」された後、いくつかの非常に単純なタスクを実行する必要があります。

具体的にはSignal.disconnect()、サードパーティのライブラリによってデフォルトで設定されているDjango Signalsやconnect独自のSignalsなどを実行する必要があります。また、別のライブラリのDjangoモデルに便利な機能を追加するために、 「モンキーパッチ」を実行する必要があります。

私はDjangoアプリの__init__.pyファイルでこのようなことを行ってきました。これはモンキーパッチでは正常に機能しているようですが、Signalの切断では機能しません。問題はタイミングの1つであるように思われます。何らかの理由で、Signal.connect()私が試した後、サードパーティライブラリは常にそれを呼び出してSignal.disconnect()いるようです。

したがって、2つの質問:

INSTALLED_APPSアプリの__init__.pyモジュールが読み込まれる順序に基づく保証はありますか?

Djangoアプリが完全にメモリにロードされたに実行する必要があるロジックを配置する適切な場所はありますか?

0 投票する
1 に答える
1424 参照

ruby-on-rails-3 - 監視リクエストのロギングを最小限に抑えるにはどうすればよいですか?

私の Rails アプリは、ヘルス チェックのために毎分 ping されます。エラーが発生しない限り、これらをログから除外したいと考えています。Rails 2.3.5 では、application_controller.rb でこれを使用してロガーを設定することで、これを行うことができました。

しかし、これは Rails 3.0.5 では機能しません。

Rails::Rack::Dispatch で before_dispatch と after_dispatch をモンキーパッチすることで、新しいソリューションをまとめることができました。

config/initializers/monkey_patch.rb にパッチを置きました

これは必要に応じて正確に機能します。ログにこの要求が表示されません。

http://mydomain.com?__no_logging__=true

ただし、他のすべてのリクエストは影響を受けずにログに残ります

しかし、まだ 2 つの問題があります。

1.コメントアウトする必要がありました:

このエラーが発生するため:

これで問題ないことがわかりました。問題のあるメソッド「request.filtered_pa​​th」は、私が使用している Rails 3.0.5 には存在しません。私はうっかり自分のクラスを Rails 3.1.0.beta からコピーしましたが、これはfiltered_pa​​th を定義しています。Rails 3.0.5 は、上記のように request.fullpath を使用します。

2.コメントアウトする必要がありました

このエラーが発生するため:

上記の行を追加して、この2番目の問題を解決しました

私はモンキーパッチを初めて使用し、パッチでfiltered_pa​​thまたはLogger::Errorを定義する方法を理解できません。他の要件を試しましたが、まだ運がありません。

また、私のプロジェクトでこのモンキー パッチを使用することの堅牢性についてもアドバイスをお願いします。これを行うより良い方法はありますか?

ログの変更を信じていない人がいることは知っていますが、リクエスト中にエラーが発生しない限り、これらすべての ping をログに記録したくありません。

0 投票する
2 に答える
1194 参照

django - モンキーパッチを適用したdjangoauthのログイン、テストが失敗するようになりました

私のアプリは、django.contrib.auth.viewsのログインビューとログアウトビューをいくつかの基本的な監査/ログ機能でラップしようとしています。私はdjango-axesプロジェクトで説明されている処方箋に従っており、サーバーやその他のテストで実行すると、問題なく透過的に期待どおりに機能します。

コードは次のようになります。

URL:

ただし、ビルドワークフローでは、django.contrib.auth.tests.viewsでいくつかの問題が発生します。

具体的には、これらはdjango.contrib.authで失敗するテストです。

ラップされたログインモンキーパッチを含めると、これら2つのテストのみが失敗します。
django authテストのreverse()呼び出しは、パッチが適用されていない関数の動作とは異なる動作をするようです。

ロギングをラップするためにこのルートを使用するのと、django 1.3の新しい認証シグナルを使用するためにこのルートを使用する理由は、そこに提供されているロギングメソッドは、間違った試行が発生した場合にのみ通知するためです。その不適切なリクエストに関する追加情報をログに記録します。その場合、認証フォームにパッチを適用することは役に立たなかったため、ログイン機能をラップする必要があります。

ログイン機能のラップで何か問題がありますか?それとも、全体的な機能に変更がないにもかかわらず、他の副作用のためにテストが失敗した場合に予想されることですか?

編集:私はpython 2.6.4、django1.2.5を実行しています

0 投票する
2 に答える
1799 参照

django - Django テスト:その model.ForeignKey プロパティをスタブする方法は?

別のモデルへの外部キーを持つモデルが django にあり、単体テスト中に 2 つのモデルの密結合を避け、毎回異なる値を返す他のモデルのスタブを作成したいと考えています。

考案された例:

上記の例:

今、私は update_mood() 呼び出しを行った後、Wolf().moon プロパティをテストしたいと思います。Moon モデルには実際にはまったく触れずに、そのフェーズを把握するためにあらゆる種類の外部システムに出て行く非常に複雑なモデルであるためです。 .

通常、これにはモンキー パッチを使用しますが、.mood はプロパティであるため、モンキー パッチの方法で実際に割り当てることはできません。

ヘルプ。

0 投票する
1 に答える
1752 参照

gem - Rails 3: gem でメソッドをオーバーライドする方法

gem のメソッドの 1 つにカスタム コードを追加したいと考えています。Rails 2.3.8 では、config/initializers ディレクトリの下に .rb ファイルを追加し、すべてが完全に機能しました。

Rail3 に移行してから、以前は機能していたものが機能しなくなりました。config/initializers と /lib の下に mongoid_slug.rb を追加して、application.rb の /lib パスを auto_load してみました。どちらも機能しませんでした。

内部 mongoid_slug.rb 私が試した:

それでも、両方とも失敗しました。Rails3 で gem にモンキー パッチを適用する方法について、誰かヒントを教えてください。ありがとう!