<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://opensimulator.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://opensimulator.org/index.php?action=history&amp;feed=atom&amp;title=Updatelibrary.py</id>
		<title>Updatelibrary.py - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://opensimulator.org/index.php?action=history&amp;feed=atom&amp;title=Updatelibrary.py"/>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/index.php?title=Updatelibrary.py&amp;action=history"/>
		<updated>2026-05-11T01:01:02Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.19.9</generator>

	<entry>
		<id>http://opensimulator.org/index.php?title=Updatelibrary.py&amp;diff=28919&amp;oldid=prev</id>
		<title>MakoBot: Robot: Replacing 'OpenSim' to 'OpenSimulator', which is the precise name</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/index.php?title=Updatelibrary.py&amp;diff=28919&amp;oldid=prev"/>
				<updated>2012-03-04T07:02:30Z</updated>
		
		<summary type="html">&lt;p&gt;Robot: Replacing &amp;#039;OpenSim&amp;#039; to &amp;#039;OpenSimulator&amp;#039;, which is the precise name&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 07:02, 4 March 2012&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 9:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 9:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;# Written with some reference to genassets.pl by Illuminous Beltran/IBM,&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;# Written with some reference to genassets.pl by Illuminous Beltran/IBM,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;# as found on the &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;OpenSim &lt;/del&gt;wiki.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;# as found on the &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;OpenSimulator &lt;/ins&gt;wiki.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;# Copyright 2011 Rob Knop (aka Prospero Frobozz). All rights reserved.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;# Copyright 2011 Rob Knop (aka Prospero Frobozz). All rights reserved.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 532:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 532:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; When done, you will need to manually add your asset directory to the&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; When done, you will need to manually add your asset directory to the&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;OpenSim &lt;/del&gt;AssetSets.xml file (in &amp;quot;assets&amp;quot; under the &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;OpenSim &lt;/del&gt;bin&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;OpenSimulator &lt;/ins&gt;AssetSets.xml file (in &amp;quot;assets&amp;quot; under the &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;OpenSimulator &lt;/ins&gt;bin&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; directory), and your inventory XML files to the Libraries.xml file (in&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; directory), and your inventory XML files to the Libraries.xml file (in&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;quot;inventory&amp;quot; under the &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;OpenSim &lt;/del&gt;bin directory).&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;quot;inventory&amp;quot; under the &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;OpenSimulator &lt;/ins&gt;bin directory).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; Written 2011 by Rob Knop aka Prospero Frobozz.&amp;#160; I've only used this on&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; Written 2011 by Rob Knop aka Prospero Frobozz.&amp;#160; I've only used this on&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 561:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 561:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; default=None,&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; default=None,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; help=&amp;quot;Directory where your .j2k, .txt, and .lsl files are, and which will &amp;quot;+&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; help=&amp;quot;Directory where your .j2k, .txt, and .lsl files are, and which will &amp;quot;+&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;quot;serve as the Assset Set in the &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;OpenSim &lt;/del&gt;library.&amp;#160; Defaults to assets/[shortname]AssetSet&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;quot;serve as the Assset Set in the &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;OpenSimulator &lt;/ins&gt;library.&amp;#160; Defaults to assets/[shortname]AssetSet&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; parser.add_option(&amp;quot;-i&amp;quot;, &amp;quot;--inv-dir&amp;quot;, action=&amp;quot;store&amp;quot;, type=&amp;quot;string&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; parser.add_option(&amp;quot;-i&amp;quot;, &amp;quot;--inv-dir&amp;quot;, action=&amp;quot;store&amp;quot;, type=&amp;quot;string&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>MakoBot</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/index.php?title=Updatelibrary.py&amp;diff=28519&amp;oldid=prev</id>
		<title>MakoBot: Robot: Cosmetic changes</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/index.php?title=Updatelibrary.py&amp;diff=28519&amp;oldid=prev"/>
				<updated>2012-03-04T04:17:31Z</updated>
		
		<summary type="html">&lt;p&gt;Robot: Cosmetic changes&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 04:17, 4 March 2012&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;A python script for maintaining a server inventory library and associated asset set. &lt;del class=&quot;diffchange diffchange-inline&quot;&gt; &lt;/del&gt;See [[Custom Libraries]] for more information.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;A python script for maintaining a server inventory library and associated asset set. See [[Custom Libraries]] for more information.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;You can download the current version from [http://www.sonic.net/~rknop/php/vw/updatelibrary.py http://www.sonic.net/~rknop/php/vw/updatelibrary.py]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;You can download the current version from [http://www.sonic.net/~rknop/php/vw/updatelibrary.py http://www.sonic.net/~rknop/php/vw/updatelibrary.py]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 17:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 17:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;# met:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;# met:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;#&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;#&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;# &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160;  &lt;/del&gt;1. Redistributions of source code must retain the above copyright&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;# 1. Redistributions of source code must retain the above copyright&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;# &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &lt;/del&gt;notice, this list of conditions and the following disclaimer.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;# notice, this list of conditions and the following disclaimer.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;# &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160;  &lt;/del&gt;2. Redistributions in binary form must reproduce the above&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;# 2. Redistributions in binary form must reproduce the above&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;# &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &lt;/del&gt;copyright notice, this list of conditions and the following&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;# copyright notice, this list of conditions and the following&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;# &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &lt;/del&gt;disclaimer in the documentation and/or other materials provided&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;# disclaimer in the documentation and/or other materials provided&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;# &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &lt;/del&gt;with the distribution.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;# with the distribution.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;#&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;#&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;# THIS SOFTWARE IS PROVIDED BY ROB KNOP ``AS IS'' AND ANY&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;# THIS SOFTWARE IS PROVIDED BY ROB KNOP ``AS IS'' AND ANY&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>MakoBot</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/index.php?title=Updatelibrary.py&amp;diff=25673&amp;oldid=prev</id>
		<title>Fritigern at 06:26, 12 September 2011</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/index.php?title=Updatelibrary.py&amp;diff=25673&amp;oldid=prev"/>
				<updated>2011-09-12T06:26:36Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 06:26, 12 September 2011&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 3:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 3:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;You can download the current version from [http://www.sonic.net/~rknop/php/vw/updatelibrary.py http://www.sonic.net/~rknop/php/vw/updatelibrary.py]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;You can download the current version from [http://www.sonic.net/~rknop/php/vw/updatelibrary.py http://www.sonic.net/~rknop/php/vw/updatelibrary.py]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;pre&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;source lang = &amp;quot;python&amp;quot;&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;#!/usr/bin/python&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;#!/usr/bin/python&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 627:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 627:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;if __name__ == &amp;quot;__main__&amp;quot;:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;if __name__ == &amp;quot;__main__&amp;quot;:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; sys.exit(main())&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; sys.exit(main())&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;pre&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;source&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Fritigern</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/index.php?title=Updatelibrary.py&amp;diff=24940&amp;oldid=prev</id>
		<title>Rknop at 01:40, 22 July 2011</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/index.php?title=Updatelibrary.py&amp;diff=24940&amp;oldid=prev"/>
				<updated>2011-07-22T01:40:04Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 01:40, 22 July 2011&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 6:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 6:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;#!/usr/bin/python&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;#!/usr/bin/python&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;# updatelibrary.py Version 1.&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;1 &lt;/del&gt;by Rob Knop aka Prospero Frobozz (rknop@pobox.com)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;# updatelibrary.py Version 1.&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;2 &lt;/ins&gt;by Rob Knop aka Prospero Frobozz (rknop@pobox.com)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;# Written with some reference to genassets.pl by Illuminous Beltran/IBM,&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;# Written with some reference to genassets.pl by Illuminous Beltran/IBM,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 343:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 343:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; self.items_xmlfile = &amp;quot;{0}InvItems.xml&amp;quot;.format(shortname)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; self.items_xmlfile = &amp;quot;{0}InvItems.xml&amp;quot;.format(shortname)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; self.skips = []&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; self.skips = []&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; self.wipeinv = False&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; self.matchj2k = re.compile(&amp;quot;\.j2k$&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; self.matchj2k = re.compile(&amp;quot;\.j2k$&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 370:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 371:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; self.items_xmlfile = items_xmlfile&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; self.items_xmlfile = items_xmlfile&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&amp;#160; &amp;#160; def wipe_inventory(self):&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; self.wipeinv = True&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; def run(self):&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; def run(self):&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 379:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 383:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; self.folders = InvFolders()&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; self.folders = InvFolders()&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; self.folders.readXML(os.path.join(self.inv_dir, self.folders_xmlfile))&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;if not self.wipeinv:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;/ins&gt;self.folders.readXML(os.path.join(self.inv_dir, self.folders_xmlfile))&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; self.items = InvItems(self.folders)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; self.items = InvItems(self.folders)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; self.items.readXML(os.path.join(self.inv_dir, self.items_xmlfile))&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;if not self.wipeinv:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &lt;/ins&gt;self.items.readXML(os.path.join(self.inv_dir, self.items_xmlfile))&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 546:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 552:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; dest=&amp;quot;shortname&amp;quot;, default=&amp;quot;NewLibrary&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; dest=&amp;quot;shortname&amp;quot;, default=&amp;quot;NewLibrary&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; help=&amp;quot;A name without spaces of your library for filename purposes.&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; help=&amp;quot;A name without spaces of your library for filename purposes.&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&amp;#160; &amp;#160; parser.add_option(&amp;quot;-w&amp;quot;, &amp;quot;--wipe-inventory&amp;quot;, action=&amp;quot;store_true&amp;quot;, default=False,&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; dest=&amp;quot;wipeinv&amp;quot;,&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; help=&amp;quot;Wipe &amp;amp; start over the inventory? (Safe! Use this if you've removed things.)&amp;quot;)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; parser.add_option(&amp;quot;-a&amp;quot;, &amp;quot;--asset-dir&amp;quot;, action=&amp;quot;store&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; parser.add_option(&amp;quot;-a&amp;quot;, &amp;quot;--asset-dir&amp;quot;, action=&amp;quot;store&amp;quot;,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 601:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 611:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; if options.items_xmlfile != None:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; if options.items_xmlfile != None:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; generator.set_items_xmlfile(options.items_xmlfile)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; generator.set_items_xmlfile(options.items_xmlfile)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; if options.wipeinv:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; &amp;#160; generator.wipe_inventory()&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; generator.run()&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160; &amp;#160; generator.run()&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Rknop</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/index.php?title=Updatelibrary.py&amp;diff=24939&amp;oldid=prev</id>
		<title>Rknop at 22:03, 21 July 2011</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/index.php?title=Updatelibrary.py&amp;diff=24939&amp;oldid=prev"/>
				<updated>2011-07-21T22:03:42Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;http://opensimulator.org/index.php?title=Updatelibrary.py&amp;amp;diff=24939&amp;amp;oldid=24909&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Rknop</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/index.php?title=Updatelibrary.py&amp;diff=24909&amp;oldid=prev</id>
		<title>Rknop: New page: A python script for maintaining a server inventory library and associated asset set.  See Custom Libraries for more information.  You can download the current version from [http://www....</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/index.php?title=Updatelibrary.py&amp;diff=24909&amp;oldid=prev"/>
				<updated>2011-07-16T02:22:29Z</updated>
		
		<summary type="html">&lt;p&gt;New page: A python script for maintaining a server inventory library and associated asset set.  See &lt;a href=&quot;/wiki/Custom_Libraries&quot; title=&quot;Custom Libraries&quot;&gt;Custom Libraries&lt;/a&gt; for more information.  You can download the current version from [http://www....&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;A python script for maintaining a server inventory library and associated asset set.  See [[Custom Libraries]] for more information.&lt;br /&gt;
&lt;br /&gt;
You can download the current version from [http://www.sonic.net/~rknop/php/vw/updatelibrary.py http://www.sonic.net/~rknop/php/vw/updatelibrary.py]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
&lt;br /&gt;
# updatelibrary.py Version 1.0 by Rob Knop aka Prospero Frobozz (rknop@pobox.com)&lt;br /&gt;
&lt;br /&gt;
# Written with some reference to genassets.pl by Illuminous Beltran/IBM,&lt;br /&gt;
# as found on the OpenSim wiki.&lt;br /&gt;
&lt;br /&gt;
# Copyright 2011 Rob Knop (aka Prospero Frobozz). All rights reserved.&lt;br /&gt;
#&lt;br /&gt;
# Redistribution and use in source and binary forms, with or without&lt;br /&gt;
# modification, are permitted provided that the following conditions are&lt;br /&gt;
# met:&lt;br /&gt;
#&lt;br /&gt;
#    1. Redistributions of source code must retain the above copyright&lt;br /&gt;
#       notice, this list of conditions and the following disclaimer.&lt;br /&gt;
&lt;br /&gt;
#    2. Redistributions in binary form must reproduce the above&lt;br /&gt;
#       copyright notice, this list of conditions and the following&lt;br /&gt;
#       disclaimer in the documentation and/or other materials provided&lt;br /&gt;
#       with the distribution.&lt;br /&gt;
#&lt;br /&gt;
# THIS SOFTWARE IS PROVIDED BY ROB KNOP ``AS IS'' AND ANY&lt;br /&gt;
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE&lt;br /&gt;
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR&lt;br /&gt;
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ROB KNOP OR&lt;br /&gt;
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,&lt;br /&gt;
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,&lt;br /&gt;
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR&lt;br /&gt;
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF&lt;br /&gt;
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING&lt;br /&gt;
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS&lt;br /&gt;
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
#&lt;br /&gt;
# The views and conclusions contained in the software and documentation&lt;br /&gt;
# are those of the authors and should not be interpreted as representing&lt;br /&gt;
# official policies, either expressed or implied, of Rob Knop.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
import os, os.path, sys, stat, shutil, re, uuid&lt;br /&gt;
import xml.dom, xml.dom.minidom&lt;br /&gt;
import traceback&lt;br /&gt;
from optparse import OptionParser&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
opensim_library_root_uuid = &amp;quot;00000112-000f-0000-0000-000100bba000&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# **********************************************************************&lt;br /&gt;
&lt;br /&gt;
class AssetExistsException(Exception):&lt;br /&gt;
    def __init__(self, value):&lt;br /&gt;
        self.value = value&lt;br /&gt;
    def __str__(self, value):&lt;br /&gt;
        return repr(value)&lt;br /&gt;
&lt;br /&gt;
class InventoryException(Exception):&lt;br /&gt;
    def __init__(self, value):&lt;br /&gt;
        self.value = value&lt;br /&gt;
    def __str__(self, value):&lt;br /&gt;
        return repr(value)&lt;br /&gt;
&lt;br /&gt;
class NiniException(Exception):&lt;br /&gt;
    def __init__(self, value):&lt;br /&gt;
        self.value = value&lt;br /&gt;
    def __str__(self, value):&lt;br /&gt;
        return repr(value)&lt;br /&gt;
&lt;br /&gt;
# **********************************************************************&lt;br /&gt;
&lt;br /&gt;
class NiniThing(object):&lt;br /&gt;
    def __init__(self, keynames, ninitype):&lt;br /&gt;
        self.keynames = keynames&lt;br /&gt;
        self.ninitype = ninitype&lt;br /&gt;
&lt;br /&gt;
    def readXML(self, filename):&lt;br /&gt;
        sections = []&lt;br /&gt;
&lt;br /&gt;
        if not os.path.exists(filename):&lt;br /&gt;
            sys.stderr.write(&amp;quot;WARNING: {0} file {1} doesn't exist. Returning empty list.\n&amp;quot;.&lt;br /&gt;
                             format(self.ninitype, filename))&lt;br /&gt;
            return sections&lt;br /&gt;
&lt;br /&gt;
        xmlblob = xml.dom.minidom.parse(filename)&lt;br /&gt;
        topelem = xmlblob.documentElement&lt;br /&gt;
        if topelem.tagName != &amp;quot;Nini&amp;quot;:&lt;br /&gt;
            raise NiniException(&amp;quot;Error not a Nini file: {0}&amp;quot;.format(filename))&lt;br /&gt;
&lt;br /&gt;
        for sec in topelem.childNodes:&lt;br /&gt;
            if sec.nodeType == xml.dom.Node.ELEMENT_NODE:&lt;br /&gt;
                if sec.tagName != 'Section':&lt;br /&gt;
                    raise NiniException(&amp;quot;Error {0} file: expecting a 'Section', found a {1}&amp;quot;.&lt;br /&gt;
                                        format(self.ninitype), sec.tagName)&lt;br /&gt;
&lt;br /&gt;
                item = dict()&lt;br /&gt;
                for keyname in self.keynames:&lt;br /&gt;
                    item[keyname] = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
                for seckey in sec.childNodes:&lt;br /&gt;
                    if seckey.nodeType == xml.dom.Node.ELEMENT_NODE:&lt;br /&gt;
                        if seckey.tagName != &amp;quot;Key&amp;quot;:&lt;br /&gt;
                            raise NiniException(&amp;quot;Error reading {0}: expecting a 'Key', found a {1}&amp;quot;.&lt;br /&gt;
                                                format(self.ninitype, seckey.tagName) )&lt;br /&gt;
                        item[seckey.getAttribute(&amp;quot;Name&amp;quot;)] = seckey.getAttribute(&amp;quot;Value&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
                sections.append(item)&lt;br /&gt;
&lt;br /&gt;
        xmlblob.unlink()&lt;br /&gt;
&lt;br /&gt;
        return sections&lt;br /&gt;
&lt;br /&gt;
    def writeXML(self, filename, sections):&lt;br /&gt;
        ofh = open(filename, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        ofh.write(&amp;quot;&amp;lt;Nini&amp;gt;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        for item in sections:&lt;br /&gt;
            ofh.write(&amp;quot;  &amp;lt;Section Name=\&amp;quot;{0}\&amp;quot;&amp;gt;\n&amp;quot;.format(item[&amp;quot;name&amp;quot;]))&lt;br /&gt;
            for keyname in self.keynames:&lt;br /&gt;
                ofh.write(&amp;quot;    &amp;lt;Key Name=\&amp;quot;{0}\&amp;quot; Value=\&amp;quot;{1}\&amp;quot; /&amp;gt;\n&amp;quot;.format(keyname, item[keyname]))&lt;br /&gt;
            ofh.write(&amp;quot;  &amp;lt;/Section&amp;gt;\n\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        ofh.write(&amp;quot;&amp;lt;/Nini&amp;gt;\n&amp;quot;)&lt;br /&gt;
        ofh.close()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# **********************************************************************&lt;br /&gt;
&lt;br /&gt;
class AssetSet(NiniThing):&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        super(AssetSet,self).__init__( [ &amp;quot;assetID&amp;quot;,&lt;br /&gt;
                                          &amp;quot;name&amp;quot;,&lt;br /&gt;
                                          &amp;quot;assetType&amp;quot;,&lt;br /&gt;
                                          &amp;quot;inventoryType&amp;quot;,&lt;br /&gt;
                                          &amp;quot;fileName&amp;quot;&lt;br /&gt;
                                          ],&lt;br /&gt;
                                        &amp;quot;Asset Set&amp;quot; )&lt;br /&gt;
        self.assets = []&lt;br /&gt;
&lt;br /&gt;
    def __iter__(self):&lt;br /&gt;
        return self.assets.__iter__()&lt;br /&gt;
&lt;br /&gt;
    def addasset(self, uuid, name, asstype, invtype, filename):&lt;br /&gt;
        ass = { 'assetID': uuid,&lt;br /&gt;
                'name': name,&lt;br /&gt;
                'assetType': asstype,&lt;br /&gt;
                'inventoryType': invtype,&lt;br /&gt;
                'fileName': filename }&lt;br /&gt;
        self.assets.append(ass)&lt;br /&gt;
        return ass&lt;br /&gt;
&lt;br /&gt;
    def findbyfilename(self, filename):&lt;br /&gt;
        for ass in self.assets:&lt;br /&gt;
            if ass['fileName'] == filename:&lt;br /&gt;
                return ass&lt;br /&gt;
        return None&lt;br /&gt;
&lt;br /&gt;
    def findbyuuid(self, uuid):&lt;br /&gt;
        for ass in self.assets:&lt;br /&gt;
            if ass['assetID'] == uuid:&lt;br /&gt;
                return ass&lt;br /&gt;
        return None&lt;br /&gt;
&lt;br /&gt;
    def readXML(self, filename):&lt;br /&gt;
        self.assets = super(AssetSet, self).readXML(filename)&lt;br /&gt;
&lt;br /&gt;
    def writeXML(self, filename):&lt;br /&gt;
        super(AssetSet, self).writeXML(filename, self.assets)&lt;br /&gt;
&lt;br /&gt;
# **********************************************************************&lt;br /&gt;
&lt;br /&gt;
class InvFolders(NiniThing):&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        super(InvFolders, self).__init__( [ &amp;quot;folderID&amp;quot;,&lt;br /&gt;
                                            &amp;quot;parentFolderID&amp;quot;,&lt;br /&gt;
                                            &amp;quot;name&amp;quot;,&lt;br /&gt;
                                            &amp;quot;type&amp;quot;&lt;br /&gt;
                                            ],&lt;br /&gt;
                                          &amp;quot;Inventory Folders&amp;quot; )&lt;br /&gt;
        self.folders = []&lt;br /&gt;
&lt;br /&gt;
    def __iter__(self):&lt;br /&gt;
        return self.folders.__iter__()&lt;br /&gt;
&lt;br /&gt;
    def findbyuuid(self, uuid):&lt;br /&gt;
        for folder in self.folders:&lt;br /&gt;
            if folder['folderID'] == uuid:&lt;br /&gt;
                return folder&lt;br /&gt;
        return None&lt;br /&gt;
&lt;br /&gt;
    # NOTE -- findbyname only finds the first folder of&lt;br /&gt;
    #  the given name inside the given parent folder.&lt;br /&gt;
    #  It is possible, if perverse, to have more than&lt;br /&gt;
    #  one folder with the same name...&lt;br /&gt;
&lt;br /&gt;
    def findbyname(self, name, parentid):&lt;br /&gt;
        for folder in self.folders:&lt;br /&gt;
            if ( ( folder['parentFolderID'] == parentid ) and&lt;br /&gt;
                 ( folder['name'] == name ) ):&lt;br /&gt;
                return folder&lt;br /&gt;
        return None&lt;br /&gt;
&lt;br /&gt;
    def ensureexists(self, name, parentid):&lt;br /&gt;
        if ( ( parentid != opensim_library_root_uuid ) and&lt;br /&gt;
             ( not self.findbyuuid(parentid) ) ):&lt;br /&gt;
            raise InventoryException(&amp;quot;No such parent folder exists: &amp;quot; + str(parentid))&lt;br /&gt;
&lt;br /&gt;
        folder = self.findbyname(name, parentid)&lt;br /&gt;
        if folder != None:&lt;br /&gt;
            return folder&lt;br /&gt;
&lt;br /&gt;
        # HACK ALERT -- I want this &amp;quot;type 6&amp;quot; to become whatever the right&lt;br /&gt;
        #  type is for no icon&lt;br /&gt;
        # http://opensimulator.org/wiki/AssetServer/DeveloperDocs doesn't tell me enough&lt;br /&gt;
&lt;br /&gt;
        folder = { 'folderID' : uuid.uuid4(),&lt;br /&gt;
                   'parentFolderID' : parentid,&lt;br /&gt;
                   'name' : name,&lt;br /&gt;
                   'type' : 6&lt;br /&gt;
                  }&lt;br /&gt;
        self.folders.append(folder)&lt;br /&gt;
&lt;br /&gt;
        return folder&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    def readXML(self, filename):&lt;br /&gt;
        self.folders = super(InvFolders, self).readXML(filename)&lt;br /&gt;
&lt;br /&gt;
    def writeXML(self, filename):&lt;br /&gt;
        super(InvFolders, self).writeXML(filename, self.folders)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# **********************************************************************&lt;br /&gt;
&lt;br /&gt;
class InvItems(NiniThing):&lt;br /&gt;
    def __init__(self, folders):&lt;br /&gt;
        super(InvItems, self).__init__( [ &amp;quot;inventoryID&amp;quot;,&lt;br /&gt;
                                          &amp;quot;assetID&amp;quot;,&lt;br /&gt;
                                          &amp;quot;folderID&amp;quot;,&lt;br /&gt;
                                          &amp;quot;name&amp;quot;,&lt;br /&gt;
                                          &amp;quot;description&amp;quot;,&lt;br /&gt;
                                          &amp;quot;assetType&amp;quot;,&lt;br /&gt;
                                          &amp;quot;inventoryType&amp;quot;,&lt;br /&gt;
                                          &amp;quot;currentPermissions&amp;quot;,&lt;br /&gt;
                                          &amp;quot;nextPermissions&amp;quot;,&lt;br /&gt;
                                          &amp;quot;everyonePermissions&amp;quot;,&lt;br /&gt;
                                          &amp;quot;basePermissions&amp;quot;&lt;br /&gt;
                                          ],&lt;br /&gt;
                                        &amp;quot;Inventory Items&amp;quot; )&lt;br /&gt;
        self.folders = folders&lt;br /&gt;
        self.items = []&lt;br /&gt;
&lt;br /&gt;
    def findbyinvid(self, uuid):&lt;br /&gt;
        for item in self.items:&lt;br /&gt;
            if item['inventoryID'] == uuid:&lt;br /&gt;
                return item&lt;br /&gt;
        return None&lt;br /&gt;
&lt;br /&gt;
    # Note -- findbyname only finds the first one of that name&lt;br /&gt;
    #  in that folder.  You can have more than one thing of&lt;br /&gt;
    #  the same name in a given folder....&lt;br /&gt;
&lt;br /&gt;
    def findbyname(self, name, folderid):&lt;br /&gt;
        for item in self.items:&lt;br /&gt;
            if ( ( item['name'] == name ) and&lt;br /&gt;
                 ( item['folderID'] == folderid) ):&lt;br /&gt;
               return item&lt;br /&gt;
        return None&lt;br /&gt;
&lt;br /&gt;
    def ensureexists(self, name, assetid, assettype, invtype, folderid):&lt;br /&gt;
        if ( ( folderid != opensim_library_root_uuid) and&lt;br /&gt;
             ( not self.folders.findbyuuid(folderid) ) ):&lt;br /&gt;
            raise InventoryException(&amp;quot;No such folder for item: &amp;quot; + str(folderid))&lt;br /&gt;
&lt;br /&gt;
        for item in self.items:&lt;br /&gt;
            if ( ( item['assetID'] == assetid ) and&lt;br /&gt;
                 ( item['folderID'] == folderid ) and&lt;br /&gt;
                 ( item['name'] == name ) ):&lt;br /&gt;
                return item&lt;br /&gt;
&lt;br /&gt;
        item = { 'inventoryID' : uuid.uuid4(),&lt;br /&gt;
                 'assetID' : assetid,&lt;br /&gt;
                 'folderID' : folderid,&lt;br /&gt;
                 'name' : name,&lt;br /&gt;
                 'description' : &amp;quot;&amp;quot;,&lt;br /&gt;
                 'assetType' : assettype,&lt;br /&gt;
                 'inventoryType' : invtype,&lt;br /&gt;
                 'currentPermissions' : &amp;quot;2147483647&amp;quot;,&lt;br /&gt;
                 'nextPermissions' : &amp;quot;2147483647&amp;quot;,&lt;br /&gt;
                 'everyonePermissions' : &amp;quot;2147483647&amp;quot;,&lt;br /&gt;
                 'basePermissions' : &amp;quot;2147483647&amp;quot;&lt;br /&gt;
               }&lt;br /&gt;
        self.items.append(item)&lt;br /&gt;
&lt;br /&gt;
        return item&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    def readXML(self, filename):&lt;br /&gt;
        self.items = super(InvItems, self).readXML(filename)&lt;br /&gt;
&lt;br /&gt;
    def writeXML(self, filename):&lt;br /&gt;
        super(InvItems, self).writeXML(filename, self.items)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# **********************************************************************&lt;br /&gt;
&lt;br /&gt;
class LibraryGenerator(object):&lt;br /&gt;
    def __init__(self, libname, shortname):&lt;br /&gt;
        self.libname = libname&lt;br /&gt;
        self.shortname = shortname&lt;br /&gt;
        self.asset_dir = os.path.abspath(os.path.join(&amp;quot;assets&amp;quot;, &amp;quot;{0}AssetSet&amp;quot;.format(shortname)))&lt;br /&gt;
        self.inv_dir = os.path.abspath(os.path.join(&amp;quot;inventory&amp;quot;, shortname))&lt;br /&gt;
        self.asset_xmlfile = &amp;quot;{0}AssetSet.xml&amp;quot;.format(shortname)&lt;br /&gt;
        self.folders_xmlfile = &amp;quot;{0}InvFolders.xml&amp;quot;.format(shortname)&lt;br /&gt;
        self.items_xmlfile = &amp;quot;{0}InvItems.xml&amp;quot;.format(shortname)&lt;br /&gt;
        self.skips = []&lt;br /&gt;
&lt;br /&gt;
        self.matchj2k = re.compile(&amp;quot;\.j2k$&amp;quot;)&lt;br /&gt;
        self.matchtxt = re.compile(&amp;quot;\.txt$&amp;quot;)&lt;br /&gt;
        self.matchlsl = re.compile(&amp;quot;\.lsl$&amp;quot;)&lt;br /&gt;
        self.endsinslash = re.compile(&amp;quot;/$&amp;quot;)&lt;br /&gt;
        self.commentline = re.compile(&amp;quot;^\s*#&amp;quot;)&lt;br /&gt;
        self.blankline = re.compile(&amp;quot;^\s*$&amp;quot;)&lt;br /&gt;
        self.assetlistline = re.compile(&amp;quot;^\s*([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})\s*(\d+)\s*(\d+)\s*(.*\S)\s*$&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    def set_skip_patterns(self, skips):&lt;br /&gt;
        self.skips = skips&lt;br /&gt;
&lt;br /&gt;
    def set_asset_dir(self, asset_dir):&lt;br /&gt;
        self.asset_dir = asset_dir&lt;br /&gt;
&lt;br /&gt;
    def set_inv_dir(self, inv_dir):&lt;br /&gt;
        self.inv_dir = inv_dir&lt;br /&gt;
&lt;br /&gt;
    def set_asset_xmlfile(self, asset_xmlfile):&lt;br /&gt;
        self.asset_xmlfile = asset_xmlfile&lt;br /&gt;
&lt;br /&gt;
    def set_folders_xmlfile(self, folders_xmlfile):&lt;br /&gt;
        self.folders_xmlfile = folders_xmlfile&lt;br /&gt;
&lt;br /&gt;
    def set_items_xmlfile(self, items_xmlfile):&lt;br /&gt;
        self.items_xmlfile = items_xmlfile&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    def run(self):&lt;br /&gt;
        # Create our storage for things, and read any current&lt;br /&gt;
        #  XML files if they exist&lt;br /&gt;
&lt;br /&gt;
        self.assets = AssetSet()&lt;br /&gt;
        self.assets.readXML(os.path.join(self.asset_dir, self.asset_xmlfile))&lt;br /&gt;
&lt;br /&gt;
        self.folders = InvFolders()&lt;br /&gt;
        self.folders.readXML(os.path.join(self.inv_dir, self.folders_xmlfile))&lt;br /&gt;
&lt;br /&gt;
        self.items = InvItems(self.folders)&lt;br /&gt;
        self.items.readXML(os.path.join(self.inv_dir, self.items_xmlfile))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
        # Run the recursive directory processor thingie&lt;br /&gt;
&lt;br /&gt;
        origdir = os.getcwd()&lt;br /&gt;
        os.chdir(self.asset_dir)&lt;br /&gt;
        self.process_dir(opensim_library_root_uuid, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
        os.chdir(origdir)&lt;br /&gt;
&lt;br /&gt;
        # Write the XML files, saving copies of the old ones out of paranoia&lt;br /&gt;
&lt;br /&gt;
        if os.path.exists(os.path.join(self.asset_dir, self.asset_xmlfile)):&lt;br /&gt;
            shutil.copy2(os.path.join(self.asset_dir, self.asset_xmlfile),&lt;br /&gt;
                         os.path.join(self.asset_dir, &amp;quot;{0}-old&amp;quot;.format(self.asset_xmlfile)))&lt;br /&gt;
&lt;br /&gt;
        self.assets.writeXML(os.path.join(self.asset_dir, self.asset_xmlfile))&lt;br /&gt;
&lt;br /&gt;
        if os.path.exists(os.path.join(self.inv_dir, self.folders_xmlfile)):&lt;br /&gt;
            shutil.copy2(os.path.join(self.inv_dir, self.folders_xmlfile),&lt;br /&gt;
                         os.path.join(self.inv_dir, &amp;quot;{0}-old&amp;quot;.format(self.folders_xmlfile)))&lt;br /&gt;
&lt;br /&gt;
        self.folders.writeXML(os.path.join(self.inv_dir, self.folders_xmlfile))&lt;br /&gt;
&lt;br /&gt;
        if os.path.exists(os.path.join(self.inv_dir, self.items_xmlfile)):&lt;br /&gt;
            shutil.copy2(os.path.join(self.inv_dir, self.items_xmlfile),&lt;br /&gt;
                         os.path.join(self.inv_dir, &amp;quot;{0}-old&amp;quot;.format(self.items_xmlfile)))&lt;br /&gt;
&lt;br /&gt;
        self.items.writeXML(os.path.join(self.inv_dir, self.items_xmlfile))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    def process_dir(self, parent_uuid, my_name, path):&lt;br /&gt;
        origdir = os.getcwd()&lt;br /&gt;
        sys.stderr.write(&amp;quot;Processing directory: {0} \n&amp;quot;.format(os.path.join(self.asset_dir, path)))&lt;br /&gt;
        if my_name != &amp;quot;&amp;quot;:&lt;br /&gt;
            os.chdir(my_name)&lt;br /&gt;
        else:&lt;br /&gt;
            my_name = self.libname&lt;br /&gt;
            &lt;br /&gt;
        # Create the folder XML blob if necessary&lt;br /&gt;
&lt;br /&gt;
        curfolder = self.folders.ensureexists(my_name, parent_uuid)&lt;br /&gt;
        my_uuid = curfolder[&amp;quot;folderID&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
        # Walk through this directory and process everything in it&lt;br /&gt;
&lt;br /&gt;
        for fname in os.listdir(&amp;quot;.&amp;quot;):&lt;br /&gt;
            statinfo = os.stat(fname)&lt;br /&gt;
&lt;br /&gt;
            doskip = False&lt;br /&gt;
            for skip in self.skips:&lt;br /&gt;
                if re.search(skip, fname):&lt;br /&gt;
                    doskip = True&lt;br /&gt;
            if doskip: continue&lt;br /&gt;
&lt;br /&gt;
            if stat.S_ISDIR(statinfo.st_mode):&lt;br /&gt;
                self.process_dir(my_uuid, fname, os.path.join(path, fname) )&lt;br /&gt;
                continue&lt;br /&gt;
&lt;br /&gt;
            fpath = os.path.join(path, fname)&lt;br /&gt;
            &lt;br /&gt;
            if fpath == self.asset_xmlfile:&lt;br /&gt;
                # Ignore the XML file we're working on!&lt;br /&gt;
                continue&lt;br /&gt;
&lt;br /&gt;
            elif fname == &amp;quot;addassets.lis&amp;quot;:&lt;br /&gt;
                # Ignore the file specifing pre-existing assets to add&lt;br /&gt;
                #   to inventory&lt;br /&gt;
                continue&lt;br /&gt;
&lt;br /&gt;
            elif self.matchj2k.search(fname):&lt;br /&gt;
                asset_type = 0&lt;br /&gt;
            elif self.matchtxt.search(fname):&lt;br /&gt;
                asset_type = 7&lt;br /&gt;
            elif self.matchlsl.search(fname):&lt;br /&gt;
                asset_type = 10&lt;br /&gt;
            else:&lt;br /&gt;
                sys.stderr.write(&amp;quot;WARNING: Skipping unrecognized file &amp;quot; +&lt;br /&gt;
                                 fname + &amp;quot;\n&amp;quot;)&lt;br /&gt;
                continue&lt;br /&gt;
&lt;br /&gt;
            # Strip the extension for aesthetic purposes&lt;br /&gt;
            #  (Right now, that must be .txt, .lsl, or .j2k, so&lt;br /&gt;
            #   we can assume it's 4 characters long.)&lt;br /&gt;
&lt;br /&gt;
            name = fname[0:-4]&lt;br /&gt;
&lt;br /&gt;
            # Create the asset XML blob if necessary&lt;br /&gt;
&lt;br /&gt;
            ass = self.assets.findbyfilename(fpath)&lt;br /&gt;
            if ass == None:&lt;br /&gt;
                ass = self.assets.addasset(uuid.uuid4(), name, asset_type,&lt;br /&gt;
                                           asset_type, os.path.join(path, fname))&lt;br /&gt;
&lt;br /&gt;
            # Create the inventory XML blob if necessary&lt;br /&gt;
&lt;br /&gt;
            self.items.ensureexists(name, ass['assetID'], asset_type, asset_type, my_uuid)&lt;br /&gt;
&lt;br /&gt;
        # Add pre-existing assets (to inventory only) from file addassets.lis&lt;br /&gt;
&lt;br /&gt;
        if os.path.exists(&amp;quot;addassets.lis&amp;quot;):&lt;br /&gt;
            asslis = open(&amp;quot;addassets.lis&amp;quot;)&lt;br /&gt;
            for line in asslis:&lt;br /&gt;
                line.rstrip(&amp;quot;\r\n&amp;quot;)&lt;br /&gt;
                if self.blankline.search(line) or self.commentline.search(line):&lt;br /&gt;
                    continue&lt;br /&gt;
                match = self.assetlistline.search(line)&lt;br /&gt;
                if match == None:&lt;br /&gt;
                    sys.stderr.write(&amp;quot;WARNING : error parsing line in {0}\n&amp;quot;.&lt;br /&gt;
                                     format(os.path.join(path, &amp;quot;addassets.lis&amp;quot;)))&lt;br /&gt;
                    sys.stderr.write(&amp;quot;Offending line: \&amp;quot;{0}\&amp;quot;\n&amp;quot;.format(line))&lt;br /&gt;
                    continue&lt;br /&gt;
                self.items.ensureexists(match.group(4), match.group(1), match.group(2), match.group(3), my_uuid)&lt;br /&gt;
            asslis.close()&lt;br /&gt;
&lt;br /&gt;
        # We're done; restore the CWD to where we started and return&lt;br /&gt;
&lt;br /&gt;
        os.chdir(origdir)&lt;br /&gt;
&lt;br /&gt;
# **********************************************************************&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
&lt;br /&gt;
    usage = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    updatelibrary.py -n &amp;quot;Library Name&amp;quot; -s ShortLibName [options]&lt;br /&gt;
&lt;br /&gt;
  Goes through your asset set directory.  (See below for how to specify&lt;br /&gt;
  it, and what the default is.)  Finds all .j2k images, .txt files, and&lt;br /&gt;
  .lsl files in that directory and all subdirectories.  Generates an&lt;br /&gt;
  Asset Set XML file for all of those files.  Also generates library&lt;br /&gt;
  Inventory Folder and Inventory Item XML files for all of those assets,&lt;br /&gt;
  organized in a folder hierarchy that matches the directory hierarchy.&lt;br /&gt;
&lt;br /&gt;
  Additional assets that already exist in the grid's asset store may be&lt;br /&gt;
  specified in each directory in a file named &amp;quot;addassets.lis&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
  For more documentation, see http://opensimulator.org/wiki/Custom_Libraries&lt;br /&gt;
&lt;br /&gt;
  When done, you will need to manually add your asset directory to the&lt;br /&gt;
  OpenSim AssetSets.xml file (in &amp;quot;assets&amp;quot; under the OpenSim bin&lt;br /&gt;
  directory), and your inventory XML files to the Libraries.xml file (in&lt;br /&gt;
  &amp;quot;inventory&amp;quot; under the OpenSim bin directory).&lt;br /&gt;
&lt;br /&gt;
  Written 2011 by Rob Knop aka Prospero Frobozz.  I've only used this on&lt;br /&gt;
  Linux; I have no idea how well it will function on Windows.  If you're&lt;br /&gt;
  on Windows, I recommend http://www.ubuntu.com&lt;br /&gt;
&lt;br /&gt;
  Run updatelibrary.py --help for option listings&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    parser = OptionParser(usage = usage)&lt;br /&gt;
&lt;br /&gt;
    parser.add_option(&amp;quot;-n&amp;quot;, &amp;quot;--lib-name&amp;quot;, action=&amp;quot;store&amp;quot;, type=&amp;quot;string&amp;quot;,&lt;br /&gt;
                      dest=&amp;quot;libname&amp;quot;, default=&amp;quot;New Library&amp;quot;,&lt;br /&gt;
                      help=&amp;quot;The name of your library as it appears in the viewer&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    parser.add_option(&amp;quot;-s&amp;quot;, &amp;quot;--short-name&amp;quot;, action=&amp;quot;store&amp;quot;, type=&amp;quot;string&amp;quot;,&lt;br /&gt;
                      dest=&amp;quot;shortname&amp;quot;, default=&amp;quot;NewLibrary&amp;quot;,&lt;br /&gt;
                      help=&amp;quot;A name without spaces of your library for filename purposes.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    parser.add_option(&amp;quot;-a&amp;quot;, &amp;quot;--asset-dir&amp;quot;, action=&amp;quot;store&amp;quot;,&lt;br /&gt;
                      type=&amp;quot;string&amp;quot;, dest=&amp;quot;asset_dir&amp;quot;,&lt;br /&gt;
                      default=None,&lt;br /&gt;
                      help=&amp;quot;Directory where your .j2k, .txt, and .lsl files are, and which will &amp;quot;+&lt;br /&gt;
                      &amp;quot;serve as the Assset Set in the OpenSim library.  Defaults to assets/[shortname]AssetSet&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    parser.add_option(&amp;quot;-i&amp;quot;, &amp;quot;--inv-dir&amp;quot;, action=&amp;quot;store&amp;quot;, type=&amp;quot;string&amp;quot;,&lt;br /&gt;
                      dest=&amp;quot;inv_dir&amp;quot;, default=None,&lt;br /&gt;
                      help=&amp;quot;Directory in which to put the inventory XML files.  Defaults to &amp;quot;+&lt;br /&gt;
                      &amp;quot;inventory/[shortname]&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    parser.add_option(&amp;quot;&amp;quot;, &amp;quot;--asset-xmlfile&amp;quot;, action=&amp;quot;store&amp;quot;,&lt;br /&gt;
                      type=&amp;quot;string&amp;quot;, dest=&amp;quot;asset_xmlfile&amp;quot;, default=None,&lt;br /&gt;
                      help=&amp;quot;Name of Asset XML file.  Defaults to [shortname]AssetSet.xml&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    parser.add_option(&amp;quot;&amp;quot;, &amp;quot;--folders-xmlfile&amp;quot;, action=&amp;quot;store&amp;quot;,&lt;br /&gt;
                      type=&amp;quot;string&amp;quot;, dest=&amp;quot;folders_xmlfile&amp;quot;, default=None,&lt;br /&gt;
                      help=&amp;quot;Name of Inventory Folders XML file.  Defaults to [shortname]InvFolders.xml&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    parser.add_option(&amp;quot;&amp;quot;, &amp;quot;--items-xmlfile&amp;quot;, action=&amp;quot;store&amp;quot;,&lt;br /&gt;
                      type=&amp;quot;string&amp;quot;, dest=&amp;quot;items_xmlfile&amp;quot;, default=None,&lt;br /&gt;
                      help=&amp;quot;Name of Inventory Folders XML file.  Defaults to [shortname]InvItems.xml&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    parser.add_option(&amp;quot;&amp;quot;, &amp;quot;--skip&amp;quot;, action=&amp;quot;append&amp;quot;, type=&amp;quot;string&amp;quot;,&lt;br /&gt;
                      dest=&amp;quot;skip_patterns&amp;quot;,&lt;br /&gt;
                      default=['^\.hg$', '^\.git$', '^\.svn$'],&lt;br /&gt;
                      help=&amp;quot;Regex for filenames to not process&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    if len(sys.argv) &amp;lt; 2:&lt;br /&gt;
        parser.print_usage()&lt;br /&gt;
        sys.exit(0)&lt;br /&gt;
&lt;br /&gt;
    options, args = parser.parse_args()&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        generator = LibraryGenerator(options.libname, options.shortname)&lt;br /&gt;
&lt;br /&gt;
        if options.skip_patterns:&lt;br /&gt;
            generator.set_skip_patterns(options.skip_patterns)&lt;br /&gt;
&lt;br /&gt;
        if options.asset_dir != None:&lt;br /&gt;
            generator.set_asset_dir(options.asset_dir)&lt;br /&gt;
&lt;br /&gt;
        if options.inv_dir != None:&lt;br /&gt;
            generator.set_inv_dir(options.inv_dir)&lt;br /&gt;
&lt;br /&gt;
        if options.asset_xmlfile != None:&lt;br /&gt;
            generator.set_asset_xmlfile(options.asset_xmlfile)&lt;br /&gt;
&lt;br /&gt;
        if options.folders_xmlfile != None:&lt;br /&gt;
            generator.set_folders_xmlfile(options.folders_xmlfile)&lt;br /&gt;
&lt;br /&gt;
        if options.items_xmlfile != None:&lt;br /&gt;
            generator.set_items_xmlfile(options.items_xmlfile)&lt;br /&gt;
&lt;br /&gt;
        generator.run()&lt;br /&gt;
&lt;br /&gt;
    except Exception:&lt;br /&gt;
        print &amp;quot;FAIL&amp;quot;&lt;br /&gt;
        traceback.print_exc()&lt;br /&gt;
        sys.exit(20)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# **********************************************************************&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    sys.exit(main())&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rknop</name></author>	</entry>

	</feed>