diff options
author | richard <devnull@localhost> | 2002-11-01 05:19:40 +0000 |
---|---|---|
committer | richard <devnull@localhost> | 2002-11-01 05:19:40 +0000 |
commit | 98725a72613714a7a73c4ac6d900cd8476450796 (patch) | |
tree | 193da310b1c9d5d0ffff7882cd7fe0f279c8828d | |
download | decorator-98725a72613714a7a73c4ac6d900cd8476450796.tar.gz |
Initial revision
-rw-r--r-- | config.ini | 6 | ||||
-rw-r--r-- | config.py | 13 | ||||
-rw-r--r-- | config.pyc | bin | 0 -> 812 bytes | |||
-rw-r--r-- | doc/discriminators.txt | 501 | ||||
-rw-r--r-- | doc/discussion.anthony.20021024.txt | 20 | ||||
-rw-r--r-- | doc/feedback.anthony.20021024.txt | 125 | ||||
-rw-r--r-- | doc/fm.txt | 494 | ||||
-rw-r--r-- | doc/freshmeat.trove.discriminators.txt | 460 | ||||
-rw-r--r-- | doc/freshmeat.trove.txt | 14 | ||||
-rw-r--r-- | doc/naming.txt | 83 | ||||
-rw-r--r-- | doc/pep.txt | 287 | ||||
-rw-r--r-- | doc/rest.doc | 639 | ||||
-rw-r--r-- | doc/sourceforge.trove.discriminators.txt | 386 | ||||
-rw-r--r-- | doc/sourceforge.trove.txt | 29 | ||||
-rwxr-xr-x | pypi.cgi | 65 | ||||
-rw-r--r-- | register.py | 227 | ||||
-rw-r--r-- | webui.py | 573 |
17 files changed, 3922 insertions, 0 deletions
diff --git a/config.ini b/config.ini new file mode 100644 index 0000000..01a09c7 --- /dev/null +++ b/config.ini @@ -0,0 +1,6 @@ +[webui] +database = /tmp/pkgbase/db +mailhost = crown +adminemail = rjones@ekit-inc.com +url = http://localhost/cgi-bin/package_server.cgi + diff --git a/config.py b/config.py new file mode 100644 index 0000000..3547cca --- /dev/null +++ b/config.py @@ -0,0 +1,13 @@ +import ConfigParser + +class Config: + ''' Read in the config and set up the vars with the correct type. + ''' + def __init__(self, configfile, name): + c = ConfigParser.ConfigParser() + c.read(configfile) + self.database = c.get(name, 'database') + self.mailhost = c.get(name, 'mailhost') + self.adminemail = c.get(name, 'adminemail') + self.url = c.get(name, 'url') + diff --git a/config.pyc b/config.pyc Binary files differnew file mode 100644 index 0000000..6b1054e --- /dev/null +++ b/config.pyc diff --git a/doc/discriminators.txt b/doc/discriminators.txt new file mode 100644 index 0000000..5fb03f8 --- /dev/null +++ b/doc/discriminators.txt @@ -0,0 +1,501 @@ +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 (Framebuffer Based) +Environment :: Console (svgalib Based) +Environment :: Console (Text Based) +Environment :: Console (Text Based) :: Curses +Environment :: Console (Text Based) :: Newt +Environment :: MacOS X +Environment :: MacOS X :: Aqua +Environment :: MacOS X :: Carbon +Environment :: MacOS X :: Cocoa +Environment :: Handhelds/PDA's +Environment :: No Input/Output (Daemon) +Environment :: Plugins +Environment :: Other Environment +Environment :: Web Environment +Environment :: Web Environment :: Mozilla +Environment :: Win32 (MS Windows) +Environment :: X11 Applications +Environment :: X11 Applications :: Gnome +Environment :: X11 Applications :: GTK +Environment :: X11 Applications :: KDE +Environment :: X11 Applications :: Qt +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 :: 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 :: 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 +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 :: 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 :: 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 :: 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 :: 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 :: 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/doc/discussion.anthony.20021024.txt b/doc/discussion.anthony.20021024.txt new file mode 100644 index 0000000..41308b4 --- /dev/null +++ b/doc/discussion.anthony.20021024.txt @@ -0,0 +1,20 @@ +> the user stuff was kinda thrown in on the train this morning. had a look +> at PAUSE when I got in: mostly it's about registering users and they then +> own namespaces. I +'m not sure how the owning +> stuff will work - trove talks about it a bit. trove is also pretty thin on +> the ground in places ;) + +**** A message has arrived from pluto on Thu Oct 24 17:19! **** +From: anthony [To: richard] +for trove, I'd suggest something like a trove browser (but better +than the SF one, pleeeease) that allows you to extract the data for +insertion into your setup.py. +Or else, categorise it via the web, and if you post a new setup.py +register with no discriminators, tell it to leave the current one alone. + + +**** A message has arrived from pluto on Thu Oct 24 17:19! **** +From: anthony [To: richard] +you might also want some sort of two-stage "the following things will +be changed, do you want to proceed" thing. diff --git a/doc/feedback.anthony.20021024.txt b/doc/feedback.anthony.20021024.txt new file mode 100644 index 0000000..f999fd0 --- /dev/null +++ b/doc/feedback.anthony.20021024.txt @@ -0,0 +1,125 @@ +From anthony@interlink.com.au Thu Oct 24 17:08:22 2002 +X-Sieve: cmu-sieve 2.0 +Return-Path: <anthony@interlink.com.au> +Received: (from uucp@localhost) + by crown.off.ekorp.com (8.9.3/8.9.3) id HAA08779 + for rjones@ekit-inc.com; Thu, 24 Oct 2002 07:10:04 GMT +Received: from cirrus.netspace.net.au(203.10.110.75) + via SMTP by mx3.ekorp.com, id smtpdAAAYMa4fr; Thu Oct 24 07:09:59 2002 +Received: from localhost.localdomain (dsl-203-113-236-58.VIC.netspace.net.au [203.113.236.58]) + by cirrus.netspace.net.au (8.11.3/8.11.3) with ESMTP id g9O79w786906 + for <rjones@ekit-inc.com>; Thu, 24 Oct 2002 17:09:58 +1000 (EST) +Received: from arbhome.com.au (anthony@localhost) + by localhost.localdomain (8.11.6/8.11.6) with ESMTP id g9O78MG02368 + for <rjones@ekit-inc.com>; Thu, 24 Oct 2002 17:08:22 +1000 +Message-Id: <200210240708.g9O78MG02368@localhost.localdomain> +X-Authentication-Warning: localhost.localdomain: anthony owned process doing -bs +X-Mailer: exmh version 2.5 07/13/2001 with nmh-1.0.4 +X-Exmh-Isig-CompType: repl +X-Exmh-Isig-Folder: inbox +To: Richard Jones <rjones@ekit-inc.com> +From: Anthony Baxter <anthony@interlink.com.au> +Reply-to: Anthony Baxter <anthony@interlink.com.au> +Subject: Re: PEP draft +In-Reply-To: <200210241657.55412.rjones@ekit-inc.com> +Mime-Version: 1.0 +Content-Type: text/plain +Date: Thu, 24 Oct 2002 17:08:22 +1000 +Status: R +X-Status: N +X-KMail-EncryptionState: +X-KMail-SignatureState: + + +>>> Richard Jones wrote +> PEP: XXX +> Title: Distutils Enhancements +> Version: $Revision$ +> Last-Modified: $Date$ +> Author: Richard Jones <rjones@ekit-inc.com> +> Status: Draft +> Type: Standards Track +> Content-Type: text/x-rst +> Created: 24-Oct-2002 +> Python-Version: 2.3 +> Post-History: +> +> +> Abstract +> ======== +> +> This PEP proposes several extensions to the distutils packaging +> system [1]_. These enhancements include a central package index, tools +> for submitting package information to the index and extensions to the +> package metadata to include Trove [2]_ information. +> +Include Vaults of Parnassus in the "prior art" investigation. + +> This PEP does not address either issues of package dependency, nor +> central storage of packages. + centralised + +> existing (name, version) will result in an *update* operation. +> +> The web interface implement the following commands: + implements +> +> the index view. The index will include a customisation form at the +> bottom a-la Roundup. The results will be paginated, sorted +Give a reference (web site) for this. + +> **user** +> Registers a new user with the index. Requires username, password and +> email address. Passwords will be stored as SHA hashes. If the +> username exists: + +Should require a confirmation email, as with mailman &c. + +> Notification of changes to a package entry will be sent to all users +> who have created submitted information about the package. + +What does this mean? + +> discriminators = [ +> 'Development Status :: 4 - Beta', +> 'Environment :: Console (Text Based)', +> 'Environment :: Web Environment', +> 'Intended Audience :: End Users/Desktop', +> 'Intended Audience :: Developers', +> 'Intended Audience :: System Administrators', +> 'License :: OSI Approved :: Python License', +> 'Operating System :: MacOS X', +> 'Operating System :: Microsoft :: Windows', +> 'Operating System :: POSIX', +> 'Programming Language :: Python', +> 'Topic :: Communications :: Email', +> 'Topic :: Office/Business', +> 'Topic :: Software Development :: Bug Tracking', + +Why strings like this, rather than proper structures? e.g. + + discriminators = { + 'Development Status': '4 - Beta', + 'Environment' : ('Console (Text Based)', 'Web Environment') + 'Intended Audience' : ('End Users/Desktop', 'Developers', 'System Administrators'), +..... + +How do people know that their trove categorisation is correct (e.g. +that it doesn't have speling mistaiks?) + +> The list of discriminator values on the module index has been snarfed +> from Freshmeat, without their permission. + +Should check that this is ok with them. + +There should be some sort of simple "check categorisation" or "update +categorisation" thing. + +Who can update a package entry? ACLs? How and what can be updated +with 'register'? Only a new version? What about changing trove +categorisations, homepages, or the like? What about clashes of +names (I don't know if there are any out there, but it wouldn't +suprise me). + + + diff --git a/doc/fm.txt b/doc/fm.txt new file mode 100644 index 0000000..1baed57 --- /dev/null +++ b/doc/fm.txt @@ -0,0 +1,494 @@ +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 (Framebuffer Based) +Environment :: Console (svgalib Based) +Environment :: Console (Text Based) +Environment :: Console (Text Based) :: Curses +Environment :: Console (Text Based) :: Newt +Environment :: MacOS X +Environment :: MacOS X :: Aqua +Environment :: MacOS X :: Carbon +Environment :: MacOS X :: Cocoa +Environment :: Handhelds/PDA's +Environment :: No Input/Output (Daemon) +Environment :: Plugins +Environment :: Other Environment +Environment :: Web Environment +Environment :: Web Environment :: Mozilla +Environment :: Win32 (MS Windows) +Environment :: X11 Applications +Environment :: X11 Applications :: Gnome +Environment :: X11 Applications :: GTK +Environment :: X11 Applications :: KDE +Environment :: X11 Applications :: Qt +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 :: Artistic License +License :: OSI Approved :: BSD License +License :: OSI Approved :: Common Public License +License :: OSI Approved :: GNAT Modified GPL (GMGPL) +License :: OSI Approved :: GNU Free Documentation License (FDL) +License :: OSI Approved :: GNU General Public License (GPL) +License :: OSI Approved :: GNU Lesser General Public License (LGPL) +License :: OSI Approved :: Guile license +License :: OSI Approved :: IBM Public License +License :: OSI Approved :: MITRE Collaborative Virtual Workspace License (CVW) +License :: OSI Approved :: MIT/X Consortium License +License :: OSI Approved :: Mozilla Public License (MPL) +License :: OSI Approved :: Open Software License +License :: OSI Approved :: Perl License +License :: OSI Approved :: Python License +License :: OSI Approved :: Q Public License (QPL) +License :: OSI Approved :: Ricoh Source Code Public License +License :: OSI Approved :: SUN Public License +License :: OSI Approved :: W3C License +License :: OSI Approved :: zlib/libpng License +License :: Other/Proprietary License +License :: Other/Proprietary License with Free Trial +License :: Other/Proprietary License with Source +License :: Public Domain +License :: Shareware +License :: SUN Binary Code License +License :: SUN Community Source License +License :: The Apache License +License :: The Clarified Artistic License +License :: The Latex Project Public License (LPPL) +License :: The Open Content License +License :: The PHP License +License :: Voxel Public License (VPL) +License :: Zope Public License (ZPL) +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 :: 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 :: 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 :: Application Themes +Topic :: Desktop Environment :: Application Themes :: Galeon +Topic :: Desktop Environment :: Application Themes :: GKrellM +Topic :: Desktop Environment :: Application Themes :: Login Managers +Topic :: Desktop Environment :: Application Themes :: Login Managers :: GDM +Topic :: Desktop Environment :: Application Themes :: Login Managers :: KDM +Topic :: Desktop Environment :: Application Themes :: Login Managers :: WDM +Topic :: Desktop Environment :: Application Themes :: Login Managers :: XDM +Topic :: Desktop Environment :: Application Themes :: Mozilla +Topic :: Desktop Environment :: Application Themes :: Nautilus +Topic :: Desktop Environment :: Application Themes :: Shells +Topic :: Desktop Environment :: Application Themes :: XMMS +Topic :: Desktop Environment :: File Managers +Topic :: Desktop Environment :: Fonts +Topic :: Desktop Environment :: Gnome +Topic :: Desktop Environment :: Gnome :: GTK 1.x Themes +Topic :: Desktop Environment :: Gnome :: GTK 2.x Themes +Topic :: Desktop Environment :: Gnome :: Metathemes +Topic :: Desktop Environment :: GNUstep +Topic :: Desktop Environment :: K Desktop Environment (KDE) +Topic :: Desktop Environment :: K Desktop Environment (KDE) :: Themes KDE 1.x +Topic :: Desktop Environment :: K Desktop Environment (KDE) :: Themes KDE 2.x +Topic :: Desktop Environment :: K Desktop Environment (KDE) :: Themes KDE 3.x +Topic :: Desktop Environment :: PicoGUI +Topic :: Desktop Environment :: PicoGUI :: Applications +Topic :: Desktop Environment :: PicoGUI :: Themes +Topic :: Desktop Environment :: Screen Savers +Topic :: Desktop Environment :: Theme +Topic :: Desktop Environment :: Theme :: Adult +Topic :: Desktop Environment :: Theme :: Animals +Topic :: Desktop Environment :: Theme :: Anime +Topic :: Desktop Environment :: Theme :: Art +Topic :: Desktop Environment :: Theme :: Cartoons +Topic :: Desktop Environment :: Theme :: Computers +Topic :: Desktop Environment :: Theme :: Engine +Topic :: Desktop Environment :: Theme :: Fantasy +Topic :: Desktop Environment :: Theme :: Holiday +Topic :: Desktop Environment :: Theme :: Misc +Topic :: Desktop Environment :: Theme :: Movies +Topic :: Desktop Environment :: Theme :: Music +Topic :: Desktop Environment :: Theme :: Nature +Topic :: Desktop Environment :: Theme :: Operating Systems +Topic :: Desktop Environment :: Theme :: People +Topic :: Desktop Environment :: Theme :: Pixmap +Topic :: Desktop Environment :: Theme :: Places +Topic :: Desktop Environment :: Theme :: Plain +Topic :: Desktop Environment :: Theme :: Products +Topic :: Desktop Environment :: Theme Resources +Topic :: Desktop Environment :: Theme Resources :: Backgrounds +Topic :: Desktop Environment :: Theme Resources :: Cursors +Topic :: Desktop Environment :: Theme Resources :: Fonts +Topic :: Desktop Environment :: Theme Resources :: Icons +Topic :: Desktop Environment :: Theme :: Science Fiction +Topic :: Desktop Environment :: Theme :: Sports +Topic :: Desktop Environment :: Theme :: Vehicles +Topic :: Desktop Environment :: Theme :: Video Games +Topic :: Desktop Environment :: Theme :: Web +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 :: 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 :: Bioinformatics +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 :: 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/doc/freshmeat.trove.discriminators.txt b/doc/freshmeat.trove.discriminators.txt new file mode 100644 index 0000000..f51379b --- /dev/null +++ b/doc/freshmeat.trove.discriminators.txt @@ -0,0 +1,460 @@ +Development Status :: 1 - Planning (disabled category) +Development Status :: 2 - Pre-Alpha +Development Status :: 3 - Alpha +Development Status :: 4 - Beta +Development Status :: 5 - Production/Stable +Development Status :: 6 - Mature +Environment :: Console (Framebuffer Based) +Environment :: Console (svgalib Based) +Environment :: Console (Text Based) +Environment :: Console (Text Based) :: Curses +Environment :: Console (Text Based) :: Newt +Environment :: MacOS X +Environment :: MacOS X :: Aqua +Environment :: MacOS X :: Carbon +Environment :: MacOS X :: Cocoa +Environment :: No Input/Output (Daemon) +Environment :: Plugins +Environment :: Web Environment +Environment :: Web Environment :: Mozilla +Environment :: Win32 (MS Windows) +Environment :: X11 Applications +Environment :: X11 Applications :: Gnome +Environment :: X11 Applications :: GTK +Environment :: X11 Applications :: KDE +Environment :: X11 Applications :: Qt +Intended Audience :: End Users/Desktop +Intended Audience :: Developers +Intended Audience :: System Administrators +Intended Audience :: Quality Engineers +Intended Audience :: Other Audience +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 :: Free To Use But Restricted +License :: Freely Distributable +License :: Freeware +License :: Netscape Public License (NPL) +License :: Nokia Open Source License (NOKOS) +License :: OSI Approved +License :: OSI Approved :: Artistic License +License :: OSI Approved :: BSD License +License :: OSI Approved :: Common Public License +License :: OSI Approved :: GNAT Modified GPL (GMGPL) +License :: OSI Approved :: GNU Free Documentation License (FDL) +License :: OSI Approved :: GNU General Public License (GPL) +License :: OSI Approved :: GNU Lesser General Public License (LGPL) +License :: OSI Approved :: Guile license +License :: OSI Approved :: IBM Public License +License :: OSI Approved :: MIT/X Consortium License +License :: OSI Approved :: MITRE Collaborative Virtual Workspace License (CVW) +License :: OSI Approved :: Mozilla Public License (MPL) +License :: OSI Approved :: Open Software License +License :: OSI Approved :: Perl License +License :: OSI Approved :: Python License +License :: OSI Approved :: Q Public License (QPL) +License :: OSI Approved :: Ricoh Source Code Public License +License :: OSI Approved :: SUN Public License +License :: OSI Approved :: W3C License +License :: OSI Approved :: zlib/libpng License +License :: Other/Proprietary License +License :: Other/Proprietary License with Free Trial +License :: Other/Proprietary License with Source +License :: Public Domain +License :: Shareware +License :: SUN Binary Code License +License :: SUN Community Source License +License :: The Apache License +License :: The Clarified Artistic License +License :: The Latex Project Public License (LPPL) +License :: The Open Content License +License :: The PHP License +License :: Voxel Public License (VPL) +License :: Zope Public License (ZPL) +Operating System :: BeOS +Operating System :: MacOS +Operating System :: 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 Independent +Operating System :: OS/2 +Operating System :: Other OS +Operating System :: PalmOS +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 :: Delphi +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 :: Object Pascal +Programming Language :: Objective C +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 :: PL/SQL +Programming Language :: Pliant +Programming Language :: PROGRESS +Programming Language :: Prolog +Programming Language :: Python +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 :: Mail Transport Agents +Topic :: Communications :: Email :: Mailing List Servers +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 :: 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 :: Application Themes +Topic :: Desktop Environment :: Application Themes :: Galeon +Topic :: Desktop Environment :: Application Themes :: GKrellM +Topic :: Desktop Environment :: Application Themes :: Login Managers +Topic :: Desktop Environment :: Application Themes :: Login Managers :: GDM +Topic :: Desktop Environment :: Application Themes :: Login Managers :: KDM +Topic :: Desktop Environment :: Application Themes :: Login Managers :: WDM +Topic :: Desktop Environment :: Application Themes :: Login Managers :: XDM +Topic :: Desktop Environment :: Application Themes :: Mozilla +Topic :: Desktop Environment :: Application Themes :: Nautilus +Topic :: Desktop Environment :: Application Themes :: Shells +Topic :: Desktop Environment :: Application Themes :: XMMS +Topic :: Desktop Environment :: File Managers +Topic :: Desktop Environment :: Fonts +Topic :: Desktop Environment :: Gnome +Topic :: Desktop Environment :: Gnome :: GTK 1.x Themes +Topic :: Desktop Environment :: Gnome :: GTK 2.x Themes +Topic :: Desktop Environment :: Gnome :: Metathemes +Topic :: Desktop Environment :: GNUstep +Topic :: Desktop Environment :: K Desktop Environment (KDE) +Topic :: Desktop Environment :: K Desktop Environment (KDE) :: Themes KDE 1.x +Topic :: Desktop Environment :: K Desktop Environment (KDE) :: Themes KDE 2.x +Topic :: Desktop Environment :: K Desktop Environment (KDE) :: Themes KDE 3.x +Topic :: Desktop Environment :: PicoGUI +Topic :: Desktop Environment :: PicoGUI :: Applications +Topic :: Desktop Environment :: PicoGUI :: Themes +Topic :: Desktop Environment :: Screen Savers +Topic :: Desktop Environment :: Theme +Topic :: Desktop Environment :: Theme :: Adult +Topic :: Desktop Environment :: Theme :: Animals +Topic :: Desktop Environment :: Theme :: Anime +Topic :: Desktop Environment :: Theme :: Art +Topic :: Desktop Environment :: Theme :: Cartoons +Topic :: Desktop Environment :: Theme :: Computers +Topic :: Desktop Environment :: Theme :: Engine +Topic :: Desktop Environment :: Theme :: Fantasy +Topic :: Desktop Environment :: Theme :: Holiday +Topic :: Desktop Environment :: Theme :: Misc +Topic :: Desktop Environment :: Theme :: Movies +Topic :: Desktop Environment :: Theme :: Music +Topic :: Desktop Environment :: Theme :: Nature +Topic :: Desktop Environment :: Theme :: Operating Systems +Topic :: Desktop Environment :: Theme :: People +Topic :: Desktop Environment :: Theme :: Pixmap +Topic :: Desktop Environment :: Theme :: Places +Topic :: Desktop Environment :: Theme :: Plain +Topic :: Desktop Environment :: Theme :: Products +Topic :: Desktop Environment :: Theme :: Science Fiction +Topic :: Desktop Environment :: Theme :: Sports +Topic :: Desktop Environment :: Theme :: Vehicles +Topic :: Desktop Environment :: Theme :: Video Games +Topic :: Desktop Environment :: Theme :: Web +Topic :: Desktop Environment :: Theme Resources +Topic :: Desktop Environment :: Theme Resources :: Backgrounds +Topic :: Desktop Environment :: Theme Resources :: Cursors +Topic :: Desktop Environment :: Theme Resources :: Fonts +Topic :: Desktop Environment :: Theme Resources :: Icons +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 :: 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 :: 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 :: 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 :: 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 :: Bioinformatics +Topic :: Scientific/Engineering :: Chemistry +Topic :: Scientific/Engineering :: Electronic Design Automation (EDA) +Topic :: Scientific/Engineering :: Image Recognition +Topic :: Scientific/Engineering :: Mathematics +Topic :: Scientific/Engineering :: Medical Science Apps. +Topic :: Scientific/Engineering :: Visualization +Topic :: Security +Topic :: Security :: Cryptography +Topic :: Software Development +Topic :: Software Development :: Assemblers +Topic :: Software Development :: Build Tools +Topic :: Software Development :: Bug Tracking +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 :: 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/Distributed Networks +Topic :: System :: Console Fonts +Topic :: System :: Emulators +Topic :: System :: Filesystems +Topic :: System :: Hardware +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 :: Software Distribution Tools +Topic :: System :: Systems Administration +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 :: 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/doc/freshmeat.trove.txt b/doc/freshmeat.trove.txt new file mode 100644 index 0000000..b6cf1a4 --- /dev/null +++ b/doc/freshmeat.trove.txt @@ -0,0 +1,14 @@ +[fm #21421] (news-admins) [fmII/contact] Trove categories +Date: Friday 1:12:51 am +From: Patrick Lenz via RT <news-admins@freshmeat.net> +To: rjones@ekit-inc.com + +rjones@ekit-inc.com wrote (Wed, Oct 23 2002 23:49:21): + +> I'd like to use your list of Trove categories (or discriminators in the +> original Trove parlance). Do you have any objections to this? Are you the +> original authors of the list, and if not, do you know who is? + +We originally started out with the trove category set SourceForge.net had. We +both expanded that tree so we're not really in sync anymore. I don't have any +objections wrt you re-using the list. diff --git a/doc/naming.txt b/doc/naming.txt new file mode 100644 index 0000000..78a330d --- /dev/null +++ b/doc/naming.txt @@ -0,0 +1,83 @@ +Published on The O'Reilly Network (http://www.oreillynet.com/) + http://www.oreillynet.com/cs/user/wlg/2225 + + +On The Naming of Things + + by Simon Cozens + Oct. 29, 2002 + + + +As in certain cults it is possible to kill a process if you know its true +name. + + +-- Ken Thompson and Dennis M. Ritchie + + +I've been thinking recently about what accounts for the CPAN's success; +well, that's not quite true. I've been trying to work out what accounts for +the Ruby Application Archive and Python's Vaults of Parnassus comparative +failure. + + +There are many reasons. First, there's a clear distinction in CPAN between +libraries and applications; the RAA the Vaults don't have such a thing. But +I've come to the conclusion that a major factor, and one which applies both +to collections of software such as those we're looking at and the +development world in general, is the way that libraries and aplications are +named. (To be fair, Ruby is getting better at this and beginning to solve +the problem the Perl way.) + + +I'd like to give a couple of principles for naming software. + +Definitive names discourage wheel reinvention + +Perl's modules are generally given simple, definitive names. If I want an +XML parser, I head for XML::Parser. It's that simple. (Of course, if it's +not that simple, I head for XML::Simple which is.) If I want to write a +module for parsing XML and I know that XML::Parser exists, I'm forced to +choose a name which correctly denotes what sets my parser apart; I have to +do something new, and hence I'm not reinventing the wheel. + +Descriptive names are best for libraries + +There's a temptation to make up cutesy names for software projects. +However, when it comes to libraries, this is more of a hindrance than a +help. When I see a module called XML::Parser I know exactly what it does. +It doesn't require any more description. If, on the other hand, it had a +cutesy name - Expat - I would have no idea. Similarly, good naming helps me +quickly locate the library I need. If I'm writing C code to deal with +Unicode, I'd look for a libunicode. And behold, there is indeed a +libunicode which does what I want and I need look no further. That would +not have been quite so easy if it had been called libgeoff. Cutesy acronyms +don't help either - you might know that libgail is the GNOME Accessibility +Implementation Library, but at first sight, that might have been called +libgeoff too. Why not, say, libaccess, or libgaccess if you must have the g +for GNOME. + +End-user projects can have non-descriptive names + +There is a place for cute naming, and that's in applications and other +end-user projects; this is because there's more space for competition. +You'd never get away with calling a web browser "webbrowser", so "Mozilla" +is as good a name as any. However, if you're building that as a Perl +module, then Web::Browser (or Tk::WebBrowser) would be just fine. This +should remind you that some things that you think are applications can turn +out to be libraries, and vice versa - consider spamassassin as an example. +Thankfully, that has both a catchy and a descriptive name, so turns out to +work very well as both a library and an end-user tool. + + +Shamans have long known the value of the correct and definitive naming of +things; programmers of libraries and modules would do well to rediscover +it. + + +Simon Cozens + + +oreillynet.com Copyright © 2000 O'Reilly & Associates, Inc. + diff --git a/doc/pep.txt b/doc/pep.txt new file mode 100644 index 0000000..c574745 --- /dev/null +++ b/doc/pep.txt @@ -0,0 +1,287 @@ +PEP: XXX +Title: Distutils Enhancements +Version: $Revision$ +Last-Modified: $Date$ +Author: Richard Jones <rjones@ekit-inc.com> +Status: Draft +Type: Standards Track +Content-Type: text/x-rst +Created: 24-Oct-2002 +Python-Version: 2.3 +Post-History: + + +Abstract +======== + +This PEP proposes several extensions to the distutils packaging +system [1]_. These enhancements include a central package index, tools +for submitting package information to the index and extensions to the +package metadata to include Trove [2]_ information. + +This PEP does not address either issues of package dependency, nor +centralised storage of packages. Nor is it proposing a local +database of packages as described in PEP 262 [6]_. + +Existing package repositories such as the Vaults of Parnassus [3]_, +CPAN [4]_ and PAUSE [5]_ will be investigated as prior art in this +field. + + +Rationale +========= + +Python programmers have long needed a simple method of discovering +existing modules and systems available for their use. It is arguable +that the existence of these systems for other languages have been a +significant contribution to their popularity. The existence of the +catalog-sig, and the many discussions there indicate that there is a +large population of users who recognise this need. + +The introduction of the distutils packaging system to Python +simplified the process of distributing shareable code, and included +mechanisms for capture of package metadata, but did little with the +metadata save ship it with the package. + +The server should be hosted in the python.org domain, giving it an air +of legitimacy that existing catalog efforts do not have. + +The interface for submitting information to the catalog should be as +simple as possible - hopefully just one command-line command for +more regular users. + +Issues of package dependency are not addressed due to the complexity +of such a system. The original PEP which proposed such a system was +dropped as the author realised that platform packaging system (RPM, +apt, etc) already handle dependencies, installation and removal. + +Issues of package dissemination (storage on a central server) are +not addressed because they require assumptions about availability of +storage and bandwidth that I am not in a position to make. + + +Specification +============= + +The specification takes three parts, the `web interface`_, the +`distutils register command`_ and the `distutils trove +categorisation`_. + +Web Interface +------------- + +A web interface is implemented over a simple store. The interface is +available through the python.org domain, either directly or as +packages.python.org. + +The store has columns for all metadata fields. The (name, version) +double is used as a uniqueness key. Additional submissions for an +existing (name, version) will result in an *update* operation. + +The web interface implements the following commands/interfaces: + +**index** + Lists known packages, optionally filtered. An additional HTML page, + **search**, presents a form to the user which is used to customise + the index view. The index will include a browsing interface like + that presented in the Trove interface design section 4.3. The + results will be paginated, sorted alphabetically and only showing + the most recent version. Most recent version information will be + determined using the distutils LooseVersion class. +**display** + Displays information about the package. All fields are displayed as + plain text. The "url" (or "home_page") field is hyperlinked. +**submit** + Accepts a POST form submission of metadata about a package. The + "name" and "version" fields are mandatory, as they uniquely identify + an entry in the index. Submit will automatically determine whether + to create a new entry or updating an existing entry. The metadata + is checked for correctness where appropriate - specifically the + Trove discriminators are compared with the allowed set. An update will + update all information about the package based on the new submitted + information. + + There will also be a submit/edit form that will allow manual submission + and updating for those who do not use distutils. +**user** + Registers a new user with the index. Requires username, password and + email address. Passwords will be stored on the server as SHA hashes. + If the username already exists in the database: + + 1. If valid HTTP Basic auth is provided, the password and email + address are updated with the submission information, or + 2. If no valid auth is provided, the user is informed that the login + is already taken. + + Registration will be a three-step process, involving: + + 1. User submission of details via the distutils *register* command, + 2. Package server sending email to the user's email address with a URL + to visit to confirm registration with a random one-time key, and + 3. User visits URL with the key and confirms registration. + + Several user Roles will exist: + + Admin + Can assign Owner Role - they decide who may submit for a given + package name. + Owner + Owns a package name, may assign Maintainer Role for that name + Maintainer + Can submit and update info for a particular package name + +**password_reset** + Using a supplied email address as the key, this resets a user's + password and send an email with the new password. + +The **submit** command will require HTTP Basic authentication, +preferrably over an HTTPS connection. + + +Distutils Register Command +-------------------------- + +An additional distutils command, "register" is implemented which +posts the package metadata to the central server. The register command +automatically handles user registration; the user is presented with +three options: + +1. login and submit package information +2. register as a new packager +3. send password reminder email + +On UN*X systems, the user will be prompted at exit to save their +username/password to a file in their home directory in the file +``.pythonpackagerc``. A similar system could be used on Windows, I +suppose. + +Notification of changes to a package entry will be sent to all users +who have submitted information about the package. That is, the original +submitter and any subsequent updaters. + +The register command will include a --verify option which performs a +test submission to the server without actually committing the data. +The server will perform its submission verification checks as usual +and report any errors it would have reported during a normal +submission. This is useful for verifying correctness of Trove +discriminators. + + +Distutils Trove Categorisation +------------------------------ + +The Trove concept of *discrimination* will be added to the metadata +set available to package authors through the new attribute +"classifiers". The list of classifiers will be available through the +web, and added to the package like so:: + + setup( + name = "roundup", + version = __version__, + classifiers = [ + 'Development Status :: 4 - Beta', + 'Environment :: Console (Text Based)', + 'Environment :: Web Environment', + 'Intended Audience :: End Users/Desktop', + 'Intended Audience :: Developers', + 'Intended Audience :: System Administrators', + 'License :: OSI Approved :: Python License', + 'Operating System :: MacOS X', + 'Operating System :: Microsoft :: Windows', + 'Operating System :: POSIX', + 'Programming Language :: Python', + 'Topic :: Communications :: Email', + 'Topic :: Office/Business', + 'Topic :: Software Development :: Bug Tracking', + ], + url = 'http://sourceforge.net/projects/roundup/', + ... + ) + +It was decided that strings would be used for the classification +entries due to the deep nesting that would be involved in a more +formal Python structure. + +The original Trove specification that classification namespaces be +separated by slashes ("/") unfortunately collides with many of the +names having slashes in them (eg. "OS/2"). The double-colon solution +(" :: ") implemented by Sourceforge and Freshmeat gets around this +limitation. + +The list of classification values on the module index has been merged +from Freshmeat and Sourceforge (with their permission). This list will +be made available through the web interface as a text list which may +then be copied to the ``setup.py`` file. The register command's +``--verify`` option will also check classifiers values. + + +Reference Implementation +======================== + +Reference code and demonstration server are available at + + http://mechanicalcat.net:8081/ + +===== =================================================== +Done Feature +===== =================================================== + Y Submission + Y Index + Y Display + Y Search + Y User rego + Y User verification + Y Password reset + Y Admin interfaces for user/package maintenance + N Trove +===== =================================================== + +In the two days 22nd and 23rd October after the first announcement to +the catalog-sig (22nd) and distutils-sig (23rd), the prototype had 45 +visitors (not including myself), two of whom used the register command +to submit package information. + + +References +========== + +.. [1] distutils packaging system + (http://www.python.org/doc/current/lib/module-distutils.html) + +.. [2] Trove + (http://tuxedo.org/~esr/trove/) + +.. [3] Vaults of Parnassus + (http://www.vex.net/parnassus/) + +.. [4] CPAN + (http://www.cpan.org/) + +.. [5] PAUSE + (http://pause.cpan.org/) + +.. [6] PEP 262, A Database of Installed Python Packages + (http://www.python.org/peps/pep-0262.html) + +Copyright +========= + +This document has been placed in the public domain. + + +Acknowledgements +================ + +Anthony Baxter for encouragement and feedback during initial drafting. + +The many participants of the distutils and catalog SIGs for their +ideas over the years. + + +.. + Local Variables: + mode: indented-text + indent-tabs-mode: nil + sentence-end-double-space: t + fill-column: 70 + End: diff --git a/doc/rest.doc b/doc/rest.doc new file mode 100644 index 0000000..b9d84f4 --- /dev/null +++ b/doc/rest.doc @@ -0,0 +1,639 @@ +PEP: 12 +Title: Sample reStructuredText PEP Template +Version: $Revision$ +Last-Modified: $Date$ +Author: David Goodger <goodger@users.sourceforge.net>, + Barry A. Warsaw <barry@zope.com> +Status: Active +Type: Informational +Content-Type: text/x-rst +Created: 05-Aug-2002 +Post-History: 30-Aug-2002 + + +Abstract +======== + +This PEP provides a boilerplate or sample template for creating your +own reStructuredText PEPs. In conjunction with the content guidelines +in PEP 1 [1]_, this should make it easy for you to conform your own +PEPs to the format outlined below. + +Note: if you are reading this PEP via the web, you should first grab +the text (reStructuredText) source of this PEP in order to complete +the steps below. **DO NOT USE THE HTML FILE AS YOUR TEMPLATE!** + +To get the source of this (or any) PEP, look at the top of the HTML +page and click on the link titled "PEP Source". + +If you would prefer not to use markup in your PEP, please see PEP 9, +"Sample Plaintext PEP Template" [2]_. + + +Rationale +========= + +PEP submissions come in a wide variety of forms, not all adhering +to the format guidelines set forth below. Use this template, in +conjunction with the format guidelines below, to ensure that your +PEP submission won't get automatically rejected because of form. + +ReStructuredText is offered as an alternative to plaintext PEPs, to +allow PEP authors more functionality and expressivity, while +maintaining easy readability in the source text. The processed HTML +form makes the functionality accessible to readers: live hyperlinks, +styled text, tables, images, and automatic tables of contents, among +other advantages. For an example of a PEP marked up with +reStructuredText, see PEP 287. + + +How to Use This Template +======================== + +To use this template you must first decide whether your PEP is going +to be an Informational or Standards Track PEP. Most PEPs are +Standards Track because they propose a new feature for the Python +language or standard library. When in doubt, read PEP 1 for details +or contact the PEP editors <peps@python.org>. + +Once you've decided which type of PEP yours is going to be, follow the +directions below. + +- Make a copy of this file (``.txt`` file, **not** HTML!) and perform + the following edits. + +- Replace the "PEP: 9" header with "PEP: XXX" since you don't yet have + a PEP number assignment. + +- Change the Title header to the title of your PEP. + +- Leave the Version and Last-Modified headers alone; we'll take care + of those when we check your PEP into CVS. + +- Change the Author header to include your name, and optionally your + email address. Be sure to follow the format carefully: your name + must appear first, and it must not be contained in parentheses. + Your email address may appear second (or it can be omitted) and if + it appears, it must appear in angle brackets. It is okay to + obfuscate your email address. + +- If there is a mailing list for discussion of your new feature, add a + Discussions-To header right after the Author header. You should not + add a Discussions-To header if the mailing list to be used is either + python-list@python.org or python-dev@python.org, or if discussions + should be sent to you directly. Most Informational PEPs don't have + a Discussions-To header. + +- Change the Status header to "Draft". + +- For Standards Track PEPs, change the Type header to "Standards + Track". + +- For Informational PEPs, change the Type header to "Informational". + +- For Standards Track PEPs, if your feature depends on the acceptance + of some other currently in-development PEP, add a Requires header + right after the Type header. The value should be the PEP number of + the PEP yours depends on. Don't add this header if your dependent + feature is described in a Final PEP. + +- Change the Created header to today's date. Be sure to follow the + format carefully: it must be in ``dd-mmm-yyyy`` format, where the + ``mmm`` is the 3 English letter month abbreviation, i.e. one of Jan, + Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec. + +- For Standards Track PEPs, after the Created header, add a + Python-Version header and set the value to the next planned version + of Python, i.e. the one your new feature will hopefully make its + first appearance in. Do not use an alpha or beta release + designation here. Thus, if the last version of Python was 2.2 alpha + 1 and you're hoping to get your new feature into Python 2.2, set the + header to:: + + Python-Version: 2.2 + +- Leave Post-History alone for now; you'll add dates to this header + each time you post your PEP to python-list@python.org or + python-dev@python.org. If you posted your PEP to the lists on + August 14, 2001 and September 3, 2001, the Post-History header would + look like:: + + Post-History: 14-Aug-2001, 03-Sept-2001 + + You must manually add new dates and check them in. If you don't + have check-in privileges, send your changes to the PEP editors. + +- Add a Replaces header if your PEP obsoletes an earlier PEP. The + value of this header is the number of the PEP that your new PEP is + replacing. Only add this header if the older PEP is in "final" + form, i.e. is either Accepted, Final, or Rejected. You aren't + replacing an older open PEP if you're submitting a competing idea. + +- Now write your Abstract, Rationale, and other content for your PEP, + replacing all this gobbledygook with your own text. Be sure to + adhere to the format guidelines below, specifically on the + prohibition of tab characters and the indentation requirements. + +- Update your References and Copyright section. Usually you'll place + your PEP into the public domain, in which case just leave the + Copyright section alone. Alternatively, you can use the `Open + Publication License`__, but public domain is still strongly + preferred. + + __ http://www.opencontent.org/openpub/ + +- Leave the Emacs stanza at the end of this file alone, including the + formfeed character ("^L", or ``\f``). + +- Send your PEP submission to the PEP editors at peps@python.org. + + +ReStructuredText PEP Formatting Requirements +============================================ + +The following is a PEP-specific summary of reStructuredText syntax. +For the sake of simplicity and brevity, much detail is omitted. For +more detail, see `Resources`_ below. `Literal blocks`_ (in which no +markup processing is done) are used for examples throughout, to +illustrate the plaintext markup. + + +General +------- + +You must adhere to the Emacs convention of adding two spaces at the +end of every sentence. You should fill your paragraphs to column 70, +but under no circumstances should your lines extend past column 79. +If your code samples spill over column 79, you should rewrite them. + +Tab characters must never appear in the document at all. A PEP should +include the standard Emacs stanza included by example at the bottom of +this PEP. + + +Section Headings +---------------- + +PEP headings must begin in column zero and the initial letter of each +word must be capitalized as in book titles. Acronyms should be in all +capitals. Section titles must be adorned with an underline, a single +repeated punctuation character, which begins in column zero and must +extend at least as far as the right edge of the title text (4 +characters minimum). First-level section titles are underlined with +"=" (equals signs), second-level section titles with "-" (hyphens), +and third-level section titles with "'" (single quotes or +apostrophes). For example:: + + First-Level Title + ================= + + Second-Level Title + ------------------ + + Third-Level Title + ''''''''''''''''' + +If there are more than three levels of sections in your PEP, you may +insert overline/underline-adorned titles for the first and second +levels as follows:: + + ============================ + First-Level Title (optional) + ============================ + + ----------------------------- + Second-Level Title (optional) + ----------------------------- + + Third-Level Title + ================= + + Fourth-Level Title + ------------------ + + Fifth-Level Title + ''''''''''''''''' + +You shouldn't have more than five levels of sections in your PEP. If +you do, you should consider rewriting it. + +You must use two blank lines between the last line of a section's body +and the next section heading. If a subsection heading immediately +follows a section heading, a single blank line in-between is +sufficient. + +The body of each section is not normally indented, although some +constructs do use indentation, as described below. Blank lines are +used to separate constructs. + + +Paragraphs +---------- + +Paragraphs are left-aligned text blocks separated by blank lines. +Paragraphs are not indented unless they are part of an indented +construct (such as a block quote or a list item). + + +Inline Markup +------------- + +Portions of text within paragraphs and other text blocks may be +styled. For example:: + + Text may be marked as *emphasized* (single asterisk markup, + typically shown in italics) or **strongly emphasized** (double + asterisks, typically boldface). ``Inline literals`` (using double + backquotes) are typically rendered in a monospaced typeface. No + further markup recognition is done within the double backquotes, + so they're safe for any kind of code snippets. + + +Block Quotes +------------ + +Block quotes consist of indented body elements. For example:: + + This is a paragraph. + + This is a block quote. + + A block quote may contain many paragraphs. + +Block quotes are used to quote extended passages from other sources. +Block quotes may be nested inside other body elements. Use 4 spaces +per indent level. + + +Literal Blocks +-------------- + +.. + In the text below, double backquotes are used to denote inline + literals. "``::``" is written so that the colons will appear in a + monospaced font; the backquotes (``) are markup, not part of the + text. See "Inline Markup" above. + + By the way, this is a comment, described in "Comments" below. + +Literal blocks are used for code samples or preformatted ASCII art. To +indicate a literal block, preface the indented text block with +"``::``" (two colons). The literal block continues until the end of +the indentation. Indent the text block by 4 spaces. For example:: + + This is a typical paragraph. A literal block follows. + + :: + + for a in [5,4,3,2,1]: # this is program code, shown as-is + print a + print "it's..." + # a literal block continues until the indentation ends + +The paragraph containing only "``::``" will be completely removed from +the output; no empty paragraph will remain. "``::``" is also +recognized at the end of any paragraph. If immediately preceded by +whitespace, both colons will be removed from the output. When text +immediately precedes the "``::``", *one* colon will be removed from +the output, leaving only one colon visible (i.e., "``::``" will be +replaced by "``:``"). For example, one colon will remain visible +here:: + + Paragraph:: + + Literal block + + +Lists +----- + +Bullet list items begin with one of "-", "*", or "+" (hyphen, +asterisk, or plus sign), followed by whitespace and the list item +body. List item bodies must be left-aligned and indented relative to +the bullet; the text immediately after the bullet determines the +indentation. For example:: + + This paragraph is followed by a list. + + * This is the first bullet list item. The blank line above the + first list item is required; blank lines between list items + (such as below this paragraph) are optional. + + * This is the first paragraph in the second item in the list. + + This is the second paragraph in the second item in the list. + The blank line above this paragraph is required. The left edge + of this paragraph lines up with the paragraph above, both + indented relative to the bullet. + + - This is a sublist. The bullet lines up with the left edge of + the text blocks above. A sublist is a new list so requires a + blank line above and below. + + * This is the third item of the main list. + + This paragraph is not part of the list. + +Enumerated (numbered) list items are similar, but use an enumerator +instead of a bullet. Enumerators are numbers (1, 2, 3, ...), letters +(A, B, C, ...; uppercase or lowercase), or Roman numerals (i, ii, iii, +iv, ...; uppercase or lowercase), formatted with a period suffix +("1.", "2."), parentheses ("(1)", "(2)"), or a right-parenthesis +suffix ("1)", "2)"). For example:: + + 1. As with bullet list items, the left edge of paragraphs must + align. + + 2. Each list item may contain multiple paragraphs, sublists, etc. + + This is the second paragraph of the second list item. + + a) Enumerated lists may be nested. + b) Blank lines may be omitted between list items. + +Definition lists are written like this:: + + what + Definition lists associate a term with a definition. + + how + The term is a one-line phrase, and the definition is one + or more paragraphs or body elements, indented relative to + the term. + + +Tables +------ + +Simple tables are easy and compact:: + + ===== ===== ======= + A B A and B + ===== ===== ======= + False False False + True False False + False True False + True True True + ===== ===== ======= + +There must be at least two columns in a table (to differentiate from +section titles). Column spans use underlines of hyphens ("Inputs" +spans the first two columns):: + + ===== ===== ====== + Inputs Output + ------------ ------ + A B A or B + ===== ===== ====== + False False False + True False True + False True True + True True True + ===== ===== ====== + +Text in a first-column cell starts a new row. No text in the first +column indicates a continuation line; the rest of the cells may +consist of multiple lines. For example:: + + ===== ========================= + col 1 col 2 + ===== ========================= + 1 Second column of row 1. + 2 Second column of row 2. + Second line of paragraph. + 3 - Second column of row 3. + + - Second item in bullet + list (row 3, column 2). + ===== ========================= + + +Hyperlinks +---------- + +When referencing an external web page in the body of a PEP, you should +include the title of the page in the text, with either an inline +hyperlink reference to the URL or a footnote reference (see +`Footnotes`_ below). Do not include the URL in the body text of the +PEP. + +Hyperlink references use backquotes and a trailing underscore to mark +up the reference text; backquotes are optional if the reference text +is a single word. For example:: + + In this paragraph, we refer to the `Python web site`_. + +An explicit target provides the URL. Put targets in a References +section at the end of the PEP, or immediately after the reference. +Hyperlink targets begin with two periods and a space (the "explicit +markup start"), followed by a leading underscore, the reference text, +a colon, and the URL (absolute or relative):: + + .. _Python web site: http://www.python.org/ + +The reference text and the target text must match (although the match +is case-insensitive and ignores differences in whitespace). Note that +the underscore trails the reference text but precedes the target text. +If you think of the underscore as a right-pointing arrow, it points +*away* from the reference and *toward* the target. + +The same mechanism can be used for internal references. Every unique +section title implicitly defines an internal hyperlink target. We can +make a link to the Abstract section like this:: + + Here is a hyperlink reference to the `Abstract`_ section. The + backquotes are optional since the reference text is a single word; + we can also just write: Abstract_. + +Footnotes containing the URLs from external targets will be generated +automatically at the end of the References section of the PEP, along +with footnote references linking the reference text to the footnotes. + +Text of the form "PEP x" or "RFC x" (where "x" is a number) will be +linked automatically to the appropriate URLs. + + +Footnotes +--------- + +Footnote references consist of a left square bracket, a number, a +right square bracket, and a trailing underscore:: + + This sentence ends with a footnote reference [1]_. + +Whitespace must precede the footnote reference. Leave a space between +the footnote reference and the preceding word. + +When referring to another PEP, include the PEP number in the body +text, such as "PEP 1". The title may optionally appear. Add a +footnote reference following the title. For example:: + + Refer to PEP 1 [2]_ for more information. + +Add a footnote that includes the PEP's title and author. It may +optionally include the explicit URL on a separate line, but only in +the References section. Footnotes begin with ".. " (the explicit +markup start), followed by the footnote marker (no underscores), +followed by the footnote body. For example:: + + References + ========== + + .. [2] PEP 1, "PEP Purpose and Guidelines", Warsaw, Hylton + (http://www.python.org/peps/pep-0001.html) + +If you decide to provide an explicit URL for a PEP, please use this as +the URL template:: + + http://www.python.org/peps/pep-xxxx.html + +PEP numbers in URLs must be padded with zeros from the left, so as to +be exactly 4 characters wide, however PEP numbers in the text are +never padded. + +During the course of developing your PEP, you may have to add, remove, +and rearrange footnote references, possibly resulting in mismatched +references, obsolete footnotes, and confusion. Auto-numbered +footnotes allow more freedom. Instead of a number, use a label of the +form "#word", where "word" is a mnemonic consisting of alphanumerics +plus internal hyphens, underscores, and periods (no whitespace or +other characters are allowed). For example:: + + Refer to PEP 1 [#PEP-1]_ for more information. + + References + ========== + + .. [#PEP-1] PEP 1, "PEP Purpose and Guidelines", Warsaw, Hylton + + http://www.python.org/peps/pep-0001.html + +Footnotes and footnote references will be numbered automatically, and +the numbers will always match. Once a PEP is finalized, auto-numbered +labels should be replaced by numbers for simplicity. + + +Images +------ + +If your PEP contains a diagram, you may include it in the processed +output using the "image" directive:: + + .. image:: diagram.png + +Any browser-friendly graphics format is possible: .png, .jpeg, .gif, +.tiff, etc. + +Since this image will not be visible to readers of the PEP in source +text form, you should consider including a description or ASCII art +alternative, using a comment (below). + + +Comments +-------- + +A comment block is an indented block of arbitrary text immediately +following an explicit markup start: two periods and whitespace. Leave +the ".." on a line by itself to ensure that the comment is not +misinterpreted as another explicit markup construct. Comments are not +visible in the processed document. For the benefit of those reading +your PEP in source form, please consider including a descriptions of +or ASCII art alternatives to any images you include. For example:: + + .. image:: dataflow.png + + .. + Data flows from the input module, through the "black box" + module, and finally into (and through) the output module. + +The Emacs stanza at the bottom of this document is inside a comment. + + +Escaping Mechanism +------------------ + +reStructuredText uses backslashes ("``\``") to override the special +meaning given to markup characters and get the literal characters +themselves. To get a literal backslash, use an escaped backslash +("``\\``"). There are two contexts in which backslashes have no +special meaning: `literal blocks`_ and inline literals (see `Inline +Markup`_ above). In these contexts, no markup recognition is done, +and a single backslash represents a literal backslash, without having +to double up. + +If you find that you need to use a backslash in your text, consider +using inline literals or a literal block instead. + + +Habits to Avoid +=============== + +Many programmers who are familiar with TeX often write quotation marks +like this:: + + `single-quoted' or ``double-quoted'' + +Backquotes are significant in reStructuredText, so this practice +should be avoided. For ordinary text, use ordinary 'single-quotes' or +"double-quotes". For inline literal text (see `Inline Markup`_ +above), use double-backquotes:: + + ``literal text: in here, anything goes!`` + + +Resources +========= + +Many other constructs and variations are possible. For more details +about the reStructuredText markup, in increasing order of +thoroughness, please see: + +* `A ReStructuredText Primer`__, a gentle introduction. + + __ http://docutils.sourceforge.net/docs/rst/quickstart.html + +* `Quick reStructuredText`__, a users' quick reference. + + __ http://docutils.sourceforge.net/docs/rst/quickref.html + +* `reStructuredText Markup Specification`__, the final authority. + + __ http://docutils.sourceforge.net/spec/rst/reStructuredText.html + +The processing of reStructuredText PEPs is done using Docutils_. If +you have a question or require assistance with reStructuredText or +Docutils, please `post a message`_ to the `Docutils-Users mailing +list`_. The `Docutils project web site`_ has more information. + +.. _Docutils: http://docutils.sourceforge.net/ +.. _post a message: + mailto:docutils-users@lists.sourceforge.net?subject=PEPs +.. _Docutils-Users mailing list: + http://lists.sourceforge.net/lists/listinfo/docutils-users +.. _Docutils project web site: http://docutils.sourceforge.net/ + + +References +========== + +.. [1] PEP 1, PEP Purpose and Guidelines, Warsaw, Hylton + (http://www.python.org/peps/pep-0001.html) + +.. [2] PEP 9, Sample Plaintext PEP Template, Warsaw + (http://www.python.org/peps/pep-0009.html) + + +Copyright +========= + +This document has been placed in the public domain. + + + +.. + Local Variables: + mode: indented-text + indent-tabs-mode: nil + sentence-end-double-space: t + fill-column: 70 + End: diff --git a/doc/sourceforge.trove.discriminators.txt b/doc/sourceforge.trove.discriminators.txt new file mode 100644 index 0000000..092c6d6 --- /dev/null +++ b/doc/sourceforge.trove.discriminators.txt @@ -0,0 +1,386 @@ +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 Independent +Operating System :: OS/2 +Operating System :: Other OS +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 :: PalmOS + +Environment :: Cocoa (MacOS X) +Environment :: Console (Text Based) +Environment :: Console (Text Based) :: Curses +Environment :: Console (Text Based) :: Newt +Environment :: Handhelds/PDA's +Environment :: No Input/Output (Daemon) +Environment :: Other Environment +Environment :: Web Environment +Environment :: Win32 (MS Windows) +Environment :: X11 Applications +Environment :: X11 Applications :: Gnome +Environment :: X11 Applications :: KDE + +Programming Language :: APL +Programming Language :: ASP +Programming Language :: Ada +Programming Language :: Assembly +Programming Language :: Assembly +Programming Language :: C +Programming Language :: C# +Programming Language :: C++ +Programming Language :: Cold Fusion +Programming Language :: Delphi/Kylix +Programming Language :: Eiffel +Programming Language :: Erlang +Programming Language :: Euler +Programming Language :: Euphoria +Programming Language :: Forth +Programming Language :: Fortran +Programming Language :: Java +Programming Language :: JavaScript +Programming Language :: Lisp +Programming Language :: Logo +Programming Language :: ML +Programming Language :: Modula +Programming Language :: Object Pascal +Programming Language :: Objective C +Programming Language :: PHP +Programming Language :: PL/SQL +Programming Language :: PROGRESS +Programming Language :: Pascal +Programming Language :: Perl +Programming Language :: Pike +Programming Language :: Prolog +Programming Language :: Python +Programming Language :: REBOL +Programming Language :: Rexx +Programming Language :: Ruby +Programming Language :: Scheme +Programming Language :: Simula +Programming Language :: Smalltalk +Programming Language :: Tcl +Programming Language :: Unix Shell +Programming Language :: Visual Basic +Programming Language :: XBasic +Programming Language :: Zope + +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 :: 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 :: 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 :: Zope Public License +License :: OSI Approved :: zlib/libpng License +License :: Other/Proprietary License +License :: Public Domain + +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 + +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 + +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 + +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 :: Email Clients (MUA) +Topic :: Communications :: Email :: Filters +Topic :: Communications :: Email :: Mail Transport Agents +Topic :: Communications :: Email :: Mailing List Servers +Topic :: Communications :: Email :: Post-Office +Topic :: Communications :: Email :: Post-Office :: IMAP +Topic :: Communications :: Email :: Post-Office :: POP3 +Topic :: Communications :: FIDO +Topic :: Communications :: Fax +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 :: Gnome +Topic :: Desktop Environment :: K Desktop Environment (KDE) +Topic :: Desktop Environment :: K Desktop Environment (KDE) :: Themes +Topic :: Desktop Environment :: Screen Savers +Topic :: Desktop Environment :: Window Managers +Topic :: Desktop Environment :: Window Managers :: Enlightenment +Topic :: Desktop Environment :: Window Managers :: Enlightenment :: Themes +Topic :: Education +Topic :: Education :: Computer Aided Instruction (CAI) +Topic :: Education :: Testing +Topic :: Games/Entertainment +Topic :: Games/Entertainment :: Board Games +Topic :: Games/Entertainment :: First Person Shooters +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 :: Internet +Topic :: Internet :: File Transfer Protocol (FTP) +Topic :: Internet :: Finger +Topic :: Internet :: Log Analysis +Topic :: Internet :: Name Service (DNS) +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 :: 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 :: 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 :: CD Audio +Topic :: Multimedia :: Sound/Audio :: CD Audio :: CD Playing +Topic :: Multimedia :: Sound/Audio :: CD Audio :: CD Ripping +Topic :: Multimedia :: Sound/Audio :: Capture/Recording +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 :: 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 :: 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 :: 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 :: Build Tools +Topic :: Software Development :: Code Generators +Topic :: Software Development :: Compilers +Topic :: Software Development :: Debuggers +Topic :: Software Development :: Interpreters +Topic :: Software Development :: Object Brokering +Topic :: Software Development :: Object Brokering :: CORBA +Topic :: Software Development :: Version Control +Topic :: Software Development :: Version Control :: CVS +Topic :: Software Development :: Version Control :: RCS +Topic :: Software Development :: Version Control :: SCCS +Topic :: System +Topic :: System :: Archiving +Topic :: System :: Archiving :: Backup +Topic :: System :: Archiving :: Compression +Topic :: System :: Archiving :: Packaging +Topic :: System :: Benchmark +Topic :: System :: Boot +Topic :: System :: Boot :: Init +Topic :: System :: Clustering +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 :: Networking +Topic :: System :: Networking :: Firewalls +Topic :: System :: Networking :: Monitoring +Topic :: System :: Networking :: Monitoring :: Hardware Watchdog +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 :: Software Distribution +Topic :: System :: System Shells +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 :: 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 + diff --git a/doc/sourceforge.trove.txt b/doc/sourceforge.trove.txt new file mode 100644 index 0000000..605b2a0 --- /dev/null +++ b/doc/sourceforge.trove.txt @@ -0,0 +1,29 @@ +Re: Trove stuff from sf.net +Date: Today 1:13:53 pm +From: Patrick McGovern <pmcgovern@vasoftware.com> +To: Richard Jones <rjones@ekit-inc.com> + +Thank you for the clarification. + +It's not clear to me if our trove categorization is Open Source or not. It's +something I would have to ponder with our Legal folks here.... + +Regardless, for your application I'm granting you the right to use the Trove +info. + +Pat- + +On Tue, Oct 29, 2002 at 01:02:46PM +1100, Richard Jones wrote: +> Hiya, regarding alexandria-Support Requests-628367, I'd like to use the Trove +> info in setting up a python modules index at python.org. The set from your +> site will be made available to python programmers to classify their modules. +> That's it in a nutshell. Because it's a one-off application, it's unlikely +> that the source will be released - but if necessary it can. +> +> +> Richard +> + +-- +Patrick McGovern +Director, SourceForge.net pmcgovern@vasoftware.com diff --git a/pypi.cgi b/pypi.cgi new file mode 100755 index 0000000..71309b4 --- /dev/null +++ b/pypi.cgi @@ -0,0 +1,65 @@ +#!/usr/bin/env python2 +# +# $Id$ + +import sys, os, cgi, StringIO, traceback + +# +# Provide interface to CGI HTTP response handling +# +class RequestWrapper: + '''Used to make the CGI server look like a BaseHTTPRequestHandler + ''' + def __init__(self, config, wfile): + self.wfile = wfile + self.config = config + def send_response(self, code): + self.wfile.write('Status: %s\r\n'%code) + def send_header(self, keyword, value): + self.wfile.write("%s: %s\r\n" % (keyword, value)) + def end_headers(self): + self.wfile.write("\r\n") + +# +# Main CGI handler +# +def main(request): + handler = WebUI(request, os.environ) + try: + handler.run() + except Unauthorised: + request.send_response(403) + request.send_header('Content-Type', 'text/html') + request.end_headers() + request.wfile.write('Unauthorised') + except NotFound: + request.send_response(404) + request.send_header('Content-Type', 'text/html') + request.end_headers() + request.wfile.write('Not found: %s'%client.path) + +# +# Now do the actual CGI handling +# +out, err = sys.stdout, sys.stderr +try: + sys.path.insert(0, '/home/rjones/src/distutils_rego') + from webui import WebUI + import config + cfg = config.Config('/home/rjones/src/distutils_rego/config.ini', 'webui') + request = RequestWrapper(cfg, out) + # force input/output to binary (important for file up/downloads) + main(request) +except SystemExit: + pass +except: + out.write('Status: 400\nContent-Type: text/html\n\n') + out.write("<pre>") + s = StringIO.StringIO() + traceback.print_exc(None, s) + out.write(cgi.escape(s.getvalue())) + out.write("</pre>\n") + +sys.stdout.flush() + +# vim: set filetype=python ts=4 sw=4 et si diff --git a/register.py b/register.py new file mode 100644 index 0000000..eb58037 --- /dev/null +++ b/register.py @@ -0,0 +1,227 @@ +"""distutils.command.register + +Implements the Distutils 'register' command (register with the repository). +""" + +# created 2002/10/21, Richard Jones + +__revision__ = "$Id$" + +import sys, os, string, urllib2, getpass, urlparse +import StringIO, ConfigParser + +from distutils.core import Command +from distutils.errors import * + +class register(Command): + + description = "register the distribution with the repository" + + DEFAULT_REPOSITORY = 'http://localhost/cgi-bin/package_server.cgi' + + user_options = [ + ('repository=', 'r', + "url of repository [default: %s]"%DEFAULT_REPOSITORY), + ] + + def initialize_options(self): + self.repository = None + + def finalize_options(self): + if self.repository is None: + self.repository = self.DEFAULT_REPOSITORY + + def run(self): + self.check_metadata() + self.send_metadata() + + def check_metadata(self): + """Ensure that all required elements of meta-data (name, version, + URL, (author and author_email) or (maintainer and + maintainer_email)) are supplied by the Distribution object; warn if + any are missing. + """ + metadata = self.distribution.metadata + + missing = [] + for attr in ('name', 'version', 'url'): + if not (hasattr(metadata, attr) and getattr(metadata, attr)): + missing.append(attr) + + if missing: + self.warn("missing required meta-data: " + + string.join(missing, ", ")) + + if metadata.author: + if not metadata.author_email: + self.warn("missing meta-data: if 'author' supplied, " + + "'author_email' must be supplied too") + elif metadata.maintainer: + if not metadata.maintainer_email: + self.warn("missing meta-data: if 'maintainer' supplied, " + + "'maintainer_email' must be supplied too") + else: + self.warn("missing meta-data: either (author and author_email) " + + "or (maintainer and maintainer_email) " + + "must be supplied") + + def send_metadata(self): + ''' Send the metadata to the package index server. + + Well, do the following: + 1. figure who the user is, and then + 2. send the data as a Basic auth'ed POST. + + First we try to read the username/password from + $HOME/.pythonpackagerc, which is a ConfigParser-formatted + file with a section [server-login] containing username and + password entries (both in clear text). Eg: + + [server-login] + username: fred + password: sekrit + + Otherwise, to figure who the user is, we offer the user three + choices: + + 1. use existing login, + 2. register as a new user, or + 3. set the password to a random string and email the user. + + ''' + choice = 'x' + username = password = '' + + # see if we can short-cut and get the username/password from the + # config + if os.environ.has_key('HOME'): + rc = os.path.join(os.environ['HOME'], '.pythonpackagerc') + if os.path.exists(rc): + config = ConfigParser.ConfigParser() + config.read(rc) + username = config.get('server-login', 'username') + password = config.get('server-login', 'password') + choice = '1' + + # get the user's login info + while choice not in '1234': + print '''We need to know who you are, so please choose either: + 1. use your existing login, + 2. register as a new user, + 3. have the server generate a new password for you (and email it to you), or + 4. quit +Your selection [default 1]: ''', + choice = raw_input() + if choice not in '1234': + print 'Please choose one of the four options!' + + if choice == '1': + # get the username and password + while not username: + username = raw_input('Username: ') + while not password: + password = getpass.getpass('Password: ') + + # set up the authentication + auth = urllib2.HTTPPasswordMgr() + host = urlparse.urlparse(self.repository)[1] + auth.add_password('python packages index', host, + username, password) + + # figure the data to send - the metadata plus some additional + # information used by the package server + meta = self.distribution.metadata + data = { + ':action': 'submit', + 'metadata-version' : '1.0', + 'name': meta.get_name(), + 'version': meta.get_version(), + 'summary': meta.get_description(), + 'home-page': meta.get_url(), + 'author': meta.get_contact(), + 'author-email': meta.get_contact_email(), + 'license': meta.get_licence(), + 'description': meta.get_long_description(), + 'keywords': meta.get_keywords(), + 'platform': meta.get_platforms(), + } + + # send the info to the server and report the result + (code, result) = self.post_to_server(data, auth) + print 'Server response: %s'%result + elif choice == '2': + data = {':action': 'user'} + data['name'] = data['password'] = data['email'] = '' + data['confirm'] = None + while not data['name']: + data['name'] = raw_input('Username: ') + while data['password'] != data['confirm']: + while not data['password']: + data['password'] = getpass.getpass('Password: ') + while not data['confirm']: + data['confirm'] = getpass.getpass(' Confirm: ') + if data['password'] != data['confirm']: + data['password'] = '' + data['confirm'] = None + print "Password and confirm don't match!" + while not data['email']: + data['email'] = raw_input(' EMail: ') + (code, result) = self.post_to_server(data) + if result != 'Registration OK': + print 'Server response: %s'%result + else: + print 'You will receive an email shortly.' + print 'Follow the instructions in it to complete registration.' + elif choice == '3': + data = {':action': 'password_reset'} + data['email'] = '' + while not data['email']: + data['email'] = raw_input('Your email address: ') + (code, result) = self.post_to_server(data) + print 'Server response: %s'%result + + def post_to_server(self, data, auth=None): + ''' Post a query to the server, and return a string response. + ''' + # Build up the MIME payload for the urllib2 POST + boundary = '--------------GHSKFJDLGDS7543FJKLFHRE75642756743254' + sep_boundary = '\n--' + boundary + end_boundary = sep_boundary + '--' + + # MIME encode the POST data + body = StringIO.StringIO() + for key, value in data.items(): + # handle multiple entries for the same name + if type(value) != type([]): + value = [value] + for value in value: + body.write(sep_boundary) + body.write('\nContent-Disposition: form-data; name="%s"'%key) + body.write("\n\n") + body.write(str(value)) + if value and value[-1] == '\r': + body.write('\n') # write an extra newline (lurve Macs) + body.write(end_boundary) + body.write("\n") + body = body.getvalue() + + # build the Request + headers = { + 'Content-type': 'multipart/form-data; boundary=%s'%boundary, + 'Content-length': str(len(body)) + } + req = urllib2.Request(self.repository, body, headers) + + # handle HTTP and include the Basic Auth handler + opener = urllib2.build_opener( + urllib2.HTTPBasicAuthHandler(password_mgr=auth) + ) + try: + result = opener.open(req) + except urllib2.HTTPError, e: + return (e.code, e.fp.read()) + except urllib2.URLError, e: + return (None, str(e)) + + return (200, result.read()) + diff --git a/webui.py b/webui.py new file mode 100644 index 0000000..2c767e8 --- /dev/null +++ b/webui.py @@ -0,0 +1,573 @@ + +import sys, os, urllib, StringIO, traceback, cgi, binascii, getopt +import time, whrandom, smtplib, base64, sha + +import store, config + +class NotFound(Exception): + pass +class Unauthorised(Exception): + pass +class Redirect(Exception): + pass +class FormError(Exception): + pass + +rego_message = '''Subject: Complete your registration +To: %(email)s + +To complete your registration of the user "%(name)s" with the python module +index, please visit the following URL: + + %(url)s?:action=user&otk=%(otk)s + +''' + +password_message = '''Subject: Password has been reset +To: %(email)s + +Your login is: %(name)s +Your password is now: %(password)s +''' + +chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' + +class WebUI: + ''' Handle a request as defined by the "env" and "cgi" parameters. Use + the "handler" to respond to the user. + ''' + def __init__(self, handler, env): + self.handler = handler + self.config = handler.config + self.wfile = handler.wfile + self.env = env + self.form = cgi.FieldStorage(fp=handler.rfile, environ=env) + whrandom.seed(int(time.time())%256) + + def run(self): + ''' Run the request, handling all uncaught errors and finishing off + cleanly. + ''' + self.store = store.Store(self.config) + self.store.open() + try: + try: + self.inner_run() + except NotFound: + self.handler.send_error(404) + except Unauthorised, message: + self.handler.send_response(401) + self.handler.send_header('Content-Type', 'text/plain') + self.handler.send_header('WWW-Authenticate', + 'Basic realm="python packages index"') + self.handler.end_headers() + self.wfile.write(str(message)) + except Redirect, path: + self.handler.send_response(301) + self.handler.send_header('Location', path) + except FormError, message: + self.page_head('Python Packages Index', 'Error processing form', + 400) + self.wfile.write('<p class="errror">Error processing form:'\ + ' %s</p>'%message) + except: + self.page_head('Python Packages Index', 'Error...', 400) + self.wfile.write("<pre>") + s = StringIO.StringIO() + traceback.print_exc(None, s) + self.wfile.write(cgi.escape(s.getvalue())) + self.wfile.write("</pre>\n") + finally: + self.store.close() + + def inner_run(self): + ''' Figure out what the request is, and farm off to the appropriate + handler. + ''' + # see if the user has provided a username/password + self.username = None + auth = self.env.get('HTTP_CGI_AUTHORIZATION', '').strip() + if auth: + authtype, auth = auth.split() + if authtype.lower() == 'basic': + un, pw = base64.decodestring(auth).split(':') + if self.store.has_user(un): + pw = sha.sha(pw).hexdigest() + user = self.store.get_user(un) + if pw != user['password']: + raise Unauthorised, 'Incorrect password' + self.username = un + self.store.set_user(un, self.env['REMOTE_ADDR']) + + # now handle the request + if self.form.has_key(':action'): + action = self.form[':action'].value + else: + action = 'index' + + # make sure the user has permission + if action in ('submit', ): + if self.username is None: + raise Unauthorised + if self.store.get_otk(self.username): + raise Unauthorised + + # handle the action + if action == 'submit': + self.submit() + elif action == 'submit_form': + self.submit_form() + elif action == 'display': + self.display() + elif action == 'search_form': + self.search_form() + elif action == 'register_form': + self.register_form() + elif action == 'user': + self.user() + elif action == 'password_reset': + self.password_reset() + elif action == 'index': + self.index() + elif action == 'role': + self.role() + elif action == 'role_form': + self.role_form() + else: + raise ValueError, 'Unknown action' + + # commit any database changes + self.store.commit() + + def page_head(self, title, heading=None, code=200): + ''' Page header + ''' + self.handler.send_response(code) + self.handler.send_header('Content-Type', 'text/html') + self.handler.end_headers() + if heading is None: heading = title + self.wfile.write(''' +<html><head><title>%s</title> +<link rel="stylesheet" type="text/css" href="http://mechanicalcat.net/style.css"> +<link rel="stylesheet" type="text/css" href="http://mechanicalcat.net/page.css"> +</head> +<body> +<div id="header"><h1>%s</h1></div> +<div id="content"> +'''%(title, heading)) + + def page_foot(self): + self.wfile.write('\n</div>\n</body></html>\n') + + def index(self): + ''' Print up an index page + ''' + self.page_head('Python modules index') + w = self.wfile.write + w('<a href="?:action=search_form">search</a>\n') + w('| <a href="?:action=role_form">admin</a>\n') + w('| <a href="?:action=submit_form">manual submission</a>\n') + w('| <a href="?:action=register_form">register for a login</a>\n') + w('<ul>\n') + spec = {} + for k in self.form.keys(): + if k.startswith(':'): + continue + value = self.form[k] + k = k.replace('-', '_') + if type(value) == type([]): + spec[k] = filter(None, [x.value.strip() for x in value]) + else: + spec[k] = filter(None, [value.value.strip()]) + for name, version in self.store.query_packages(spec): + w('<li><a href="?:action=display&name=%s&version=%s">%s %s</a>\n'%( + urllib.quote(name), urllib.quote(version), name, version)) + w(''' +</ul> +<hr> +To list your <b>distutils</b>-packaged distribution here: +<ol> +<li>Copy <a href="http://mechanicalcat.net/tech/distutils_rego/register.py">register.py</a> to your +python lib "distutils/command" directory (typically something like +"/usr/lib/python2.1/distutils/command/"). +<li>Run "setup.py register" as you would normally run "setup.py" for your +distribution - this will register your distribution's metadata with the +index. +<li>... that's <em>it</em> +</ol> +<p>In a nutshell, this server is a set of three modules ( +<a href="http://mechanicalcat.net/tech/distutils_rego/config.py">config.py</a> +, <a +href="http://mechanicalcat.net/tech/distutils_rego/store.py">store.py</a> and <a +href="http://mechanicalcat.net/tech/distutils_rego/webui.py">webui.py</a>) +and one config file (<a +href="http://mechanicalcat.net/tech/distutils_rego/config.ini">config.ini</a>) +which sit over a single <a href="http://www.hwaci.com/sw/sqlite/">sqlite</a> (simple, speedy) table. The register command posts the +metadata and the web interface stores it away. The storage layer handles +searching, but the web interface doesn't expose it yet :)</p> +<p>Entries are unique by (name, version) and multiple submissions of the same +(name, version) result in updates to the existing entry.</p> +''') + self.page_foot() + + def search_form(self): + ''' A form used to generate filtered index displays + ''' + self.page_head('Python modules search') + self.wfile.write(''' +<form> +<input type="hidden" name=":action" value="index"> +<table class="form"> +<tr><th>Name:</th> + <td><input name="name"></td> +</tr> +<tr><th>Version:</th> + <td><input name="version"></td> +</tr> +<tr><th>Summary:</th> + <td><input name="summary"></td> +</tr> +<tr><th>Description:</th> + <td><input name="description"></td> +</tr> +<tr><th>Long Description:</th> + <td><input name="long_description"></td> +</tr> +<tr><th>Keywords:</th> + <td><input name="keywords"></td> +</tr> + +<tr><th>Hidden:</th> + <td><select name="hidden"> + <option value="0">No</option> + <option value="1">Yes</option> + <option value="">Don't Care</option> + </select></td> +</tr> +<tr><td> </td><td><input type="submit" value="Search"></td></tr> +</table> +</form> +''') + self.page_foot() + + def role_form(self): + ''' A form used to maintain user Roles + ''' + package_name = '' + if self.form.has_key('package_name'): + package_name = self.form['package_name'].value + if not (self.store.has_role('Admin', package_name) or + self.store.has_role('Owner', package_name)): + raise Unauthorised + package = ''' +<tr><th>Package Name:</th> + <td><input type="hidden" name="package_name" value="%s">%s</td> +</tr> +'''%(urllib.quote(package_name), cgi.escape(package_name)) + elif not self.store.has_role('Admin', ''): + raise Unauthorised + else: + package = ''' +<tr><th>Package Name:</th> + <td><input name="package_name"></td> +</tr> +''' + # now write the body + self.page_head('Python package index', 'Role maintenance') + self.wfile.write(''' +<form> +<input type="hidden" name=":action" value="role"> +<table class="form"> +<tr><th>User Name:</th> + <td><input name="user_name"></td> +</tr> +%s +<tr><th>Role to Add:</th> + <td><select name="role_name"> + <option value="Owner">Owner</option> + <option value="Maintainer">Maintainer</option> + </select></td> +</tr> +<tr><td> </td><td><input type="submit" value="Add Role"></td></tr> +</table> +</form> +'''%package) + self.page_foot() + + def role(self): + ''' Add a Role to a user. + ''' + # required fields + if not self.form.has_key('package_name'): + raise FormError, 'package_name is required' + if not self.form.has_key('user_name'): + raise FormError, 'user_name is required' + if not self.form.has_key('role_name'): + raise FormError, 'role_name is required' + + # get the values + package_name = self.form['package_name'].value + user_name = self.form['user_name'].value + role_name = self.form['role_name'].value + + # further validation + if role_name not in ('Owner', 'Maintainer'): + raise FormError, 'role_name not Owner or Maintainer' + if not self.store.has_user(user_name): + raise FormError, "user doesn't exist" + if self.store.has_role(role_name, package_name, user_name): + raise FormError, 'user has that role already' + + self.store.add_role(user_name, role_name, package_name) + + self.plain_response('Role Added OK') + + def display(self): + ''' Print up an entry + ''' + w = self.wfile.write + name = self.form['name'].value + version = self.form['version'].value + info = self.store.get_package(name, version) + self.page_head('Python module: %s %s'%(name, version)) + un = urllib.quote(name) + uv = urllib.quote(version) + w('<a href="?:action=index">index</a>\n') + w('| <a href="?:action=role_form&package_name=%s">admin</a>\n'%un) + w('| <a href="?:action=submit_form&name=%s&version=%s"' + '>edit</a><br>'%(un, uv)) + w('<table class="form">\n') + keys = info.keys() + keys.sort() + for key in keys: + value = info[key] + if value is None: + value = '' + label = key.capitalize().replace('_', ' ') + if key in ('url', 'home_page') and value != 'UNKNOWN': + w('<tr><th nowrap>%s: </th><td><a href="%s">%s</a></td></tr>\n'%(label, + value, value)) + else: + w('<tr><th nowrap>%s: </th><td>%s</td></tr>\n'%(label, value)) + w('\n</table>\n') + + w('<table class="journal">\n') + w('<tr><th>Date</th><th>User</th><th>IP Address</th><th>Action</th></tr>\n') + for entry in self.store.get_journal(name, version): + w('<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>\n'%( + entry['submitted_date'], entry['submitted_by'], + entry['submitted_from'], entry['action'])) + w('\n</table>\n') + + self.page_foot() + + def submit_form(self): + ''' A form used to submit or edit package metadata. + ''' + # are we editing a specific entry? + info = {} + if self.form.has_key('name') and self.form.has_key('version'): + name = self.form['name'].value + version = self.form['version'].value + + # permission to do this? + if not (self.store.has_role('Owner', name) or + self.store.has_role('Maintainer', name)): + raise Unauthorised, 'Not Owner or Maintainer' + + # get the stored info + for k,v in self.store.get_package(name, version).items(): + info[k] = v + + self.page_head('Python package index', 'Manual submission') + w = self.wfile.write + w(''' +<form> +<input type="hidden" name=":action" value="submit"> +<input type="hidden" name=":display" value="html"> +<table class="form"> +''') + + # display all the properties + for property in 'name version author author_email maintainer maintainer_email home_page license summary description long_description keywords platform download_url hidden'.split(): + # get the existing entry + if self.form.has_key(property): + value = self.form[property].value + else: + value = info.get(property, '') + if value is None: + value = '' + + # form field + if property == 'hidden': + a = value=='1' and ' selected' or '' + b = value=='0' and ' selected' or '' + field = '''<select name="hidden"> + <option value="1"%s>Yes</option> + <option value="0"%s>No</option> + </select>'''%(a,b) + elif property.endswith('description'): + field = '<textarea name="%s" rows="5" cols="80">%s</textarea>'%( + property, value) + else: + field = '<input size="40" name="%s" value="%s">'%(property, value) + + # now spit out the form line + label = property.replace('_', ' ').capitalize() + w('<tr><th>%s:</th><td>%s</td></tr>'%(label, field)) + + w(''' +<tr><td> </td><td><input type="submit" value="Add Information"></td></tr> +</table> +</form> +''') + self.page_foot() + + def submit(self): + ''' Handle the submission of distro metadata. + ''' + data = {} + for k in self.form.keys(): + if k.startswith(':'): continue + v = self.form[k] + if type(v) == type([]): + data[k.lower().replace('-','_')]=','.join([x.value for x in v]) + else: + data[k.lower().replace('-','_')] = v.value + result = 'plain' + if self.form.has_key(':display'): + result = self.form[':display'].value + try: + self.validate_metadata(data) + except ValueError, message: + if result == 'html': + raise FormError, message + raise + self.store.store_package(data['name'], data['version'], data) + self.store.commit() + if result == 'html': + self.display() + else: + self.plain_response('Submission OK') + + def validate_metadata(self, data): + ''' Validate the contents of the metadata. + + XXX actually _do_ this + XXX implement the "validate" :action + ''' + if not data.has_key('name'): + raise ValueError, 'Missing required field: name' + if not data.has_key('version'): + raise ValueError, 'Missing required field: version' + if data.has_key('metadata_version'): + del data['metadata_version'] + + def plain_response(self, message): + ''' Return a plain-text response to the user. + ''' + self.handler.send_response(200) + self.handler.send_header('Content-Type', 'text/plain') + self.handler.end_headers() + self.wfile.write(message) + + def register_form(self): + ''' Throw up a form for regstering. + ''' + self.page_head('Python package index', 'Manual user registration') + w = self.wfile.write + w(''' +<form> +<input type="hidden" name=":action" value="user"> +<table class="form"> +<tr><th>Username:</th> + <td><input name="name"></td> +</tr> +<tr><th>Password:</th> + <td><input type="password" name="password"></td> +</tr> +<tr><th>Confirm:</th> + <td><input type="password" name="confirm"></td> +</tr> +<tr><th>Email Address:</th> + <td><input name="email"></td> +</tr> +<tr><td> </td><td><input type="submit" value="Register"></td></tr> +</table> +<p>A confirmation email will be sent to the address you nominate above.</p> +<p>To complete the registration process, visit the link indicated in the +email.</p> +''') + + def user(self): + ''' Register, update or validate a user. + + This interface handles one of three cases: + 1. new user sending in name, password and email + 2. completion of rego with One Time Key + 3. updating existing user details for currently authed user + ''' + info = {} + for param in 'name password email otk confirm'.split(): + if self.form.has_key(param): + info[param] = self.form[param].value + + if info.has_key('otk'): + if self.username is None: + raise Unauthorised + # finish off rego + if info['otk'] != self.store.get_otk(self.username): + response = 'Error: One Time Key invalid' + else: + # OK, delete the key + self.store.delete_otk(info['otk']) + response = 'Registration complete' + + elif self.username is None: + # validate a complete set of stuff + # new user, create entry and email otk + name = info['name'] + if self.store.has_user(name): + self.plain_response('Error: user "%s" already exists'%name) + return + if info.has_key('confirm') and info['password'] != info['confirm']: + self.plain_response("Error: password and confirm don't match") + return + info['otk'] = self.store.store_user(name, info['password'], + info['email']) + info['url'] = self.config.url + self.send_email(info['email'], rego_message%info) + response = 'Registration OK' + + else: + # update details + user = self.store.get_user(self.username) + password = info.get('password', user['password']) + email = info.get('email', user['email']) + self.store.store_user(self.username, password, email) + response = 'Details updated OK' + + self.plain_response(response) + + def password_reset(self): + ''' Reset the user's password and send an email to the address given. + ''' + email = self.form['email'].value + user = self.store.get_user_by_email(email) + if user is None: + response = 'Error: email address unknown to me' + else: + pw = ''.join([whrandom.choice(chars) for x in range(10)]) + self.store.store_user(user['name'], pw, user['email']) + info = {'name': user['name'], 'password': pw, + 'email':user['email']} + self.send_email(email, password_message%info) + response = 'Email sent OK' + self.plain_response(response) + + def send_email(self, recipient, message): + ''' Send an administrative email to the recipient + ''' + smtp = smtplib.SMTP(self.config.mailhost) + smtp.sendmail(self.config.adminemail, recipient, message) + |