filecmp.cmp() cache

Peter Otten __peter__ at web.de
Thu Feb 15 17:43:06 EST 2007


Mattias Brändström wrote:

> On Feb 15, 5:56 pm, Peter Otten <__pete... at web.de> wrote:
>> You can clear the cache with
>>
>> filecmp._cache = {}
>>
>> as a glance into the filecmp module would have shown.
> 
> You are right, a quick glance would have enlighten me. Next time I
> will RTFS first. :-)
> 
>> If you don't want to use the cache at all (untested):
>>
>> class NoCache:
>>     def __setitem__(self, key, value):
>>         pass
>>     def get(self, key):
>>         return None
>> filecmp._cache = NoCache()
>>
> 
> Just one small tought/question. How likely am I to run into trouble
> because of this? I mean, by setting _cache to another value I'm
> mucking about in filecmp's implementation details. Is this generally
> considered OK when dealing with Python's standard library?

I think it's a feature that Python lends itself to monkey-patching, but
still there are a few things to consider:

- Every hack increases the likelihood that your app will break in the next
version of Python.
- You take some responsibility for the "patched" code. It's no longer the
tried and tested module as provided by the core developers. 
- The module may be used elsewhere in the standard library or third-party
packages, and failures (or in the above example: performance degradation)
may ensue.

For a script and a relatively obscure module like 'filecmp' monkey-patching
is probably OK, but for a larger app or a module like 'os' that is heavily
used throughout the standard lib I would play it safe and reimplement.

Peter




More information about the Python-list mailing list