diff options
author | Evgeny Fadeev <evgeny.fadeev@gmail.com> | 2010-06-27 11:35:49 -0400 |
---|---|---|
committer | Evgeny Fadeev <evgeny.fadeev@gmail.com> | 2010-06-27 11:35:49 -0400 |
commit | e5309b128d28c94d7905bb37541c3c3b88f00555 (patch) | |
tree | e33061d60396a42d48de5b9a85155ca70b3d62c2 /askbot/bin | |
parent | 1e03a6c00adc0da43c2dbf8a4856f11b6cc1d138 (diff) | |
download | askbot-e5309b128d28c94d7905bb37541c3c3b88f00555.tar.gz askbot-e5309b128d28c94d7905bb37541c3c3b88f00555.tar.bz2 askbot-e5309b128d28c94d7905bb37541c3c3b88f00555.zip |
removed python-openid from the list of external dependencies
Diffstat (limited to 'askbot/bin')
-rw-r--r-- | askbot/bin/__init__.py | 0 | ||||
-rw-r--r-- | askbot/bin/generate_modules.py | 1065 |
2 files changed, 1065 insertions, 0 deletions
diff --git a/askbot/bin/__init__.py b/askbot/bin/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/askbot/bin/__init__.py diff --git a/askbot/bin/generate_modules.py b/askbot/bin/generate_modules.py new file mode 100644 index 00000000..9ff7ba68 --- /dev/null +++ b/askbot/bin/generate_modules.py @@ -0,0 +1,1065 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" + "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> +<head> + <title> + etienned / sphinx-autopackage-script / source — bitbucket.org +</title> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <meta name="description" content="Mercurial hosting - we're here to serve." /> + <meta name="keywords" content="mercurial,hg,hosting,bitbucket,etienned,This,script,parse,a,directory,tree,looking,for,python,modules,and,packages,and,create,ReST,files,appropriately,to,create,code,documentation,with,Sphinx.,It,also,create,a,modules,index.,source,sourcecode,generate_modules.py@d20aab0a12b8" /> + <link rel="stylesheet" type="text/css" href="http://bitbucket-assets.s3.amazonaws.com/css/layout.css" /> + <link rel="stylesheet" type="text/css" href="http://bitbucket-assets.s3.amazonaws.com/css/screen.css" /> + <link rel="stylesheet" type="text/css" href="http://bitbucket-assets.s3.amazonaws.com/css/print.css" media="print" /> + <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="Bitbucket" /> + <link rel="icon" href="http://bitbucket-assets.s3.amazonaws.com/img/logo_new.png" type="image/png"/> + <script type="text/javascript">var MEDIA_URL = "http://bitbucket-assets.s3.amazonaws.com/"</script> + <script type="text/javascript" src="http://bitbucket-assets.s3.amazonaws.com/js/lib/bundle.020510May.js"></script> + + <script type="text/javascript"> + $(document).ready(function() { + Dropdown.init(); + $(".tooltip").tipsy({gravity:'s'}); + }); + </script> + <noscript> + <style type="text/css"> + .dropdown-container-text .dropdown { + position: static !important; + } + </style> + </noscript> + + <!--[if lt IE 7]> + <style type="text/css"> + body { + behavior: url(http://bitbucket-assets.s3.amazonaws.com/css/csshover.htc); + } + + #issues-issue pre { + white-space: normal !important; + } + + .changeset-description { + white-space: normal !important; + } + </style> + <script type="text/javascript"> + $(document).ready(function(){ + $('#header-wrapper').pngFix(); + $('#sourcelist').pngFix(); + $('.promo-signup-screenshot').pngFix(); + }); + </script> + <![endif]--> + + <link rel="stylesheet" href="http://bitbucket-assets.s3.amazonaws.com/css/highlight/trac.css" type="text/css" /> + + +</head> +<body class=""> + <div id="main-wrapper"> + <div id="header-wrapper"> + <div id="header"> + <a href="/"><img src="http://bitbucket-assets.s3.amazonaws.com/img/logo_myriad.png" alt="Bitbucket" id="header-wrapper-logo" /></a> + + <div id="header-nav"> + <ul class="right"> + <li><a href="/">Home</a></li> + <li><a href="/plans"><b>Plans & Signup</b></a></li> + <li><a href="/repo/all">Repositories</a></li> + <li><a href="/news">News</a></li> + <li><a href="/help">Help</a></li> + <li><a href="/account/signin/">Sign in</a></li> + </ul> + </div> + + </div> + </div> + <div id="content-wrapper"> + + + + + + + + + + + + + + + <script type="text/javascript" src="http://bitbucket-assets.s3.amazonaws.com/js/lib/jquery.cookie.js"></script> <!--REMOVE WHEN NEWER BUNDLE THAN 030309Mar --> + <script type="text/javascript"> + var date = new Date(); + date.setTime(date.getTime() + (365 * 24 * 60 * 60 * 1000)); + var cookieoptions = { path: '/', expires: date }; + + window._shard = 'fe01 (ID 1)'; + + $(document).ready(function(){ + $('#toggle-repo-content').click(function(){ + $('#repo-desc-cloneinfo').toggle('fast'); + $('#repo-menu').toggle(); + $('#repo-menu-links-mini').toggle(100); + $('.repo-desc-description').toggle('fast'); + var avatar_new_width = ($('.repo-avatar').width() == 35) ? 16 : 35; + $('.repo-avatar').animate({ width: avatar_new_width }, 250); + + if ($.cookie('toggle_status') == 'hide') { + $.cookie('toggle_status', 'show', cookieoptions); + $(this).css('background-image','url(http://bitbucket-assets.s3.amazonaws.com/img/repo-toggle-up.png)'); + } else { + $.cookie('toggle_status', 'hide', cookieoptions); + $(this).css('background-image','url(http://bitbucket-assets.s3.amazonaws.com/img/repo-toggle-down.png)'); + } + }); + + if ($.cookie('toggle_status') == 'hide') { + $('#toggle-repo-content').css('background-image','url(http://bitbucket-assets.s3.amazonaws.com/img/repo-toggle-down.png)'); + $('#repo-desc-cloneinfo').hide(); + $('#repo-menu').hide(); + $('#repo-menu-links-mini').show(); + $('.repo-desc-description').hide(); + $('.repo-avatar').css({ width: '16px' }); + } else { + $('#toggle-repo-content').css('background-image','url(http://bitbucket-assets.s3.amazonaws.com/img/repo-toggle-up.png)'); + $('#repo-desc-cloneinfo').show(); + $('#repo-menu').show(); + $('#repo-menu-links-mini').hide(); + $('.repo-desc-description').show(); + $('.repo-avatar').css({ width: '35px' }); + } + }); + </script> + + +<div id="tabs"> + <ul class="ui-tabs-nav"> + <li> + <a href="/etienned/sphinx-autopackage-script/overview"><span>Overview</span></a> + </li> + + <li> + <a href="/etienned/sphinx-autopackage-script/downloads"><span>Downloads (0)</span></a> + </li> + + + + <li class="ui-tabs-selected"> + + <a href="/etienned/sphinx-autopackage-script/src/d20aab0a12b8"><span>Source</span></a> + + </li> + + <li> + <a href="/etienned/sphinx-autopackage-script/changesets"><span>Changesets</span></a> + </li> + + + + <li class="ui-tabs-nav-issues"> + <a href="/etienned/sphinx-autopackage-script/wiki"><span>Wiki</span></a> + </li> + + + + + + <li class="ui-tabs-nav-issues"> + <a href="/etienned/sphinx-autopackage-script/issues?status=new&status=open"><span>Issues (1) »</span></a> + <ul> + <li><a href="/etienned/sphinx-autopackage-script/issues?status=new">New issues</a></li> + <li><a href="/etienned/sphinx-autopackage-script/issues?status=new&status=open">Open issues</a></li> + <li><a href="/etienned/sphinx-autopackage-script/issues?status=resolved&status=invalid&status=duplicate">Closed issues</a></li> + + <li><a href="/etienned/sphinx-autopackage-script/issues">All issues</a></li> + <li><a href="/etienned/sphinx-autopackage-script/issues/query">Advanced query</a></li> + <li><a href="/etienned/sphinx-autopackage-script/issues/new">Create new issue</a></li> + </ul> + </li> + + + + + + + + <li class="tabs-right tabs-far-right"> + <a href="/etienned/sphinx-autopackage-script/descendants"><span>Forks/Queues (0)</span></a> + </li> + + <li class="tabs-right"> + <a href="/etienned/sphinx-autopackage-script/zealots"><span>Followers (2)</span></a> + </li> + </ul> +</div> + +<div id="repo-menu"> + <div id="repo-menu-links"> + <ul> + <li> + <a href="/etienned/sphinx-autopackage-script/rss" class="noborder repo-menu-rss" title="RSS Feed for sphinx-autopackage-script">RSS</a> + </li> + <li> + <a href="/etienned/sphinx-autopackage-script/atom" class="noborder repo-menu-atom" title="Atom Feed for sphinx-autopackage-script">Atom</a> + </li> + + <li> + <a href="/etienned/sphinx-autopackage-script/pull" class="link-request-pull"> + pull request + </a> + </li> + + <li><a href="/etienned/sphinx-autopackage-script/fork" class="link-fork">fork</a></li> + + <li><a href="/etienned/sphinx-autopackage-script/hack" class="link-hack">patch queue</a></li> + + <li> + + <a rel="nofollow" href="/etienned/sphinx-autopackage-script/follow" class="link-follow">follow</a> + + </li> + <li><a class="link-download">get source »</a> + + <ul> + + <li><a rel="nofollow" href="/etienned/sphinx-autopackage-script/get/d20aab0a12b8.zip" class="zip">zip</a></li> + <li><a rel="nofollow" href="/etienned/sphinx-autopackage-script/get/d20aab0a12b8.gz" class="compressed">gz</a></li> + <li><a rel="nofollow" href="/etienned/sphinx-autopackage-script/get/d20aab0a12b8.bz2" class="compressed">bz2</a></li> + + </ul> + </li> + </ul> + </div> + + + <div id="repo-menu-branches-tags"> + <ul> + <li class="icon-branches"> + branches » + + <ul> + + <li><a href="/etienned/sphinx-autopackage-script/src/d20aab0a12b8">default</a></li> + + </ul> + + </li> + <li class="icon-tags"> + tags » + + <ul> + + <li><a href="/etienned/sphinx-autopackage-script/src/d20aab0a12b8">tip</a></li> + + </ul> + </li> + </ul> + </div> + + + <div class="cb"></div> + </div> + <div id="repo-desc" class="layout-box"> + + + <div id="repo-menu-links-mini" class="right"> + <ul> + <li> + <a href="/etienned/sphinx-autopackage-script/rss" class="noborder repo-menu-rss" title="RSS Feed for sphinx-autopackage-script"></a> + </li> + <li> + <a href="/etienned/sphinx-autopackage-script/atom" class="noborder repo-menu-atom" title="Atom Feed for sphinx-autopackage-script"></a> + </li> + + <li> + <a href="/etienned/sphinx-autopackage-script/pull" class="tooltip noborder link-request-pull" title="Pull request"></a> + </li> + + <li><a href="/etienned/sphinx-autopackage-script/fork" class="tooltip noborder link-fork" title="Fork"></a></li> + + <li><a href="/etienned/sphinx-autopackage-script/hack" class="tooltip noborder link-hack" title="Patch queue"></a></li> + + <li><a class="tooltip noborder link-download" title="Get source"></a> + + <ul> + + <li><a rel="nofollow" href="/etienned/sphinx-autopackage-script/get/d20aab0a12b8.zip" class="zip">zip</a></li> + <li><a rel="nofollow" href="/etienned/sphinx-autopackage-script/get/d20aab0a12b8.gz" class="compressed">gz</a></li> + <li><a rel="nofollow" href="/etienned/sphinx-autopackage-script/get/d20aab0a12b8.bz2" class="compressed">bz2</a></li> + + </ul> + </li> + </ul> + </div> + + <h3> + <a href="/etienned">etienned</a> / + <a href="/etienned/sphinx-autopackage-script">sphinx-autopackage-script</a> + + + </h3> + + + + + + <p class="repo-desc-description">This script parse a directory tree looking for python modules and packages and
+create ReST files appropriately to create code documentation with Sphinx.
+It also create a modules index. </p> + + <div id="repo-desc-cloneinfo">Clone this repository (size: 5.8 KB): <a href="http://bitbucket.org/etienned/sphinx-autopackage-script" onclick="$('#clone-url-ssh').hide();$('#clone-url-https').toggle();return(false);"><small>HTTPS</small></a> / <a href="ssh://hg@bitbucket.org/etienned/sphinx-autopackage-script" onclick="$('#clone-url-https').hide();$('#clone-url-ssh').toggle();return(false);"><small>SSH</small></a><br/> + <pre id="clone-url-https">$ hg clone <a href="http://bitbucket.org/etienned/sphinx-autopackage-script">http://bitbucket.org/etienned/sphinx-autopackage-script</a></pre> + + <pre id="clone-url-ssh" style="display:none;">$ hg clone <a href="ssh://hg@bitbucket.org/etienned/sphinx-autopackage-script">ssh://hg@bitbucket.org/etienned/sphinx-autopackage-script</a></pre></div> + + <div class="cb"></div> + <a href="#" id="toggle-repo-content"></a> + + + + </div> + + + + + + + + + +<div id="source-summary" class="layout-box"> + <div class="right"> + <table> + <tr> + <td>commit 0:</td> + <td>d20aab0a12b8</td> + </tr> + + + <tr> + <td>branch: </td> + <td>default</td> + </tr> + + <tr> + <td>tags:</td> + <td>tip</td> + </tr> + + </table> + </div> + +<div class="changeset-description">Initial commit</div> + + <div> + + + + +<div class="dropdown-container"> + + + <img src="http://www.gravatar.com/avatar/6fc6e07b4af580b1424c082536570dd4?d=identicon&s=32" class="avatar dropdown" /> + + + + <ul class="dropdown-list"> + <li> + + <a href="/etienne">View etienne's profile</a> + + </li> + <li> + <a href="">etienne's public repos »</a> + + + + </li> + + <li> + <a href="/account/notifications/send/?receiver=etienne">Send message</a> + </li> + + </ul> +</div> + + + + + <span class="dropdown-right"> + + + <a href="/etienne">Etienne Lawlor</a> / + + <a href="/etienne">etienne</a> + + <br/> + <small class="dropdown-right">2 months ago</small> + </span> + + </div> + + <div class="cb"></div> +</div> + + + + +<div id="source-path" class="layout-box"> + <a href="/etienned/sphinx-autopackage-script/src">sphinx-autopackage-script</a> / + + + + generate_modules.py + + + + +</div> + + +<div id="source-view" class="scroll-x"> + <table class="info-table"> + <tr> + <th>r0:d20aab0a12b8</th> + <th>287 loc</th> + <th>10.7 KB</th> + <th class="source-view-links"> + <a id="embed-link" href="#" onclick="makeEmbed('#embed-link', 'http://bitbucket.org/etienned/sphinx-autopackage-script/src/d20aab0a12b8/generate_modules.py?embed=t');">embed</a> / + <a href='/etienned/sphinx-autopackage-script/history/generate_modules.py'>history</a> / + <a href='/etienned/sphinx-autopackage-script/annotate/d20aab0a12b8/generate_modules.py'>annotate</a> / + <a href='/etienned/sphinx-autopackage-script/raw/d20aab0a12b8/generate_modules.py'>raw</a> / + <form action="/etienned/sphinx-autopackage-script/diff/generate_modules.py" method="get" class="source-view-form"> + + <select name='nothing' class="smaller" disabled="disabled"> + <option>No previous changes</option> + </select> + + </form> + </th> + </tr> + </table> + + + <table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><a href="#cl-1"> 1</a> +<a href="#cl-2"> 2</a> +<a href="#cl-3"> 3</a> +<a href="#cl-4"> 4</a> +<a href="#cl-5"> 5</a> +<a href="#cl-6"> 6</a> +<a href="#cl-7"> 7</a> +<a href="#cl-8"> 8</a> +<a href="#cl-9"> 9</a> +<a href="#cl-10"> 10</a> +<a href="#cl-11"> 11</a> +<a href="#cl-12"> 12</a> +<a href="#cl-13"> 13</a> +<a href="#cl-14"> 14</a> +<a href="#cl-15"> 15</a> +<a href="#cl-16"> 16</a> +<a href="#cl-17"> 17</a> +<a href="#cl-18"> 18</a> +<a href="#cl-19"> 19</a> +<a href="#cl-20"> 20</a> +<a href="#cl-21"> 21</a> +<a href="#cl-22"> 22</a> +<a href="#cl-23"> 23</a> +<a href="#cl-24"> 24</a> +<a href="#cl-25"> 25</a> +<a href="#cl-26"> 26</a> +<a href="#cl-27"> 27</a> +<a href="#cl-28"> 28</a> +<a href="#cl-29"> 29</a> +<a href="#cl-30"> 30</a> +<a href="#cl-31"> 31</a> +<a href="#cl-32"> 32</a> +<a href="#cl-33"> 33</a> +<a href="#cl-34"> 34</a> +<a href="#cl-35"> 35</a> +<a href="#cl-36"> 36</a> +<a href="#cl-37"> 37</a> +<a href="#cl-38"> 38</a> +<a href="#cl-39"> 39</a> +<a href="#cl-40"> 40</a> +<a href="#cl-41"> 41</a> +<a href="#cl-42"> 42</a> +<a href="#cl-43"> 43</a> +<a href="#cl-44"> 44</a> +<a href="#cl-45"> 45</a> +<a href="#cl-46"> 46</a> +<a href="#cl-47"> 47</a> +<a href="#cl-48"> 48</a> +<a href="#cl-49"> 49</a> +<a href="#cl-50"> 50</a> +<a href="#cl-51"> 51</a> +<a href="#cl-52"> 52</a> +<a href="#cl-53"> 53</a> +<a href="#cl-54"> 54</a> +<a href="#cl-55"> 55</a> +<a href="#cl-56"> 56</a> +<a href="#cl-57"> 57</a> +<a href="#cl-58"> 58</a> +<a href="#cl-59"> 59</a> +<a href="#cl-60"> 60</a> +<a href="#cl-61"> 61</a> +<a href="#cl-62"> 62</a> +<a href="#cl-63"> 63</a> +<a href="#cl-64"> 64</a> +<a href="#cl-65"> 65</a> +<a href="#cl-66"> 66</a> +<a href="#cl-67"> 67</a> +<a href="#cl-68"> 68</a> +<a href="#cl-69"> 69</a> +<a href="#cl-70"> 70</a> +<a href="#cl-71"> 71</a> +<a href="#cl-72"> 72</a> +<a href="#cl-73"> 73</a> +<a href="#cl-74"> 74</a> +<a href="#cl-75"> 75</a> +<a href="#cl-76"> 76</a> +<a href="#cl-77"> 77</a> +<a href="#cl-78"> 78</a> +<a href="#cl-79"> 79</a> +<a href="#cl-80"> 80</a> +<a href="#cl-81"> 81</a> +<a href="#cl-82"> 82</a> +<a href="#cl-83"> 83</a> +<a href="#cl-84"> 84</a> +<a href="#cl-85"> 85</a> +<a href="#cl-86"> 86</a> +<a href="#cl-87"> 87</a> +<a href="#cl-88"> 88</a> +<a href="#cl-89"> 89</a> +<a href="#cl-90"> 90</a> +<a href="#cl-91"> 91</a> +<a href="#cl-92"> 92</a> +<a href="#cl-93"> 93</a> +<a href="#cl-94"> 94</a> +<a href="#cl-95"> 95</a> +<a href="#cl-96"> 96</a> +<a href="#cl-97"> 97</a> +<a href="#cl-98"> 98</a> +<a href="#cl-99"> 99</a> +<a href="#cl-100">100</a> +<a href="#cl-101">101</a> +<a href="#cl-102">102</a> +<a href="#cl-103">103</a> +<a href="#cl-104">104</a> +<a href="#cl-105">105</a> +<a href="#cl-106">106</a> +<a href="#cl-107">107</a> +<a href="#cl-108">108</a> +<a href="#cl-109">109</a> +<a href="#cl-110">110</a> +<a href="#cl-111">111</a> +<a href="#cl-112">112</a> +<a href="#cl-113">113</a> +<a href="#cl-114">114</a> +<a href="#cl-115">115</a> +<a href="#cl-116">116</a> +<a href="#cl-117">117</a> +<a href="#cl-118">118</a> +<a href="#cl-119">119</a> +<a href="#cl-120">120</a> +<a href="#cl-121">121</a> +<a href="#cl-122">122</a> +<a href="#cl-123">123</a> +<a href="#cl-124">124</a> +<a href="#cl-125">125</a> +<a href="#cl-126">126</a> +<a href="#cl-127">127</a> +<a href="#cl-128">128</a> +<a href="#cl-129">129</a> +<a href="#cl-130">130</a> +<a href="#cl-131">131</a> +<a href="#cl-132">132</a> +<a href="#cl-133">133</a> +<a href="#cl-134">134</a> +<a href="#cl-135">135</a> +<a href="#cl-136">136</a> +<a href="#cl-137">137</a> +<a href="#cl-138">138</a> +<a href="#cl-139">139</a> +<a href="#cl-140">140</a> +<a href="#cl-141">141</a> +<a href="#cl-142">142</a> +<a href="#cl-143">143</a> +<a href="#cl-144">144</a> +<a href="#cl-145">145</a> +<a href="#cl-146">146</a> +<a href="#cl-147">147</a> +<a href="#cl-148">148</a> +<a href="#cl-149">149</a> +<a href="#cl-150">150</a> +<a href="#cl-151">151</a> +<a href="#cl-152">152</a> +<a href="#cl-153">153</a> +<a href="#cl-154">154</a> +<a href="#cl-155">155</a> +<a href="#cl-156">156</a> +<a href="#cl-157">157</a> +<a href="#cl-158">158</a> +<a href="#cl-159">159</a> +<a href="#cl-160">160</a> +<a href="#cl-161">161</a> +<a href="#cl-162">162</a> +<a href="#cl-163">163</a> +<a href="#cl-164">164</a> +<a href="#cl-165">165</a> +<a href="#cl-166">166</a> +<a href="#cl-167">167</a> +<a href="#cl-168">168</a> +<a href="#cl-169">169</a> +<a href="#cl-170">170</a> +<a href="#cl-171">171</a> +<a href="#cl-172">172</a> +<a href="#cl-173">173</a> +<a href="#cl-174">174</a> +<a href="#cl-175">175</a> +<a href="#cl-176">176</a> +<a href="#cl-177">177</a> +<a href="#cl-178">178</a> +<a href="#cl-179">179</a> +<a href="#cl-180">180</a> +<a href="#cl-181">181</a> +<a href="#cl-182">182</a> +<a href="#cl-183">183</a> +<a href="#cl-184">184</a> +<a href="#cl-185">185</a> +<a href="#cl-186">186</a> +<a href="#cl-187">187</a> +<a href="#cl-188">188</a> +<a href="#cl-189">189</a> +<a href="#cl-190">190</a> +<a href="#cl-191">191</a> +<a href="#cl-192">192</a> +<a href="#cl-193">193</a> +<a href="#cl-194">194</a> +<a href="#cl-195">195</a> +<a href="#cl-196">196</a> +<a href="#cl-197">197</a> +<a href="#cl-198">198</a> +<a href="#cl-199">199</a> +<a href="#cl-200">200</a> +<a href="#cl-201">201</a> +<a href="#cl-202">202</a> +<a href="#cl-203">203</a> +<a href="#cl-204">204</a> +<a href="#cl-205">205</a> +<a href="#cl-206">206</a> +<a href="#cl-207">207</a> +<a href="#cl-208">208</a> +<a href="#cl-209">209</a> +<a href="#cl-210">210</a> +<a href="#cl-211">211</a> +<a href="#cl-212">212</a> +<a href="#cl-213">213</a> +<a href="#cl-214">214</a> +<a href="#cl-215">215</a> +<a href="#cl-216">216</a> +<a href="#cl-217">217</a> +<a href="#cl-218">218</a> +<a href="#cl-219">219</a> +<a href="#cl-220">220</a> +<a href="#cl-221">221</a> +<a href="#cl-222">222</a> +<a href="#cl-223">223</a> +<a href="#cl-224">224</a> +<a href="#cl-225">225</a> +<a href="#cl-226">226</a> +<a href="#cl-227">227</a> +<a href="#cl-228">228</a> +<a href="#cl-229">229</a> +<a href="#cl-230">230</a> +<a href="#cl-231">231</a> +<a href="#cl-232">232</a> +<a href="#cl-233">233</a> +<a href="#cl-234">234</a> +<a href="#cl-235">235</a> +<a href="#cl-236">236</a> +<a href="#cl-237">237</a> +<a href="#cl-238">238</a> +<a href="#cl-239">239</a> +<a href="#cl-240">240</a> +<a href="#cl-241">241</a> +<a href="#cl-242">242</a> +<a href="#cl-243">243</a> +<a href="#cl-244">244</a> +<a href="#cl-245">245</a> +<a href="#cl-246">246</a> +<a href="#cl-247">247</a> +<a href="#cl-248">248</a> +<a href="#cl-249">249</a> +<a href="#cl-250">250</a> +<a href="#cl-251">251</a> +<a href="#cl-252">252</a> +<a href="#cl-253">253</a> +<a href="#cl-254">254</a> +<a href="#cl-255">255</a> +<a href="#cl-256">256</a> +<a href="#cl-257">257</a> +<a href="#cl-258">258</a> +<a href="#cl-259">259</a> +<a href="#cl-260">260</a> +<a href="#cl-261">261</a> +<a href="#cl-262">262</a> +<a href="#cl-263">263</a> +<a href="#cl-264">264</a> +<a href="#cl-265">265</a> +<a href="#cl-266">266</a> +<a href="#cl-267">267</a> +<a href="#cl-268">268</a> +<a href="#cl-269">269</a> +<a href="#cl-270">270</a> +<a href="#cl-271">271</a> +<a href="#cl-272">272</a> +<a href="#cl-273">273</a> +<a href="#cl-274">274</a> +<a href="#cl-275">275</a> +<a href="#cl-276">276</a> +<a href="#cl-277">277</a> +<a href="#cl-278">278</a> +<a href="#cl-279">279</a> +<a href="#cl-280">280</a> +<a href="#cl-281">281</a> +<a href="#cl-282">282</a> +<a href="#cl-283">283</a> +<a href="#cl-284">284</a> +<a href="#cl-285">285</a> +<a href="#cl-286">286</a> +<a href="#cl-287">287</a> +<a href="#cl-288">288</a> +</pre></div></td><td class="code"><div class="highlight"><pre><a name="cl-1"></a><span class="c">#!/usr/bin/env python</span> +<a name="cl-2"></a><span class="c"># -*- coding: utf-8 -*-</span> +<a name="cl-3"></a> +<a name="cl-4"></a><span class="c"># Miville</span> +<a name="cl-5"></a><span class="c"># Copyright (C) 2008 Société des arts technologiques (SAT)</span> +<a name="cl-6"></a><span class="c"># http://www.sat.qc.ca</span> +<a name="cl-7"></a><span class="c"># All rights reserved.</span> +<a name="cl-8"></a><span class="c">#</span> +<a name="cl-9"></a><span class="c"># This file is free software: you can redistribute it and/or modify</span> +<a name="cl-10"></a><span class="c"># it under the terms of the GNU General Public License as published by</span> +<a name="cl-11"></a><span class="c"># the Free Software Foundation, either version 2 of the License, or</span> +<a name="cl-12"></a><span class="c"># (at your option) any later version.</span> +<a name="cl-13"></a><span class="c">#</span> +<a name="cl-14"></a><span class="c"># Miville is distributed in the hope that it will be useful,</span> +<a name="cl-15"></a><span class="c"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span> +<a name="cl-16"></a><span class="c"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span> +<a name="cl-17"></a><span class="c"># GNU General Public License for more details.</span> +<a name="cl-18"></a><span class="c">#</span> +<a name="cl-19"></a><span class="c"># You should have received a copy of the GNU General Public License</span> +<a name="cl-20"></a><span class="c"># along with Miville. If not, see <http://www.gnu.org/licenses/>.</span> +<a name="cl-21"></a> +<a name="cl-22"></a><span class="sd">"""</span> +<a name="cl-23"></a><span class="sd">This script parse a directory tree looking for python modules and packages and</span> +<a name="cl-24"></a><span class="sd">create ReST files appropriately to create code documentation with Sphinx.</span> +<a name="cl-25"></a><span class="sd">It also create a modules index. </span> +<a name="cl-26"></a><span class="sd">"""</span> +<a name="cl-27"></a> +<a name="cl-28"></a><span class="kn">import</span> <span class="nn">os</span> +<a name="cl-29"></a><span class="kn">import</span> <span class="nn">optparse</span> +<a name="cl-30"></a> +<a name="cl-31"></a> +<a name="cl-32"></a><span class="c"># automodule options</span> +<a name="cl-33"></a><span class="n">OPTIONS</span> <span class="o">=</span> <span class="p">[</span><span class="s">'members'</span><span class="p">,</span> +<a name="cl-34"></a> <span class="s">'undoc-members'</span><span class="p">,</span> +<a name="cl-35"></a><span class="c"># 'inherited-members', # disable because there's a bug in sphinx</span> +<a name="cl-36"></a> <span class="s">'show-inheritance'</span><span class="p">]</span> +<a name="cl-37"></a> +<a name="cl-38"></a> +<a name="cl-39"></a><span class="k">def</span> <span class="nf">create_file_name</span><span class="p">(</span><span class="n">base</span><span class="p">,</span> <span class="n">opts</span><span class="p">):</span> +<a name="cl-40"></a> <span class="sd">"""Create file name from base name, path and suffix"""</span> +<a name="cl-41"></a> <span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">opts</span><span class="o">.</span><span class="n">destdir</span><span class="p">,</span> <span class="s">"</span><span class="si">%s</span><span class="s">.</span><span class="si">%s</span><span class="s">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">base</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">suffix</span><span class="p">))</span> +<a name="cl-42"></a> +<a name="cl-43"></a><span class="k">def</span> <span class="nf">write_directive</span><span class="p">(</span><span class="n">module</span><span class="p">,</span> <span class="n">package</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> +<a name="cl-44"></a> <span class="sd">"""Create the automodule directive and add the options"""</span> +<a name="cl-45"></a> <span class="k">if</span> <span class="n">package</span><span class="p">:</span> +<a name="cl-46"></a> <span class="n">directive</span> <span class="o">=</span> <span class="s">'.. automodule:: </span><span class="si">%s</span><span class="s">.</span><span class="si">%s</span><span class="se">\n</span><span class="s">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">package</span><span class="p">,</span> <span class="n">module</span><span class="p">)</span> +<a name="cl-47"></a> <span class="k">else</span><span class="p">:</span> +<a name="cl-48"></a> <span class="n">directive</span> <span class="o">=</span> <span class="s">'.. automodule:: </span><span class="si">%s</span><span class="se">\n</span><span class="s">'</span> <span class="o">%</span> <span class="n">module</span> +<a name="cl-49"></a> <span class="k">for</span> <span class="n">option</span> <span class="ow">in</span> <span class="n">OPTIONS</span><span class="p">:</span> +<a name="cl-50"></a> <span class="n">directive</span> <span class="o">+=</span> <span class="s">' :</span><span class="si">%s</span><span class="s">:</span><span class="se">\n</span><span class="s">'</span> <span class="o">%</span> <span class="n">option</span> +<a name="cl-51"></a> <span class="k">return</span> <span class="n">directive</span> +<a name="cl-52"></a> +<a name="cl-53"></a><span class="k">def</span> <span class="nf">write_heading</span><span class="p">(</span><span class="n">module</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="s">'Module'</span><span class="p">):</span> +<a name="cl-54"></a> <span class="sd">"""Create the page heading."""</span> +<a name="cl-55"></a> <span class="n">module</span> <span class="o">=</span> <span class="n">module</span><span class="o">.</span><span class="n">title</span><span class="p">()</span> +<a name="cl-56"></a> <span class="n">heading</span> <span class="o">=</span> <span class="n">title_line</span><span class="p">(</span><span class="n">module</span> <span class="o">+</span> <span class="s">' Documentation'</span><span class="p">,</span> <span class="s">'='</span><span class="p">)</span> +<a name="cl-57"></a> <span class="n">heading</span> <span class="o">+=</span> <span class="s">'This page contains the </span><span class="si">%s</span><span class="s"> </span><span class="si">%s</span><span class="s"> documentation.</span><span class="se">\n\n</span><span class="s">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">module</span><span class="p">,</span> <span class="n">kind</span><span class="p">)</span> +<a name="cl-58"></a> <span class="k">return</span> <span class="n">heading</span> +<a name="cl-59"></a> +<a name="cl-60"></a><span class="k">def</span> <span class="nf">write_sub</span><span class="p">(</span><span class="n">module</span><span class="p">,</span> <span class="n">kind</span><span class="o">=</span><span class="s">'Module'</span><span class="p">):</span> +<a name="cl-61"></a> <span class="sd">"""Create the module subtitle"""</span> +<a name="cl-62"></a> <span class="n">sub</span> <span class="o">=</span> <span class="n">title_line</span><span class="p">(</span><span class="s">'The :mod:`</span><span class="si">%s</span><span class="s">` </span><span class="si">%s</span><span class="s">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">module</span><span class="p">,</span> <span class="n">kind</span><span class="p">),</span> <span class="s">'-'</span><span class="p">)</span> +<a name="cl-63"></a> <span class="k">return</span> <span class="n">sub</span> +<a name="cl-64"></a> +<a name="cl-65"></a><span class="k">def</span> <span class="nf">title_line</span><span class="p">(</span><span class="n">title</span><span class="p">,</span> <span class="n">char</span><span class="p">):</span> +<a name="cl-66"></a> <span class="sd">""" Underline the title with the character pass, with the right length."""</span> +<a name="cl-67"></a> <span class="k">return</span> <span class="s">'</span><span class="si">%s</span><span class="se">\n</span><span class="si">%s</span><span class="se">\n\n</span><span class="s">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">title</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">title</span><span class="p">)</span> <span class="o">*</span> <span class="n">char</span><span class="p">)</span> +<a name="cl-68"></a> +<a name="cl-69"></a><span class="k">def</span> <span class="nf">create_module_file</span><span class="p">(</span><span class="n">package</span><span class="p">,</span> <span class="n">module</span><span class="p">,</span> <span class="n">opts</span><span class="p">):</span> +<a name="cl-70"></a> <span class="sd">"""Build the text of the file and write the file."""</span> +<a name="cl-71"></a> <span class="n">name</span> <span class="o">=</span> <span class="n">create_file_name</span><span class="p">(</span><span class="n">module</span><span class="p">,</span> <span class="n">opts</span><span class="p">)</span> +<a name="cl-72"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">opts</span><span class="o">.</span><span class="n">force</span> <span class="ow">and</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">name</span><span class="p">):</span> +<a name="cl-73"></a> <span class="k">print</span> <span class="s">'File </span><span class="si">%s</span><span class="s"> already exists.'</span> <span class="o">%</span> <span class="n">name</span> +<a name="cl-74"></a> <span class="k">else</span><span class="p">:</span> +<a name="cl-75"></a> <span class="k">print</span> <span class="s">'Creating file </span><span class="si">%s</span><span class="s"> (module).'</span> <span class="o">%</span> <span class="n">name</span> +<a name="cl-76"></a> <span class="n">text</span> <span class="o">=</span> <span class="n">write_heading</span><span class="p">(</span><span class="n">module</span><span class="p">)</span> +<a name="cl-77"></a> <span class="n">text</span> <span class="o">+=</span> <span class="n">write_sub</span><span class="p">(</span><span class="n">module</span><span class="p">)</span> +<a name="cl-78"></a> <span class="n">text</span> <span class="o">+=</span> <span class="n">write_directive</span><span class="p">(</span><span class="n">module</span><span class="p">,</span> <span class="n">package</span><span class="p">)</span> +<a name="cl-79"></a> +<a name="cl-80"></a> <span class="c"># write the file</span> +<a name="cl-81"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">opts</span><span class="o">.</span><span class="n">dryrun</span><span class="p">:</span> +<a name="cl-82"></a> <span class="n">fd</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="s">'w'</span><span class="p">)</span> +<a name="cl-83"></a> <span class="n">fd</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">text</span><span class="p">)</span> +<a name="cl-84"></a> <span class="n">fd</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> +<a name="cl-85"></a> +<a name="cl-86"></a><span class="k">def</span> <span class="nf">create_package_file</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">master_package</span><span class="p">,</span> <span class="n">subroot</span><span class="p">,</span> <span class="n">py_files</span><span class="p">,</span> <span class="n">opts</span><span class="p">,</span> <span class="n">subs</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> +<a name="cl-87"></a> <span class="sd">"""Build the text of the file and write the file."""</span> +<a name="cl-88"></a> <span class="n">package</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">root</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> +<a name="cl-89"></a> <span class="n">name</span> <span class="o">=</span> <span class="n">create_file_name</span><span class="p">(</span><span class="n">subroot</span><span class="p">,</span> <span class="n">opts</span><span class="p">)</span> +<a name="cl-90"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">opts</span><span class="o">.</span><span class="n">force</span> <span class="ow">and</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">name</span><span class="p">):</span> +<a name="cl-91"></a> <span class="k">print</span> <span class="s">'File </span><span class="si">%s</span><span class="s"> already exists.'</span> <span class="o">%</span> <span class="n">name</span> +<a name="cl-92"></a> <span class="k">else</span><span class="p">:</span> +<a name="cl-93"></a> <span class="k">print</span> <span class="s">'Creating file </span><span class="si">%s</span><span class="s"> (package).'</span> <span class="o">%</span> <span class="n">name</span> +<a name="cl-94"></a> <span class="n">text</span> <span class="o">=</span> <span class="n">write_heading</span><span class="p">(</span><span class="n">package</span><span class="p">,</span> <span class="s">'Package'</span><span class="p">)</span> +<a name="cl-95"></a> <span class="k">if</span> <span class="n">subs</span> <span class="o">==</span> <span class="bp">None</span><span class="p">:</span> +<a name="cl-96"></a> <span class="n">subs</span> <span class="o">=</span> <span class="p">[]</span> +<a name="cl-97"></a> <span class="k">else</span><span class="p">:</span> +<a name="cl-98"></a> <span class="c"># build a list of directories that are package (they contain an __init_.py file)</span> +<a name="cl-99"></a> <span class="n">subs</span> <span class="o">=</span> <span class="p">[</span><span class="n">sub</span> <span class="k">for</span> <span class="n">sub</span> <span class="ow">in</span> <span class="n">subs</span> <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">sub</span><span class="p">,</span> <span class="s">'__init__.py'</span><span class="p">))]</span> +<a name="cl-100"></a> <span class="c"># if there's some package directories, add a TOC for theses subpackages</span> +<a name="cl-101"></a> <span class="k">if</span> <span class="n">subs</span><span class="p">:</span> +<a name="cl-102"></a> <span class="n">text</span> <span class="o">+=</span> <span class="n">title_line</span><span class="p">(</span><span class="s">'Subpackages'</span><span class="p">,</span> <span class="s">'-'</span><span class="p">)</span> +<a name="cl-103"></a> <span class="n">text</span> <span class="o">+=</span> <span class="s">'.. toctree::</span><span class="se">\n\n</span><span class="s">'</span> +<a name="cl-104"></a> <span class="k">for</span> <span class="n">sub</span> <span class="ow">in</span> <span class="n">subs</span><span class="p">:</span> +<a name="cl-105"></a> <span class="n">text</span> <span class="o">+=</span> <span class="s">' </span><span class="si">%s</span><span class="s">.</span><span class="si">%s</span><span class="se">\n</span><span class="s">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">subroot</span><span class="p">,</span> <span class="n">sub</span><span class="p">)</span> +<a name="cl-106"></a> <span class="n">text</span> <span class="o">+=</span> <span class="s">'</span><span class="se">\n</span><span class="s">'</span> +<a name="cl-107"></a> +<a name="cl-108"></a> <span class="c"># add each package's module</span> +<a name="cl-109"></a> <span class="k">for</span> <span class="n">py_file</span> <span class="ow">in</span> <span class="n">py_files</span><span class="p">:</span> +<a name="cl-110"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">check_for_code</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">py_file</span><span class="p">)):</span> +<a name="cl-111"></a> <span class="c"># don't build the file if there's no code in it</span> +<a name="cl-112"></a> <span class="k">continue</span> +<a name="cl-113"></a> <span class="n">py_file</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">splitext</span><span class="p">(</span><span class="n">py_file</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> +<a name="cl-114"></a> <span class="n">py_path</span> <span class="o">=</span> <span class="s">'</span><span class="si">%s</span><span class="s">.</span><span class="si">%s</span><span class="s">'</span> <span class="o">%</span> <span class="p">(</span><span class="n">subroot</span><span class="p">,</span> <span class="n">py_file</span><span class="p">)</span> +<a name="cl-115"></a> <span class="n">kind</span> <span class="o">=</span> <span class="s">"Module"</span> +<a name="cl-116"></a> <span class="k">if</span> <span class="n">py_file</span> <span class="o">==</span> <span class="s">'__init__'</span><span class="p">:</span> +<a name="cl-117"></a> <span class="n">kind</span> <span class="o">=</span> <span class="s">"Package"</span> +<a name="cl-118"></a> <span class="n">text</span> <span class="o">+=</span> <span class="n">write_sub</span><span class="p">(</span><span class="n">kind</span> <span class="o">==</span> <span class="s">'Package'</span> <span class="ow">and</span> <span class="n">package</span> <span class="ow">or</span> <span class="n">py_file</span><span class="p">,</span> <span class="n">kind</span><span class="p">)</span> +<a name="cl-119"></a> <span class="n">text</span> <span class="o">+=</span> <span class="n">write_directive</span><span class="p">(</span><span class="n">kind</span> <span class="o">==</span> <span class="s">"Package"</span> <span class="ow">and</span> <span class="n">subroot</span> <span class="ow">or</span> <span class="n">py_path</span><span class="p">,</span> <span class="n">master_package</span><span class="p">)</span> +<a name="cl-120"></a> <span class="n">text</span> <span class="o">+=</span> <span class="s">'</span><span class="se">\n</span><span class="s">'</span> +<a name="cl-121"></a> +<a name="cl-122"></a> <span class="c"># write the file</span> +<a name="cl-123"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">opts</span><span class="o">.</span><span class="n">dryrun</span><span class="p">:</span> +<a name="cl-124"></a> <span class="n">fd</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="s">'w'</span><span class="p">)</span> +<a name="cl-125"></a> <span class="n">fd</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">text</span><span class="p">)</span> +<a name="cl-126"></a> <span class="n">fd</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> +<a name="cl-127"></a> +<a name="cl-128"></a><span class="k">def</span> <span class="nf">check_for_code</span><span class="p">(</span><span class="n">module</span><span class="p">):</span> +<a name="cl-129"></a> <span class="sd">"""</span> +<a name="cl-130"></a><span class="sd"> Check if there's at least one class or one function in the module.</span> +<a name="cl-131"></a><span class="sd"> """</span> +<a name="cl-132"></a> <span class="n">fd</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">module</span><span class="p">,</span> <span class="s">'r'</span><span class="p">)</span> +<a name="cl-133"></a> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">fd</span><span class="p">:</span> +<a name="cl-134"></a> <span class="k">if</span> <span class="n">line</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">'def '</span><span class="p">)</span> <span class="ow">or</span> <span class="n">line</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">'class '</span><span class="p">):</span> +<a name="cl-135"></a> <span class="n">fd</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> +<a name="cl-136"></a> <span class="k">return</span> <span class="bp">True</span> +<a name="cl-137"></a> <span class="n">fd</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> +<a name="cl-138"></a> <span class="k">return</span> <span class="bp">False</span> +<a name="cl-139"></a> +<a name="cl-140"></a><span class="k">def</span> <span class="nf">recurse_tree</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">excludes</span><span class="p">,</span> <span class="n">opts</span><span class="p">):</span> +<a name="cl-141"></a> <span class="sd">"""</span> +<a name="cl-142"></a><span class="sd"> Look for every file in the directory tree and create the corresponding</span> +<a name="cl-143"></a><span class="sd"> ReST files.</span> +<a name="cl-144"></a><span class="sd"> """</span> +<a name="cl-145"></a> <span class="n">package_name</span> <span class="o">=</span> <span class="bp">None</span> +<a name="cl-146"></a> <span class="c"># check if the base directory is a package and get is name</span> +<a name="cl-147"></a> <span class="k">if</span> <span class="s">'__init__.py'</span> <span class="ow">in</span> <span class="n">os</span><span class="o">.</span><span class="n">listdir</span><span class="p">(</span><span class="n">path</span><span class="p">):</span> +<a name="cl-148"></a> <span class="n">package_name</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">path</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">sep</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> +<a name="cl-149"></a> +<a name="cl-150"></a> <span class="n">toc</span> <span class="o">=</span> <span class="p">[]</span> +<a name="cl-151"></a> <span class="n">excludes</span> <span class="o">=</span> <span class="n">format_excludes</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">excludes</span><span class="p">)</span> +<a name="cl-152"></a> <span class="n">tree</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">walk</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="bp">False</span><span class="p">)</span> +<a name="cl-153"></a> <span class="k">for</span> <span class="n">root</span><span class="p">,</span> <span class="n">subs</span><span class="p">,</span> <span class="n">files</span> <span class="ow">in</span> <span class="n">tree</span><span class="p">:</span> +<a name="cl-154"></a> <span class="c"># keep only the Python script files</span> +<a name="cl-155"></a> <span class="n">py_files</span> <span class="o">=</span> <span class="n">check_py_file</span><span class="p">(</span><span class="n">files</span><span class="p">)</span> +<a name="cl-156"></a> <span class="c"># remove hidden ('.') and private ('_') directories</span> +<a name="cl-157"></a> <span class="n">subs</span> <span class="o">=</span> <span class="p">[</span><span class="n">sub</span> <span class="k">for</span> <span class="n">sub</span> <span class="ow">in</span> <span class="n">subs</span> <span class="k">if</span> <span class="n">sub</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="s">'.'</span><span class="p">,</span> <span class="s">'_'</span><span class="p">]]</span> +<a name="cl-158"></a> <span class="c"># check if there's valid files to process</span> +<a name="cl-159"></a> <span class="c"># TODO: could add check for windows hidden files</span> +<a name="cl-160"></a> <span class="k">if</span> <span class="s">"/."</span> <span class="ow">in</span> <span class="n">root</span> <span class="ow">or</span> <span class="s">"/_"</span> <span class="ow">in</span> <span class="n">root</span> \ +<a name="cl-161"></a> <span class="ow">or</span> <span class="ow">not</span> <span class="n">py_files</span> \ +<a name="cl-162"></a> <span class="ow">or</span> <span class="n">check_excludes</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">excludes</span><span class="p">):</span> +<a name="cl-163"></a> <span class="k">continue</span> +<a name="cl-164"></a> <span class="n">subroot</span> <span class="o">=</span> <span class="n">root</span><span class="p">[</span><span class="nb">len</span><span class="p">(</span><span class="n">path</span><span class="p">):]</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">sep</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">sep</span><span class="p">,</span> <span class="s">'.'</span><span class="p">)</span> +<a name="cl-165"></a> <span class="k">if</span> <span class="n">root</span> <span class="o">==</span> <span class="n">path</span><span class="p">:</span> +<a name="cl-166"></a> <span class="c"># we are at the root level so we create only modules</span> +<a name="cl-167"></a> <span class="k">for</span> <span class="n">py_file</span> <span class="ow">in</span> <span class="n">py_files</span><span class="p">:</span> +<a name="cl-168"></a> <span class="n">module</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">splitext</span><span class="p">(</span><span class="n">py_file</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> +<a name="cl-169"></a> <span class="c"># add the module if it contains code</span> +<a name="cl-170"></a> <span class="k">if</span> <span class="n">check_for_code</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="s">'</span><span class="si">%s</span><span class="s">.py'</span> <span class="o">%</span> <span class="n">module</span><span class="p">)):</span> +<a name="cl-171"></a> <span class="n">create_module_file</span><span class="p">(</span><span class="n">package_name</span><span class="p">,</span> <span class="n">module</span><span class="p">,</span> <span class="n">opts</span><span class="p">)</span> +<a name="cl-172"></a> <span class="n">toc</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">module</span><span class="p">)</span> +<a name="cl-173"></a> <span class="k">elif</span> <span class="ow">not</span> <span class="n">subs</span> <span class="ow">and</span> <span class="s">"__init__.py"</span> <span class="ow">in</span> <span class="n">py_files</span><span class="p">:</span> +<a name="cl-174"></a> <span class="c"># we are in a package without sub package</span> +<a name="cl-175"></a> <span class="c"># check if there's only an __init__.py file</span> +<a name="cl-176"></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">py_files</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span> +<a name="cl-177"></a> <span class="c"># check if there's code in the __init__.py file</span> +<a name="cl-178"></a> <span class="k">if</span> <span class="n">check_for_code</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="s">'__init__.py'</span><span class="p">)):</span> +<a name="cl-179"></a> <span class="n">create_package_file</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">package_name</span><span class="p">,</span> <span class="n">subroot</span><span class="p">,</span> <span class="n">py_files</span><span class="p">,</span> <span class="n">opts</span><span class="o">=</span><span class="n">opts</span><span class="p">)</span> +<a name="cl-180"></a> <span class="n">toc</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">subroot</span><span class="p">)</span> +<a name="cl-181"></a> <span class="k">else</span><span class="p">:</span> +<a name="cl-182"></a> <span class="n">create_package_file</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">package_name</span><span class="p">,</span> <span class="n">subroot</span><span class="p">,</span> <span class="n">py_files</span><span class="p">,</span> <span class="n">opts</span><span class="o">=</span><span class="n">opts</span><span class="p">)</span> +<a name="cl-183"></a> <span class="n">toc</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">subroot</span><span class="p">)</span> +<a name="cl-184"></a> <span class="k">elif</span> <span class="s">"__init__.py"</span> <span class="ow">in</span> <span class="n">py_files</span><span class="p">:</span> +<a name="cl-185"></a> <span class="c"># we are in package with subpackage(s)</span> +<a name="cl-186"></a> <span class="n">create_package_file</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">package_name</span><span class="p">,</span> <span class="n">subroot</span><span class="p">,</span> <span class="n">py_files</span><span class="p">,</span> <span class="n">opts</span><span class="p">,</span> <span class="n">subs</span><span class="p">)</span> +<a name="cl-187"></a> <span class="n">toc</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">subroot</span><span class="p">)</span> +<a name="cl-188"></a> +<a name="cl-189"></a> <span class="c"># create the module's index</span> +<a name="cl-190"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">opts</span><span class="o">.</span><span class="n">notoc</span><span class="p">:</span> +<a name="cl-191"></a> <span class="n">modules_toc</span><span class="p">(</span><span class="n">toc</span><span class="p">,</span> <span class="n">opts</span><span class="p">)</span> +<a name="cl-192"></a> +<a name="cl-193"></a><span class="k">def</span> <span class="nf">modules_toc</span><span class="p">(</span><span class="n">modules</span><span class="p">,</span> <span class="n">opts</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="s">'modules'</span><span class="p">):</span> +<a name="cl-194"></a> <span class="sd">"""</span> +<a name="cl-195"></a><span class="sd"> Create the module's index.</span> +<a name="cl-196"></a><span class="sd"> """</span> +<a name="cl-197"></a> <span class="n">fname</span> <span class="o">=</span> <span class="n">create_file_name</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">opts</span><span class="p">)</span> +<a name="cl-198"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">opts</span><span class="o">.</span><span class="n">force</span> <span class="ow">and</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">fname</span><span class="p">):</span> +<a name="cl-199"></a> <span class="k">print</span> <span class="s">"File </span><span class="si">%s</span><span class="s"> already exists."</span> <span class="o">%</span> <span class="n">name</span> +<a name="cl-200"></a> <span class="k">return</span> +<a name="cl-201"></a> +<a name="cl-202"></a> <span class="k">print</span> <span class="s">"Creating module's index modules.txt."</span> +<a name="cl-203"></a> <span class="n">text</span> <span class="o">=</span> <span class="n">write_heading</span><span class="p">(</span><span class="n">opts</span><span class="o">.</span><span class="n">header</span><span class="p">,</span> <span class="s">'Modules'</span><span class="p">)</span> +<a name="cl-204"></a> <span class="n">text</span> <span class="o">+=</span> <span class="n">title_line</span><span class="p">(</span><span class="s">'Modules:'</span><span class="p">,</span> <span class="s">'-'</span><span class="p">)</span> +<a name="cl-205"></a> <span class="n">text</span> <span class="o">+=</span> <span class="s">'.. toctree::</span><span class="se">\n</span><span class="s">'</span> +<a name="cl-206"></a> <span class="n">text</span> <span class="o">+=</span> <span class="s">' :maxdepth: </span><span class="si">%s</span><span class="se">\n\n</span><span class="s">'</span> <span class="o">%</span> <span class="n">opts</span><span class="o">.</span><span class="n">maxdepth</span> +<a name="cl-207"></a> +<a name="cl-208"></a> <span class="n">modules</span><span class="o">.</span><span class="n">sort</span><span class="p">()</span> +<a name="cl-209"></a> <span class="n">prev_module</span> <span class="o">=</span> <span class="s">''</span> +<a name="cl-210"></a> <span class="k">for</span> <span class="n">module</span> <span class="ow">in</span> <span class="n">modules</span><span class="p">:</span> +<a name="cl-211"></a> <span class="c"># look if the module is a subpackage and, if yes, ignore it</span> +<a name="cl-212"></a> <span class="k">if</span> <span class="n">module</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">prev_module</span> <span class="o">+</span> <span class="s">'.'</span><span class="p">):</span> +<a name="cl-213"></a> <span class="k">continue</span> +<a name="cl-214"></a> <span class="n">prev_module</span> <span class="o">=</span> <span class="n">module</span> +<a name="cl-215"></a> <span class="n">text</span> <span class="o">+=</span> <span class="s">' </span><span class="si">%s</span><span class="se">\n</span><span class="s">'</span> <span class="o">%</span> <span class="n">module</span> +<a name="cl-216"></a> +<a name="cl-217"></a> <span class="c"># write the file</span> +<a name="cl-218"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">opts</span><span class="o">.</span><span class="n">dryrun</span><span class="p">:</span> +<a name="cl-219"></a> <span class="n">fd</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">fname</span><span class="p">,</span> <span class="s">'w'</span><span class="p">)</span> +<a name="cl-220"></a> <span class="n">fd</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">text</span><span class="p">)</span> +<a name="cl-221"></a> <span class="n">fd</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> +<a name="cl-222"></a> +<a name="cl-223"></a><span class="k">def</span> <span class="nf">format_excludes</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">excludes</span><span class="p">):</span> +<a name="cl-224"></a> <span class="sd">"""</span> +<a name="cl-225"></a><span class="sd"> Format the excluded directory list.</span> +<a name="cl-226"></a><span class="sd"> (verify that the path is not from the root of the volume or the root of the</span> +<a name="cl-227"></a><span class="sd"> package)</span> +<a name="cl-228"></a><span class="sd"> """</span> +<a name="cl-229"></a> <span class="n">f_excludes</span> <span class="o">=</span> <span class="p">[]</span> +<a name="cl-230"></a> <span class="k">for</span> <span class="n">exclude</span> <span class="ow">in</span> <span class="n">excludes</span><span class="p">:</span> +<a name="cl-231"></a> <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isabs</span><span class="p">(</span><span class="n">exclude</span><span class="p">)</span> <span class="ow">and</span> <span class="n">exclude</span><span class="p">[:</span><span class="nb">len</span><span class="p">(</span><span class="n">path</span><span class="p">)]</span> <span class="o">!=</span> <span class="n">path</span><span class="p">:</span> +<a name="cl-232"></a> <span class="n">exclude</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">exclude</span><span class="p">)</span> +<a name="cl-233"></a> <span class="c"># remove trailing slash</span> +<a name="cl-234"></a> <span class="n">f_excludes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exclude</span><span class="o">.</span><span class="n">rstrip</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">sep</span><span class="p">))</span> +<a name="cl-235"></a> <span class="k">return</span> <span class="n">f_excludes</span> +<a name="cl-236"></a> +<a name="cl-237"></a><span class="k">def</span> <span class="nf">check_excludes</span><span class="p">(</span><span class="n">root</span><span class="p">,</span> <span class="n">excludes</span><span class="p">):</span> +<a name="cl-238"></a> <span class="sd">"""</span> +<a name="cl-239"></a><span class="sd"> Check if the directory is in the exclude list.</span> +<a name="cl-240"></a><span class="sd"> """</span> +<a name="cl-241"></a> <span class="k">for</span> <span class="n">exclude</span> <span class="ow">in</span> <span class="n">excludes</span><span class="p">:</span> +<a name="cl-242"></a> <span class="k">if</span> <span class="n">root</span><span class="p">[:</span><span class="nb">len</span><span class="p">(</span><span class="n">exclude</span><span class="p">)]</span> <span class="o">==</span> <span class="n">exclude</span><span class="p">:</span> +<a name="cl-243"></a> <span class="k">return</span> <span class="bp">True</span> +<a name="cl-244"></a> <span class="k">return</span> <span class="bp">False</span> +<a name="cl-245"></a> +<a name="cl-246"></a><span class="k">def</span> <span class="nf">check_py_file</span><span class="p">(</span><span class="n">files</span><span class="p">):</span> +<a name="cl-247"></a> <span class="sd">"""</span> +<a name="cl-248"></a><span class="sd"> Return a list with only the python scripts (remove all other files). </span> +<a name="cl-249"></a><span class="sd"> """</span> +<a name="cl-250"></a> <span class="n">py_files</span> <span class="o">=</span> <span class="p">[</span><span class="n">fich</span> <span class="k">for</span> <span class="n">fich</span> <span class="ow">in</span> <span class="n">files</span> <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">splitext</span><span class="p">(</span><span class="n">fich</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s">'.py'</span><span class="p">]</span> +<a name="cl-251"></a> <span class="k">return</span> <span class="n">py_files</span> +<a name="cl-252"></a> +<a name="cl-253"></a> +<a name="cl-254"></a><span class="k">def</span> <span class="nf">main</span><span class="p">():</span> +<a name="cl-255"></a> <span class="sd">"""</span> +<a name="cl-256"></a><span class="sd"> Parse and check the command line arguments</span> +<a name="cl-257"></a><span class="sd"> """</span> +<a name="cl-258"></a> <span class="n">parser</span> <span class="o">=</span> <span class="n">optparse</span><span class="o">.</span><span class="n">OptionParser</span><span class="p">(</span><span class="n">usage</span><span class="o">=</span><span class="s">"""usage: %prog [options] <package path> [exclude paths, ...]</span> +<a name="cl-259"></a><span class="s"> </span> +<a name="cl-260"></a><span class="s">Note: By default this script will not overwrite already created files."""</span><span class="p">)</span> +<a name="cl-261"></a> <span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s">"-n"</span><span class="p">,</span> <span class="s">"--doc-header"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s">"store"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s">"header"</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s">"Documentation Header (default=Project)"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s">"Project"</span><span class="p">)</span> +<a name="cl-262"></a> <span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s">"-d"</span><span class="p">,</span> <span class="s">"--dest-dir"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s">"store"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s">"destdir"</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s">"Output destination directory"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s">""</span><span class="p">)</span> +<a name="cl-263"></a> <span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s">"-s"</span><span class="p">,</span> <span class="s">"--suffix"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s">"store"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s">"suffix"</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s">"module suffix (default=txt)"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s">"txt"</span><span class="p">)</span> +<a name="cl-264"></a> <span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s">"-m"</span><span class="p">,</span> <span class="s">"--maxdepth"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s">"store"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s">"maxdepth"</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s">"Maximum depth of submodules to show in the TOC (default=4)"</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="s">"int"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="mi">4</span><span class="p">)</span> +<a name="cl-265"></a> <span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s">"-r"</span><span class="p">,</span> <span class="s">"--dry-run"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s">"store_true"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s">"dryrun"</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s">"Run the script without creating the files"</span><span class="p">)</span> +<a name="cl-266"></a> <span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s">"-f"</span><span class="p">,</span> <span class="s">"--force"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s">"store_true"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s">"force"</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s">"Overwrite all the files"</span><span class="p">)</span> +<a name="cl-267"></a> <span class="n">parser</span><span class="o">.</span><span class="n">add_option</span><span class="p">(</span><span class="s">"-t"</span><span class="p">,</span> <span class="s">"--no-toc"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s">"store_true"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s">"notoc"</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s">"Don't create the table of content file"</span><span class="p">)</span> +<a name="cl-268"></a> <span class="p">(</span><span class="n">opts</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()</span> +<a name="cl-269"></a> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o"><</span> <span class="mi">1</span><span class="p">:</span> +<a name="cl-270"></a> <span class="n">parser</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s">"package path is required."</span><span class="p">)</span> +<a name="cl-271"></a> <span class="k">else</span><span class="p">:</span> +<a name="cl-272"></a> <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isdir</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]):</span> +<a name="cl-273"></a> <span class="c"># check if the output destination is a valid directory</span> +<a name="cl-274"></a> <span class="k">if</span> <span class="n">opts</span><span class="o">.</span><span class="n">destdir</span> <span class="ow">and</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isdir</span><span class="p">(</span><span class="n">opts</span><span class="o">.</span><span class="n">destdir</span><span class="p">):</span> +<a name="cl-275"></a> <span class="c"># if there's some exclude arguments, build the list of excludes</span> +<a name="cl-276"></a> <span class="n">excludes</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span> +<a name="cl-277"></a> <span class="n">recurse_tree</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">excludes</span><span class="p">,</span> <span class="n">opts</span><span class="p">)</span> +<a name="cl-278"></a> <span class="k">else</span><span class="p">:</span> +<a name="cl-279"></a> <span class="k">print</span> <span class="s">'</span><span class="si">%s</span><span class="s"> is not a valid output destination directory.'</span> <span class="o">%</span> <span class="n">opts</span><span class="o">.</span><span class="n">destdir</span> +<a name="cl-280"></a> <span class="k">else</span><span class="p">:</span> +<a name="cl-281"></a> <span class="k">print</span> <span class="s">'</span><span class="si">%s</span><span class="s"> is not a valid directory.'</span> <span class="o">%</span> <span class="n">args</span> +<a name="cl-282"></a> +<a name="cl-283"></a> +<a name="cl-284"></a> +<a name="cl-285"></a> +<a name="cl-286"></a><span class="k">if</span> <span class="n">__name__</span> <span class="o">==</span> <span class="s">'__main__'</span><span class="p">:</span> +<a name="cl-287"></a> <span class="n">main</span><span class="p">()</span> +<a name="cl-288"></a> +</pre></div> +</td></tr></table> + + +</div> + + + + <div class="cb"></div> + </div> + <div class="cb footer-placeholder"></div> + </div> + <div id="footer-wrapper"> + <div id="footer"> + <a href="/site/terms/">TOS</a> | <a href="/site/privacy/">Privacy Policy</a> | <a href="http://blog.bitbucket.org/">Blog</a> | <a href="http://bitbucket.org/jespern/bitbucket/issues/new/">Report Bug</a> | <a href="http://groups.google.com/group/bitbucket-users">Discuss</a> | <a href="http://avantlumiere.com/">© 2008-2010</a> + | We run <small><b> + <a href="http://www.djangoproject.com/">Django 1.2.1</a> / + <a href="http://bitbucket.org/jespern/django-piston/">Piston 0.2.3rc1</a> / + <a href="http://www.selenic.com/mercurial/">Hg 1.3.1</a> / + <a href="http://www.python.org">Python 2.5.2</a> / + r3049| fe02 + </b></small> + </div> + </div> + + <script type="text/javascript"> + var _gaq = _gaq || []; + _gaq.push(['_setAccount', 'UA-2456069-3'], ['_trackPageview']); + + var _gaq = _gaq || []; + _gaq.push(['atl._setAccount', 'UA-6032469-33'], ['atl._trackPageview']); + (function() { + var ga = document.createElement('script'); + ga.src = ('https:' == document.location.protocol ? 'https://ssl' : + 'http://www') + '.google-analytics.com/ga.js'; + ga.setAttribute('async', 'true'); + document.documentElement.firstChild.appendChild(ga); + })(); + </script> + +</body> +</html> |