[Patches] [ python-Patches-1183712 ] package_data chops off first char of default package

SourceForge.net noreply at sourceforge.net
Thu Aug 31 15:26:19 CEST 2006


Patches item #1183712, was opened at 2005-04-15 08:34
Message generated for change (Comment added) made by jimjjewett
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=305470&aid=1183712&group_id=5470

Please note that this message will contain a full copy of the comment thread,
including the initial issue submission, for this request,
not just the latest update.
Category: Distutils and setup.py
Group: Python 2.4
Status: Open
Resolution: None
Priority: 5
Submitted By: Wummel (calvin)
Assigned to: Nobody/Anonymous (nobody)
Summary: package_data chops off first char of default package

Initial Comment:
If the package name is an empty string (ie the default
package), all package_data files have the first
character chopped off.
Attached is a test package pytest.tar.gz where running
python2.4 setup.py build_py
produces this error:
running build_py
creating build
creating build/lib
copying __init__.py -> build/lib
error: can't copy 'ATA': doesn't exist or not a regular
file

Also attached is a fix proposal, though I have tested
this only against the test package.


----------------------------------------------------------------------

Comment By: Jim Jewett (jimjjewett)
Date: 2006-08-31 09:26

Message:
Logged In: YES 
user_id=764593

I think the patch is still missing a case or two.  

plen represents the length of the path prefix to ignore.  

Today's code computes this as (len(src_dir) + 1) where the 
+1 is for the "/" added by os.path.join().  As you found, 
src_dir won't add anything (including the "/") if src_dir 
is empty.  

But it also won't add the "/" if src_dir already ends in "/
", and it won't even add the src_dir if the path is already 
absolute.

I'm not certain that either of these two cases can occur, 
but it would be safer to assume they can.

My suggestion is that the stripping be smarter -- change

"""
            # Strip directory from globbed filenames
            filenames = [
                file[plen:] for file in 
self.find_data_files(package, src_dir)
                ]
"""

to 

"""
            # Strip directory from globbed filenames
            filenames = [
                filetail(name, src_dir) for name in 
self.find_data_files(package, src_dir)
                ]
"""
where filetail is a helper function defined as
"""
def filetail(name, strip_path):
    if name.startswith(strip_path):
        kill=len(strip_path)
        if name[kill] == "/":
            kill +=1
        name=name[kill:]
    return name
"""
with tests
"""
>>> filetail("asdf/bdededf", "asdf")
'bdededf'
>>> filetail("asdf/bdededf", "asdf/")
'bdededf'    
"""



----------------------------------------------------------------------

Comment By: Wummel (calvin)
Date: 2006-05-22 16:13

Message:
Logged In: YES 
user_id=9205

I found it in another Python program (don't remember which
though). So I did not think of this as an undocumented
feature. I tried it and it worked (except the data file
stuff :).

The patch should not break any currently working setup.py
installation, since src_dir is only empty when using ''
(empty string) as package name.

Perhaps a cleaner approach would be to forbid an empty
package name instead of silently accepting it? I am not
sure. At least the documentation should mention that empty
package names are not allowed.


----------------------------------------------------------------------

Comment By: Martin v. Löwis (loewis)
Date: 2006-04-15 04:23

Message:
Logged In: YES 
user_id=21627

Why are you using an empty name as the package name? There
is no default package in Python, so this shouldn't work at all.

----------------------------------------------------------------------

Comment By: Hervé Cauwelier (hcauwelier)
Date: 2005-10-05 07:03

Message:
Logged In: YES 
user_id=1216236

The patch worked well for me, thanks for it!

----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=305470&aid=1183712&group_id=5470


More information about the Patches mailing list