[Python-checkins] distutils2: merged from upstream
tarek.ziade
python-checkins at python.org
Sun Sep 19 10:20:22 CEST 2010
tarek.ziade pushed 4e62116dae8c to distutils2:
http://hg.python.org/distutils2/rev/4e62116dae8c
changeset: 612:4e62116dae8c
parent: 611:8e9ad8266328
parent: 553:80265368bda0
user: Konrad Delong <konryd at gmail.com>
date: Thu Aug 12 20:00:18 2010 +0200
summary: merged from upstream
files: src/distutils2/dist.py
diff --git a/src/distutils2/_trove.py b/src/distutils2/_trove.py
new file mode 100644
--- /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
--- a/src/distutils2/dist.py
+++ b/src/distutils2/dist.py
@@ -16,7 +16,7 @@
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
@@ -969,7 +969,7 @@
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/metadata.py b/src/distutils2/metadata.py
--- a/src/distutils2/metadata.py
+++ b/src/distutils2/metadata.py
@@ -336,34 +336,28 @@
self._write_field(fileobject, field, value)
def update(self, other=None, **kwargs):
- """Set metadata values from the given mapping
+ """Set metadata values from the given iterable `other` and kwargs.
- Convert the keys to Metadata fields. Given keys that don't match a
- metadata argument will not be used.
+ Behavior is like `dict.update`: If `other` has a ``keys`` method,
+ they are looped over and ``self[key]`` is assigned ``other[key]``.
+ Else, ``other`` is an iterable of ``(key, value)`` iterables.
- If overwrite is set to False, just add metadata values that are
- actually not defined.
-
- If there is existing values in conflict with the dictionary ones, the
- new values prevails.
-
- Empty values (e.g. None and []) are not setted this way.
+ Keys that don't match a metadata field or that have an empty value are
+ dropped.
"""
def _set(key, value):
- if value not in ([], None, '') and key in _ATTR2FIELD:
+ if key in _ATTR2FIELD and value:
self.set(self._convert_name(key), value)
if other is None:
pass
- elif hasattr(other, 'iteritems'): # iteritems saves memory and lookups
- for k, v in other.iteritems():
- _set(k, v)
elif hasattr(other, 'keys'):
for k in other.keys():
- _set(k, v)
+ _set(k, other[k])
else:
for k, v in other:
_set(k, v)
+
if kwargs:
self.update(kwargs)
diff --git a/src/distutils2/mkpkg.py b/src/distutils2/mkpkg.py
old mode 100755
new mode 100644
--- a/src/distutils2/mkpkg.py
+++ b/src/distutils2/mkpkg.py
@@ -12,623 +12,75 @@
#
# Written by Sean Reifschneider <jafo at 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 os
import sys
-import os
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',
- ]
+# XXX everything needs docstrings and tests (both low-level tests of various
+# methods and functional tests of running the script)
-def askYn(question, default = None, helptext = None):
+
+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 @@
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 @@
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)
+ return d
+CLASSIFIERS = _build_classifiers_dict(_CLASSIFIERS_LIST)
-class SetupClass(object):
+
+class MainProgram(object):
def __init__(self):
- self.config = None
- self.classifierDict = {}
- self.setupData = {}
- self.setupData['classifier'] = self.classifierDict
- self.setupData['packages'] = {}
+ self.configparser = None
+ self.classifiers = {}
+ self.data = {}
+ self.data['classifier'] = self.classifiers
+ self.data['packages'] = {}
+ self.load_config_file()
- self.loadConfigFile()
+ 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 lookupOption(self, key):
- if not self.config.has_option('DEFAULT', key):
- return(None)
- return(self.config.get('DEFAULT', key))
-
-
- 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')
-
-
- def updateConfigFile(self):
+ 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 load_existing_setup_script(self):
+ raise NotImplementedError
+ # 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 loadExistingSetup(self):
- raise NotImplementedError
-
-
- def inspectFile(self, path):
+ 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 @@
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 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.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)
- 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'],
- 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 ask_yn('Do you want to set Trove classifiers?',
+ helptext=_helptext['do_classifier']) == 'y':
+ self.set_classifier()
- if (askYn('Do you want to set Trove classifiers?',
- helptext=helpText['do_classifier']) == 'y'):
- self.setTroveClassifier()
+ 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], '')
- 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':
- return
-
- 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 @@
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 set_devel_status(self, classifiers):
+ while True:
+ choice = ask(dedent('''\
+ Please select the project status:
- def setTroveDevStatus(self, classifierDict):
- 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
-1 - Planning
-2 - Pre-Alpha
-3 - Alpha
-4 - Beta
-5 - Production/Stable
-6 - Mature
-7 - Inactive
-
-Status''', required=False)
- if devStatus:
+ 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 @@
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 @@
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_metadata.py b/src/distutils2/tests/test_metadata.py
--- a/src/distutils2/tests/test_metadata.py
+++ b/src/distutils2/tests/test_metadata.py
@@ -152,7 +152,11 @@
self.assertIn('Version', metadata.keys())
self.assertIn('0.5', metadata.values())
self.assertIn(('Version', '0.5'), metadata.items())
- #TODO test update
+
+ metadata.update({'version': '0.6'})
+ self.assertEqual(metadata['Version'], '0.6')
+ metadata.update([('version', '0.7')])
+ self.assertEqual(metadata['Version'], '0.7')
def test_versions(self):
metadata = DistributionMetadata()
diff --git a/src/distutils2/tests/test_util.py b/src/distutils2/tests/test_util.py
--- a/src/distutils2/tests/test_util.py
+++ b/src/distutils2/tests/test_util.py
@@ -18,7 +18,7 @@
_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 @@
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 @@
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
--- a/src/distutils2/util.py
+++ b/src/distutils2/util.py
@@ -636,8 +636,8 @@
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 @@
except AttributeError:
raise ImportError
return ret
+
# utility functions for 2to3 support
def run_2to3(files, doctests_only=False, fixer_names=None, options=None,
--
Repository URL: http://hg.python.org/distutils2
More information about the Python-checkins
mailing list