diff options
| author | ?ric Araujo <merwok@netwok.org> | 2010-08-12 19:13:25 +0200 |
|---|---|---|
| committer | ?ric Araujo <merwok@netwok.org> | 2010-08-12 19:13:25 +0200 |
| commit | 87eae65d05db3b6ed3e6e4f97e0fa9fd3dc4d9e7 (patch) | |
| tree | 43c54adfdcb8b653296aebacdb2e457c6d4b05fd /src | |
| parent | 062c6ff267c64209834f11904d5dfbe7954a497b (diff) | |
| parent | d16289f6f4bc46909ec7b4b3d72a27dac5f14f90 (diff) | |
| download | disutils2-87eae65d05db3b6ed3e6e4f97e0fa9fd3dc4d9e7.tar.gz | |
Merge from Konrad, minus trailing spaces and plus renaming
Diffstat (limited to 'src')
| -rw-r--r-- | src/distutils2/_trove.py | 552 | ||||
| -rw-r--r-- | src/distutils2/dist.py | 4 | ||||
| -rw-r--r--[-rwxr-xr-x] | src/distutils2/mkpkg.py | 931 | ||||
| -rw-r--r-- | src/distutils2/tests/test_util.py | 17 | ||||
| -rw-r--r-- | src/distutils2/util.py | 5 |
5 files changed, 764 insertions, 745 deletions
diff --git a/src/distutils2/_trove.py b/src/distutils2/_trove.py new file mode 100644 index 0000000..a215e9d --- /dev/null +++ b/src/distutils2/_trove.py @@ -0,0 +1,552 @@ +# Temporary helper for mkpkg. + +# XXX get the list from PyPI and cache it instead of hardcoding + +# XXX see if it would be more useful to store it as another structure +# than a list of strings + +all_classifiers = [ + 'Development Status :: 1 - Planning', + 'Development Status :: 2 - Pre-Alpha', + 'Development Status :: 3 - Alpha', + 'Development Status :: 4 - Beta', + 'Development Status :: 5 - Production/Stable', + 'Development Status :: 6 - Mature', + 'Development Status :: 7 - Inactive', + 'Environment :: Console', + 'Environment :: Console :: Curses', + 'Environment :: Console :: Framebuffer', + 'Environment :: Console :: Newt', + 'Environment :: Console :: svgalib', + "Environment :: Handhelds/PDA's", + 'Environment :: MacOS X', + 'Environment :: MacOS X :: Aqua', + 'Environment :: MacOS X :: Carbon', + 'Environment :: MacOS X :: Cocoa', + 'Environment :: No Input/Output (Daemon)', + 'Environment :: Other Environment', + 'Environment :: Plugins', + 'Environment :: Web Environment', + 'Environment :: Web Environment :: Buffet', + 'Environment :: Web Environment :: Mozilla', + 'Environment :: Web Environment :: ToscaWidgets', + 'Environment :: Win32 (MS Windows)', + 'Environment :: X11 Applications', + 'Environment :: X11 Applications :: Gnome', + 'Environment :: X11 Applications :: GTK', + 'Environment :: X11 Applications :: KDE', + 'Environment :: X11 Applications :: Qt', + 'Framework :: BFG', + 'Framework :: Buildout', + 'Framework :: Chandler', + 'Framework :: CubicWeb', + 'Framework :: Django', + 'Framework :: IDLE', + 'Framework :: Paste', + 'Framework :: Plone', + 'Framework :: Pylons', + 'Framework :: Setuptools Plugin', + 'Framework :: Trac', + 'Framework :: TurboGears', + 'Framework :: TurboGears :: Applications', + 'Framework :: TurboGears :: Widgets', + 'Framework :: Twisted', + 'Framework :: ZODB', + 'Framework :: Zope2', + 'Framework :: Zope3', + 'Intended Audience :: Customer Service', + 'Intended Audience :: Developers', + 'Intended Audience :: Education', + 'Intended Audience :: End Users/Desktop', + 'Intended Audience :: Financial and Insurance Industry', + 'Intended Audience :: Healthcare Industry', + 'Intended Audience :: Information Technology', + 'Intended Audience :: Legal Industry', + 'Intended Audience :: Manufacturing', + 'Intended Audience :: Other Audience', + 'Intended Audience :: Religion', + 'Intended Audience :: Science/Research', + 'Intended Audience :: System Administrators', + 'Intended Audience :: Telecommunications Industry', + 'License :: Aladdin Free Public License (AFPL)', + 'License :: DFSG approved', + 'License :: Eiffel Forum License (EFL)', + 'License :: Free For Educational Use', + 'License :: Free For Home Use', + 'License :: Free for non-commercial use', + 'License :: Freely Distributable', + 'License :: Free To Use But Restricted', + 'License :: Freeware', + 'License :: Netscape Public License (NPL)', + 'License :: Nokia Open Source License (NOKOS)', + 'License :: OSI Approved', + 'License :: OSI Approved :: Academic Free License (AFL)', + 'License :: OSI Approved :: Apache Software License', + 'License :: OSI Approved :: Apple Public Source License', + 'License :: OSI Approved :: Artistic License', + 'License :: OSI Approved :: Attribution Assurance License', + 'License :: OSI Approved :: BSD License', + 'License :: OSI Approved :: Common Public License', + 'License :: OSI Approved :: Eiffel Forum License', + 'License :: OSI Approved :: European Union Public Licence 1.0 (EUPL 1.0)', + 'License :: OSI Approved :: European Union Public Licence 1.1 (EUPL 1.1)', + 'License :: OSI Approved :: GNU Affero General Public License v3', + 'License :: OSI Approved :: GNU Free Documentation License (FDL)', + 'License :: OSI Approved :: GNU General Public License (GPL)', + 'License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)', + 'License :: OSI Approved :: IBM Public License', + 'License :: OSI Approved :: Intel Open Source License', + 'License :: OSI Approved :: ISC License (ISCL)', + 'License :: OSI Approved :: Jabber Open Source License', + 'License :: OSI Approved :: MIT License', + 'License :: OSI Approved :: MITRE Collaborative Virtual Workspace License (CVW)', + 'License :: OSI Approved :: Motosoto License', + 'License :: OSI Approved :: Mozilla Public License 1.0 (MPL)', + 'License :: OSI Approved :: Mozilla Public License 1.1 (MPL 1.1)', + 'License :: OSI Approved :: Nethack General Public License', + 'License :: OSI Approved :: Nokia Open Source License', + 'License :: OSI Approved :: Open Group Test Suite License', + 'License :: OSI Approved :: Python License (CNRI Python License)', + 'License :: OSI Approved :: Python Software Foundation License', + 'License :: OSI Approved :: Qt Public License (QPL)', + 'License :: OSI Approved :: Ricoh Source Code Public License', + 'License :: OSI Approved :: Sleepycat License', + 'License :: OSI Approved :: Sun Industry Standards Source License (SISSL)', + 'License :: OSI Approved :: Sun Public License', + 'License :: OSI Approved :: University of Illinois/NCSA Open Source License', + 'License :: OSI Approved :: Vovida Software License 1.0', + 'License :: OSI Approved :: W3C License', + 'License :: OSI Approved :: X.Net License', + 'License :: OSI Approved :: zlib/libpng License', + 'License :: OSI Approved :: Zope Public License', + 'License :: Other/Proprietary License', + 'License :: Public Domain', + 'License :: Repoze Public License', + 'Natural Language :: Afrikaans', + 'Natural Language :: Arabic', + 'Natural Language :: Bengali', + 'Natural Language :: Bosnian', + 'Natural Language :: Bulgarian', + 'Natural Language :: Catalan', + 'Natural Language :: Chinese (Simplified)', + 'Natural Language :: Chinese (Traditional)', + 'Natural Language :: Croatian', + 'Natural Language :: Czech', + 'Natural Language :: Danish', + 'Natural Language :: Dutch', + 'Natural Language :: English', + 'Natural Language :: Esperanto', + 'Natural Language :: Finnish', + 'Natural Language :: French', + 'Natural Language :: German', + 'Natural Language :: Greek', + 'Natural Language :: Hebrew', + 'Natural Language :: Hindi', + 'Natural Language :: Hungarian', + 'Natural Language :: Icelandic', + 'Natural Language :: Indonesian', + 'Natural Language :: Italian', + 'Natural Language :: Japanese', + 'Natural Language :: Javanese', + 'Natural Language :: Korean', + 'Natural Language :: Latin', + 'Natural Language :: Latvian', + 'Natural Language :: Macedonian', + 'Natural Language :: Malay', + 'Natural Language :: Marathi', + 'Natural Language :: Norwegian', + 'Natural Language :: Panjabi', + 'Natural Language :: Persian', + 'Natural Language :: Polish', + 'Natural Language :: Portuguese', + 'Natural Language :: Portuguese (Brazilian)', + 'Natural Language :: Romanian', + 'Natural Language :: Russian', + 'Natural Language :: Serbian', + 'Natural Language :: Slovak', + 'Natural Language :: Slovenian', + 'Natural Language :: Spanish', + 'Natural Language :: Swedish', + 'Natural Language :: Tamil', + 'Natural Language :: Telugu', + 'Natural Language :: Thai', + 'Natural Language :: Turkish', + 'Natural Language :: Ukranian', + 'Natural Language :: Urdu', + 'Natural Language :: Vietnamese', + 'Operating System :: BeOS', + 'Operating System :: MacOS', + 'Operating System :: MacOS :: MacOS 9', + 'Operating System :: MacOS :: MacOS X', + 'Operating System :: Microsoft', + 'Operating System :: Microsoft :: MS-DOS', + 'Operating System :: Microsoft :: Windows', + 'Operating System :: Microsoft :: Windows :: Windows 3.1 or Earlier', + 'Operating System :: Microsoft :: Windows :: Windows 95/98/2000', + 'Operating System :: Microsoft :: Windows :: Windows CE', + 'Operating System :: Microsoft :: Windows :: Windows NT/2000', + 'Operating System :: OS/2', + 'Operating System :: OS Independent', + 'Operating System :: Other OS', + 'Operating System :: PalmOS', + 'Operating System :: PDA Systems', + 'Operating System :: POSIX', + 'Operating System :: POSIX :: AIX', + 'Operating System :: POSIX :: BSD', + 'Operating System :: POSIX :: BSD :: BSD/OS', + 'Operating System :: POSIX :: BSD :: FreeBSD', + 'Operating System :: POSIX :: BSD :: NetBSD', + 'Operating System :: POSIX :: BSD :: OpenBSD', + 'Operating System :: POSIX :: GNU Hurd', + 'Operating System :: POSIX :: HP-UX', + 'Operating System :: POSIX :: IRIX', + 'Operating System :: POSIX :: Linux', + 'Operating System :: POSIX :: Other', + 'Operating System :: POSIX :: SCO', + 'Operating System :: POSIX :: SunOS/Solaris', + 'Operating System :: Unix', + 'Programming Language :: Ada', + 'Programming Language :: APL', + 'Programming Language :: ASP', + 'Programming Language :: Assembly', + 'Programming Language :: Awk', + 'Programming Language :: Basic', + 'Programming Language :: C', + 'Programming Language :: C#', + 'Programming Language :: C++', + 'Programming Language :: Cold Fusion', + 'Programming Language :: Cython', + 'Programming Language :: Delphi/Kylix', + 'Programming Language :: Dylan', + 'Programming Language :: Eiffel', + 'Programming Language :: Emacs-Lisp', + 'Programming Language :: Erlang', + 'Programming Language :: Euler', + 'Programming Language :: Euphoria', + 'Programming Language :: Forth', + 'Programming Language :: Fortran', + 'Programming Language :: Haskell', + 'Programming Language :: Java', + 'Programming Language :: JavaScript', + 'Programming Language :: Lisp', + 'Programming Language :: Logo', + 'Programming Language :: ML', + 'Programming Language :: Modula', + 'Programming Language :: Objective C', + 'Programming Language :: Object Pascal', + 'Programming Language :: OCaml', + 'Programming Language :: Other', + 'Programming Language :: Other Scripting Engines', + 'Programming Language :: Pascal', + 'Programming Language :: Perl', + 'Programming Language :: PHP', + 'Programming Language :: Pike', + 'Programming Language :: Pliant', + 'Programming Language :: PL/SQL', + 'Programming Language :: PROGRESS', + 'Programming Language :: Prolog', + 'Programming Language :: Python', + 'Programming Language :: Python :: 2', + 'Programming Language :: Python :: 2.3', + 'Programming Language :: Python :: 2.4', + 'Programming Language :: Python :: 2.5', + 'Programming Language :: Python :: 2.6', + 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.0', + 'Programming Language :: Python :: 3.1', + 'Programming Language :: Python :: 3.2', + 'Programming Language :: REBOL', + 'Programming Language :: Rexx', + 'Programming Language :: Ruby', + 'Programming Language :: Scheme', + 'Programming Language :: Simula', + 'Programming Language :: Smalltalk', + 'Programming Language :: SQL', + 'Programming Language :: Tcl', + 'Programming Language :: Unix Shell', + 'Programming Language :: Visual Basic', + 'Programming Language :: XBasic', + 'Programming Language :: YACC', + 'Programming Language :: Zope', + 'Topic :: Adaptive Technologies', + 'Topic :: Artistic Software', + 'Topic :: Communications', + 'Topic :: Communications :: BBS', + 'Topic :: Communications :: Chat', + 'Topic :: Communications :: Chat :: AOL Instant Messenger', + 'Topic :: Communications :: Chat :: ICQ', + 'Topic :: Communications :: Chat :: Internet Relay Chat', + 'Topic :: Communications :: Chat :: Unix Talk', + 'Topic :: Communications :: Conferencing', + 'Topic :: Communications :: Email', + 'Topic :: Communications :: Email :: Address Book', + 'Topic :: Communications :: Email :: Email Clients (MUA)', + 'Topic :: Communications :: Email :: Filters', + 'Topic :: Communications :: Email :: Mailing List Servers', + 'Topic :: Communications :: Email :: Mail Transport Agents', + 'Topic :: Communications :: Email :: Post-Office', + 'Topic :: Communications :: Email :: Post-Office :: IMAP', + 'Topic :: Communications :: Email :: Post-Office :: POP3', + 'Topic :: Communications :: Fax', + 'Topic :: Communications :: FIDO', + 'Topic :: Communications :: File Sharing', + 'Topic :: Communications :: File Sharing :: Gnutella', + 'Topic :: Communications :: File Sharing :: Napster', + 'Topic :: Communications :: Ham Radio', + 'Topic :: Communications :: Internet Phone', + 'Topic :: Communications :: Telephony', + 'Topic :: Communications :: Usenet News', + 'Topic :: Database', + 'Topic :: Database :: Database Engines/Servers', + 'Topic :: Database :: Front-Ends', + 'Topic :: Desktop Environment', + 'Topic :: Desktop Environment :: File Managers', + 'Topic :: Desktop Environment :: Gnome', + 'Topic :: Desktop Environment :: GNUstep', + 'Topic :: Desktop Environment :: K Desktop Environment (KDE)', + 'Topic :: Desktop Environment :: K Desktop Environment (KDE) :: Themes', + 'Topic :: Desktop Environment :: PicoGUI', + 'Topic :: Desktop Environment :: PicoGUI :: Applications', + 'Topic :: Desktop Environment :: PicoGUI :: Themes', + 'Topic :: Desktop Environment :: Screen Savers', + 'Topic :: Desktop Environment :: Window Managers', + 'Topic :: Desktop Environment :: Window Managers :: Afterstep', + 'Topic :: Desktop Environment :: Window Managers :: Afterstep :: Themes', + 'Topic :: Desktop Environment :: Window Managers :: Applets', + 'Topic :: Desktop Environment :: Window Managers :: Blackbox', + 'Topic :: Desktop Environment :: Window Managers :: Blackbox :: Themes', + 'Topic :: Desktop Environment :: Window Managers :: CTWM', + 'Topic :: Desktop Environment :: Window Managers :: CTWM :: Themes', + 'Topic :: Desktop Environment :: Window Managers :: Enlightenment', + 'Topic :: Desktop Environment :: Window Managers :: Enlightenment :: Epplets', + 'Topic :: Desktop Environment :: Window Managers :: Enlightenment :: Themes DR15', + 'Topic :: Desktop Environment :: Window Managers :: Enlightenment :: Themes DR16', + 'Topic :: Desktop Environment :: Window Managers :: Enlightenment :: Themes DR17', + 'Topic :: Desktop Environment :: Window Managers :: Fluxbox', + 'Topic :: Desktop Environment :: Window Managers :: Fluxbox :: Themes', + 'Topic :: Desktop Environment :: Window Managers :: FVWM', + 'Topic :: Desktop Environment :: Window Managers :: FVWM :: Themes', + 'Topic :: Desktop Environment :: Window Managers :: IceWM', + 'Topic :: Desktop Environment :: Window Managers :: IceWM :: Themes', + 'Topic :: Desktop Environment :: Window Managers :: MetaCity', + 'Topic :: Desktop Environment :: Window Managers :: MetaCity :: Themes', + 'Topic :: Desktop Environment :: Window Managers :: Oroborus', + 'Topic :: Desktop Environment :: Window Managers :: Oroborus :: Themes', + 'Topic :: Desktop Environment :: Window Managers :: Sawfish', + 'Topic :: Desktop Environment :: Window Managers :: Sawfish :: Themes 0.30', + 'Topic :: Desktop Environment :: Window Managers :: Sawfish :: Themes pre-0.30', + 'Topic :: Desktop Environment :: Window Managers :: Waimea', + 'Topic :: Desktop Environment :: Window Managers :: Waimea :: Themes', + 'Topic :: Desktop Environment :: Window Managers :: Window Maker', + 'Topic :: Desktop Environment :: Window Managers :: Window Maker :: Applets', + 'Topic :: Desktop Environment :: Window Managers :: Window Maker :: Themes', + 'Topic :: Desktop Environment :: Window Managers :: XFCE', + 'Topic :: Desktop Environment :: Window Managers :: XFCE :: Themes', + 'Topic :: Documentation', + 'Topic :: Education', + 'Topic :: Education :: Computer Aided Instruction (CAI)', + 'Topic :: Education :: Testing', + 'Topic :: Games/Entertainment', + 'Topic :: Games/Entertainment :: Arcade', + 'Topic :: Games/Entertainment :: Board Games', + 'Topic :: Games/Entertainment :: First Person Shooters', + 'Topic :: Games/Entertainment :: Fortune Cookies', + 'Topic :: Games/Entertainment :: Multi-User Dungeons (MUD)', + 'Topic :: Games/Entertainment :: Puzzle Games', + 'Topic :: Games/Entertainment :: Real Time Strategy', + 'Topic :: Games/Entertainment :: Role-Playing', + 'Topic :: Games/Entertainment :: Side-Scrolling/Arcade Games', + 'Topic :: Games/Entertainment :: Simulation', + 'Topic :: Games/Entertainment :: Turn Based Strategy', + 'Topic :: Home Automation', + 'Topic :: Internet', + 'Topic :: Internet :: File Transfer Protocol (FTP)', + 'Topic :: Internet :: Finger', + 'Topic :: Internet :: Log Analysis', + 'Topic :: Internet :: Name Service (DNS)', + 'Topic :: Internet :: Proxy Servers', + 'Topic :: Internet :: WAP', + 'Topic :: Internet :: WWW/HTTP', + 'Topic :: Internet :: WWW/HTTP :: Browsers', + 'Topic :: Internet :: WWW/HTTP :: Dynamic Content', + 'Topic :: Internet :: WWW/HTTP :: Dynamic Content :: CGI Tools/Libraries', + 'Topic :: Internet :: WWW/HTTP :: Dynamic Content :: Message Boards', + 'Topic :: Internet :: WWW/HTTP :: Dynamic Content :: News/Diary', + 'Topic :: Internet :: WWW/HTTP :: Dynamic Content :: Page Counters', + 'Topic :: Internet :: WWW/HTTP :: HTTP Servers', + 'Topic :: Internet :: WWW/HTTP :: Indexing/Search', + 'Topic :: Internet :: WWW/HTTP :: Site Management', + 'Topic :: Internet :: WWW/HTTP :: Site Management :: Link Checking', + 'Topic :: Internet :: WWW/HTTP :: WSGI', + 'Topic :: Internet :: WWW/HTTP :: WSGI :: Application', + 'Topic :: Internet :: WWW/HTTP :: WSGI :: Middleware', + 'Topic :: Internet :: WWW/HTTP :: WSGI :: Server', + 'Topic :: Internet :: Z39.50', + 'Topic :: Multimedia', + 'Topic :: Multimedia :: Graphics', + 'Topic :: Multimedia :: Graphics :: 3D Modeling', + 'Topic :: Multimedia :: Graphics :: 3D Rendering', + 'Topic :: Multimedia :: Graphics :: Capture', + 'Topic :: Multimedia :: Graphics :: Capture :: Digital Camera', + 'Topic :: Multimedia :: Graphics :: Capture :: Scanners', + 'Topic :: Multimedia :: Graphics :: Capture :: Screen Capture', + 'Topic :: Multimedia :: Graphics :: Editors', + 'Topic :: Multimedia :: Graphics :: Editors :: Raster-Based', + 'Topic :: Multimedia :: Graphics :: Editors :: Vector-Based', + 'Topic :: Multimedia :: Graphics :: Graphics Conversion', + 'Topic :: Multimedia :: Graphics :: Presentation', + 'Topic :: Multimedia :: Graphics :: Viewers', + 'Topic :: Multimedia :: Sound/Audio', + 'Topic :: Multimedia :: Sound/Audio :: Analysis', + 'Topic :: Multimedia :: Sound/Audio :: Capture/Recording', + 'Topic :: Multimedia :: Sound/Audio :: CD Audio', + 'Topic :: Multimedia :: Sound/Audio :: CD Audio :: CD Playing', + 'Topic :: Multimedia :: Sound/Audio :: CD Audio :: CD Ripping', + 'Topic :: Multimedia :: Sound/Audio :: CD Audio :: CD Writing', + 'Topic :: Multimedia :: Sound/Audio :: Conversion', + 'Topic :: Multimedia :: Sound/Audio :: Editors', + 'Topic :: Multimedia :: Sound/Audio :: MIDI', + 'Topic :: Multimedia :: Sound/Audio :: Mixers', + 'Topic :: Multimedia :: Sound/Audio :: Players', + 'Topic :: Multimedia :: Sound/Audio :: Players :: MP3', + 'Topic :: Multimedia :: Sound/Audio :: Sound Synthesis', + 'Topic :: Multimedia :: Sound/Audio :: Speech', + 'Topic :: Multimedia :: Video', + 'Topic :: Multimedia :: Video :: Capture', + 'Topic :: Multimedia :: Video :: Conversion', + 'Topic :: Multimedia :: Video :: Display', + 'Topic :: Multimedia :: Video :: Non-Linear Editor', + 'Topic :: Office/Business', + 'Topic :: Office/Business :: Financial', + 'Topic :: Office/Business :: Financial :: Accounting', + 'Topic :: Office/Business :: Financial :: Investment', + 'Topic :: Office/Business :: Financial :: Point-Of-Sale', + 'Topic :: Office/Business :: Financial :: Spreadsheet', + 'Topic :: Office/Business :: Groupware', + 'Topic :: Office/Business :: News/Diary', + 'Topic :: Office/Business :: Office Suites', + 'Topic :: Office/Business :: Scheduling', + 'Topic :: Other/Nonlisted Topic', + 'Topic :: Printing', + 'Topic :: Religion', + 'Topic :: Scientific/Engineering', + 'Topic :: Scientific/Engineering :: Artificial Intelligence', + 'Topic :: Scientific/Engineering :: Astronomy', + 'Topic :: Scientific/Engineering :: Atmospheric Science', + 'Topic :: Scientific/Engineering :: Bio-Informatics', + 'Topic :: Scientific/Engineering :: Chemistry', + 'Topic :: Scientific/Engineering :: Electronic Design Automation (EDA)', + 'Topic :: Scientific/Engineering :: GIS', + 'Topic :: Scientific/Engineering :: Human Machine Interfaces', + 'Topic :: Scientific/Engineering :: Image Recognition', + 'Topic :: Scientific/Engineering :: Information Analysis', + 'Topic :: Scientific/Engineering :: Interface Engine/Protocol Translator', + 'Topic :: Scientific/Engineering :: Mathematics', + 'Topic :: Scientific/Engineering :: Medical Science Apps.', + 'Topic :: Scientific/Engineering :: Physics', + 'Topic :: Scientific/Engineering :: Visualization', + 'Topic :: Security', + 'Topic :: Security :: Cryptography', + 'Topic :: Sociology', + 'Topic :: Sociology :: Genealogy', + 'Topic :: Sociology :: History', + 'Topic :: Software Development', + 'Topic :: Software Development :: Assemblers', + 'Topic :: Software Development :: Bug Tracking', + 'Topic :: Software Development :: Build Tools', + 'Topic :: Software Development :: Code Generators', + 'Topic :: Software Development :: Compilers', + 'Topic :: Software Development :: Debuggers', + 'Topic :: Software Development :: Disassemblers', + 'Topic :: Software Development :: Documentation', + 'Topic :: Software Development :: Embedded Systems', + 'Topic :: Software Development :: Internationalization', + 'Topic :: Software Development :: Interpreters', + 'Topic :: Software Development :: Libraries', + 'Topic :: Software Development :: Libraries :: Application Frameworks', + 'Topic :: Software Development :: Libraries :: Java Libraries', + 'Topic :: Software Development :: Libraries :: Perl Modules', + 'Topic :: Software Development :: Libraries :: PHP Classes', + 'Topic :: Software Development :: Libraries :: Pike Modules', + 'Topic :: Software Development :: Libraries :: pygame', + 'Topic :: Software Development :: Libraries :: Python Modules', + 'Topic :: Software Development :: Libraries :: Ruby Modules', + 'Topic :: Software Development :: Libraries :: Tcl Extensions', + 'Topic :: Software Development :: Localization', + 'Topic :: Software Development :: Object Brokering', + 'Topic :: Software Development :: Object Brokering :: CORBA', + 'Topic :: Software Development :: Pre-processors', + 'Topic :: Software Development :: Quality Assurance', + 'Topic :: Software Development :: Testing', + 'Topic :: Software Development :: Testing :: Traffic Generation', + 'Topic :: Software Development :: User Interfaces', + 'Topic :: Software Development :: Version Control', + 'Topic :: Software Development :: Version Control :: CVS', + 'Topic :: Software Development :: Version Control :: RCS', + 'Topic :: Software Development :: Version Control :: SCCS', + 'Topic :: Software Development :: Widget Sets', + 'Topic :: System', + 'Topic :: System :: Archiving', + 'Topic :: System :: Archiving :: Backup', + 'Topic :: System :: Archiving :: Compression', + 'Topic :: System :: Archiving :: Mirroring', + 'Topic :: System :: Archiving :: Packaging', + 'Topic :: System :: Benchmark', + 'Topic :: System :: Boot', + 'Topic :: System :: Boot :: Init', + 'Topic :: System :: Clustering', + 'Topic :: System :: Console Fonts', + 'Topic :: System :: Distributed Computing', + 'Topic :: System :: Emulators', + 'Topic :: System :: Filesystems', + 'Topic :: System :: Hardware', + 'Topic :: System :: Hardware :: Hardware Drivers', + 'Topic :: System :: Hardware :: Mainframes', + 'Topic :: System :: Hardware :: Symmetric Multi-processing', + 'Topic :: System :: Installation/Setup', + 'Topic :: System :: Logging', + 'Topic :: System :: Monitoring', + 'Topic :: System :: Networking', + 'Topic :: System :: Networking :: Firewalls', + 'Topic :: System :: Networking :: Monitoring', + 'Topic :: System :: Networking :: Monitoring :: Hardware Watchdog', + 'Topic :: System :: Networking :: Time Synchronization', + 'Topic :: System :: Operating System', + 'Topic :: System :: Operating System Kernels', + 'Topic :: System :: Operating System Kernels :: BSD', + 'Topic :: System :: Operating System Kernels :: GNU Hurd', + 'Topic :: System :: Operating System Kernels :: Linux', + 'Topic :: System :: Power (UPS)', + 'Topic :: System :: Recovery Tools', + 'Topic :: System :: Shells', + 'Topic :: System :: Software Distribution', + 'Topic :: System :: Systems Administration', + 'Topic :: System :: Systems Administration :: Authentication/Directory', + 'Topic :: System :: Systems Administration :: Authentication/Directory :: LDAP', + 'Topic :: System :: Systems Administration :: Authentication/Directory :: NIS', + 'Topic :: System :: System Shells', + 'Topic :: Terminals', + 'Topic :: Terminals :: Serial', + 'Topic :: Terminals :: Telnet', + 'Topic :: Terminals :: Terminal Emulators/X Terminals', + 'Topic :: Text Editors', + 'Topic :: Text Editors :: Documentation', + 'Topic :: Text Editors :: Emacs', + 'Topic :: Text Editors :: Integrated Development Environments (IDE)', + 'Topic :: Text Editors :: Text Processing', + 'Topic :: Text Editors :: Word Processors', + 'Topic :: Text Processing', + 'Topic :: Text Processing :: Filters', + 'Topic :: Text Processing :: Fonts', + 'Topic :: Text Processing :: General', + 'Topic :: Text Processing :: Indexing', + 'Topic :: Text Processing :: Linguistic', + 'Topic :: Text Processing :: Markup', + 'Topic :: Text Processing :: Markup :: HTML', + 'Topic :: Text Processing :: Markup :: LaTeX', + 'Topic :: Text Processing :: Markup :: SGML', + 'Topic :: Text Processing :: Markup :: VRML', + 'Topic :: Text Processing :: Markup :: XML', + 'Topic :: Utilities', +] diff --git a/src/distutils2/dist.py b/src/distutils2/dist.py index bdef843..6dd1b6e 100644 --- a/src/distutils2/dist.py +++ b/src/distutils2/dist.py @@ -16,7 +16,7 @@ from ConfigParser import RawConfigParser from distutils2.errors import (DistutilsOptionError, DistutilsArgError, DistutilsModuleError, DistutilsClassError) from distutils2.fancy_getopt import FancyGetopt, translate_longopt -from distutils2.util import check_environ, strtobool, resolve_dotted_name +from distutils2.util import check_environ, strtobool, resolve_name from distutils2 import log from distutils2.metadata import DistributionMetadata @@ -967,7 +967,7 @@ Common commands: (see '--help-commands' for more) if hooks is None: return for hook in hooks.values(): - hook_func = resolve_dotted_name(hook) + hook_func = resolve_name(hook) hook_func(cmd_obj) # -- Distribution query methods ------------------------------------ diff --git a/src/distutils2/mkpkg.py b/src/distutils2/mkpkg.py index 0512592..438fb87 100755..100644 --- a/src/distutils2/mkpkg.py +++ b/src/distutils2/mkpkg.py @@ -12,623 +12,75 @@ # # Written by Sean Reifschneider <jafo@tummy.com> # -# TODO: -# -# Look for a license file and automatically add the category. -# -# When a .c file is found during the walk, can we add it as an extension? -# -# Ask if the author is the maintainer? -# -# Ask for the platform (can we detect this via "import win32" or something)? -# -# Ask for the dependencies. -# -# Ask for the Requires-Dist -# -# Ask for the Provides-Dist -# -# Detect scripts (not sure how. #! outside of package?) +# Original TODO list: +# Look for a license file and automatically add the category. +# When a .c file is found during the walk, can we add it as an extension? +# Ask if there is a maintainer different that the author +# Ask for the platform (can we detect this via "import win32" or something?) +# Ask for the dependencies. +# Ask for the Requires-Dist +# Ask for the Provides-Dist +# Detect scripts (not sure how. #! outside of package?) -import sys import os +import sys import re import shutil -import ConfigParser +from ConfigParser import RawConfigParser +from textwrap import dedent +# importing this with an underscore as it should be replaced by the +# dict form or another structures for all purposes +from distutils2._trove import all_classifiers as _CLASSIFIERS_LIST -helpText = { - 'name' : ''' +_helptext = { + 'name': ''' The name of the program to be packaged, usually a single word composed of lower-case characters such as "python", "sqlalchemy", or "CherryPy". ''', - 'version' : ''' + 'version': ''' Version number of the software, typically 2 or 3 numbers separated by dots such as "1.00", "0.6", or "3.02.01". "0.1.0" is recommended for initial development. ''', - 'description' : ''' + 'description': ''' A short summary of what this package is or does, typically a sentence 80 characters or less in length. ''', - 'author' : ''' + 'author': ''' The full name of the author (typically you). ''', - 'author_email' : ''' + 'author_email': ''' E-mail address of the package author (typically you). ''', - 'do_classifier' : ''' + 'do_classifier': ''' Trove classifiers are optional identifiers that allow you to specify the intended audience by saying things like "Beta software with a text UI for Linux under the PSF license. However, this can be a somewhat involved process. ''', - 'url' : ''' + 'url': ''' The home page for the package, typically starting with "http://". ''', - 'trove_license' : ''' + 'trove_license': ''' Optionally you can specify a license. Type a string that identifies a common license, and then you can select a list of license specifiers. ''', - 'trove_generic' : ''' + 'trove_generic': ''' Optionally, you can set other trove identifiers for things such as the human language, programming language, user interface, etc... ''', } -# XXX this list should be asked at PyPI (it changes) -# then cached, rather than hardcoded -troveList = [ - 'Development Status :: 1 - Planning', - 'Development Status :: 2 - Pre-Alpha', - 'Development Status :: 3 - Alpha', - 'Development Status :: 4 - Beta', - 'Development Status :: 5 - Production/Stable', - 'Development Status :: 6 - Mature', - 'Development Status :: 7 - Inactive', - 'Environment :: Console', - 'Environment :: Console :: Curses', - 'Environment :: Console :: Framebuffer', - 'Environment :: Console :: Newt', - 'Environment :: Console :: svgalib', - 'Environment :: Handhelds/PDA\'s', - 'Environment :: MacOS X', - 'Environment :: MacOS X :: Aqua', - 'Environment :: MacOS X :: Carbon', - 'Environment :: MacOS X :: Cocoa', - 'Environment :: No Input/Output (Daemon)', - 'Environment :: Other Environment', - 'Environment :: Plugins', - 'Environment :: Web Environment', - 'Environment :: Web Environment :: Buffet', - 'Environment :: Web Environment :: Mozilla', - 'Environment :: Web Environment :: ToscaWidgets', - 'Environment :: Win32 (MS Windows)', - 'Environment :: X11 Applications', - 'Environment :: X11 Applications :: Gnome', - 'Environment :: X11 Applications :: GTK', - 'Environment :: X11 Applications :: KDE', - 'Environment :: X11 Applications :: Qt', - 'Framework :: BFG', - 'Framework :: Buildout', - 'Framework :: Chandler', - 'Framework :: CubicWeb', - 'Framework :: Django', - 'Framework :: IDLE', - 'Framework :: Paste', - 'Framework :: Plone', - 'Framework :: Pylons', - 'Framework :: Setuptools Plugin', - 'Framework :: Trac', - 'Framework :: TurboGears', - 'Framework :: TurboGears :: Applications', - 'Framework :: TurboGears :: Widgets', - 'Framework :: Twisted', - 'Framework :: ZODB', - 'Framework :: Zope2', - 'Framework :: Zope3', - 'Intended Audience :: Customer Service', - 'Intended Audience :: Developers', - 'Intended Audience :: Education', - 'Intended Audience :: End Users/Desktop', - 'Intended Audience :: Financial and Insurance Industry', - 'Intended Audience :: Healthcare Industry', - 'Intended Audience :: Information Technology', - 'Intended Audience :: Legal Industry', - 'Intended Audience :: Manufacturing', - 'Intended Audience :: Other Audience', - 'Intended Audience :: Religion', - 'Intended Audience :: Science/Research', - 'Intended Audience :: System Administrators', - 'Intended Audience :: Telecommunications Industry', - 'License :: Aladdin Free Public License (AFPL)', - 'License :: DFSG approved', - 'License :: Eiffel Forum License (EFL)', - 'License :: Free For Educational Use', - 'License :: Free For Home Use', - 'License :: Free for non-commercial use', - 'License :: Freely Distributable', - 'License :: Free To Use But Restricted', - 'License :: Freeware', - 'License :: Netscape Public License (NPL)', - 'License :: Nokia Open Source License (NOKOS)', - 'License :: OSI Approved', - 'License :: OSI Approved :: Academic Free License (AFL)', - 'License :: OSI Approved :: Apache Software License', - 'License :: OSI Approved :: Apple Public Source License', - 'License :: OSI Approved :: Artistic License', - 'License :: OSI Approved :: Attribution Assurance License', - 'License :: OSI Approved :: BSD License', - 'License :: OSI Approved :: Common Public License', - 'License :: OSI Approved :: Eiffel Forum License', - 'License :: OSI Approved :: European Union Public Licence 1.0 (EUPL 1.0)', - 'License :: OSI Approved :: European Union Public Licence 1.1 (EUPL 1.1)', - 'License :: OSI Approved :: GNU Affero General Public License v3', - 'License :: OSI Approved :: GNU Free Documentation License (FDL)', - 'License :: OSI Approved :: GNU General Public License (GPL)', - 'License :: OSI Approved :: GNU Library or Lesser General Public License (LGPL)', - 'License :: OSI Approved :: IBM Public License', - 'License :: OSI Approved :: Intel Open Source License', - 'License :: OSI Approved :: ISC License (ISCL)', - 'License :: OSI Approved :: Jabber Open Source License', - 'License :: OSI Approved :: MIT License', - 'License :: OSI Approved :: MITRE Collaborative Virtual Workspace License (CVW)', - 'License :: OSI Approved :: Motosoto License', - 'License :: OSI Approved :: Mozilla Public License 1.0 (MPL)', - 'License :: OSI Approved :: Mozilla Public License 1.1 (MPL 1.1)', - 'License :: OSI Approved :: Nethack General Public License', - 'License :: OSI Approved :: Nokia Open Source License', - 'License :: OSI Approved :: Open Group Test Suite License', - 'License :: OSI Approved :: Python License (CNRI Python License)', - 'License :: OSI Approved :: Python Software Foundation License', - 'License :: OSI Approved :: Qt Public License (QPL)', - 'License :: OSI Approved :: Ricoh Source Code Public License', - 'License :: OSI Approved :: Sleepycat License', - 'License :: OSI Approved :: Sun Industry Standards Source License (SISSL)', - 'License :: OSI Approved :: Sun Public License', - 'License :: OSI Approved :: University of Illinois/NCSA Open Source License', - 'License :: OSI Approved :: Vovida Software License 1.0', - 'License :: OSI Approved :: W3C License', - 'License :: OSI Approved :: X.Net License', - 'License :: OSI Approved :: zlib/libpng License', - 'License :: OSI Approved :: Zope Public License', - 'License :: Other/Proprietary License', - 'License :: Public Domain', - 'License :: Repoze Public License', - 'Natural Language :: Afrikaans', - 'Natural Language :: Arabic', - 'Natural Language :: Bengali', - 'Natural Language :: Bosnian', - 'Natural Language :: Bulgarian', - 'Natural Language :: Catalan', - 'Natural Language :: Chinese (Simplified)', - 'Natural Language :: Chinese (Traditional)', - 'Natural Language :: Croatian', - 'Natural Language :: Czech', - 'Natural Language :: Danish', - 'Natural Language :: Dutch', - 'Natural Language :: English', - 'Natural Language :: Esperanto', - 'Natural Language :: Finnish', - 'Natural Language :: French', - 'Natural Language :: German', - 'Natural Language :: Greek', - 'Natural Language :: Hebrew', - 'Natural Language :: Hindi', - 'Natural Language :: Hungarian', - 'Natural Language :: Icelandic', - 'Natural Language :: Indonesian', - 'Natural Language :: Italian', - 'Natural Language :: Japanese', - 'Natural Language :: Javanese', - 'Natural Language :: Korean', - 'Natural Language :: Latin', - 'Natural Language :: Latvian', - 'Natural Language :: Macedonian', - 'Natural Language :: Malay', - 'Natural Language :: Marathi', - 'Natural Language :: Norwegian', - 'Natural Language :: Panjabi', - 'Natural Language :: Persian', - 'Natural Language :: Polish', - 'Natural Language :: Portuguese', - 'Natural Language :: Portuguese (Brazilian)', - 'Natural Language :: Romanian', - 'Natural Language :: Russian', - 'Natural Language :: Serbian', - 'Natural Language :: Slovak', - 'Natural Language :: Slovenian', - 'Natural Language :: Spanish', - 'Natural Language :: Swedish', - 'Natural Language :: Tamil', - 'Natural Language :: Telugu', - 'Natural Language :: Thai', - 'Natural Language :: Turkish', - 'Natural Language :: Ukranian', - 'Natural Language :: Urdu', - 'Natural Language :: Vietnamese', - 'Operating System :: BeOS', - 'Operating System :: MacOS', - 'Operating System :: MacOS :: MacOS 9', - 'Operating System :: MacOS :: MacOS X', - 'Operating System :: Microsoft', - 'Operating System :: Microsoft :: MS-DOS', - 'Operating System :: Microsoft :: Windows', - 'Operating System :: Microsoft :: Windows :: Windows 3.1 or Earlier', - 'Operating System :: Microsoft :: Windows :: Windows 95/98/2000', - 'Operating System :: Microsoft :: Windows :: Windows CE', - 'Operating System :: Microsoft :: Windows :: Windows NT/2000', - 'Operating System :: OS/2', - 'Operating System :: OS Independent', - 'Operating System :: Other OS', - 'Operating System :: PalmOS', - 'Operating System :: PDA Systems', - 'Operating System :: POSIX', - 'Operating System :: POSIX :: AIX', - 'Operating System :: POSIX :: BSD', - 'Operating System :: POSIX :: BSD :: BSD/OS', - 'Operating System :: POSIX :: BSD :: FreeBSD', - 'Operating System :: POSIX :: BSD :: NetBSD', - 'Operating System :: POSIX :: BSD :: OpenBSD', - 'Operating System :: POSIX :: GNU Hurd', - 'Operating System :: POSIX :: HP-UX', - 'Operating System :: POSIX :: IRIX', - 'Operating System :: POSIX :: Linux', - 'Operating System :: POSIX :: Other', - 'Operating System :: POSIX :: SCO', - 'Operating System :: POSIX :: SunOS/Solaris', - 'Operating System :: Unix', - 'Programming Language :: Ada', - 'Programming Language :: APL', - 'Programming Language :: ASP', - 'Programming Language :: Assembly', - 'Programming Language :: Awk', - 'Programming Language :: Basic', - 'Programming Language :: C', - 'Programming Language :: C#', - 'Programming Language :: C++', - 'Programming Language :: Cold Fusion', - 'Programming Language :: Cython', - 'Programming Language :: Delphi/Kylix', - 'Programming Language :: Dylan', - 'Programming Language :: Eiffel', - 'Programming Language :: Emacs-Lisp', - 'Programming Language :: Erlang', - 'Programming Language :: Euler', - 'Programming Language :: Euphoria', - 'Programming Language :: Forth', - 'Programming Language :: Fortran', - 'Programming Language :: Haskell', - 'Programming Language :: Java', - 'Programming Language :: JavaScript', - 'Programming Language :: Lisp', - 'Programming Language :: Logo', - 'Programming Language :: ML', - 'Programming Language :: Modula', - 'Programming Language :: Objective C', - 'Programming Language :: Object Pascal', - 'Programming Language :: OCaml', - 'Programming Language :: Other', - 'Programming Language :: Other Scripting Engines', - 'Programming Language :: Pascal', - 'Programming Language :: Perl', - 'Programming Language :: PHP', - 'Programming Language :: Pike', - 'Programming Language :: Pliant', - 'Programming Language :: PL/SQL', - 'Programming Language :: PROGRESS', - 'Programming Language :: Prolog', - 'Programming Language :: Python', - 'Programming Language :: Python :: 2', - 'Programming Language :: Python :: 2.3', - 'Programming Language :: Python :: 2.4', - 'Programming Language :: Python :: 2.5', - 'Programming Language :: Python :: 2.6', - 'Programming Language :: Python :: 2.7', - 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.0', - 'Programming Language :: Python :: 3.1', - 'Programming Language :: Python :: 3.2', - 'Programming Language :: REBOL', - 'Programming Language :: Rexx', - 'Programming Language :: Ruby', - 'Programming Language :: Scheme', - 'Programming Language :: Simula', - 'Programming Language :: Smalltalk', - 'Programming Language :: SQL', - 'Programming Language :: Tcl', - 'Programming Language :: Unix Shell', - 'Programming Language :: Visual Basic', - 'Programming Language :: XBasic', - 'Programming Language :: YACC', - 'Programming Language :: Zope', - 'Topic :: Adaptive Technologies', - 'Topic :: Artistic Software', - 'Topic :: Communications', - 'Topic :: Communications :: BBS', - 'Topic :: Communications :: Chat', - 'Topic :: Communications :: Chat :: AOL Instant Messenger', - 'Topic :: Communications :: Chat :: ICQ', - 'Topic :: Communications :: Chat :: Internet Relay Chat', - 'Topic :: Communications :: Chat :: Unix Talk', - 'Topic :: Communications :: Conferencing', - 'Topic :: Communications :: Email', - 'Topic :: Communications :: Email :: Address Book', - 'Topic :: Communications :: Email :: Email Clients (MUA)', - 'Topic :: Communications :: Email :: Filters', - 'Topic :: Communications :: Email :: Mailing List Servers', - 'Topic :: Communications :: Email :: Mail Transport Agents', - 'Topic :: Communications :: Email :: Post-Office', - 'Topic :: Communications :: Email :: Post-Office :: IMAP', - 'Topic :: Communications :: Email :: Post-Office :: POP3', - 'Topic :: Communications :: Fax', - 'Topic :: Communications :: FIDO', - 'Topic :: Communications :: File Sharing', - 'Topic :: Communications :: File Sharing :: Gnutella', - 'Topic :: Communications :: File Sharing :: Napster', - 'Topic :: Communications :: Ham Radio', - 'Topic :: Communications :: Internet Phone', - 'Topic :: Communications :: Telephony', - 'Topic :: Communications :: Usenet News', - 'Topic :: Database', - 'Topic :: Database :: Database Engines/Servers', - 'Topic :: Database :: Front-Ends', - 'Topic :: Desktop Environment', - 'Topic :: Desktop Environment :: File Managers', - 'Topic :: Desktop Environment :: Gnome', - 'Topic :: Desktop Environment :: GNUstep', - 'Topic :: Desktop Environment :: K Desktop Environment (KDE)', - 'Topic :: Desktop Environment :: K Desktop Environment (KDE) :: Themes', - 'Topic :: Desktop Environment :: PicoGUI', - 'Topic :: Desktop Environment :: PicoGUI :: Applications', - 'Topic :: Desktop Environment :: PicoGUI :: Themes', - 'Topic :: Desktop Environment :: Screen Savers', - 'Topic :: Desktop Environment :: Window Managers', - 'Topic :: Desktop Environment :: Window Managers :: Afterstep', - 'Topic :: Desktop Environment :: Window Managers :: Afterstep :: Themes', - 'Topic :: Desktop Environment :: Window Managers :: Applets', - 'Topic :: Desktop Environment :: Window Managers :: Blackbox', - 'Topic :: Desktop Environment :: Window Managers :: Blackbox :: Themes', - 'Topic :: Desktop Environment :: Window Managers :: CTWM', - 'Topic :: Desktop Environment :: Window Managers :: CTWM :: Themes', - 'Topic :: Desktop Environment :: Window Managers :: Enlightenment', - 'Topic :: Desktop Environment :: Window Managers :: Enlightenment :: Epplets', - 'Topic :: Desktop Environment :: Window Managers :: Enlightenment :: Themes DR15', - 'Topic :: Desktop Environment :: Window Managers :: Enlightenment :: Themes DR16', - 'Topic :: Desktop Environment :: Window Managers :: Enlightenment :: Themes DR17', - 'Topic :: Desktop Environment :: Window Managers :: Fluxbox', - 'Topic :: Desktop Environment :: Window Managers :: Fluxbox :: Themes', - 'Topic :: Desktop Environment :: Window Managers :: FVWM', - 'Topic :: Desktop Environment :: Window Managers :: FVWM :: Themes', - 'Topic :: Desktop Environment :: Window Managers :: IceWM', - 'Topic :: Desktop Environment :: Window Managers :: IceWM :: Themes', - 'Topic :: Desktop Environment :: Window Managers :: MetaCity', - 'Topic :: Desktop Environment :: Window Managers :: MetaCity :: Themes', - 'Topic :: Desktop Environment :: Window Managers :: Oroborus', - 'Topic :: Desktop Environment :: Window Managers :: Oroborus :: Themes', - 'Topic :: Desktop Environment :: Window Managers :: Sawfish', - 'Topic :: Desktop Environment :: Window Managers :: Sawfish :: Themes 0.30', - 'Topic :: Desktop Environment :: Window Managers :: Sawfish :: Themes pre-0.30', - 'Topic :: Desktop Environment :: Window Managers :: Waimea', - 'Topic :: Desktop Environment :: Window Managers :: Waimea :: Themes', - 'Topic :: Desktop Environment :: Window Managers :: Window Maker', - 'Topic :: Desktop Environment :: Window Managers :: Window Maker :: Applets', - 'Topic :: Desktop Environment :: Window Managers :: Window Maker :: Themes', - 'Topic :: Desktop Environment :: Window Managers :: XFCE', - 'Topic :: Desktop Environment :: Window Managers :: XFCE :: Themes', - 'Topic :: Documentation', - 'Topic :: Education', - 'Topic :: Education :: Computer Aided Instruction (CAI)', - 'Topic :: Education :: Testing', - 'Topic :: Games/Entertainment', - 'Topic :: Games/Entertainment :: Arcade', - 'Topic :: Games/Entertainment :: Board Games', - 'Topic :: Games/Entertainment :: First Person Shooters', - 'Topic :: Games/Entertainment :: Fortune Cookies', - 'Topic :: Games/Entertainment :: Multi-User Dungeons (MUD)', - 'Topic :: Games/Entertainment :: Puzzle Games', - 'Topic :: Games/Entertainment :: Real Time Strategy', - 'Topic :: Games/Entertainment :: Role-Playing', - 'Topic :: Games/Entertainment :: Side-Scrolling/Arcade Games', - 'Topic :: Games/Entertainment :: Simulation', - 'Topic :: Games/Entertainment :: Turn Based Strategy', - 'Topic :: Home Automation', - 'Topic :: Internet', - 'Topic :: Internet :: File Transfer Protocol (FTP)', - 'Topic :: Internet :: Finger', - 'Topic :: Internet :: Log Analysis', - 'Topic :: Internet :: Name Service (DNS)', - 'Topic :: Internet :: Proxy Servers', - 'Topic :: Internet :: WAP', - 'Topic :: Internet :: WWW/HTTP', - 'Topic :: Internet :: WWW/HTTP :: Browsers', - 'Topic :: Internet :: WWW/HTTP :: Dynamic Content', - 'Topic :: Internet :: WWW/HTTP :: Dynamic Content :: CGI Tools/Libraries', - 'Topic :: Internet :: WWW/HTTP :: Dynamic Content :: Message Boards', - 'Topic :: Internet :: WWW/HTTP :: Dynamic Content :: News/Diary', - 'Topic :: Internet :: WWW/HTTP :: Dynamic Content :: Page Counters', - 'Topic :: Internet :: WWW/HTTP :: HTTP Servers', - 'Topic :: Internet :: WWW/HTTP :: Indexing/Search', - 'Topic :: Internet :: WWW/HTTP :: Site Management', - 'Topic :: Internet :: WWW/HTTP :: Site Management :: Link Checking', - 'Topic :: Internet :: WWW/HTTP :: WSGI', - 'Topic :: Internet :: WWW/HTTP :: WSGI :: Application', - 'Topic :: Internet :: WWW/HTTP :: WSGI :: Middleware', - 'Topic :: Internet :: WWW/HTTP :: WSGI :: Server', - 'Topic :: Internet :: Z39.50', - 'Topic :: Multimedia', - 'Topic :: Multimedia :: Graphics', - 'Topic :: Multimedia :: Graphics :: 3D Modeling', - 'Topic :: Multimedia :: Graphics :: 3D Rendering', - 'Topic :: Multimedia :: Graphics :: Capture', - 'Topic :: Multimedia :: Graphics :: Capture :: Digital Camera', - 'Topic :: Multimedia :: Graphics :: Capture :: Scanners', - 'Topic :: Multimedia :: Graphics :: Capture :: Screen Capture', - 'Topic :: Multimedia :: Graphics :: Editors', - 'Topic :: Multimedia :: Graphics :: Editors :: Raster-Based', - 'Topic :: Multimedia :: Graphics :: Editors :: Vector-Based', - 'Topic :: Multimedia :: Graphics :: Graphics Conversion', - 'Topic :: Multimedia :: Graphics :: Presentation', - 'Topic :: Multimedia :: Graphics :: Viewers', - 'Topic :: Multimedia :: Sound/Audio', - 'Topic :: Multimedia :: Sound/Audio :: Analysis', - 'Topic :: Multimedia :: Sound/Audio :: Capture/Recording', - 'Topic :: Multimedia :: Sound/Audio :: CD Audio', - 'Topic :: Multimedia :: Sound/Audio :: CD Audio :: CD Playing', - 'Topic :: Multimedia :: Sound/Audio :: CD Audio :: CD Ripping', - 'Topic :: Multimedia :: Sound/Audio :: CD Audio :: CD Writing', - 'Topic :: Multimedia :: Sound/Audio :: Conversion', - 'Topic :: Multimedia :: Sound/Audio :: Editors', - 'Topic :: Multimedia :: Sound/Audio :: MIDI', - 'Topic :: Multimedia :: Sound/Audio :: Mixers', - 'Topic :: Multimedia :: Sound/Audio :: Players', - 'Topic :: Multimedia :: Sound/Audio :: Players :: MP3', - 'Topic :: Multimedia :: Sound/Audio :: Sound Synthesis', - 'Topic :: Multimedia :: Sound/Audio :: Speech', - 'Topic :: Multimedia :: Video', - 'Topic :: Multimedia :: Video :: Capture', - 'Topic :: Multimedia :: Video :: Conversion', - 'Topic :: Multimedia :: Video :: Display', - 'Topic :: Multimedia :: Video :: Non-Linear Editor', - 'Topic :: Office/Business', - 'Topic :: Office/Business :: Financial', - 'Topic :: Office/Business :: Financial :: Accounting', - 'Topic :: Office/Business :: Financial :: Investment', - 'Topic :: Office/Business :: Financial :: Point-Of-Sale', - 'Topic :: Office/Business :: Financial :: Spreadsheet', - 'Topic :: Office/Business :: Groupware', - 'Topic :: Office/Business :: News/Diary', - 'Topic :: Office/Business :: Office Suites', - 'Topic :: Office/Business :: Scheduling', - 'Topic :: Other/Nonlisted Topic', - 'Topic :: Printing', - 'Topic :: Religion', - 'Topic :: Scientific/Engineering', - 'Topic :: Scientific/Engineering :: Artificial Intelligence', - 'Topic :: Scientific/Engineering :: Astronomy', - 'Topic :: Scientific/Engineering :: Atmospheric Science', - 'Topic :: Scientific/Engineering :: Bio-Informatics', - 'Topic :: Scientific/Engineering :: Chemistry', - 'Topic :: Scientific/Engineering :: Electronic Design Automation (EDA)', - 'Topic :: Scientific/Engineering :: GIS', - 'Topic :: Scientific/Engineering :: Human Machine Interfaces', - 'Topic :: Scientific/Engineering :: Image Recognition', - 'Topic :: Scientific/Engineering :: Information Analysis', - 'Topic :: Scientific/Engineering :: Interface Engine/Protocol Translator', - 'Topic :: Scientific/Engineering :: Mathematics', - 'Topic :: Scientific/Engineering :: Medical Science Apps.', - 'Topic :: Scientific/Engineering :: Physics', - 'Topic :: Scientific/Engineering :: Visualization', - 'Topic :: Security', - 'Topic :: Security :: Cryptography', - 'Topic :: Sociology', - 'Topic :: Sociology :: Genealogy', - 'Topic :: Sociology :: History', - 'Topic :: Software Development', - 'Topic :: Software Development :: Assemblers', - 'Topic :: Software Development :: Bug Tracking', - 'Topic :: Software Development :: Build Tools', - 'Topic :: Software Development :: Code Generators', - 'Topic :: Software Development :: Compilers', - 'Topic :: Software Development :: Debuggers', - 'Topic :: Software Development :: Disassemblers', - 'Topic :: Software Development :: Documentation', - 'Topic :: Software Development :: Embedded Systems', - 'Topic :: Software Development :: Internationalization', - 'Topic :: Software Development :: Interpreters', - 'Topic :: Software Development :: Libraries', - 'Topic :: Software Development :: Libraries :: Application Frameworks', - 'Topic :: Software Development :: Libraries :: Java Libraries', - 'Topic :: Software Development :: Libraries :: Perl Modules', - 'Topic :: Software Development :: Libraries :: PHP Classes', - 'Topic :: Software Development :: Libraries :: Pike Modules', - 'Topic :: Software Development :: Libraries :: pygame', - 'Topic :: Software Development :: Libraries :: Python Modules', - 'Topic :: Software Development :: Libraries :: Ruby Modules', - 'Topic :: Software Development :: Libraries :: Tcl Extensions', - 'Topic :: Software Development :: Localization', - 'Topic :: Software Development :: Object Brokering', - 'Topic :: Software Development :: Object Brokering :: CORBA', - 'Topic :: Software Development :: Pre-processors', - 'Topic :: Software Development :: Quality Assurance', - 'Topic :: Software Development :: Testing', - 'Topic :: Software Development :: Testing :: Traffic Generation', - 'Topic :: Software Development :: User Interfaces', - 'Topic :: Software Development :: Version Control', - 'Topic :: Software Development :: Version Control :: CVS', - 'Topic :: Software Development :: Version Control :: RCS', - 'Topic :: Software Development :: Version Control :: SCCS', - 'Topic :: Software Development :: Widget Sets', - 'Topic :: System', - 'Topic :: System :: Archiving', - 'Topic :: System :: Archiving :: Backup', - 'Topic :: System :: Archiving :: Compression', - 'Topic :: System :: Archiving :: Mirroring', - 'Topic :: System :: Archiving :: Packaging', - 'Topic :: System :: Benchmark', - 'Topic :: System :: Boot', - 'Topic :: System :: Boot :: Init', - 'Topic :: System :: Clustering', - 'Topic :: System :: Console Fonts', - 'Topic :: System :: Distributed Computing', - 'Topic :: System :: Emulators', - 'Topic :: System :: Filesystems', - 'Topic :: System :: Hardware', - 'Topic :: System :: Hardware :: Hardware Drivers', - 'Topic :: System :: Hardware :: Mainframes', - 'Topic :: System :: Hardware :: Symmetric Multi-processing', - 'Topic :: System :: Installation/Setup', - 'Topic :: System :: Logging', - 'Topic :: System :: Monitoring', - 'Topic :: System :: Networking', - 'Topic :: System :: Networking :: Firewalls', - 'Topic :: System :: Networking :: Monitoring', - 'Topic :: System :: Networking :: Monitoring :: Hardware Watchdog', - 'Topic :: System :: Networking :: Time Synchronization', - 'Topic :: System :: Operating System', - 'Topic :: System :: Operating System Kernels', - 'Topic :: System :: Operating System Kernels :: BSD', - 'Topic :: System :: Operating System Kernels :: GNU Hurd', - 'Topic :: System :: Operating System Kernels :: Linux', - 'Topic :: System :: Power (UPS)', - 'Topic :: System :: Recovery Tools', - 'Topic :: System :: Shells', - 'Topic :: System :: Software Distribution', - 'Topic :: System :: Systems Administration', - 'Topic :: System :: Systems Administration :: Authentication/Directory', - 'Topic :: System :: Systems Administration :: Authentication/Directory :: LDAP', - 'Topic :: System :: Systems Administration :: Authentication/Directory :: NIS', - 'Topic :: System :: System Shells', - 'Topic :: Terminals', - 'Topic :: Terminals :: Serial', - 'Topic :: Terminals :: Telnet', - 'Topic :: Terminals :: Terminal Emulators/X Terminals', - 'Topic :: Text Editors', - 'Topic :: Text Editors :: Documentation', - 'Topic :: Text Editors :: Emacs', - 'Topic :: Text Editors :: Integrated Development Environments (IDE)', - 'Topic :: Text Editors :: Text Processing', - 'Topic :: Text Editors :: Word Processors', - 'Topic :: Text Processing', - 'Topic :: Text Processing :: Filters', - 'Topic :: Text Processing :: Fonts', - 'Topic :: Text Processing :: General', - 'Topic :: Text Processing :: Indexing', - 'Topic :: Text Processing :: Linguistic', - 'Topic :: Text Processing :: Markup', - 'Topic :: Text Processing :: Markup :: HTML', - 'Topic :: Text Processing :: Markup :: LaTeX', - 'Topic :: Text Processing :: Markup :: SGML', - 'Topic :: Text Processing :: Markup :: VRML', - 'Topic :: Text Processing :: Markup :: XML', - 'Topic :: Utilities', - ] - -def askYn(question, default = None, helptext = None): +# XXX everything needs docstrings and tests (both low-level tests of various +# methods and functional tests of running the script) + + +def ask_yn(question, default=None, helptext=None): while True: - answer = ask(question, default, helptext, required = True) + answer = ask(question, default, helptext, required=True) if answer and answer[0].lower() in 'yn': - return(answer[0].lower()) + return answer[0].lower() print '\nERROR: You must select "Y" or "N".\n' @@ -659,7 +111,7 @@ def ask(question, default=None, helptext=None, required=True, print '=' * 70 continue if default and not line: - return(default) + return default if not line and required: print '*' * 70 print 'This value cannot be empty.' @@ -668,92 +120,104 @@ def ask(question, default=None, helptext=None, required=True, print helptext print '*' * 70 continue - return(line) + return line -def buildTroveDict(troveList): - dict = {} - for key in troveList: - subDict = dict +def _build_classifiers_dict(classifiers): + d = {} + for key in classifiers: + subDict = d for subkey in key.split(' :: '): if not subkey in subDict: subDict[subkey] = {} subDict = subDict[subkey] - return(dict) -troveDict = buildTroveDict(troveList) - - -class SetupClass(object): - def __init__(self): - self.config = None - self.classifierDict = {} - self.setupData = {} - self.setupData['classifier'] = self.classifierDict - self.setupData['packages'] = {} - - self.loadConfigFile() - - - def lookupOption(self, key): - if not self.config.has_option('DEFAULT', key): - return(None) - return(self.config.get('DEFAULT', key)) - + return d - def loadConfigFile(self): - self.config = ConfigParser.RawConfigParser() - self.config.read(os.path.expanduser('~/.mkpkgpy')) - self.setupData['author'] = self.lookupOption('author') - self.setupData['author_email'] = self.lookupOption('author_email') +CLASSIFIERS = _build_classifiers_dict(_CLASSIFIERS_LIST) - def updateConfigFile(self): +class MainProgram(object): + def __init__(self): + self.configparser = None + self.classifiers = {} + self.data = {} + self.data['classifier'] = self.classifiers + self.data['packages'] = {} + self.load_config_file() + + def lookup_option(self, key): + if not self.configparser.has_option('DEFAULT', key): + return None + return self.configparser.get('DEFAULT', key) + + def load_config_file(self): + self.configparser = RawConfigParser() + # TODO replace with section in distutils config file + self.configparser.read(os.path.expanduser('~/.mkpkgpy')) + self.data['author'] = self.lookup_option('author') + self.data['author_email'] = self.lookup_option('author_email') + + def update_config_file(self): valuesDifferent = False + # FIXME looking only for those two fields seems wrong for compareKey in ('author', 'author_email'): - if self.lookupOption(compareKey) != self.setupData[compareKey]: + if self.lookup_option(compareKey) != self.data[compareKey]: valuesDifferent = True - self.config.set('DEFAULT', compareKey, - self.setupData[compareKey]) + self.configparser.set('DEFAULT', compareKey, + self.data[compareKey]) if not valuesDifferent: return - self.config.write(open(os.path.expanduser('~/.pygiver'), 'w')) - + fp = open(os.path.expanduser('~/.mkpkgpy'), 'w') + try: + self.configparser.write(fp) + finally: + fp.close() - def loadExistingSetup(self): + def load_existing_setup_script(self): raise NotImplementedError - - - def inspectFile(self, path): + # Ideas: + # - define a mock module to assign to sys.modules['distutils'] before + # importing the setup script as a module (or executing it); it would + # provide setup (a function that just returns its args as a dict), + # Extension (ditto), find_packages (the real function) + # - we could even mock Distribution and commands to handle more setup + # scripts + # - we could use a sandbox (http://bugs.python.org/issue8680) + # - the cleanest way is to parse the file, not import it, but there is + # no way to do that across versions (the compiler package is + # deprecated or removed in recent Pythons, the ast module is not + # present before 2.6) + + def inspect_file(self, path): fp = open(path, 'r') try: - for line in [fp.readline() for x in range(10)]: + for line in [fp.readline() for _ in range(10)]: m = re.match(r'^#!.*python((?P<major>\d)(\.\d+)?)?$', line) if m: if m.group('major') == '3': - self.classifierDict['Programming Language :: Python :: 3'] = 1 + self.classifiers['Programming Language :: Python :: 3'] = 1 else: - self.classifierDict['Programming Language :: Python :: 2'] = 1 + self.classifiers['Programming Language :: Python :: 2'] = 1 finally: fp.close() - - def inspectDirectory(self): + def inspect_directory(self): dirName = os.path.basename(os.getcwd()) - self.setupData['name'] = dirName + self.data['name'] = dirName m = re.match(r'(.*)-(\d.+)', dirName) if m: - self.setupData['name'] = m.group(1) - self.setupData['version'] = m.group(2) + self.data['name'] = m.group(1) + self.data['version'] = m.group(2) for root, dirs, files in os.walk(os.curdir): - for file in files: - if root == os.curdir and file == 'setup.py': continue - fileName = os.path.join(root, file) - self.inspectFile(fileName) + for filename in files: + if root == os.curdir and filename == 'setup.py': + continue + self.inspect_file(os.path.join(root, filename)) - if file == '__init__.py': + if filename == '__init__.py': trySrc = os.path.join(os.curdir, 'src') tmpRoot = root if tmpRoot.startswith(trySrc): @@ -761,75 +225,69 @@ class SetupClass(object): if tmpRoot.startswith(os.path.sep): tmpRoot = tmpRoot[len(os.path.sep):] - self.setupData['packages'][tmpRoot] = root[1 + len(os.path.sep):] - + self.data['packages'][tmpRoot] = root[1 + len(os.path.sep):] - def queryUser(self): - self.setupData['name'] = ask('Package name', self.setupData['name'], - helpText['name']) - self.setupData['version'] = ask('Current version number', - self.setupData.get('version'), helpText['version']) - self.setupData['description'] = ask('Package description', - self.setupData.get('description'), helpText['description'], + def query_user(self): + self.data['name'] = ask('Package name', self.data['name'], + _helptext['name']) + self.data['version'] = ask('Current version number', + self.data.get('version'), _helptext['version']) + self.data['description'] = ask('Package description', + self.data.get('description'), _helptext['description'], lengthy=True) - self.setupData['author'] = ask('Author name', - self.setupData.get('author'), helpText['author']) - self.setupData['author_email'] = ask('Author e-mail address', - self.setupData.get('author_email'), helpText['author_email']) - self.setupData['url'] = ask('Project URL', - self.setupData.get('url'), helpText['url'], required=False) - - if (askYn('Do you want to set Trove classifiers?', - helptext=helpText['do_classifier']) == 'y'): - self.setTroveClassifier() - - - def setTroveClassifier(self): - self.setTroveDevStatus(self.classifierDict) - self.setTroveLicense(self.classifierDict) - self.setTroveOther(self.classifierDict) - - - def setTroveOther(self, classifierDict): - if askYn('Do you want to set other trove identifiers', - 'n', - helpText['trove_generic']) != 'y': + self.data['author'] = ask('Author name', + self.data.get('author'), _helptext['author']) + self.data['author_email'] = ask('Author e-mail address', + self.data.get('author_email'), _helptext['author_email']) + self.data['url'] = ask('Project URL', + self.data.get('url'), _helptext['url'], required=False) + + if ask_yn('Do you want to set Trove classifiers?', + helptext=_helptext['do_classifier']) == 'y': + self.set_classifier() + + def set_classifier(self): + self.set_devel_status(self.classifiers) + self.set_license(self.classifiers) + self.set_other_classifier(self.classifiers) + + def set_other_classifier(self, classifiers): + if ask_yn('Do you want to set other trove identifiers', 'n', + _helptext['trove_generic']) != 'y': return + self.walk_classifiers(classifiers, [CLASSIFIERS], '') - self.walkTrove(classifierDict, [troveDict], '') - - def walkTrove(self, classifierDict, trovePath, desc): - trove = trovePath[-1] + def walk_classifiers(self, classifiers, trovepath, desc): + trove = trovepath[-1] if not trove: return for key in sorted(trove.keys()): if len(trove[key]) == 0: - if askYn('Add "%s"' % desc[4:] + ' :: ' + key, 'n') == 'y': - classifierDict[desc[4:] + ' :: ' + key] = 1 + if ask_yn('Add "%s"' % desc[4:] + ' :: ' + key, 'n') == 'y': + classifiers[desc[4:] + ' :: ' + key] = 1 continue - if askYn('Do you want to set items under\n "%s" (%d sub-items)' - % (key, len(trove[key])), 'n', - helpText['trove_generic']) == 'y': - self.walkTrove(classifierDict, trovePath + [trove[key]], - desc + ' :: ' + key) - + if ask_yn('Do you want to set items under\n "%s" (%d sub-items)' + % (key, len(trove[key])), 'n', + _helptext['trove_generic']) == 'y': + self.walk_classifiers(classifiers, trovepath + [trove[key]], + desc + ' :: ' + key) - def setTroveLicense(self, classifierDict): + def set_license(self, classifiers): while True: license = ask('What license do you use', - helptext=helpText['trove_license'], - required=False) + helptext=_helptext['trove_license'], required=False) if not license: return licenseWords = license.lower().split(' ') foundList = [] - for index in range(len(troveList)): - troveItem = troveList[index] + # TODO use enumerate + for index in range(len(_CLASSIFIERS_LIST)): + troveItem = _CLASSIFIERS_LIST[index] if not troveItem.startswith('License :: '): continue troveItem = troveItem[11:].lower() @@ -843,54 +301,55 @@ class SetupClass(object): foundList.append(index) question = 'Matching licenses:\n\n' + # TODO use enumerate? for i in xrange(1, len(foundList) + 1): - question += ' %s) %s\n' % (i, troveList[foundList[i - 1]]) + question += ' %s) %s\n' % (i, _CLASSIFIERS_LIST[foundList[i - 1]]) question += ('\nType the number of the license you wish to use or ' - '? to try again:') + '? to try again:') troveLicense = ask(question, required=False) if troveLicense == '?': continue if troveLicense == '': return + # FIXME the int conversion can fail foundIndex = foundList[int(troveLicense) - 1] - classifierDict[troveList[foundIndex]] = 1 + classifiers[_CLASSIFIERS_LIST[foundIndex]] = 1 try: return except IndexError: - print("ERROR: Invalid selection, type a number from the list " - "above.") + print ("ERROR: Invalid selection, type a number from the list " + "above.") - - def setTroveDevStatus(self, classifierDict): + def set_devel_status(self, classifiers): while True: - devStatus = ask('''Please select the project status: - -1 - Planning -2 - Pre-Alpha -3 - Alpha -4 - Beta -5 - Production/Stable -6 - Mature -7 - Inactive - -Status''', required=False) - if devStatus: + choice = ask(dedent('''\ + Please select the project status: + + 1 - Planning + 2 - Pre-Alpha + 3 - Alpha + 4 - Beta + 5 - Production/Stable + 6 - Mature + 7 - Inactive + + Status'''), required=False) + if choice: try: - key = { - '1' : 'Development Status :: 1 - Planning', - '2' : 'Development Status :: 2 - Pre-Alpha', - '3' : 'Development Status :: 3 - Alpha', - '4' : 'Development Status :: 4 - Beta', - '5' : 'Development Status :: 5 - Production/Stable', - '6' : 'Development Status :: 6 - Mature', - '7' : 'Development Status :: 7 - Inactive', - }[devStatus] - classifierDict[key] = 1 + choice = int(choice) - 1 + key = ['Development Status :: 1 - Planning', + 'Development Status :: 2 - Pre-Alpha', + 'Development Status :: 3 - Alpha', + 'Development Status :: 4 - Beta', + 'Development Status :: 5 - Production/Stable', + 'Development Status :: 6 - Mature', + 'Development Status :: 7 - Inactive'][choice] + classifiers[key] = 1 return - except KeyError: - print("ERROR: Invalid selection, type a single digit " - "number.") + except (IndexError, ValueError): + print ("ERROR: Invalid selection, type a single digit " + "number.") def _dotted_packages(self, data): packages = sorted(data.keys()) @@ -901,33 +360,38 @@ Status''', required=False) modified_pkgs.append(pkg) return modified_pkgs - def writeSetup(self): + def write_setup_script(self): if os.path.exists('setup.py'): + if os.path.exists('setup.py.old'): + print ("ERROR: setup.py.old backup exists, please check that " + "current setup.py is correct and remove setup.py.old") + return shutil.move('setup.py', 'setup.py.old') fp = open('setup.py', 'w') try: + # XXX do LFs work on all platforms? fp.write('#!/usr/bin/env python\n\n') fp.write('from distutils2.core import setup\n\n') - fp.write('setup(name=%s,\n' % repr(self.setupData['name'])) - fp.write(' version=%s,\n' % repr(self.setupData['version'])) + fp.write('setup(name=%s,\n' % repr(self.data['name'])) + fp.write(' version=%s,\n' % repr(self.data['version'])) fp.write(' description=%s,\n' - % repr(self.setupData['description'])) - fp.write(' author=%s,\n' % repr(self.setupData['author'])) + % repr(self.data['description'])) + fp.write(' author=%s,\n' % repr(self.data['author'])) fp.write(' author_email=%s,\n' - % repr(self.setupData['author_email'])) - if self.setupData['url']: - fp.write(' url=%s,\n' % repr(self.setupData['url'])) - if self.setupData['classifier']: + % repr(self.data['author_email'])) + if self.data['url']: + fp.write(' url=%s,\n' % repr(self.data['url'])) + if self.data['classifier']: fp.write(' classifier=[\n') - for classifier in sorted(self.setupData['classifier'].keys()): + for classifier in sorted(self.data['classifier'].keys()): fp.write(' %s,\n' % repr(classifier)) fp.write(' ],\n') - if self.setupData['packages']: + if self.data['packages']: fp.write(' packages=%s,\n' - % repr(self._dotted_packages(self.setupData['packages']))) + % repr(self._dotted_packages(self.data['packages']))) fp.write(' package_dir=%s,\n' - % repr(self.setupData['packages'])) + % repr(self.data['packages'])) fp.write(' #scripts=[\'path/to/script\']\n') fp.write(' )\n') @@ -939,11 +403,14 @@ Status''', required=False) def main(): - setup = SetupClass() - setup.inspectDirectory() - setup.queryUser() - setup.updateConfigFile() - setup.writeSetup() + """Main entry point.""" + program = MainProgram() + # uncomment when implemented + #program.load_existing_setup_script() + program.inspect_directory() + program.query_user() + program.update_config_file() + program.write_setup() if __name__ == '__main__': diff --git a/src/distutils2/tests/test_util.py b/src/distutils2/tests/test_util.py index 71011c2..ea07636 100644 --- a/src/distutils2/tests/test_util.py +++ b/src/distutils2/tests/test_util.py @@ -18,7 +18,7 @@ from distutils2.util import (convert_path, change_root, _find_exe_version, _MAC_OS_X_LD_VERSION, byte_compile, find_packages, spawn, find_executable, _nt_quote_args, get_pypirc_path, generate_pypirc, - read_pypirc, resolve_dotted_name) + read_pypirc, resolve_name) from distutils2 import util from distutils2.tests import support @@ -342,14 +342,14 @@ class UtilTestCase(support.EnvironGuard, res = find_packages([root], ['pkg1.pkg2']) self.assertEqual(set(res), set(['pkg1', 'pkg5', 'pkg1.pkg3', 'pkg1.pkg3.pkg6'])) - def test_resolve_dotted_name(self): - self.assertEqual(UtilTestCase, resolve_dotted_name("distutils2.tests.test_util.UtilTestCase")) - self.assertEqual(UtilTestCase.test_resolve_dotted_name, - resolve_dotted_name("distutils2.tests.test_util.UtilTestCase.test_resolve_dotted_name")) + def test_resolve_name(self): + self.assertEqual(UtilTestCase, resolve_name("distutils2.tests.test_util.UtilTestCase")) + self.assertEqual(UtilTestCase.test_resolve_name, + resolve_name("distutils2.tests.test_util.UtilTestCase.test_resolve_name")) - self.assertRaises(ImportError, resolve_dotted_name, + self.assertRaises(ImportError, resolve_name, "distutils2.tests.test_util.UtilTestCaseNot") - self.assertRaises(ImportError, resolve_dotted_name, + self.assertRaises(ImportError, resolve_name, "distutils2.tests.test_util.UtilTestCase.nonexistent_attribute") def test_import_nested_first_time(self): @@ -361,12 +361,11 @@ class UtilTestCase(support.EnvironGuard, try: sys.path.append(tmp_dir) - resolve_dotted_name("a.b.c.Foo") + resolve_name("a.b.c.Foo") # assert nothing raised finally: sys.path.remove(tmp_dir) - @unittest.skipIf(sys.version < '2.6', 'requires Python 2.6 or higher') def test_run_2to3_on_code(self): content = "print 'test'" diff --git a/src/distutils2/util.py b/src/distutils2/util.py index 2a97df6..5673432 100644 --- a/src/distutils2/util.py +++ b/src/distutils2/util.py @@ -636,8 +636,8 @@ def find_packages(paths=(os.curdir,), exclude=()): packages.append(package_name) return packages -def resolve_dotted_name(name): - """Resolves the name and returns the corresponding object.""" +def resolve_name(name): + """Resolve a name like ``module.object`` to an object and return it.""" parts = name.split('.') cursor = len(parts) module_name, rest = parts[:cursor], parts[cursor:] @@ -659,6 +659,7 @@ def resolve_dotted_name(name): except AttributeError: raise ImportError return ret + # utility functions for 2to3 support def run_2to3(files, doctests_only=False, fixer_names=None, options=None, |
