[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.python

Altering imported modules

Tro

3/1/2008 11:56:00 PM

Hi, list.

I've got a simple asyncore-based server. However, I've modified the asyncore
module to allow me to watch functions as well as sockets. The modified
asyncore module is in a specific location in my project and is imported as
usual from my classes.

Now I'd like to use the tlslite library, which includes an asyncore mixin
class. However, tlslite imports "asyncore", which doesn't include my own
modifications.

I'd like to know if it's possible to make tlslite load *my* asyncore module
without changing any of the tlslite code.

Thanks,
Tro
5 Answers

Floris Bruynooghe

3/4/2008 4:11:00 PM

0

On Mar 1, 11:56 pm, Tro <trowo...@gmail.com> wrote:
> I'd like to know if it's possible to make tlslite load *my* asyncore module
> without changing any of the tlslite code.

the pkgutil module might be helpful, not sure though as I've never
used it myself.

http://blog.doughellmann.com/2008/02/pymotw-pk... is a fairly
detailed look at what pkgutil can do.

Regards
Floris

Tro

3/5/2008 6:15:00 AM

0

On Tuesday 04 March 2008, Floris Bruynooghe wrote:
> On Mar 1, 11:56 pm, Tro <trowo...@gmail.com> wrote:
> > I'd like to know if it's possible to make tlslite load *my* asyncore
> > module without changing any of the tlslite code.
>
> the pkgutil module might be helpful, not sure though as I've never
> used it myself.
>
> http://blog.doughellmann.com/2008/02/pymotw-pk... is a fairly
> detailed look at what pkgutil can do.

Thanks, that's neat.

Tro

Bruno Desthuilliers

3/5/2008 12:31:00 PM

0

Tro a écrit :
> Hi, list.
>
> I've got a simple asyncore-based server. However, I've modified the asyncore
> module to allow me to watch functions as well as sockets. The modified
> asyncore module is in a specific location in my project and is imported as
> usual from my classes.
>
> Now I'd like to use the tlslite library, which includes an asyncore mixin
> class. However, tlslite imports "asyncore", which doesn't include my own
> modifications.
>
> I'd like to know if it's possible to make tlslite load *my* asyncore module
> without changing any of the tlslite code.

Not sure this apply to your case (depends on how asyncore is implemented
and the exact "modifications"), but monkeypatching is a possible solution.

http://en.wikipedia.org/wiki/Mo...
http://wiki.zope.org/zope2/M...
http://mail.python.org/pipermail/python-dev/2008-January/0...


HTH

Tro

3/6/2008 8:29:00 PM

0

On Wednesday 05 March 2008, Bruno Desthuilliers wrote:
> Tro a écrit :
> > Hi, list.
> >
> > I've got a simple asyncore-based server. However, I've modified the
> > asyncore module to allow me to watch functions as well as sockets. The
> > modified asyncore module is in a specific location in my project and is
> > imported as usual from my classes.
> >
> > Now I'd like to use the tlslite library, which includes an asyncore mixin
> > class. However, tlslite imports "asyncore", which doesn't include my own
> > modifications.
> >
> > I'd like to know if it's possible to make tlslite load *my* asyncore
> > module without changing any of the tlslite code.
>
> Not sure this apply to your case (depends on how asyncore is implemented
> and the exact "modifications"), but monkeypatching is a possible solution.
>
> http://en.wikipedia.org/wiki/Mo...
> http://wiki.zope.org/zope2/M...
> http://mail.python.org/pipermail/python-dev/2008-January/0...

Ooh. I didn't know this technique had a name. But that's basically how I'm
modifying the built-in asyncore in my own class. I override its poll() and
poll2() methods to do something extra.

However, the issue with tlslite is that it imports the regular asyncore
instead of the one I wrote, which means that I'd have to somehow monkeypatch
its "import" statement. I'm guessing that means simply monkeypatching both
the original asyncore module AND the tlslite module's asyncore attribute with
my own version.

Thanks,
Tro

bruno.desthuilliers@gmail.com

3/7/2008 10:24:00 AM

0

On 6 mar, 21:29, Tro <trowo...@gmail.com> wrote:
> On Wednesday 05 March 2008, Bruno Desthuilliers wrote:
>
>
>
> > Tro a écrit :
(snip)
> > > I'd like to know if it's possible to make tlslite load *my* asyncore
> > > module without changing any of the tlslite code.
>
> > Not sure this apply to your case (depends on how asyncore is implemented
> > and the exact "modifications"), but monkeypatching is a possible solution.
>
> >http://en.wikipedia.org/wiki/Mo...
> >http://wiki.zope.org/zope2/M...
> >http://mail.python.org/pipermail/python-dev/2008-January/0...
>
> Ooh. I didn't know this technique had a name. But that's basically how I'm
> modifying the built-in asyncore in my own class. I override its poll() and
> poll2() methods to do something extra.
>
> However, the issue with tlslite is that it imports the regular asyncore
> instead of the one I wrote,

One of us must be missing something here. The monkeypatch way is:

# -- mypatch.py --
import BaseModule
# backup original if we want to call it
_original_something = BaseModule.something

def my_patched_something(args):
my_code_here_doing_stuff
# eventually
_original_something(args)
more_code_here

BaseModule.something = my_patched_something

# -- main.py --

import mypatch
# From now on, any other module calling
# BaseModule.something will call my_patched_something.

import other_module_using_BaseModule

app_code_here


> which means that I'd have to somehow monkeypatch
> its "import" statement. I'm guessing that means simply monkeypatching both
> the original asyncore module AND the tlslite module's asyncore attribute with
> my own version.

Unless there are some really strange things happening in tlslite and
asyncore, if you import your monkeypatch before importing tlslite, you
shouldn't have to touch anything in tlslite. Which is the whole point
of monkeypatching.