Any comments (keepalivemessage)?

rik

Roman Kurakin:
> While working on one project I've met a problem that I can't to specify to
> not touch my configuration files for python package that uses setup.py
> technique. To solve this problem I've implemented the following solution
> that works for me. If this idea worths it, I can make a patch relative 
> needed
> version of python.
>
> Here is the patch I've done for that project (inlined here to show the 
> idea).
>
>
> # HG changeset patch
> # Node ID 286864b5c6a30d0ebba5fc99876013c85c06ab59
> # Parent  fc4dfd9ad64f477a0326995bea7cda12e33ddb39
> Add 'preserve files' functionality to setup() while installation. (clean 
> version)
>
> diff -r fc4dfd9ad64f -r 286864b5c6a3 setup.py
> --- a/setup.py  Wed Dec 13 12:50:46 2006 +0300
> +++ b/setup.py  Mon Dec 18 14:01:34 2006 +0300
> @@ -26,17 +26,66 @@
>  # POSSIBILITY OF SUCH DAMAGE.
>  
>  from distutils.core import setup
> +from distutils.command.install_data import install_data
> +from distutils.util import change_root, convert_path
> +from types import StringType
>  
> -import sys
> +import sys,os
>  pyver = "%d.%d" % sys.version_info[0:2]
> +
> +class smart_install_data(install_data):
> +    def run(self):
> +        # Use revers order for safe removal
> +        for i in range(len(self.data_files)-1, -1, -1):
> +            f = self.data_files[i]
> +            if type(f) is StringType:
> +                continue
> +            if len(f) <= 2:
> +               continue
> +            # Ok, we have additional value, do some magick according it.
> +            if f[2] != "preserve":
> +                # Nope, we do not know it. Just ignore for now.
> +                # Should we scream about it?
> +                continue
> +            # Check a tuple with path to install to and a list of files
> +            dir = convert_path(f[0])
> +            if not os.path.isabs(dir):
> +                dir = os.path.join(self.install_dir, dir)
> +            elif self.root:
> +                dir = change_root(self.root, dir)
> +
> +            if f[1] == []:
> +                # If there are no files listed, the user must be
> +                # trying to create an empty directory, so just ignore
> +                # it.
> +                # Should we scream in this case?
> +                continue
> +
> +            # Check files one by one.
> +            # Use revers order for safe removal
> +            for j in range(len(f[1])-1, -1, -1):
> +                data=f[1][j]
> +                data = convert_path(data)
> +                if not os.path.isfile(data):
> +                    # Again skip dirs.
> +                    continue
> +                dst = os.path.join(dir, os.path.basename(data))
> +                if not os.path.exists(dst):
> +                    continue
> +                del f[1][j]
> +            if len(f[1]) == 0:
> +                del self.data_files[i]
> +
> +        return install_data.run(self)
>  
>  setup(name = 'usher',
>        version = '0.1',
>        package_dir = { 'usher':'python' },
>        packages = ['usher', 'usher.ushercli', 'usher.usherlnm', 
> 'usher.utils', 'usher.usherctrl'],
> +      cmdclass = {'install_data':smart_install_data},
>        data_files = [
>            ('/etc/init.d', ['initscripts/usherctrl', 
> 'initscripts/usherlnm']),
> -          ('/etc/usher', ['configs/usherctrl.config', 
> 'configs/usherlnm.config', 'configs/ushercli.config']),
> +          ('/etc/usher', ['configs/usherctrl.config', 
> 'configs/usherlnm.config', 'configs/ushercli.config'], "preserve"),
>            ("/usr/lib/python%s/site-packages/usher/usherctrl" % pyver, 
> ['python/usherctrl/app.tac']),
>            ("/usr/lib/python%s/site-packages/usher/usherlnm" % pyver, 
> ['python/usherlnm/app.tac'])
>        ]
>
> _______________________________________________
> Distutils-SIG maillist  -  [email protected]
> http://mail.python.org/mailman/listinfo/distutils-sig
>   

_______________________________________________
Distutils-SIG maillist  -  [email protected]
http://mail.python.org/mailman/listinfo/distutils-sig

Reply via email to