Description

MoinMoin breaks with error:

TypeError: cannot deepcopy this pattern object

Steps to reproduce

  1. update from 1.3.5 to 1.5.0
  2. I also got this only after reinstalling German.zip from SystemPagesSetup. All other wikis that I have (farmconfig installation) work well. Py 2.3.4.

Example

http://wiki.garagies.de/moin.py/SystemPagesSetup

Details

traceback.html

It does not seem to be a permission problem because making all the directories and files world read/write/execute had no effect. -- ThiloPfennig

MoinMoin Version

Release 1.5.0

OS and Version

Gentoo Linux 3.3.4-r1

Python Version

Python version 2.3.4 (#1, Nov 24 2004, 15:51:39)

Server Setup

farmconfig setup

Server Details

Workaround

You don't need this patch if you run Python >= 2.3.5 or >= 2.4.1.

Use this patch for moin 1.5.0 and older Pythons: moin15-384to386.diff

Apply it by:

cd MoinMoin/
patch -p2 <moin15-384to386.diff

The patched code will also be included in moin 1.5.1 when it is released.

Discussion

The copy.py seems to differ between different python versions, see: Python CVS

I need more data on which python version works and which not: -- ThomasWaldmann

This bug is not related to copy.py. Furthermore, reports suggest that it is not related to a specific python version. For me, it looks like a wikidicts race condition. I will try to work around it in the next release. -- AlexanderSchremmer 2006-01-16 09:10:42


I have also been "bitten" by this 'bug' when upgrading to 1.5 (from 1.183, no easy feat!). Both my Windows XP SP1/Python 2.3.4 and my Linux Mandrake 10.1/Python 2.3.4 exhibited the same Deep Copy error described here. The Python changelog for Python 2.3.5 RC1 mentions:

{{{copy.py fixed to first lookup copy from the instance being copied, rather than only looking at the type - this was broken in 2.3.}}}

I extracted the copy.py file from the 2.3.5 tarball and ran a diff between both versions (2.3.4 and 2.3.5). Interestingly enough, some of the function calls shown in the traceback have been changed between versions, so I updated the copy.py in my 2.3.4 installation to the one from 2.3.5 and that fixed the issue on both Windows and Linux. -- MarcCarignan 2024-11-23 10:15:02


Moved from DesktopEdition/DeepcopyError

Trying to reach http://localhost:8080/ yields the following error on Linux (Slackware 10.1 Kernel 2.6.x) and Python 2.4. The wiki was launched from an unmodified extract of 1.5.0rc1 into an ordinary user home directory. It does not seem to be a permission problem because making all the directories and files world read/write/execute had no effect. Also, an installation of the non-desktop version of 1.5.0rc1 served by Apache (on port 80) runs without errors -- MikeEllis

Traceback (most recent call last):
  File "/home/xlrn/moin-desktop/MoinMoin/request.py", line 1041, in run
    self.page.send_page(self, count_hit=1)
  File "/home/xlrn/moin-desktop/MoinMoin/Page.py", line 1165, in send_page
    allow_doubleclick=1, trail=trail,
  File "/home/xlrn/moin-desktop/MoinMoin/wikiutil.py", line 1222, in send_title
    output.append("""<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  File "/home/xlrn/moin-desktop/MoinMoin/theme/__init__.py", line 840, in html_head
    html = [
  File "/home/xlrn/moin-desktop/MoinMoin/theme/__init__.py", line 1107, in guiEditorScript
    if not (page.isWritable() and
  File "/home/xlrn/moin-desktop/MoinMoin/security.py", line 52, in <lambda>
    return lambda pagename, Page=Page, request=request, attr=attr: Page(request, pagename).getACL(request).may(request, self.name, attr)
  File "/home/xlrn/moin-desktop/MoinMoin/wikiacl.py", line 184, in may
    is_group_member = request.dicts.has_member
  File "/home/xlrn/moin-desktop/MoinMoin/request.py", line 170, in getDicts
    dicts.scandicts()
  File "/home/xlrn/moin-desktop/MoinMoin/wikidicts.py", line 392, in scandicts
    self.dictdict[name] = copy.deepcopy(grp)
  File "/usr/lib/python2.4/copy.py", line 161, in deepcopy
    y = copier(x, memo)
  File "/usr/lib/python2.4/copy.py", line 289, in _deepcopy_inst
    state = deepcopy(state, memo)
  File "/usr/lib/python2.4/copy.py", line 161, in deepcopy
    y = copier(x, memo)
  File "/usr/lib/python2.4/copy.py", line 252, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)
  File "/usr/lib/python2.4/copy.py", line 172, in deepcopy
    y = copier(memo)
TypeError: cannot deepcopy this pattern object

Hmm, I cannot think of any reason why this should happen besides a quirk because of thread-unsafety (that code is known to break because of that). Can you try to start from scratch (re-extract it) and see if it happens again? If it still happens, edit /home/xlrn/moin-desktop/MoinMoin/wikidicts.py and put into line 392 the following string: "import pprint; pprint.pprint(grp)". Then safe the output into a file (by redirecting stdin for example) and attach it here.

  bash-3.00$ python moin.py 
Loading ...
MoinMoin - 1.5.0rc1 [patch-354; DesktopEdition Release 1.5.0rc1-1]

Serving on localhost:8080
<MoinMoin.wikidicts.Group instance at 0x407ca94c>
<MoinMoin.wikidicts.Group instance at 0x407ca8ac>
<MoinMoin.wikidicts.Group instance at 0x407ca62c>
<MoinMoin.wikidicts.Group instance at 0x407ca8ec>
localhost - - [04/Jan/2006 12:59:13] "GET /FrontPage?action=show HTTP/1.1" 200 -

I also found that putting a try/except TypeError around line 392 cures the problem, but that's obviously a hack. --MikeEllis

(outdenting) The 4 group objects for which deepcopy is raising a TypeError are SystemPagesInEnglishGroup, MoinPagesEditorGroup, SystemPagesGroup and AutoAdminGroup. The only pattern object I see defined in the class Group is the regex. I tried moving that into the initFromText() method so as not to create an attribute in the class instance. Doing that had no effect, so it must not be the regex that's choking deepcopy(). Any further suggestions? Thanks --MikeEllis

I was able to reproduce the problem on a second linux box, also running Python 2.4. Upgrading to Python 2.4.2 cured the problem on both systems. --MikeEllis

I've also ran into this but with Python 2.3.4 (and I don't have rights to upgrade Python either) and MoinMoin 1.5.0 (release). There was something funny about this though: I run two wikis on the same server, and on one of them all requests failed with this error, and the other wiki worked fine. I didn't have time to properly investigate this so I just did the same try/except hack as MikeEllis describes above. -- TomiJunnila 2006-01-08 21:19:04

I got that same problem on a brand new installation of MoinMoin 1.5 (release) on Solaris 10/Intel default install, which comes with Python 2.3.3. I use Standalone Mode. -- CĂ©dricBerger 2006-01-15 17:19:00

It does not need 2.4. I do use 2.3.5 and do not see such a problem with the latest DE-1.5.0-1. What is the cookery book to get it (step by step). -- ReimarBauer 2006-01-15 18:59:15

I can confirm that the bug occurs with Python version 2.3.4, and can be fixed by upgrading to Python 2.4.2. -- PhilPishioneri

Plan


CategoryMoinMoinBugFixed

MoinMoin: MoinMoinBugs/DeepCopyError (last edited 2007-10-29 19:06:34 by localhost)