• R/O
  • HTTP
  • SSH
  • HTTPS

提交

標籤
無標籤

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

allura


Commit MetaInfo

修訂61c60486d7217ab38dc1725aac15af983c341384 (tree)
時間2011-05-28 00:35:05
作者Jenny Steele <jsteele@geek...>
CommiterDave Brondsema

Log Message

[#1914] Added trove categories to allura

Signed-off-by: Jenny Steele <jsteele@geek.net>

Change Summary

差異

--- a/Allura/allura/command/__init__.py
+++ b/Allura/allura/command/__init__.py
@@ -3,3 +3,4 @@ from show_models import ShowModelsCommand, ReindexCommand, EnsureIndexCommand
33 from script import ScriptCommand, SetToolAccessCommand
44 from smtp_server import SMTPServerCommand
55 from create_neighborhood import CreateNeighborhoodCommand
6+from create_trove_categories import CreateTroveCategoriesCommand
--- /dev/null
+++ b/Allura/allura/command/create_trove_categories.py
@@ -0,0 +1,656 @@
1+import logging
2+from tg import config
3+from ming.orm import session
4+
5+from . import base
6+
7+from allura import model as M
8+from allura.lib import helpers as h
9+
10+log = logging.getLogger(__name__)
11+
12+class CreateTroveCategoriesCommand(base.Command):
13+ min_args=None
14+ max_args=None
15+ usage = '<ini file>'
16+ summary = 'Remove any existing trove categories and load new ones'
17+ parser = base.Command.standard_parser(verbose=True)
18+
19+ def create_trove_cat(self,cat_data):
20+ M.TroveCategory(trove_cat_id=cat_data[0], trove_parent_id=cat_data[1],
21+ shortname=cat_data[2], fullname=cat_data[3], fullpath=cat_data[4])
22+
23+ def command(self):
24+ self.basic_setup()
25+ M.TroveCategory.query.remove()
26+ self.create_trove_cat((617,274,"kirghiz","Kirghiz","Translations :: Kirghiz"))
27+ self.create_trove_cat((372,274,"croatian","Croatian","Translations :: Croatian"))
28+ self.create_trove_cat((351,274,"thai","Thai","Translations :: Thai"))
29+ self.create_trove_cat((349,274,"tamil","Tamil","Translations :: Tamil"))
30+ self.create_trove_cat((347,274,"romanian","Romanian","Translations :: Romanian"))
31+ self.create_trove_cat((339,274,"korean","Korean","Translations :: Korean"))
32+ self.create_trove_cat((632,160,"cobol","COBOL","Programming Language :: COBOL"))
33+ self.create_trove_cat((598,160,"aspectj","AspectJ","Programming Language :: AspectJ"))
34+ self.create_trove_cat((167,160,"euler","Euler","Programming Language :: Euler"))
35+ self.create_trove_cat((185,160,"shell","Unix Shell","Programming Language :: Unix Shell"))
36+ self.create_trove_cat((184,160,"asp","ASP","Programming Language :: ASP"))
37+ self.create_trove_cat((273,160,"Pike","Pike","Programming Language :: Pike"))
38+ self.create_trove_cat((271,160,"csharp","C#","Programming Language :: C#"))
39+ self.create_trove_cat((170,160,"lisp","Lisp","Programming Language :: Lisp"))
40+ self.create_trove_cat((169,160,"fortran","Fortran","Programming Language :: Fortran"))
41+ self.create_trove_cat((625,160,"simulink","Simulink","Programming Language :: Simulink"))
42+ self.create_trove_cat((626,160,"matlab","MATLAB","Programming Language :: MATLAB"))
43+ self.create_trove_cat((1,0,"audience","Intended Audience","Intended Audience"))
44+ self.create_trove_cat((618,535,"nonprofit","Non-Profit Organizations","Intended Audience :: by Industry or Sector :: Non-Profit Organizations"))
45+ self.create_trove_cat((599,535,"aerospace","Aerospace","Intended Audience :: by Industry or Sector :: Aerospace"))
46+ self.create_trove_cat((569,535,"government","Government","Intended Audience :: by Industry or Sector :: Government"))
47+ self.create_trove_cat((363,535,"informationtechnology","Information Technology","Intended Audience :: by Industry or Sector :: Information Technology"))
48+ self.create_trove_cat((361,535,"financialinsurance","Financial and Insurance Industry","Intended Audience :: by Industry or Sector :: Financial and Insurance Industry"))
49+ self.create_trove_cat((362,535,"healthcareindustry","Healthcare Industry","Intended Audience :: by Industry or Sector :: Healthcare Industry"))
50+ self.create_trove_cat((367,535,"scienceresearch","Science/Research","Intended Audience :: by Industry or Sector :: Science/Research"))
51+ self.create_trove_cat((359,535,"customerservice","Customer Service","Intended Audience :: by Industry or Sector :: Customer Service"))
52+ self.create_trove_cat((360,535,"education","Education","Intended Audience :: by Industry or Sector :: Education"))
53+ self.create_trove_cat((365,535,"manufacturing","Manufacturing","Intended Audience :: by Industry or Sector :: Manufacturing"))
54+ self.create_trove_cat((368,535,"telecommunications","Telecommunications Industry","Intended Audience :: by Industry or Sector :: Telecommunications Industry"))
55+ self.create_trove_cat((166,160,"eiffel","Eiffel","Programming Language :: Eiffel"))
56+ self.create_trove_cat((550,160,"oberon","Oberon","Programming Language :: Oberon"))
57+ self.create_trove_cat((553,160,"realbasic","REALbasic","Programming Language :: REALbasic"))
58+ self.create_trove_cat((178,160,"python","Python","Programming Language :: Python"))
59+ self.create_trove_cat((179,160,"rexx","Rexx","Programming Language :: Rexx"))
60+ self.create_trove_cat((177,160,"prolog","Prolog","Programming Language :: Prolog"))
61+ self.create_trove_cat((176,160,"perl","Perl","Programming Language :: Perl"))
62+ self.create_trove_cat((175,160,"pascal","Pascal","Programming Language :: Pascal"))
63+ self.create_trove_cat((536,534,"enduser_advanced","Advanced End Users","Intended Audience :: by End-User Class :: Advanced End Users"))
64+ self.create_trove_cat((4,534,"sysadmins","System Administrators","Intended Audience :: by End-User Class :: System Administrators"))
65+ self.create_trove_cat((471,456,"ui_swing","Java Swing","User Interface :: Graphical :: Java Swing"))
66+ self.create_trove_cat((469,456,"ui_dotnet",".NET/Mono","User Interface :: Graphical :: .NET/Mono"))
67+ self.create_trove_cat((231,456,"gnome","Gnome","User Interface :: Graphical :: Gnome"))
68+ self.create_trove_cat((229,456,"x11","X Window System (X11)","User Interface :: Graphical :: X Window System (X11)"))
69+ self.create_trove_cat((475,456,"ui_opengl","OpenGL","User Interface :: Graphical :: OpenGL"))
70+ self.create_trove_cat((474,456,"ui_framebuffer","Framebuffer","User Interface :: Graphical :: Framebuffer"))
71+ self.create_trove_cat((472,456,"ui_swt","Java SWT","User Interface :: Graphical :: Java SWT"))
72+ self.create_trove_cat((470,456,"ui_awt","Java AWT","User Interface :: Graphical :: Java AWT"))
73+ self.create_trove_cat((230,456,"win32","Win32 (MS Windows)","User Interface :: Graphical :: Win32 (MS Windows)"))
74+ self.create_trove_cat((232,456,"kde","KDE","User Interface :: Graphical :: KDE"))
75+ self.create_trove_cat((310,456,"cocoa","Cocoa (MacOS X)","User Interface :: Graphical :: Cocoa (MacOS X)"))
76+ self.create_trove_cat((476,456,"ui_tabletpc","TabletPC","User Interface :: Graphical :: TabletPC"))
77+ self.create_trove_cat((314,456,"handhelds","Handheld/Mobile/PDA","User Interface :: Graphical :: Handheld/Mobile/PDA"))
78+ self.create_trove_cat((462,225,"ui_groupingdesc","Grouping and Descriptive Categories (UI)","User Interface :: Grouping and Descriptive Categories (UI)"))
79+ self.create_trove_cat((466,462,"ui_meta_3d","Project is a 3D engine","User Interface :: Grouping and Descriptive Categories (UI) :: Project is a 3D engine"))
80+ self.create_trove_cat((464,462,"ui_meta_template","Project is a templating system","User Interface :: Grouping and Descriptive Categories (UI) :: Project is a templating system"))
81+ self.create_trove_cat((463,462,"ui_meta_system","Project is a user interface (UI) system","User Interface :: Grouping and Descriptive Categories (UI) :: Project is a user interface (UI) system"))
82+ self.create_trove_cat((465,462,"ui_meta_windowmanager","Project is a window manager","User Interface :: Grouping and Descriptive Categories (UI) :: Project is a window manager"))
83+ self.create_trove_cat((467,462,"ui_meta_toolkit","Project is a graphics toolkit","User Interface :: Grouping and Descriptive Categories (UI) :: Project is a graphics toolkit"))
84+ self.create_trove_cat((468,462,"ui_meta_remotecontrol","Project is a remote control application","User Interface :: Grouping and Descriptive Categories (UI) :: Project is a remote control application"))
85+ self.create_trove_cat((237,225,"web","Web-based","User Interface :: Web-based"))
86+ self.create_trove_cat((238,225,"daemon","Non-interactive (Daemon)","User Interface :: Non-interactive (Daemon)"))
87+ self.create_trove_cat((457,225,"textual_ui","Textual","User Interface :: Textual"))
88+ self.create_trove_cat((460,457,"ui_consoleterm","Console/Terminal","User Interface :: Textual :: Console/Terminal"))
89+ self.create_trove_cat((459,457,"ui_commandline","Command-line","User Interface :: Textual :: Command-line"))
90+ self.create_trove_cat((225,0,"environment","User Interface","User Interface"))
91+ self.create_trove_cat((461,225,"ui_plugins","Plugins","User Interface :: Plugins"))
92+ self.create_trove_cat((583,461,"eclipse_plugins","Eclipse","User Interface :: Plugins :: Eclipse"))
93+ self.create_trove_cat((458,225,"ui_toolkit","Toolkits/Libraries","User Interface :: Toolkits/Libraries"))
94+ self.create_trove_cat((495,458,"ui_othertoolkit","Other toolkit","User Interface :: Toolkits/Libraries :: Other toolkit"))
95+ self.create_trove_cat((493,458,"ui_motif","Motif/LessTif","User Interface :: Toolkits/Libraries :: Motif/LessTif"))
96+ self.create_trove_cat((491,458,"ui_crystalspace","Crystal Space","User Interface :: Toolkits/Libraries :: Crystal Space"))
97+ self.create_trove_cat((489,458,"ui_clanlib","ClanLib","User Interface :: Toolkits/Libraries :: ClanLib"))
98+ self.create_trove_cat((516,500,"db_group_objmap","Project is a relational object mapper","Database Environment :: Grouping and Descriptive Categories (DB) :: Project is a relational object mapper"))
99+ self.create_trove_cat((487,458,"ui_ggi","GGI","User Interface :: Toolkits/Libraries :: GGI"))
100+ self.create_trove_cat((485,458,"ui_directx","DirectX","User Interface :: Toolkits/Libraries :: DirectX"))
101+ self.create_trove_cat((483,458,"ui_svgalib","SVGAlib","User Interface :: Toolkits/Libraries :: SVGAlib"))
102+ self.create_trove_cat((481,458,"ui_wxwidgets","wxWidgets","User Interface :: Toolkits/Libraries :: wxWidgets"))
103+ self.create_trove_cat((511,500,"db_group_mgmt","Project is a database management tool","Database Environment :: Grouping and Descriptive Categories (DB) :: Project is a database management tool"))
104+ self.create_trove_cat((479,458,"ui_qt","Qt","User Interface :: Toolkits/Libraries :: Qt"))
105+ self.create_trove_cat((477,458,"ui_gtk","GTK+","User Interface :: Toolkits/Libraries :: GTK+"))
106+ self.create_trove_cat((513,500,"db_group_netdbms","Project is a network-based DBMS (database system)","Database Environment :: Grouping and Descriptive Categories (DB) :: Project is a network-based DBMS (database system)"))
107+ self.create_trove_cat((228,458,"newt","Newt","User Interface :: Toolkits/Libraries :: Newt"))
108+ self.create_trove_cat((227,458,"curses","Curses/Ncurses","User Interface :: Toolkits/Libraries :: Curses/Ncurses"))
109+ self.create_trove_cat((515,500,"db_group_conv","Project is a database conversion tool","Database Environment :: Grouping and Descriptive Categories (DB) :: Project is a database conversion tool"))
110+ self.create_trove_cat((478,458,"ui_tk","Tk","User Interface :: Toolkits/Libraries :: Tk"))
111+ self.create_trove_cat((480,458,"ui_sdl","SDL","User Interface :: Toolkits/Libraries :: SDL"))
112+ self.create_trove_cat((33,28,"postoffice","Post-Office","Topic :: Communications :: Email :: Post-Office"))
113+ self.create_trove_cat((514,500,"db_group_propfmt","Project is a tool for a proprietary database file format","Database Environment :: Grouping and Descriptive Categories (DB) :: Project is a tool for a proprietary database file format"))
114+ self.create_trove_cat((482,458,"ui_aalib","AAlib","User Interface :: Toolkits/Libraries :: AAlib"))
115+ self.create_trove_cat((484,458,"ui_fltk","FLTK","User Interface :: Toolkits/Libraries :: FLTK"))
116+ self.create_trove_cat((512,500,"db_group_filedbms","Project is a file-based DBMS (database system)","Database Environment :: Grouping and Descriptive Categories (DB) :: Project is a file-based DBMS (database system)"))
117+ self.create_trove_cat((486,458,"ui_plib","Plib","User Interface :: Toolkits/Libraries :: Plib"))
118+ self.create_trove_cat((488,458,"ui_glide","Glide","User Interface :: Toolkits/Libraries :: Glide"))
119+ self.create_trove_cat((510,500,"db_group_api","Project is a database abstraction layer (API)","Database Environment :: Grouping and Descriptive Categories (DB) :: Project is a database abstraction layer (API)"))
120+ self.create_trove_cat((490,458,"ui_glut","GLUT","User Interface :: Toolkits/Libraries :: GLUT"))
121+ self.create_trove_cat((492,458,"ui_allegro","Allegro","User Interface :: Toolkits/Libraries :: Allegro"))
122+ self.create_trove_cat((500,496,"db_grouping","Grouping and Descriptive Categories (DB)","Database Environment :: Grouping and Descriptive Categories (DB)"))
123+ self.create_trove_cat((494,458,"ui_quartz","Quartz","User Interface :: Toolkits/Libraries :: Quartz"))
124+ self.create_trove_cat((456,225,"graphical_ui","Graphical","User Interface :: Graphical"))
125+ self.create_trove_cat((276,274,"french","French","Translations :: French"))
126+ self.create_trove_cat((473,456,"ui_carbon","Carbon (Mac OS X)","User Interface :: Graphical :: Carbon (Mac OS X)"))
127+ self.create_trove_cat((535,1,"by_industrysector","by Industry or Sector","Intended Audience :: by Industry or Sector"))
128+ self.create_trove_cat((364,535,"legalindustry","Legal Industry","Intended Audience :: by Industry or Sector :: Legal Industry"))
129+ self.create_trove_cat((353,274,"ukrainian","Ukrainian","Translations :: Ukrainian"))
130+ self.create_trove_cat((330,274,"dutch","Dutch","Translations :: Dutch"))
131+ self.create_trove_cat((343,274,"persian","Persian","Translations :: Persian"))
132+ self.create_trove_cat((344,274,"polish","Polish","Translations :: Polish"))
133+ self.create_trove_cat((455,274,"irish_gaelic","Irish Gaelic","Translations :: Irish Gaelic"))
134+ self.create_trove_cat((413,274,"lithuanian","Lithuanian","Translations :: Lithuanian"))
135+ self.create_trove_cat((414,274,"albanian","Albanian","Translations :: Albanian"))
136+ self.create_trove_cat((415,274,"malagasy","Malagasy","Translations :: Malagasy"))
137+ self.create_trove_cat((416,274,"mongolian","Mongolian","Translations :: Mongolian"))
138+ self.create_trove_cat((417,274,"maltese","Maltese","Translations :: Maltese"))
139+ self.create_trove_cat((380,274,"slovenian","Slovene","Translations :: Slovene"))
140+ self.create_trove_cat((374,274,"icelandic","Icelandic","Translations :: Icelandic"))
141+ self.create_trove_cat((376,274,"macedonian","Macedonian","Translations :: Macedonian"))
142+ self.create_trove_cat((377,274,"latin","Latin","Translations :: Latin"))
143+ self.create_trove_cat((375,274,"latvian","Latvian","Translations :: Latvian"))
144+ self.create_trove_cat((373,274,"czech","Czech","Translations :: Czech"))
145+ self.create_trove_cat((369,274,"afrikaans","Afrikaans","Translations :: Afrikaans"))
146+ self.create_trove_cat((357,274,"finnish","Finnish","Translations :: Finnish"))
147+ self.create_trove_cat((186,160,"visualbasic","Visual Basic","Programming Language :: Visual Basic"))
148+ self.create_trove_cat((505,499,"db_pear","PHP Pear::DB","Database Environment :: Database API :: PHP Pear::DB"))
149+ self.create_trove_cat((507,499,"db_api_xml","XML-based","Database Environment :: Database API :: XML-based"))
150+ self.create_trove_cat((509,499,"db_api_other","Other API","Database Environment :: Database API :: Other API"))
151+ self.create_trove_cat((532,497,"db_net_hsql","HSQL","Database Environment :: Network-based DBMS :: HSQL"))
152+ self.create_trove_cat((547,160,"applescript","AppleScript","Programming Language :: AppleScript"))
153+ self.create_trove_cat((173,160,"modula","Modula","Programming Language :: Modula"))
154+ self.create_trove_cat((337,274,"italian","Italian","Translations :: Italian"))
155+ self.create_trove_cat((333,274,"hebrew","Hebrew","Translations :: Hebrew"))
156+ self.create_trove_cat((331,274,"esperanto","Esperanto","Translations :: Esperanto"))
157+ self.create_trove_cat((329,274,"catalan","Catalan","Translations :: Catalan"))
158+ self.create_trove_cat((327,274,"bengali","Bengali","Translations :: Bengali"))
159+ self.create_trove_cat((332,274,"greek","Greek","Translations :: Greek"))
160+ self.create_trove_cat((341,274,"marathi","Marathi","Translations :: Marathi"))
161+ self.create_trove_cat((355,274,"vietnamese","Vietnamese","Translations :: Vietnamese"))
162+ self.create_trove_cat((275,274,"english","English","Translations :: English"))
163+ self.create_trove_cat((345,274,"portuguese","Portuguese","Translations :: Portuguese"))
164+ self.create_trove_cat((171,160,"logo","Logo","Programming Language :: Logo"))
165+ self.create_trove_cat((502,499,"db_api_jdbc","JDBC","Database Environment :: Database API :: JDBC"))
166+ self.create_trove_cat((504,499,"db_api_perldbi","Perl DBI/DBD","Database Environment :: Database API :: Perl DBI/DBD"))
167+ self.create_trove_cat((274,0,"natlanguage","Translations","Translations"))
168+ self.create_trove_cat((506,499,"db_python","Python Database API","Database Environment :: Database API :: Python Database API"))
169+ self.create_trove_cat((526,497,"db_net_oracle","Oracle","Database Environment :: Network-based DBMS :: Oracle"))
170+ self.create_trove_cat((524,497,"db_net_mysql","MySQL","Database Environment :: Network-based DBMS :: MySQL"))
171+ self.create_trove_cat((525,497,"db_net_pgsql","PostgreSQL (pgsql)","Database Environment :: Network-based DBMS :: PostgreSQL (pgsql)"))
172+ self.create_trove_cat((527,497,"db_net_ibmdb2","IBM DB2","Database Environment :: Network-based DBMS :: IBM DB2"))
173+ self.create_trove_cat((529,497,"db_net_sybase","Sybase","Database Environment :: Network-based DBMS :: Sybase"))
174+ self.create_trove_cat((531,497,"db_net_sqlite","SQLite","Database Environment :: Network-based DBMS :: SQLite"))
175+ self.create_trove_cat((533,497,"db_net_other","Other network-based DBMS","Database Environment :: Network-based DBMS :: Other network-based DBMS"))
176+ self.create_trove_cat((497,496,"db_networkbased","Network-based DBMS","Database Environment :: Network-based DBMS"))
177+ self.create_trove_cat((426,199,"os_emu_api","Emulation and API Compatibility","Operating System :: Emulation and API Compatibility"))
178+ self.create_trove_cat((311,236,"macos9","Apple Mac OS Classic","Operating System :: Other Operating Systems :: Apple Mac OS Classic"))
179+ self.create_trove_cat((224,236,"beos","BeOS","Operating System :: Other Operating Systems :: BeOS"))
180+ self.create_trove_cat((215,236,"msdos","MS-DOS","Operating System :: Other Operating Systems :: MS-DOS"))
181+ self.create_trove_cat((421,236,"mswin_95","Win95","Operating System :: Other Operating Systems :: Win95"))
182+ self.create_trove_cat((508,499,"db_api_sql","SQL-based","Database Environment :: Database API :: SQL-based"))
183+ self.create_trove_cat((499,496,"db_api","Database API","Database Environment :: Database API"))
184+ self.create_trove_cat((378,274,"serbian","Serbian","Translations :: Serbian"))
185+ self.create_trove_cat((379,274,"slovak","Slovak","Translations :: Slovak"))
186+ self.create_trove_cat((371,274,"chinesetraditional","Chinese (Traditional)","Translations :: Chinese (Traditional)"))
187+ self.create_trove_cat((410,274,"belarusian","Belarusian","Translations :: Belarusian"))
188+ self.create_trove_cat((411,274,"estonian","Estonian","Translations :: Estonian"))
189+ self.create_trove_cat((412,274,"galician","Galician","Translations :: Galician"))
190+ self.create_trove_cat((34,33,"pop3","POP3","Topic :: Communications :: Email :: Post-Office :: POP3"))
191+ self.create_trove_cat((35,33,"imap","IMAP","Topic :: Communications :: Email :: Post-Office :: IMAP"))
192+ self.create_trove_cat((29,28,"filters","Filters","Topic :: Communications :: Email :: Filters"))
193+ self.create_trove_cat((30,28,"listservers","Mailing List Servers","Topic :: Communications :: Email :: Mailing List Servers"))
194+ self.create_trove_cat((597,80,"card_games","Card Games","Topic :: Games/Entertainment :: Card Games"))
195+ self.create_trove_cat((63,18,"editors","Text Editors","Topic :: Text Editors"))
196+ self.create_trove_cat((366,535,"religion","Religion","Intended Audience :: by Industry or Sector :: Religion"))
197+ self.create_trove_cat((534,1,"by_enduser","by End-User Class","Intended Audience :: by End-User Class"))
198+ self.create_trove_cat((528,497,"db_net_firebird","Firebird/InterBase","Database Environment :: Network-based DBMS :: Firebird/InterBase"))
199+ self.create_trove_cat((3,534,"developers","Developers","Intended Audience :: by End-User Class :: Developers"))
200+ self.create_trove_cat((530,497,"db_net_mssql","Microsoft SQL Server","Database Environment :: Network-based DBMS :: Microsoft SQL Server"))
201+ self.create_trove_cat((2,534,"endusers","End Users/Desktop","Intended Audience :: by End-User Class :: End Users/Desktop"))
202+ self.create_trove_cat((498,496,"db_filebased","File-based DBMS","Database Environment :: File-based DBMS"))
203+ self.create_trove_cat((537,534,"enduser_qa","Quality Engineers","Intended Audience :: by End-User Class :: Quality Engineers"))
204+ self.create_trove_cat((5,1,"other","Other Audience","Intended Audience :: Other Audience"))
205+ self.create_trove_cat((517,498,"db_file_dbm","Berkeley/Sleepycat/Gdbm (DBM)","Database Environment :: File-based DBMS :: Berkeley/Sleepycat/Gdbm (DBM)"))
206+ self.create_trove_cat((358,6,"inactive","7 - Inactive","Development Status :: 7 - Inactive"))
207+ self.create_trove_cat((520,498,"db_file_palm","PalmOS PDB","Database Environment :: File-based DBMS :: PalmOS PDB"))
208+ self.create_trove_cat((523,498,"db_file_other","Other file-based DBMS","Database Environment :: File-based DBMS :: Other file-based DBMS"))
209+ self.create_trove_cat((165,160,"cpp","C++","Programming Language :: C++"))
210+ self.create_trove_cat((163,160,"ada","Ada","Programming Language :: Ada"))
211+ self.create_trove_cat((328,274,"bulgarian","Bulgarian","Translations :: Bulgarian"))
212+ self.create_trove_cat((546,274,"swahili","Swahili","Translations :: Swahili"))
213+ self.create_trove_cat((348,274,"swedish","Swedish","Translations :: Swedish"))
214+ self.create_trove_cat((350,274,"telugu","Telugu","Translations :: Telugu"))
215+ self.create_trove_cat((162,160,"assembly","Assembly","Programming Language :: Assembly"))
216+ self.create_trove_cat((164,160,"c","C","Programming Language :: C"))
217+ self.create_trove_cat((161,160,"apl","APL","Programming Language :: APL"))
218+ self.create_trove_cat((267,160,"zope","Zope","Programming Language :: Zope"))
219+ self.create_trove_cat((264,160,"erlang","Erlang","Programming Language :: Erlang"))
220+ self.create_trove_cat((263,160,"euphoria","Euphoria","Programming Language :: Euphoria"))
221+ self.create_trove_cat((183,160,"php","PHP","Programming Language :: PHP"))
222+ self.create_trove_cat((182,160,"tcl","Tcl","Programming Language :: Tcl"))
223+ self.create_trove_cat((181,160,"smalltalk","Smalltalk","Programming Language :: Smalltalk"))
224+ self.create_trove_cat((180,160,"simula","Simula","Programming Language :: Simula"))
225+ self.create_trove_cat((174,160,"objectivec","Objective C","Programming Language :: Objective C"))
226+ self.create_trove_cat((560,160,"xsl","XSL (XSLT/XPath/XSL-FO)","Programming Language :: XSL (XSLT/XPath/XSL-FO)"))
227+ self.create_trove_cat((293,160,"ruby","Ruby","Programming Language :: Ruby"))
228+ self.create_trove_cat((265,160,"Delphi","Delphi/Kylix","Programming Language :: Delphi/Kylix"))
229+ self.create_trove_cat((281,160,"REBOL","REBOL","Programming Language :: REBOL"))
230+ self.create_trove_cat((454,160,"ocaml","OCaml (Objective Caml)","Programming Language :: OCaml (Objective Caml)"))
231+ self.create_trove_cat((453,160,"vb_net","Visual Basic .NET","Programming Language :: Visual Basic .NET"))
232+ self.create_trove_cat((452,160,"visual_foxpro","Visual FoxPro","Programming Language :: Visual FoxPro"))
233+ self.create_trove_cat((451,160,"haskell","Haskell","Programming Language :: Haskell"))
234+ self.create_trove_cat((450,160,"lua","Lua","Programming Language :: Lua"))
235+ self.create_trove_cat((280,160,"JavaScript","JavaScript","Programming Language :: JavaScript"))
236+ self.create_trove_cat((262,160,"coldfusion","Cold Fusion","Programming Language :: Cold Fusion"))
237+ self.create_trove_cat((261,160,"xbasic","XBasic","Programming Language :: XBasic"))
238+ self.create_trove_cat((258,160,"objectpascal","Object Pascal","Programming Language :: Object Pascal"))
239+ self.create_trove_cat((539,160,"proglang_basic","BASIC","Programming Language :: BASIC"))
240+ self.create_trove_cat((543,160,"groovy","Groovy","Programming Language :: Groovy"))
241+ self.create_trove_cat((545,160,"proglang_labview","LabVIEW","Programming Language :: LabVIEW"))
242+ self.create_trove_cat((548,160,"vbscript","VBScript","Programming Language :: VBScript"))
243+ self.create_trove_cat((552,160,"d_proglang","D","Programming Language :: D"))
244+ self.create_trove_cat((551,160,"vhdl_verilog","VHDL/Verilog","Programming Language :: VHDL/Verilog"))
245+ self.create_trove_cat((549,160,"proglang_lpc","LPC","Programming Language :: LPC"))
246+ self.create_trove_cat((544,160,"yacc","Yacc","Programming Language :: Yacc"))
247+ self.create_trove_cat((352,274,"turkish","Turkish","Translations :: Turkish"))
248+ self.create_trove_cat((354,274,"urdu","Urdu","Translations :: Urdu"))
249+ self.create_trove_cat((160,0,"language","Programming Language","Programming Language"))
250+ self.create_trove_cat((542,160,"emacs_lisp","Emacs-Lisp","Programming Language :: Emacs-Lisp"))
251+ self.create_trove_cat((540,160,"clisp","Common Lisp","Programming Language :: Common Lisp"))
252+ self.create_trove_cat((12,6,"mature","6 - Mature","Development Status :: 6 - Mature"))
253+ self.create_trove_cat((538,160,"awk","AWK","Programming Language :: AWK"))
254+ self.create_trove_cat((572,160,"jsp","JSP","Programming Language :: JSP"))
255+ self.create_trove_cat((172,160,"ml","Standard ML","Programming Language :: Standard ML"))
256+ self.create_trove_cat((255,160,"progress","PROGRESS","Programming Language :: PROGRESS"))
257+ self.create_trove_cat((254,160,"plsql","PL/SQL","Programming Language :: PL/SQL"))
258+ self.create_trove_cat((242,160,"scheme","Scheme","Programming Language :: Scheme"))
259+ self.create_trove_cat((624,160,"idl","IDL","Programming Language :: IDL"))
260+ self.create_trove_cat((198,160,"java","Java","Programming Language :: Java"))
261+ self.create_trove_cat((589,160,"asp_dot_net","ASP.NET","Programming Language :: ASP.NET"))
262+ self.create_trove_cat((608,160,"mumps","MUMPS","Programming Language :: MUMPS"))
263+ self.create_trove_cat((541,160,"dylan","Dylan","Programming Language :: Dylan"))
264+ self.create_trove_cat((573,160,"s_slash_r","S/R","Programming Language :: S/R"))
265+ self.create_trove_cat((584,160,"actionscript","ActionScript","Programming Language :: ActionScript"))
266+ self.create_trove_cat((168,160,"forth","Forth","Programming Language :: Forth"))
267+ self.create_trove_cat((334,274,"hindi","Hindi","Translations :: Hindi"))
268+ self.create_trove_cat((336,274,"indonesian","Indonesian","Translations :: Indonesian"))
269+ self.create_trove_cat((521,498,"db_file_flat","Flat-file","Database Environment :: File-based DBMS :: Flat-file"))
270+ self.create_trove_cat((519,498,"db_file_xbase","xBase","Database Environment :: File-based DBMS :: xBase"))
271+ self.create_trove_cat((338,274,"javanese","Javanese","Translations :: Javanese"))
272+ self.create_trove_cat((518,498,"db_msaccess","Microsoft Access","Database Environment :: File-based DBMS :: Microsoft Access"))
273+ self.create_trove_cat((522,498,"db_file_proprietary","Proprietary file format","Database Environment :: File-based DBMS :: Proprietary file format"))
274+ self.create_trove_cat((496,0,"root_database","Database Environment","Database Environment"))
275+ self.create_trove_cat((501,499,"db_api_odbc","ODBC","Database Environment :: Database API :: ODBC"))
276+ self.create_trove_cat((503,499,"db_adodb","ADOdb","Database Environment :: Database API :: ADOdb"))
277+ self.create_trove_cat((340,274,"malay","Malay","Translations :: Malay"))
278+ self.create_trove_cat((6,0,"developmentstatus","Development Status","Development Status"))
279+ self.create_trove_cat((342,274,"norwegian","Norwegian","Translations :: Norwegian"))
280+ self.create_trove_cat((381,274,"portuguesebrazilian","Brazilian Portuguese","Translations :: Brazilian Portuguese"))
281+ self.create_trove_cat((382,274,"chinesesimplified","Chinese (Simplified)","Translations :: Chinese (Simplified)"))
282+ self.create_trove_cat((356,274,"danish","Danish","Translations :: Danish"))
283+ self.create_trove_cat((346,274,"panjabi","Panjabi","Translations :: Panjabi"))
284+ self.create_trove_cat((370,274,"bosnian","Bosnian","Translations :: Bosnian"))
285+ self.create_trove_cat((279,274,"german","German","Translations :: German"))
286+ self.create_trove_cat((278,274,"japanese","Japanese","Translations :: Japanese"))
287+ self.create_trove_cat((277,274,"spanish","Spanish","Translations :: Spanish"))
288+ self.create_trove_cat((11,6,"production","5 - Production/Stable","Development Status :: 5 - Production/Stable"))
289+ self.create_trove_cat((10,6,"beta","4 - Beta","Development Status :: 4 - Beta"))
290+ self.create_trove_cat((9,6,"alpha","3 - Alpha","Development Status :: 3 - Alpha"))
291+ self.create_trove_cat((8,6,"prealpha","2 - Pre-Alpha","Development Status :: 2 - Pre-Alpha"))
292+ self.create_trove_cat((7,6,"planning","1 - Planning","Development Status :: 1 - Planning"))
293+ self.create_trove_cat((295,274,"russian","Russian","Translations :: Russian"))
294+ self.create_trove_cat((326,274,"arabic","Arabic","Translations :: Arabic"))
295+ self.create_trove_cat((335,274,"hungarian","Hungarian","Translations :: Hungarian"))
296+ self.create_trove_cat((13,0,"license","License","License"))
297+ self.create_trove_cat((14,13,"osi","OSI-Approved Open Source","License :: OSI-Approved Open Source"))
298+ self.create_trove_cat((388,14,"osl","Open Software License","License :: OSI-Approved Open Source :: Open Software License"))
299+ self.create_trove_cat((321,14,"motosoto","Motosoto License","License :: OSI-Approved Open Source :: Motosoto License"))
300+ self.create_trove_cat((325,14,"attribut","Attribution Assurance License","License :: OSI-Approved Open Source :: Attribution Assurance License"))
301+ self.create_trove_cat((304,14,"mpl","Mozilla Public License 1.0 (MPL)","License :: OSI-Approved Open Source :: Mozilla Public License 1.0 (MPL)"))
302+ self.create_trove_cat((398,14,"plan9","Lucent Public License (Plan9)","License :: OSI-Approved Open Source :: Lucent Public License (Plan9)"))
303+ self.create_trove_cat((187,14,"bsd","BSD License","License :: OSI-Approved Open Source :: BSD License"))
304+ self.create_trove_cat((393,14,"historical","Historical Permission Notice and Disclaimer","License :: OSI-Approved Open Source :: Historical Permission Notice and Disclaimer"))
305+ self.create_trove_cat((395,14,"real","RealNetworks Public Source License V1.0","License :: OSI-Approved Open Source :: RealNetworks Public Source License V1.0"))
306+ self.create_trove_cat((396,14,"rpl","Reciprocal Public License","License :: OSI-Approved Open Source :: Reciprocal Public License"))
307+ self.create_trove_cat((392,14,"eiffel2","Eiffel Forum License V2.0","License :: OSI-Approved Open Source :: Eiffel Forum License V2.0"))
308+ self.create_trove_cat((320,14,"w3c","W3C License","License :: OSI-Approved Open Source :: W3C License"))
309+ self.create_trove_cat((400,14,"frameworx","Frameworx Open License","License :: OSI-Approved Open Source :: Frameworx Open License"))
310+ self.create_trove_cat((194,14,"python","Python License (CNRI Python License)","License :: OSI-Approved Open Source :: Python License (CNRI Python License)"))
311+ self.create_trove_cat((296,14,"apache","Apache Software License","License :: OSI-Approved Open Source :: Apache Software License"))
312+ self.create_trove_cat((298,14,"sissl","Sun Industry Standards Source License (SISSL)","License :: OSI-Approved Open Source :: Sun Industry Standards Source License (SISSL)"))
313+ self.create_trove_cat((196,13,"other","Other/Proprietary License","License :: Other/Proprietary License"))
314+ self.create_trove_cat((197,13,"publicdomain","Public Domain","License :: Public Domain"))
315+ self.create_trove_cat((301,14,"nokia","Nokia Open Source License","License :: OSI-Approved Open Source :: Nokia Open Source License"))
316+ self.create_trove_cat((319,14,"eiffel","Eiffel Forum License","License :: OSI-Approved Open Source :: Eiffel Forum License"))
317+ self.create_trove_cat((318,14,"sunpublic","Sun Public License","License :: OSI-Approved Open Source :: Sun Public License"))
318+ self.create_trove_cat((190,14,"qpl","Qt Public License (QPL)","License :: OSI-Approved Open Source :: Qt Public License (QPL)"))
319+ self.create_trove_cat((390,14,"oclc","OCLC Research Public License 2.0","License :: OSI-Approved Open Source :: OCLC Research Public License 2.0"))
320+ self.create_trove_cat((407,14,"nasalicense","NASA Open Source Agreement","License :: OSI-Approved Open Source :: NASA Open Source Agreement"))
321+ self.create_trove_cat((406,14,"eclipselicense","Eclipse Public License","License :: OSI-Approved Open Source :: Eclipse Public License"))
322+ self.create_trove_cat((316,14,"opengroup","Open Group Test Suite License","License :: OSI-Approved Open Source :: Open Group Test Suite License"))
323+ self.create_trove_cat((300,14,"jabber","Jabber Open Source License","License :: OSI-Approved Open Source :: Jabber Open Source License"))
324+ self.create_trove_cat((297,14,"vovida","Vovida Software License 1.0","License :: OSI-Approved Open Source :: Vovida Software License 1.0"))
325+ self.create_trove_cat((324,14,"afl","Academic Free License (AFL)","License :: OSI-Approved Open Source :: Academic Free License (AFL)"))
326+ self.create_trove_cat((189,14,"psfl","Python Software Foundation License","License :: OSI-Approved Open Source :: Python Software Foundation License"))
327+ self.create_trove_cat((193,14,"rscpl","Ricoh Source Code Public License","License :: OSI-Approved Open Source :: Ricoh Source Code Public License"))
328+ self.create_trove_cat((17,14,"artistic","Artistic License","License :: OSI-Approved Open Source :: Artistic License"))
329+ self.create_trove_cat((389,14,"sybase","Sybase Open Watcom Public License","License :: OSI-Approved Open Source :: Sybase Open Watcom Public License"))
330+ self.create_trove_cat((391,14,"wxwindows","wxWindows Library Licence","License :: OSI-Approved Open Source :: wxWindows Library Licence"))
331+ self.create_trove_cat((397,14,"entessa","Entessa Public License","License :: OSI-Approved Open Source :: Entessa Public License"))
332+ self.create_trove_cat((16,14,"lgpl","GNU Library or Lesser General Public License (LGPL)","License :: OSI-Approved Open Source :: GNU Library or Lesser General Public License (LGPL)"))
333+ self.create_trove_cat((629,14,"educom","Educational Community License","License :: OSI-Approved Open Source :: Educational Community License"))
334+ self.create_trove_cat((15,14,"gpl","GNU General Public License (GPL)","License :: OSI-Approved Open Source :: GNU General Public License (GPL)"))
335+ self.create_trove_cat((191,14,"ibm","IBM Public License","License :: OSI-Approved Open Source :: IBM Public License"))
336+ self.create_trove_cat((192,14,"cvw","MITRE Collaborative Virtual Workspace License (CVW)","License :: OSI-Approved Open Source :: MITRE Collaborative Virtual Workspace License (CVW)"))
337+ self.create_trove_cat((299,14,"iosl","Intel Open Source License","License :: OSI-Approved Open Source :: Intel Open Source License"))
338+ self.create_trove_cat((399,14,"php-license","PHP License","License :: OSI-Approved Open Source :: PHP License"))
339+ self.create_trove_cat((188,14,"mit","MIT License","License :: OSI-Approved Open Source :: MIT License"))
340+ self.create_trove_cat((405,14,"public102","Lucent Public License Version 1.02","License :: OSI-Approved Open Source :: Lucent Public License Version 1.02"))
341+ self.create_trove_cat((404,14,"fair","Fair License","License :: OSI-Approved Open Source :: Fair License"))
342+ self.create_trove_cat((403,14,"datagrid","EU DataGrid Software License","License :: OSI-Approved Open Source :: EU DataGrid Software License"))
343+ self.create_trove_cat((307,14,"ibmcpl","Common Public License","License :: OSI-Approved Open Source :: Common Public License"))
344+ self.create_trove_cat((402,14,"cua","CUA Office Public License Version 1.0","License :: OSI-Approved Open Source :: CUA Office Public License Version 1.0"))
345+ self.create_trove_cat((401,14,"apache2","Apache License V2.0","License :: OSI-Approved Open Source :: Apache License V2.0"))
346+ self.create_trove_cat((394,14,"nausite","Naumen Public License","License :: OSI-Approved Open Source :: Naumen Public License"))
347+ self.create_trove_cat((317,14,"xnet","X.Net License","License :: OSI-Approved Open Source :: X.Net License"))
348+ self.create_trove_cat((195,14,"zlib","zlib/libpng License","License :: OSI-Approved Open Source :: zlib/libpng License"))
349+ self.create_trove_cat((323,14,"ncsa","University of Illinois/NCSA Open Source License","License :: OSI-Approved Open Source :: University of Illinois/NCSA Open Source License"))
350+ self.create_trove_cat((322,14,"zope","Zope Public License","License :: OSI-Approved Open Source :: Zope Public License"))
351+ self.create_trove_cat((302,14,"sleepycat","Sleepycat License","License :: OSI-Approved Open Source :: Sleepycat License"))
352+ self.create_trove_cat((303,14,"nethack","Nethack General Public License","License :: OSI-Approved Open Source :: Nethack General Public License"))
353+ self.create_trove_cat((306,14,"apsl","Apple Public Source License","License :: OSI-Approved Open Source :: Apple Public Source License"))
354+ self.create_trove_cat((305,14,"mpl11","Mozilla Public License 1.1 (MPL 1.1)","License :: OSI-Approved Open Source :: Mozilla Public License 1.1 (MPL 1.1)"))
355+ self.create_trove_cat((628,14,"adaptive","Adaptive Public License","License :: OSI-Approved Open Source :: Adaptive Public License"))
356+ self.create_trove_cat((630,14,"cddl","Common Development and Distribution License","License :: OSI-Approved Open Source :: Common Development and Distribution License"))
357+ self.create_trove_cat((631,14,"catosl","Computer Associates Trusted Open Source License","License :: OSI-Approved Open Source :: Computer Associates Trusted Open Source License"))
358+ self.create_trove_cat((199,0,"os","Operating System","Operating System"))
359+ self.create_trove_cat((429,426,"fink","Fink (Mac OS X)","Operating System :: Emulation and API Compatibility :: Fink (Mac OS X)"))
360+ self.create_trove_cat((427,426,"cygwin","Cygwin (MS Windows)","Operating System :: Emulation and API Compatibility :: Cygwin (MS Windows)"))
361+ self.create_trove_cat((428,426,"dosemu","DOSEMU","Operating System :: Emulation and API Compatibility :: DOSEMU"))
362+ self.create_trove_cat((430,426,"wine","WINE","Operating System :: Emulation and API Compatibility :: WINE"))
363+ self.create_trove_cat((431,426,"emx","EMX (OS/2 and MS-DOS)","Operating System :: Emulation and API Compatibility :: EMX (OS/2 and MS-DOS)"))
364+ self.create_trove_cat((445,426,"mingw_msys","MinGW/MSYS (MS Windows)","Operating System :: Emulation and API Compatibility :: MinGW/MSYS (MS Windows)"))
365+ self.create_trove_cat((315,199,"pdasystems","Handheld/Embedded Operating Systems","Operating System :: Handheld/Embedded Operating Systems"))
366+ self.create_trove_cat((222,315,"wince","WinCE","Operating System :: Handheld/Embedded Operating Systems :: WinCE"))
367+ self.create_trove_cat((223,315,"palmos","PalmOS","Operating System :: Handheld/Embedded Operating Systems :: PalmOS"))
368+ self.create_trove_cat((441,315,"ecos","eCos","Operating System :: Handheld/Embedded Operating Systems :: eCos"))
369+ self.create_trove_cat((443,315,"vxworks","VxWorks","Operating System :: Handheld/Embedded Operating Systems :: VxWorks"))
370+ self.create_trove_cat((444,315,"symbianos","SymbianOS","Operating System :: Handheld/Embedded Operating Systems :: SymbianOS"))
371+ self.create_trove_cat((442,315,"qnx","QNX","Operating System :: Handheld/Embedded Operating Systems :: QNX"))
372+ self.create_trove_cat((440,315,"uclinux","uClinux","Operating System :: Handheld/Embedded Operating Systems :: uClinux"))
373+ self.create_trove_cat((418,199,"modern_oses","Modern (Vendor-Supported) Desktop Operating Systems","Operating System :: Modern (Vendor-Supported) Desktop Operating Systems"))
374+ self.create_trove_cat((420,418,"mswin_2000","Win2K","Operating System :: Modern (Vendor-Supported) Desktop Operating Systems :: Win2K"))
375+ self.create_trove_cat((207,418,"sun","Solaris","Operating System :: Modern (Vendor-Supported) Desktop Operating Systems :: Solaris"))
376+ self.create_trove_cat((201,418,"linux","Linux","Operating System :: Modern (Vendor-Supported) Desktop Operating Systems :: Linux"))
377+ self.create_trove_cat((205,418,"openbsd","OpenBSD","Operating System :: Modern (Vendor-Supported) Desktop Operating Systems :: OpenBSD"))
378+ self.create_trove_cat((203,418,"freebsd","FreeBSD","Operating System :: Modern (Vendor-Supported) Desktop Operating Systems :: FreeBSD"))
379+ self.create_trove_cat((204,418,"netbsd","NetBSD","Operating System :: Modern (Vendor-Supported) Desktop Operating Systems :: NetBSD"))
380+ self.create_trove_cat((309,418,"macosx","OS X","Operating System :: Modern (Vendor-Supported) Desktop Operating Systems :: OS X"))
381+ self.create_trove_cat((419,418,"mswin_xp","WinXP","Operating System :: Modern (Vendor-Supported) Desktop Operating Systems :: WinXP"))
382+ self.create_trove_cat((236,199,"other","Other Operating Systems","Operating System :: Other Operating Systems"))
383+ self.create_trove_cat((206,236,"bsdos","BSD/OS","Operating System :: Other Operating Systems :: BSD/OS"))
384+ self.create_trove_cat((634,236,"console-platforms","Console-based Platforms","Operating System :: Other Operating Systems :: Console-based Platforms"))
385+ self.create_trove_cat((637,634,"sega-dreamcast","Sega Dreamcast","Operating System :: Other Operating Systems :: Console-based Platforms :: Sega Dreamcast"))
386+ self.create_trove_cat((635,634,"xbox","Microsoft Xbox","Operating System :: Other Operating Systems :: Console-based Platforms :: Microsoft Xbox"))
387+ self.create_trove_cat((636,634,"sony-ps2","Sony Playstation 2","Operating System :: Other Operating Systems :: Console-based Platforms :: Sony Playstation 2"))
388+ self.create_trove_cat((422,236,"mswin_98","Win98","Operating System :: Other Operating Systems :: Win98"))
389+ self.create_trove_cat((425,422,"mswin_98_osr2","Win98 OSR2","Operating System :: Other Operating Systems :: Win98 :: Win98 OSR2"))
390+ self.create_trove_cat((424,236,"mswin_me","WinME","Operating System :: Other Operating Systems :: WinME"))
391+ self.create_trove_cat((423,236,"mswin_nt","WinNT","Operating System :: Other Operating Systems :: WinNT"))
392+ self.create_trove_cat((220,236,"os2","IBM OS/2","Operating System :: Other Operating Systems :: IBM OS/2"))
393+ self.create_trove_cat((211,236,"irix","SGI IRIX","Operating System :: Other Operating Systems :: SGI IRIX"))
394+ self.create_trove_cat((210,236,"aix","IBM AIX","Operating System :: Other Operating Systems :: IBM AIX"))
395+ self.create_trove_cat((212,236,"other","Other","Operating System :: Other Operating Systems :: Other"))
396+ self.create_trove_cat((446,236,"openvms","OpenVMS","Operating System :: Other Operating Systems :: OpenVMS"))
397+ self.create_trove_cat((434,236,"amigaos","AmigaOS","Operating System :: Other Operating Systems :: AmigaOS"))
398+ self.create_trove_cat((448,236,"mswin_server2003","Microsoft Windows Server 2003","Operating System :: Other Operating Systems :: Microsoft Windows Server 2003"))
399+ self.create_trove_cat((447,236,"morphos","MorphOS","Operating System :: Other Operating Systems :: MorphOS"))
400+ self.create_trove_cat((209,236,"hpux","HP-UX","Operating System :: Other Operating Systems :: HP-UX"))
401+ self.create_trove_cat((208,236,"sco","SCO","Operating System :: Other Operating Systems :: SCO"))
402+ self.create_trove_cat((240,236,"gnuhurd","GNU Hurd","Operating System :: Other Operating Systems :: GNU Hurd"))
403+ self.create_trove_cat((217,236,"win31","Microsoft Windows 3.x","Operating System :: Other Operating Systems :: Microsoft Windows 3.x"))
404+ self.create_trove_cat((432,199,"os_groups","Grouping and Descriptive Categories","Operating System :: Grouping and Descriptive Categories"))
405+ self.create_trove_cat((218,432,"win95","32-bit MS Windows (95/98)","Operating System :: Grouping and Descriptive Categories :: 32-bit MS Windows (95/98)"))
406+ self.create_trove_cat((439,432,"os_projectdistrospecific","Project is OS Distribution-Specific","Operating System :: Grouping and Descriptive Categories :: Project is OS Distribution-Specific"))
407+ self.create_trove_cat((449,432,"eightbit_oses","Classic 8-bit Operating Systems (Apple, Atari, Commodore, etc.)","Operating System :: Grouping and Descriptive Categories :: Classic 8-bit Operating Systems (Apple, Atari, Commodore, etc.)"))
408+ self.create_trove_cat((436,432,"os_portable","OS Portable (Source code to work with many OS platforms)","Operating System :: Grouping and Descriptive Categories :: OS Portable (Source code to work with many OS platforms)"))
409+ self.create_trove_cat((438,432,"os_projectdistro","Project is an Operating System Distribution","Operating System :: Grouping and Descriptive Categories :: Project is an Operating System Distribution"))
410+ self.create_trove_cat((235,432,"independent","OS Independent (Written in an interpreted language)","Operating System :: Grouping and Descriptive Categories :: OS Independent (Written in an interpreted language)"))
411+ self.create_trove_cat((200,432,"posix","All POSIX (Linux/BSD/UNIX-like OSes)","Operating System :: Grouping and Descriptive Categories :: All POSIX (Linux/BSD/UNIX-like OSes)"))
412+ self.create_trove_cat((219,432,"winnt","32-bit MS Windows (NT/2000/XP)","Operating System :: Grouping and Descriptive Categories :: 32-bit MS Windows (NT/2000/XP)"))
413+ self.create_trove_cat((202,432,"bsd","All BSD Platforms (FreeBSD/NetBSD/OpenBSD/Apple Mac OS X)","Operating System :: Grouping and Descriptive Categories :: All BSD Platforms (FreeBSD/NetBSD/OpenBSD/Apple Mac OS X)"))
414+ self.create_trove_cat((435,432,"mswin_all32bit","All 32-bit MS Windows (95/98/NT/2000/XP)","Operating System :: Grouping and Descriptive Categories :: All 32-bit MS Windows (95/98/NT/2000/XP)"))
415+ self.create_trove_cat((437,432,"os_projectkernel","Project is an Operating System Kernel","Operating System :: Grouping and Descriptive Categories :: Project is an Operating System Kernel"))
416+ self.create_trove_cat((64,63,"emacs","Emacs","Topic :: Text Editors :: Emacs"))
417+ self.create_trove_cat((65,63,"ide","Integrated Development Environments (IDE)","Topic :: Text Editors :: Integrated Development Environments (IDE)"))
418+ self.create_trove_cat((69,63,"documentation","Documentation","Topic :: Text Editors :: Documentation"))
419+ self.create_trove_cat((70,63,"wordprocessors","Word Processors","Topic :: Text Editors :: Word Processors"))
420+ self.create_trove_cat((285,63,"textprocessing","Text Processing","Topic :: Text Editors :: Text Processing"))
421+ self.create_trove_cat((611,18,"formats_and_protocols","Formats and Protocols","Topic :: Formats and Protocols"))
422+ self.create_trove_cat((554,611,"data_formats","Data Formats","Topic :: Formats and Protocols :: Data Formats"))
423+ self.create_trove_cat((559,554,"xml","XML","Topic :: Formats and Protocols :: Data Formats :: XML"))
424+ self.create_trove_cat((557,554,"sgml","SGML","Topic :: Formats and Protocols :: Data Formats :: SGML"))
425+ self.create_trove_cat((555,554,"docbook","DocBook","Topic :: Formats and Protocols :: Data Formats :: DocBook"))
426+ self.create_trove_cat((556,554,"html_xhtml","HTML/XHTML","Topic :: Formats and Protocols :: Data Formats :: HTML/XHTML"))
427+ self.create_trove_cat((558,554,"tex_latex","TeX/LaTeX","Topic :: Formats and Protocols :: Data Formats :: TeX/LaTeX"))
428+ self.create_trove_cat((612,611,"protocols","Protocols","Topic :: Formats and Protocols :: Protocols"))
429+ self.create_trove_cat((616,612,"xml_rpc","XML-RPC","Topic :: Formats and Protocols :: Protocols :: XML-RPC"))
430+ self.create_trove_cat((614,612,"nntp","NNTP","Topic :: Formats and Protocols :: Protocols :: NNTP"))
431+ self.create_trove_cat((613,612,"soap","SOAP","Topic :: Formats and Protocols :: Protocols :: SOAP"))
432+ self.create_trove_cat((615,612,"rss","RSS","Topic :: Formats and Protocols :: Protocols :: RSS"))
433+ self.create_trove_cat((156,18,"terminals","Terminals","Topic :: Terminals"))
434+ self.create_trove_cat((157,156,"serial","Serial","Topic :: Terminals :: Serial"))
435+ self.create_trove_cat((158,156,"virtual","Terminal Emulators/X Terminals","Topic :: Terminals :: Terminal Emulators/X Terminals"))
436+ self.create_trove_cat((159,156,"telnet","Telnet","Topic :: Terminals :: Telnet"))
437+ self.create_trove_cat((20,18,"communications","Communications","Topic :: Communications"))
438+ self.create_trove_cat((37,20,"fido","FIDO","Topic :: Communications :: FIDO"))
439+ self.create_trove_cat((38,20,"hamradio","Ham Radio","Topic :: Communications :: Ham Radio"))
440+ self.create_trove_cat((39,20,"usenet","Usenet News","Topic :: Communications :: Usenet News"))
441+ self.create_trove_cat((40,20,"internetphone","Internet Phone","Topic :: Communications :: Internet Phone"))
442+ self.create_trove_cat((36,20,"fax","Fax","Topic :: Communications :: Fax"))
443+ self.create_trove_cat((22,20,"chat","Chat","Topic :: Communications :: Chat"))
444+ self.create_trove_cat((574,22,"msn_messenger","MSN Messenger","Topic :: Communications :: Chat :: MSN Messenger"))
445+ self.create_trove_cat((26,22,"aim","AOL Instant Messenger","Topic :: Communications :: Chat :: AOL Instant Messenger"))
446+ self.create_trove_cat((24,22,"irc","Internet Relay Chat","Topic :: Communications :: Chat :: Internet Relay Chat"))
447+ self.create_trove_cat((25,22,"talk","Unix Talk","Topic :: Communications :: Chat :: Unix Talk"))
448+ self.create_trove_cat((23,22,"icq","ICQ","Topic :: Communications :: Chat :: ICQ"))
449+ self.create_trove_cat((590,20,"streaming_comms","Streaming","Topic :: Communications :: Streaming"))
450+ self.create_trove_cat((27,20,"conferencing","Conferencing","Topic :: Communications :: Conferencing"))
451+ self.create_trove_cat((247,20,"telephony","Telephony","Topic :: Communications :: Telephony"))
452+ self.create_trove_cat((251,20,"filesharing","File Sharing","Topic :: Communications :: File Sharing"))
453+ self.create_trove_cat((622,251,"bittorrent","BitTorrent","Topic :: Communications :: File Sharing :: BitTorrent"))
454+ self.create_trove_cat((286,251,"gnutella","Gnutella","Topic :: Communications :: File Sharing :: Gnutella"))
455+ self.create_trove_cat((241,251,"napster","Napster","Topic :: Communications :: File Sharing :: Napster"))
456+ self.create_trove_cat((21,20,"bbs","BBS","Topic :: Communications :: BBS"))
457+ self.create_trove_cat((28,20,"email","Email","Topic :: Communications :: Email"))
458+ self.create_trove_cat((31,28,"mua","Email Clients (MUA)","Topic :: Communications :: Email :: Email Clients (MUA)"))
459+ self.create_trove_cat((32,28,"mta","Mail Transport Agents","Topic :: Communications :: Email :: Mail Transport Agents"))
460+ self.create_trove_cat((234,18,"other","Other/Nonlisted Topic","Topic :: Other/Nonlisted Topic"))
461+ self.create_trove_cat((129,18,"office","Office/Business","Topic :: Office/Business"))
462+ self.create_trove_cat((576,129,"enterprise","Enterprise","Topic :: Office/Business :: Enterprise"))
463+ self.create_trove_cat((579,576,"crm","CRM","Topic :: Office/Business :: Enterprise :: CRM"))
464+ self.create_trove_cat((577,576,"erp","ERP","Topic :: Office/Business :: Enterprise :: ERP"))
465+ self.create_trove_cat((578,576,"olap","OLAP","Topic :: Office/Business :: Enterprise :: OLAP"))
466+ self.create_trove_cat((580,576,"data_warehousing","Data Warehousing","Topic :: Office/Business :: Enterprise :: Data Warehousing"))
467+ self.create_trove_cat((587,129,"time_tracking","Time Tracking","Topic :: Office/Business :: Time Tracking"))
468+ self.create_trove_cat((75,129,"financial","Financial","Topic :: Office/Business :: Financial"))
469+ self.create_trove_cat((76,75,"accounting","Accounting","Topic :: Office/Business :: Financial :: Accounting"))
470+ self.create_trove_cat((77,75,"investment","Investment","Topic :: Office/Business :: Financial :: Investment"))
471+ self.create_trove_cat((78,75,"spreadsheet","Spreadsheet","Topic :: Office/Business :: Financial :: Spreadsheet"))
472+ self.create_trove_cat((79,75,"pointofsale","Point-Of-Sale","Topic :: Office/Business :: Financial :: Point-Of-Sale"))
473+ self.create_trove_cat((130,129,"scheduling","Scheduling","Topic :: Office/Business :: Scheduling"))
474+ self.create_trove_cat((585,130,"calendar","Calendar","Topic :: Office/Business :: Scheduling :: Calendar"))
475+ self.create_trove_cat((586,130,"resource_booking","Resource Booking","Topic :: Office/Business :: Scheduling :: Resource Booking"))
476+ self.create_trove_cat((131,129,"suites","Office Suites","Topic :: Office/Business :: Office Suites"))
477+ self.create_trove_cat((588,129,"todo_lists","To-Do Lists","Topic :: Office/Business :: To-Do Lists"))
478+ self.create_trove_cat((607,129,"project_management","Project Management","Topic :: Office/Business :: Project Management"))
479+ self.create_trove_cat((66,18,"database","Database","Topic :: Database"))
480+ self.create_trove_cat((68,66,"frontends","Front-Ends","Topic :: Database :: Front-Ends"))
481+ self.create_trove_cat((67,66,"engines","Database Engines/Servers","Topic :: Database :: Database Engines/Servers"))
482+ self.create_trove_cat((43,18,"security","Security","Topic :: Security"))
483+ self.create_trove_cat((44,43,"cryptography","Cryptography","Topic :: Security :: Cryptography"))
484+ self.create_trove_cat((55,18,"desktop","Desktop Environment","Topic :: Desktop Environment"))
485+ self.create_trove_cat((56,55,"windowmanagers","Window Managers","Topic :: Desktop Environment :: Window Managers"))
486+ self.create_trove_cat((59,56,"enlightenment","Enlightenment","Topic :: Desktop Environment :: Window Managers :: Enlightenment"))
487+ self.create_trove_cat((60,59,"themes","Themes","Topic :: Desktop Environment :: Window Managers :: Enlightenment :: Themes"))
488+ self.create_trove_cat((57,55,"kde","K Desktop Environment (KDE)","Topic :: Desktop Environment :: K Desktop Environment (KDE)"))
489+ self.create_trove_cat((61,57,"themes","Themes","Topic :: Desktop Environment :: K Desktop Environment (KDE) :: Themes"))
490+ self.create_trove_cat((58,55,"gnome","Gnome","Topic :: Desktop Environment :: Gnome"))
491+ self.create_trove_cat((62,55,"screensavers","Screen Savers","Topic :: Desktop Environment :: Screen Savers"))
492+ self.create_trove_cat((80,18,"games","Games/Entertainment","Topic :: Games/Entertainment"))
493+ self.create_trove_cat((633,80,"console-games","Console-based Games","Topic :: Games/Entertainment :: Console-based Games"))
494+ self.create_trove_cat((287,80,"boardgames","Board Games","Topic :: Games/Entertainment :: Board Games"))
495+ self.create_trove_cat((288,80,"sidescrolling","Side-Scrolling/Arcade Games","Topic :: Games/Entertainment :: Side-Scrolling/Arcade Games"))
496+ self.create_trove_cat((81,80,"realtimestrategy","Real Time Strategy","Topic :: Games/Entertainment :: Real Time Strategy"))
497+ self.create_trove_cat((82,80,"firstpersonshooters","First Person Shooters","Topic :: Games/Entertainment :: First Person Shooters"))
498+ self.create_trove_cat((83,80,"turnbasedstrategy","Turn Based Strategy","Topic :: Games/Entertainment :: Turn Based Strategy"))
499+ self.create_trove_cat((84,80,"rpg","Role-Playing","Topic :: Games/Entertainment :: Role-Playing"))
500+ self.create_trove_cat((85,80,"simulation","Simulation","Topic :: Games/Entertainment :: Simulation"))
501+ self.create_trove_cat((86,80,"mud","Multi-User Dungeons (MUD)","Topic :: Games/Entertainment :: Multi-User Dungeons (MUD)"))
502+ self.create_trove_cat((268,80,"Puzzles","Puzzle Games","Topic :: Games/Entertainment :: Puzzle Games"))
503+ self.create_trove_cat((88,87,"finger","Finger","Topic :: Internet :: Finger"))
504+ self.create_trove_cat((89,87,"ftp","File Transfer Protocol (FTP)","Topic :: Internet :: File Transfer Protocol (FTP)"))
505+ self.create_trove_cat((270,87,"WAP","WAP","Topic :: Internet :: WAP"))
506+ self.create_trove_cat((90,87,"www","WWW/HTTP","Topic :: Internet :: WWW/HTTP"))
507+ self.create_trove_cat((91,90,"browsers","Browsers","Topic :: Internet :: WWW/HTTP :: Browsers"))
508+ self.create_trove_cat((92,90,"dynamic","Dynamic Content","Topic :: Internet :: WWW/HTTP :: Dynamic Content"))
509+ self.create_trove_cat((95,92,"messageboards","Message Boards","Topic :: Internet :: WWW/HTTP :: Dynamic Content :: Message Boards"))
510+ self.create_trove_cat((96,92,"cgi","CGI Tools/Libraries","Topic :: Internet :: WWW/HTTP :: Dynamic Content :: CGI Tools/Libraries"))
511+ self.create_trove_cat((94,92,"counters","Page Counters","Topic :: Internet :: WWW/HTTP :: Dynamic Content :: Page Counters"))
512+ self.create_trove_cat((93,90,"indexing","Indexing/Search","Topic :: Internet :: WWW/HTTP :: Indexing/Search"))
513+ self.create_trove_cat((243,90,"sitemanagement","Site Management","Topic :: Internet :: WWW/HTTP :: Site Management"))
514+ self.create_trove_cat((244,243,"linkchecking","Link Checking","Topic :: Internet :: WWW/HTTP :: Site Management :: Link Checking"))
515+ self.create_trove_cat((250,90,"httpservers","HTTP Servers","Topic :: Internet :: WWW/HTTP :: HTTP Servers"))
516+ self.create_trove_cat((149,87,"dns","Name Service (DNS)","Topic :: Internet :: Name Service (DNS)"))
517+ self.create_trove_cat((245,87,"loganalysis","Log Analysis","Topic :: Internet :: Log Analysis"))
518+ self.create_trove_cat((45,18,"development","Software Development","Topic :: Software Development"))
519+ self.create_trove_cat((563,45,"modeling","Modeling","Topic :: Software Development :: Modeling"))
520+ self.create_trove_cat((46,45,"build","Build Tools","Topic :: Software Development :: Build Tools"))
521+ self.create_trove_cat((575,45,"testing","Testing","Topic :: Software Development :: Testing"))
522+ self.create_trove_cat((620,45,"algorithms","Algorithms","Topic :: Software Development :: Algorithms"))
523+ self.create_trove_cat((621,620,"genetic_algorithms","Genetic Algorithms","Topic :: Software Development :: Algorithms :: Genetic Algorithms"))
524+ self.create_trove_cat((606,45,"frameworks","Frameworks","Topic :: Software Development :: Frameworks"))
525+ self.create_trove_cat((564,45,"documentation","Documentation","Topic :: Software Development :: Documentation"))
526+ self.create_trove_cat((562,45,"swdev_oo","Object Oriented","Topic :: Software Development :: Object Oriented"))
527+ self.create_trove_cat((409,45,"l10n","L10N (Localization)","Topic :: Software Development :: L10N (Localization)"))
528+ self.create_trove_cat((408,45,"i18n","I18N (Internationalization)","Topic :: Software Development :: I18N (Internationalization)"))
529+ self.create_trove_cat((50,45,"objectbrokering","Object Brokering","Topic :: Software Development :: Object Brokering"))
530+ self.create_trove_cat((51,50,"corba","CORBA","Topic :: Software Development :: Object Brokering :: CORBA"))
531+ self.create_trove_cat((52,45,"versioncontrol","Version Control","Topic :: Software Development :: Version Control"))
532+ self.create_trove_cat((53,52,"cvs","CVS","Topic :: Software Development :: Version Control :: CVS"))
533+ self.create_trove_cat((54,52,"rcs","RCS","Topic :: Software Development :: Version Control :: RCS"))
534+ self.create_trove_cat((260,52,"SCCS","SCCS","Topic :: Software Development :: Version Control :: SCCS"))
535+ self.create_trove_cat((259,45,"codegen","Code Generators","Topic :: Software Development :: Code Generators"))
536+ self.create_trove_cat((47,45,"debuggers","Debuggers","Topic :: Software Development :: Debuggers"))
537+ self.create_trove_cat((48,45,"compilers","Compilers","Topic :: Software Development :: Compilers"))
538+ self.create_trove_cat((49,45,"interpreters","Interpreters","Topic :: Software Development :: Interpreters"))
539+ self.create_trove_cat((561,45,"softwaredev_ui","User Interfaces","Topic :: Software Development :: User Interfaces"))
540+ self.create_trove_cat((565,45,"quality_assurance","Quality Assurance","Topic :: Software Development :: Quality Assurance"))
541+ self.create_trove_cat((570,45,"case_tools","CASE","Topic :: Software Development :: CASE"))
542+ self.create_trove_cat((582,45,"design","Design","Topic :: Software Development :: Design"))
543+ self.create_trove_cat((593,45,"cross_compilers","Cross Compilers","Topic :: Software Development :: Cross Compilers"))
544+ self.create_trove_cat((603,45,"profilers","Profiling","Topic :: Software Development :: Profiling"))
545+ self.create_trove_cat((610,45,"virtual_machines","Virtual Machines","Topic :: Software Development :: Virtual Machines"))
546+ self.create_trove_cat((619,45,"usability","Usability","Topic :: Software Development :: Usability"))
547+ self.create_trove_cat((581,71,"library","Library","Topic :: Education :: Library"))
548+ self.create_trove_cat((604,581,"opac","OPAC","Topic :: Education :: Library :: OPAC"))
549+ self.create_trove_cat((605,581,"marc_and_metadata","MARC and Book/Library Metadata","Topic :: Education :: Library :: MARC and Book/Library Metadata"))
550+ self.create_trove_cat((132,18,"religion","Religion and Philosophy","Topic :: Religion and Philosophy"))
551+ self.create_trove_cat((571,132,"new_age","New Age","Topic :: Religion and Philosophy :: New Age"))
552+ self.create_trove_cat((136,18,"system","System","Topic :: System"))
553+ self.create_trove_cat((638,136,"storage","Storage","Topic :: System :: Storage"))
554+ self.create_trove_cat((601,638,"file_management","File Management","Topic :: System :: Storage :: File Management"))
555+ self.create_trove_cat((19,638,"archiving","Archiving","Topic :: System :: Storage :: Archiving"))
556+ self.create_trove_cat((42,19,"compression","Compression","Topic :: System :: Storage :: Archiving :: Compression"))
557+ self.create_trove_cat((137,19,"backup","Backup","Topic :: System :: Storage :: Archiving :: Backup"))
558+ self.create_trove_cat((41,19,"packaging","Packaging","Topic :: System :: Storage :: Archiving :: Packaging"))
559+ self.create_trove_cat((294,136,"shells","System Shells","Topic :: System :: System Shells"))
560+ self.create_trove_cat((74,136,"emulators","Emulators","Topic :: System :: Emulators"))
561+ self.create_trove_cat((627,136,"system_search","Search","Topic :: System :: Search"))
562+ self.create_trove_cat((257,136,"softwaredist","Software Distribution","Topic :: System :: Software Distribution"))
563+ self.create_trove_cat((122,113,"players","Players","Topic :: Multimedia :: Sound/Audio :: Players"))
564+ self.create_trove_cat((253,136,"sysadministration","Systems Administration","Topic :: System :: Systems Administration"))
565+ self.create_trove_cat((289,253,"authentication","Authentication/Directory","Topic :: System :: Systems Administration :: Authentication/Directory"))
566+ self.create_trove_cat((290,289,"nis","NIS","Topic :: System :: Systems Administration :: Authentication/Directory :: NIS"))
567+ self.create_trove_cat((291,289,"ldap","LDAP","Topic :: System :: Systems Administration :: Authentication/Directory :: LDAP"))
568+ self.create_trove_cat((153,136,"power","Power (UPS)","Topic :: System :: Power (UPS)"))
569+ self.create_trove_cat((150,136,"networking","Networking","Topic :: System :: Networking"))
570+ self.create_trove_cat((566,150,"wireless","Wireless","Topic :: System :: Networking :: Wireless"))
571+ self.create_trove_cat((151,150,"firewalls","Firewalls","Topic :: System :: Networking :: Firewalls"))
572+ self.create_trove_cat((152,150,"monitoring","Monitoring","Topic :: System :: Networking :: Monitoring"))
573+ self.create_trove_cat((155,152,"watchdog","Hardware Watchdog","Topic :: System :: Networking :: Monitoring :: Hardware Watchdog"))
574+ self.create_trove_cat((148,136,"logging","Logging","Topic :: System :: Logging"))
575+ self.create_trove_cat((592,148,"log_rotation","Log Rotation","Topic :: System :: Logging :: Log Rotation"))
576+ self.create_trove_cat((144,136,"kernels","Operating System Kernels","Topic :: System :: Operating System Kernels"))
577+ self.create_trove_cat((145,144,"bsd","BSD","Topic :: System :: Operating System Kernels :: BSD"))
578+ self.create_trove_cat((239,144,"gnuhurd","GNU Hurd","Topic :: System :: Operating System Kernels :: GNU Hurd"))
579+ self.create_trove_cat((143,144,"linux","Linux","Topic :: System :: Operating System Kernels :: Linux"))
580+ self.create_trove_cat((147,136,"setup","Installation/Setup","Topic :: System :: Installation/Setup"))
581+ self.create_trove_cat((146,136,"hardware","Hardware","Topic :: System :: Hardware"))
582+ self.create_trove_cat((313,146,"mainframe","Mainframes","Topic :: System :: Hardware :: Mainframes"))
583+ self.create_trove_cat((312,146,"smp","Symmetric Multi-processing","Topic :: System :: Hardware :: Symmetric Multi-processing"))
584+ self.create_trove_cat((292,146,"drivers","Hardware Drivers","Topic :: System :: Hardware :: Hardware Drivers"))
585+ self.create_trove_cat((138,136,"benchmark","Benchmark","Topic :: System :: Benchmark"))
586+ self.create_trove_cat((139,136,"boot","Boot","Topic :: System :: Boot"))
587+ self.create_trove_cat((140,139,"init","Init","Topic :: System :: Boot :: Init"))
588+ self.create_trove_cat((141,136,"clustering","Clustering","Topic :: System :: Clustering"))
589+ self.create_trove_cat((308,136,"distributed_computing","Distributed Computing","Topic :: System :: Distributed Computing"))
590+ self.create_trove_cat((142,136,"filesystems","Filesystems","Topic :: System :: Filesystems"))
591+ self.create_trove_cat((154,18,"printing","Printing","Topic :: Printing"))
592+ self.create_trove_cat((87,18,"internet","Internet","Topic :: Internet"))
593+ self.create_trove_cat((118,116,"cdripping","CD Ripping","Topic :: Multimedia :: Sound/Audio :: CD Audio :: CD Ripping"))
594+ self.create_trove_cat((119,113,"conversion","Conversion","Topic :: Multimedia :: Sound/Audio :: Conversion"))
595+ self.create_trove_cat((120,113,"editors","Editors","Topic :: Multimedia :: Sound/Audio :: Editors"))
596+ self.create_trove_cat((121,113,"mixers","Mixers","Topic :: Multimedia :: Sound/Audio :: Mixers"))
597+ self.create_trove_cat((100,99,"graphics","Graphics","Topic :: Multimedia :: Graphics"))
598+ self.create_trove_cat((109,100,"3dmodeling","3D Modeling","Topic :: Multimedia :: Graphics :: 3D Modeling"))
599+ self.create_trove_cat((110,100,"3drendering","3D Rendering","Topic :: Multimedia :: Graphics :: 3D Rendering"))
600+ self.create_trove_cat((111,100,"presentation","Presentation","Topic :: Multimedia :: Graphics :: Presentation"))
601+ self.create_trove_cat((112,100,"viewers","Viewers","Topic :: Multimedia :: Graphics :: Viewers"))
602+ self.create_trove_cat((101,100,"capture","Capture","Topic :: Multimedia :: Graphics :: Capture"))
603+ self.create_trove_cat((104,101,"screencapture","Screen Capture","Topic :: Multimedia :: Graphics :: Capture :: Screen Capture"))
604+ self.create_trove_cat((103,101,"cameras","Digital Camera","Topic :: Multimedia :: Graphics :: Capture :: Digital Camera"))
605+ self.create_trove_cat((102,101,"scanners","Scanners","Topic :: Multimedia :: Graphics :: Capture :: Scanners"))
606+ self.create_trove_cat((105,100,"conversion","Graphics Conversion","Topic :: Multimedia :: Graphics :: Graphics Conversion"))
607+ self.create_trove_cat((106,100,"editors","Editors","Topic :: Multimedia :: Graphics :: Editors"))
608+ self.create_trove_cat((108,106,"raster","Raster-Based","Topic :: Multimedia :: Graphics :: Editors :: Raster-Based"))
609+ self.create_trove_cat((107,106,"vector","Vector-Based","Topic :: Multimedia :: Graphics :: Editors :: Vector-Based"))
610+ self.create_trove_cat((97,18,"scientific","Scientific/Engineering","Topic :: Scientific/Engineering"))
611+ self.create_trove_cat((609,97,"molecular_science","Molecular Science","Topic :: Scientific/Engineering :: Molecular Science"))
612+ self.create_trove_cat((602,97,"robotics","Robotics","Topic :: Scientific/Engineering :: Robotics"))
613+ self.create_trove_cat((600,97,"simulations","Simulations","Topic :: Scientific/Engineering :: Simulations"))
614+ self.create_trove_cat((568,97,"ecosystem_sciences","Ecosystem Sciences","Topic :: Scientific/Engineering :: Ecosystem Sciences"))
615+ self.create_trove_cat((386,97,"interfaceengine","Interface Engine/Protocol Translator","Topic :: Scientific/Engineering :: Interface Engine/Protocol Translator"))
616+ self.create_trove_cat((384,97,"chemistry","Chemistry","Topic :: Scientific/Engineering :: Chemistry"))
617+ self.create_trove_cat((252,97,"bioinformatics","Bio-Informatics","Topic :: Scientific/Engineering :: Bio-Informatics"))
618+ self.create_trove_cat((246,97,"eda","Electronic Design Automation (EDA)","Topic :: Scientific/Engineering :: Electronic Design Automation (EDA)"))
619+ self.create_trove_cat((135,97,"visualization","Visualization","Topic :: Scientific/Engineering :: Visualization"))
620+ self.create_trove_cat((134,97,"astronomy","Astronomy","Topic :: Scientific/Engineering :: Astronomy"))
621+ self.create_trove_cat((133,97,"ai","Artificial Intelligence","Topic :: Scientific/Engineering :: Artificial Intelligence"))
622+ self.create_trove_cat((591,133,"intelligent_agents","Intelligent Agents","Topic :: Scientific/Engineering :: Artificial Intelligence :: Intelligent Agents"))
623+ self.create_trove_cat((98,97,"mathematics","Mathematics","Topic :: Scientific/Engineering :: Mathematics"))
624+ self.create_trove_cat((272,97,"HMI","Human Machine Interfaces","Topic :: Scientific/Engineering :: Human Machine Interfaces"))
625+ self.create_trove_cat((266,97,"medical","Medical Science Apps.","Topic :: Scientific/Engineering :: Medical Science Apps."))
626+ self.create_trove_cat((383,97,"gis","GIS","Topic :: Scientific/Engineering :: GIS"))
627+ self.create_trove_cat((385,97,"informationanalysis","Information Analysis","Topic :: Scientific/Engineering :: Information Analysis"))
628+ self.create_trove_cat((387,97,"physics","Physics","Topic :: Scientific/Engineering :: Physics"))
629+ self.create_trove_cat((567,97,"earth_science","Earth Sciences","Topic :: Scientific/Engineering :: Earth Sciences"))
630+ self.create_trove_cat((282,18,"Sociology","Sociology","Topic :: Sociology"))
631+ self.create_trove_cat((284,282,"Genealogy","Genealogy","Topic :: Sociology :: Genealogy"))
632+ self.create_trove_cat((283,282,"History","History","Topic :: Sociology :: History"))
633+ self.create_trove_cat((71,18,"education","Education","Topic :: Education"))
634+ self.create_trove_cat((73,71,"testing","Testing","Topic :: Education :: Testing"))
635+ self.create_trove_cat((72,71,"cai","Computer Aided Instruction (CAI)","Topic :: Education :: Computer Aided Instruction (CAI)"))
636+ self.create_trove_cat((18,0,"topic","Topic","Topic"))
637+ self.create_trove_cat((125,99,"video","Video","Topic :: Multimedia :: Video"))
638+ self.create_trove_cat((594,125,"still_capture","Still Capture","Topic :: Multimedia :: Video :: Still Capture"))
639+ self.create_trove_cat((596,125,"codec","Codec","Topic :: Multimedia :: Video :: Codec"))
640+ self.create_trove_cat((127,125,"conversion","Conversion","Topic :: Multimedia :: Video :: Conversion"))
641+ self.create_trove_cat((128,125,"display","Display","Topic :: Multimedia :: Video :: Display"))
642+ self.create_trove_cat((256,125,"nonlineareditor","Non-Linear Editor","Topic :: Multimedia :: Video :: Non-Linear Editor"))
643+ self.create_trove_cat((595,125,"special_effects","Special Effects","Topic :: Multimedia :: Video :: Special Effects"))
644+ self.create_trove_cat((623,125,"video_realtime","Realtime Processing","Topic :: Multimedia :: Video :: Realtime Processing"))
645+ self.create_trove_cat((126,125,"vidcapture","Video Capture","Topic :: Multimedia :: Video :: Video Capture"))
646+ self.create_trove_cat((113,99,"sound","Sound/Audio","Topic :: Multimedia :: Sound/Audio"))
647+ self.create_trove_cat((123,122,"mp3","MP3","Topic :: Multimedia :: Sound/Audio :: Players :: MP3"))
648+ self.create_trove_cat((124,113,"speech","Speech","Topic :: Multimedia :: Sound/Audio :: Speech"))
649+ self.create_trove_cat((114,113,"analysis","Analysis","Topic :: Multimedia :: Sound/Audio :: Analysis"))
650+ self.create_trove_cat((115,113,"capture","Capture/Recording","Topic :: Multimedia :: Sound/Audio :: Capture/Recording"))
651+ self.create_trove_cat((248,113,"midi","MIDI","Topic :: Multimedia :: Sound/Audio :: MIDI"))
652+ self.create_trove_cat((249,113,"synthesis","Sound Synthesis","Topic :: Multimedia :: Sound/Audio :: Sound Synthesis"))
653+ self.create_trove_cat((116,113,"cdaudio","CD Audio","Topic :: Multimedia :: Sound/Audio :: CD Audio"))
654+ self.create_trove_cat((117,116,"cdplay","CD Playing","Topic :: Multimedia :: Sound/Audio :: CD Audio :: CD Playing"))
655+ self.create_trove_cat((99,18,"multimedia","Multimedia","Topic :: Multimedia"))
656+ session(M.TroveCategory).flush()
\ No newline at end of file
--- a/Allura/allura/ext/admin/admin_main.py
+++ b/Allura/allura/ext/admin/admin_main.py
@@ -128,7 +128,8 @@ class AdminApp(Application):
128128 links += [
129129 SitemapEntry('Metadata', admin_url+'overview', className='nav_child'),
130130 SitemapEntry('Homepage', admin_url+'homepage', className='nav_child'),
131- SitemapEntry('Screenshots', admin_url+'screenshots', className='nav_child')
131+ SitemapEntry('Screenshots', admin_url+'screenshots', className='nav_child'),
132+ SitemapEntry('Categorization', admin_url+'trove', className='nav_child')
132133 ]
133134 if has_access(c.project, 'admin')():
134135 links.append(SitemapEntry('Permissions', admin_url+'permissions/', className='nav_child'))
@@ -190,6 +191,14 @@ class ProjectAdminController(BaseController):
190191 return dict()
191192
192193 @without_trailing_slash
194+ @expose('jinja:allura.ext.admin:templates/project_trove.html')
195+ def trove(self):
196+ base_troves = M.TroveCategory.query.find(dict(trove_parent_id=0)).sort('fullname').all()
197+ topic_trove = M.TroveCategory.query.get(trove_parent_id=0,shortname='topic')
198+ license_trove = M.TroveCategory.query.get(trove_parent_id=0,shortname='license')
199+ return dict(base_troves=base_troves,license_trove=license_trove,topic_trove=topic_trove)
200+
201+ @without_trailing_slash
193202 @expose('jinja:allura.ext.admin:templates/project_tools.html')
194203 def tools(self, **kw):
195204 c.markdown_editor = W.markdown_editor
@@ -336,6 +345,55 @@ class ProjectAdminController(BaseController):
336345 g.post_event('project_updated')
337346 redirect('homepage')
338347
348+ @expose('json:')
349+ def get_trove_children(self, trove_id, **kw):
350+ cats = M.TroveCategory.query.find(dict(trove_parent_id=int(trove_id))).all()
351+ return dict(cats = [dict(id=c.trove_cat_id,label=c.fullname) for c in cats])
352+
353+ def _add_trove(self, type, new_trove):
354+ current_troves = getattr(c.project,'trove_%s'%type)
355+ trove_obj = M.TroveCategory.query.get(trove_cat_id=int(new_trove))
356+ error_msg = None
357+ if type in ['license','audience','developmentstatus','language'] and len(current_troves) >= 6:
358+ error_msg = 'You may not have more than 6 of this category.'
359+ elif type in ['topic'] and len(current_troves) >= 3:
360+ error_msg = 'You may not have more than 3 of this category.'
361+ elif trove_obj is not None:
362+ if trove_obj._id not in current_troves:
363+ current_troves.append(trove_obj._id)
364+ g.post_event('project_updated')
365+ else:
366+ error_msg = 'This category has already been assigned to the project.'
367+ return (trove_obj, error_msg)
368+
369+ @expose('json:')
370+ @require_post()
371+ def add_trove_js(self, type, new_trove, **kw):
372+ require_access(c.project, 'update')
373+ trove_obj, error_msg = self._add_trove(type, new_trove)
374+ return dict(trove_full_path = trove_obj.fullpath, trove_cat_id = trove_obj.trove_cat_id, error_msg=error_msg)
375+ redirect('trove')
376+
377+ @expose()
378+ @require_post()
379+ def add_trove(self, type, new_trove, **kw):
380+ require_access(c.project, 'update')
381+ trove_obj, error_msg = self._add_trove(type, new_trove)
382+ if error_msg:
383+ flash(error_msg,'error')
384+ redirect('trove')
385+
386+ @expose()
387+ @require_post()
388+ def delete_trove(self, type, trove, **kw):
389+ require_access(c.project, 'update')
390+ trove_obj = M.TroveCategory.query.get(trove_cat_id=int(trove))
391+ current_troves = getattr(c.project,'trove_%s'%type)
392+ if trove_obj is not None and trove_obj._id in current_troves:
393+ current_troves.remove(trove_obj._id)
394+ g.post_event('project_updated')
395+ redirect('trove')
396+
339397 @expose()
340398 @require_post()
341399 @validate(W.screenshot_admin)
--- /dev/null
+++ b/Allura/allura/ext/admin/templates/project_trove.html
@@ -0,0 +1,145 @@
1+{% extends g.theme.master %}
2+
3+{% block title %}{{c.project.name}} / Categorization{% endblock %}
4+
5+{% block header %}Project Categorization{% endblock %}
6+
7+{% macro show_trove_base_cat(base) %}
8+ <h3>{{base.fullname}}</h3>
9+ <div id="trove_existing_{{base.shortname}}" class="trove_existing grid-19">
10+ {% for cat in c.project.troves_by_type(base.shortname) %}
11+ <div style="clear: both">
12+ <span class="trove_fullpath">{{cat.fullpath}}</span>
13+ <form action="delete_trove" method="post" class="trove_deleter">
14+ <input type="hidden" name="type" value="{{base.shortname}}">
15+ <input type="hidden" name="trove" value="{{cat.trove_cat_id}}">
16+ <input type="submit" value="Delete">
17+ </form>
18+ </div>
19+ {% else %}
20+ <span class="empty_msg">No {{base.fullname}} categories have been selected.</span>
21+ {% endfor %}
22+ </div>
23+ <div class="grid-19 trove_add_container">
24+ <form action="add_trove" method="post" class="trove_adder">
25+ <input type="hidden" name="type" value="{{base.shortname}}">
26+ <label for="new_trove_{{base.shortname}}">Add a new {{base.fullname}} category:</label>
27+ <br>
28+ <select name="new_trove" id="new_trove_{{base.shortname}}">
29+ {% for cat in base.subcategories %}
30+ <option value="{{cat.trove_cat_id}}">{{cat.fullname}}</option>
31+ {% endfor %}
32+ </select>
33+ <br>
34+ <input type="submit" value="Add">
35+ </form>
36+ </div>
37+{% endmacro %}
38+
39+{% block content %}
40+ {% if c.project.deleted %}
41+ <div class="notice">This project has been deleted and is not visible to non-admin users</div>
42+ {% endif %}
43+ {{show_trove_base_cat(topic_trove)}}
44+ {{show_trove_base_cat(license_trove)}}
45+ {% for base in base_troves if base.shortname != 'topic' and base.shortname != 'license' %}
46+ {{show_trove_base_cat(base)}}
47+ {% endfor %}
48+{% endblock %}
49+
50+{% block extra_js %}
51+ <script type="text/javascript">
52+ $(document).ready(function () {
53+ var session_id = $('input[name=_session_id]').val();
54+ var del_btn = '<a href="#" class="del_btn" title="Delete"><b data-icon="{{g.icons["delete"].char}}" class="ico {{g.icons["delete"].css}}"></b></a>';
55+ var find_sub_cats = function(trove_field){
56+ var val = trove_field.val();
57+ trove_field.nextAll().remove();
58+ trove_field.parent().append('<br><input type="submit" value="Add">');
59+ if(val){
60+ $.get('get_trove_children',{'trove_id':val},function(resp){
61+ if(resp.cats && resp.cats.length){
62+ var num_subs = trove_field.parent().find('select').length;
63+ var new_select = $('<select style="margin-left:'+1*num_subs+'em"></select>');
64+ trove_field.after(new_select);
65+ new_select.before('<br>');
66+ for(var i=0,len=resp.cats.length;i<len;++i){
67+ new_select.append('<option value="'+resp.cats[i].id+'">'+resp.cats[i].label+'</option>');
68+ }
69+ find_sub_cats(new_select);
70+ }
71+ });
72+ }
73+ };
74+
75+ $('form.trove_adder select').each(function(){
76+ find_sub_cats($(this));
77+ });
78+ $('form.trove_adder').submit(function(evt){
79+ evt.preventDefault();
80+ var $this = $(this);
81+ var type = $this.find('input[name=type]').val();
82+ var new_id = $this.find('select').last().val();
83+ $.post('add_trove_js',{
84+ _session_id:session_id,
85+ type:type,
86+ new_trove:new_id},function(resp){
87+ if(resp.error_msg){
88+ $('#messages').notify(resp.error_msg, {
89+ title: 'Error',
90+ status: 'error'
91+ });
92+ }
93+ else{
94+ $('#trove_existing_'+type).find('span.empty_msg').remove();
95+ $('#trove_existing_'+type).prepend('<div><span class="trove_fullpath">'+resp.trove_full_path+'</span> <form class="trove_deleter"><input type="hidden" name="type" value="'+type+'"><input type="hidden" name="trove" value="'+new_id+'">'+del_btn+'</form></div>');
96+ }
97+ });
98+ }).delegate("select", "change", function(){
99+ find_sub_cats($(this));
100+ });
101+ $('form.trove_deleter').each(function(){
102+ $(this).find('input[type="submit"]').remove();
103+ $(this).append($(del_btn));
104+ });
105+ $('div.trove_existing').delegate("a.del_btn", "click", function(evt){
106+ evt.preventDefault();
107+ var $form = $(this).closest('form');
108+ var type = $form.find('input[name="type"]').val();
109+ $.post('delete_trove',{
110+ _session_id:session_id,
111+ type:type,
112+ trove:$form.find('input[name="trove"]').val()},function(){
113+ $form.closest('div').remove();
114+ var holder = $('#trove_existing_'+type);
115+ if(!holder.find('div').length){
116+ holder.append('<span class="empty_msg">No categories have been selected.</span>')
117+ }
118+ });
119+ });
120+ });
121+ </script>
122+{% endblock %}
123+
124+{% block extra_css %}
125+ <style type="text/css">
126+ .trove_deleter{
127+ display:inline;
128+ }
129+ .trove_deleter input[type="submit"]{
130+ float:none;
131+ }
132+ .trove_fullpath{
133+ vertical-align:middle;
134+ }
135+ .trove_existing{
136+ margin-bottom: 1em;
137+ }
138+ .trove_add_container{
139+ margin-bottom: 1em;
140+ padding-bottom: 1em;
141+ border: 0 solid #ccc;
142+ border-width: 0 0 1px 0;
143+ }
144+ </style>
145+{% endblock %}
\ No newline at end of file
--- a/Allura/allura/model/__init__.py
+++ b/Allura/allura/model/__init__.py
@@ -2,7 +2,7 @@
22 """The application's model objects"""
33
44 from .neighborhood import Neighborhood, NeighborhoodFile
5-from .project import Project, ProjectCategory, ProjectFile, AppConfig
5+from .project import Project, ProjectCategory, TroveCategory, ProjectFile, AppConfig
66 from .index import ArtifactReference, Shortlink
77 from .artifact import Artifact, Message, VersionedArtifact, Snapshot, Feed, AwardFile, Award, AwardGrant
88 from .discuss import Discussion, Thread, PostHistory, Post, DiscussionAttachment
--- a/Allura/allura/model/project.py
+++ b/Allura/allura/model/project.py
@@ -56,6 +56,27 @@ class ProjectCategory(MappedClass):
5656 def subcategories(self):
5757 return self.query.find(dict(parent_id=self._id)).all()
5858
59+class TroveCategory(MappedClass):
60+ class __mongometa__:
61+ session = main_orm_session
62+ name='trove_category'
63+ indexes = [ 'trove_cat_id', 'trove_parent_id' ]
64+
65+ _id=FieldProperty(S.ObjectId)
66+ trove_cat_id = FieldProperty(int, if_missing=None)
67+ trove_parent_id = FieldProperty(int, if_missing=None)
68+ shortname = FieldProperty(str, if_missing='')
69+ fullname = FieldProperty(str, if_missing='')
70+ fullpath = FieldProperty(str, if_missing='')
71+
72+ @property
73+ def parent_category(self):
74+ return self.query.get(trove_cat_id=self.trove_parent_id)
75+
76+ @property
77+ def subcategories(self):
78+ return self.query.find(dict(trove_parent_id=self.trove_cat_id)).sort('fullname').all()
79+
5980 class Project(MappedClass):
6081 _perms_base = [ 'read', 'update', 'admin', 'create']
6182 _perms_init = _perms_base + [ 'register' ]
@@ -100,6 +121,15 @@ class Project(MappedClass):
100121 ordinal = FieldProperty(int, if_missing=0)
101122 database_configured = FieldProperty(bool, if_missing=True)
102123 _extra_tool_status = FieldProperty([str])
124+ trove_root_database=FieldProperty([S.ObjectId])
125+ trove_developmentstatus=FieldProperty([S.ObjectId])
126+ trove_audience=FieldProperty([S.ObjectId])
127+ trove_license=FieldProperty([S.ObjectId])
128+ trove_os=FieldProperty([S.ObjectId])
129+ trove_language=FieldProperty([S.ObjectId])
130+ trove_topic=FieldProperty([S.ObjectId])
131+ trove_natlanguage=FieldProperty([S.ObjectId])
132+ trove_environment=FieldProperty([S.ObjectId])
103133
104134 @property
105135 def permissions(self):
@@ -138,6 +168,9 @@ class Project(MappedClass):
138168 for p in sps ]
139169 return result
140170
171+ def troves_by_type(self, trove_type):
172+ return TroveCategory.query.find({'_id':{'$in':getattr(self,'trove_%s' % trove_type)}}).all()
173+
141174 def get_tool_data(self, tool, key, default=None):
142175 return self.tool_data.get(tool, {}).get(key, None)
143176
--- a/Allura/allura/tests/functional/test_admin.py
+++ b/Allura/allura/tests/functional/test_admin.py
@@ -226,6 +226,23 @@ class TestProjectAdmin(TestController):
226226 assert r.html.find('input',{'name':'removal','value':''}).has_key('checked')
227227 assert not r.html.find('input',{'name':'removal','value':'deleted'}).has_key('checked')
228228
229+ def test_add_remove_trove_cat(self):
230+ r = self.app.get('/admin/trove')
231+ assert 'No Database Environment categories have been selected.' in r
232+ assert '<span class="trove_fullpath">Database Environment :: Database API</span>' not in r
233+ # add a cat
234+ form = r.forms[0]
235+ form['new_trove'].value = '499'
236+ r = form.submit().follow()
237+ # make sure it worked
238+ assert 'No Database Environment categories have been selected.' not in r
239+ assert '<span class="trove_fullpath">Database Environment :: Database API</span>' in r
240+ # delete the cat
241+ r = r.forms[0].submit().follow()
242+ # make sure it worked
243+ assert 'No Database Environment categories have been selected.' in r
244+ assert '<span class="trove_fullpath">Database Environment :: Database API</span>' not in r
245+
229246 def test_project_homepage(self):
230247 r = self.app.get('/admin/homepage')
231248 assert 'Awesome description' not in r
--- a/Allura/allura/websetup/bootstrap.py
+++ b/Allura/allura/websetup/bootstrap.py
@@ -22,6 +22,7 @@ from allura.lib import plugin
2222 from allura import model as M
2323 from allura.websetup import schema
2424 from allura.command import EnsureIndexCommand
25+from allura.command import CreateTroveCategoriesCommand
2526
2627 log = logging.getLogger(__name__)
2728
@@ -186,6 +187,7 @@ def bootstrap(command, conf, vars):
186187 def wipe_database():
187188 conn = M.main_doc_session.bind.conn
188189 flyway = MigrateCommand('flyway')
190+ create_trove_categories = CreateTroveCategoriesCommand('create_trove_categories')
189191 index = EnsureIndexCommand('ensure_index')
190192 if isinstance(conn, mim.Connection):
191193 clear_all_database_tables()
@@ -205,9 +207,11 @@ def wipe_database():
205207 pass
206208 # Run flyway
207209 flyway.run(['--force', '-u', 'mongodb://%s:%s/' % (conn.host, conn.port)])
210+ create_trove_categories.run([])
208211 index.run([])
209212
210213
214+
211215 def clear_all_database_tables():
212216 conn = M.main_doc_session.bind.conn
213217 for db in conn.database_names():
--- a/Allura/setup.py
+++ b/Allura/setup.py
@@ -117,6 +117,7 @@ setup(
117117 set-tool-access = allura.command:SetToolAccessCommand
118118 smtp_server=allura.command:SMTPServerCommand
119119 create-neighborhood = allura.command:CreateNeighborhoodCommand
120+ create-trove-categories = allura.command:CreateTroveCategoriesCommand
120121
121122 [easy_widgets.resources]
122123 ew_resources=allura.config.resources:register_ew_resources