source: sasview/_modules/sas/guiframe/CategoryInstaller.html @ a462c6a

gh-pages
Last change on this file since a462c6a was a462c6a, checked in by ajj, 9 years ago

Rebuild to fix index and modules docs

  • Property mode set to 100644
File size: 24.8 KB
Line 
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
4
5<html xmlns="http://www.w3.org/1999/xhtml">
6  <head>
7    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
8   
9    <title>sas.guiframe.CategoryInstaller &mdash; SasView 3.0.0 documentation</title>
10   
11    <link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
12    <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
13   
14    <script type="text/javascript">
15      var DOCUMENTATION_OPTIONS = {
16        URL_ROOT:    '../../../',
17        VERSION:     '3.0.0',
18        COLLAPSE_INDEX: false,
19        FILE_SUFFIX: '.html',
20        HAS_SOURCE:  true
21      };
22    </script>
23    <script type="text/javascript" src="../../../_static/jquery.js"></script>
24    <script type="text/javascript" src="../../../_static/underscore.js"></script>
25    <script type="text/javascript" src="../../../_static/doctools.js"></script>
26    <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
27    <link rel="top" title="SasView 3.0.0 documentation" href="../../../index.html" />
28    <link rel="up" title="sas.guiframe" href="../guiframe.html" /> 
29  </head>
30  <body>
31    <div class="related">
32      <h3>Navigation</h3>
33      <ul>
34        <li class="right" style="margin-right: 10px">
35          <a href="../../../genindex.html" title="General Index"
36             accesskey="I">index</a></li>
37        <li class="right" >
38          <a href="../../../py-modindex.html" title="Python Module Index"
39             >modules</a> |</li>
40        <li><a href="../../../index.html">SasView 3.0.0 documentation</a> &raquo;</li>
41          <li><a href="../../index.html" >Module code</a> &raquo;</li>
42          <li><a href="../guiframe.html" accesskey="U">sas.guiframe</a> &raquo;</li> 
43      </ul>
44    </div> 
45
46    <div class="document">
47      <div class="documentwrapper">
48        <div class="bodywrapper">
49          <div class="body">
50           
51  <h1>Source code for sas.guiframe.CategoryInstaller</h1><div class="highlight"><pre>
52<span class="sd">&quot;&quot;&quot;</span>
53<span class="sd">Class for making sure all category stuff is installed</span>
54<span class="sd">and works fine.</span>
55
56<span class="sd">Copyright (c) Institut Laue-Langevin 2012</span>
57
58<span class="sd">@author kieranrcampbell@gmail.com</span>
59<span class="sd">@modified by NIST/MD sasview team</span>
60<span class="sd">&quot;&quot;&quot;</span>
61
62<span class="kn">import</span> <span class="nn">os</span>
63<span class="kn">import</span> <span class="nn">sys</span>
64<span class="kn">import</span> <span class="nn">shutil</span>
65<span class="kn">import</span> <span class="nn">json</span>
66<span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">defaultdict</span>
67
68<span class="n">USER_FILE</span> <span class="o">=</span> <span class="s">&#39;serialized_cat.json&#39;</span>
69
70<div class="viewcode-block" id="CategoryInstaller"><a class="viewcode-back" href="../../../dev/api/sas.guiframe.html#sas.guiframe.CategoryInstaller.CategoryInstaller">[docs]</a><span class="k">class</span> <span class="nc">CategoryInstaller</span><span class="p">:</span>
71    <span class="sd">&quot;&quot;&quot;</span>
72<span class="sd">    Class for making sure all category stuff is installed</span>
73
74<span class="sd">    Note - class is entirely static!</span>
75<span class="sd">    &quot;&quot;&quot;</span>
76
77
78    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
79        <span class="sd">&quot;&quot;&quot; initialization &quot;&quot;&quot;</span>
80
81    <span class="nd">@staticmethod</span>
82    <span class="k">def</span> <span class="nf">_get_installed_model_dir</span><span class="p">():</span>
83        <span class="sd">&quot;&quot;&quot;</span>
84<span class="sd">        returns the dir where installed_models.txt should be</span>
85<span class="sd">        &quot;&quot;&quot;</span>
86        <span class="kn">import</span> <span class="nn">sas.dataloader.readers</span>
87        <span class="k">return</span> <span class="n">sas</span><span class="o">.</span><span class="n">dataloader</span><span class="o">.</span><span class="n">readers</span><span class="o">.</span><span class="n">get_data_path</span><span class="p">()</span>
88
89    <span class="nd">@staticmethod</span>
90    <span class="k">def</span> <span class="nf">_get_models_py_dir</span><span class="p">():</span>
91        <span class="sd">&quot;&quot;&quot;</span>
92<span class="sd">        returns the dir where models.py should be</span>
93<span class="sd">        &quot;&quot;&quot;</span>
94        <span class="kn">import</span> <span class="nn">sas.perspectives.fitting.models</span>
95        <span class="k">return</span> <span class="n">sas</span><span class="o">.</span><span class="n">perspectives</span><span class="o">.</span><span class="n">fitting</span><span class="o">.</span><span class="n">models</span><span class="o">.</span><span class="n">get_model_python_path</span><span class="p">()</span>
96   
97    <span class="nd">@staticmethod</span>
98    <span class="k">def</span> <span class="nf">_get_default_cat_file_dir</span><span class="p">():</span>
99        <span class="sd">&quot;&quot;&quot;</span>
100<span class="sd">        returns the dir where default_cat.j should be</span>
101<span class="sd">        &quot;&quot;&quot;</span>
102        <span class="c"># The default categories file is usually found with the code, except</span>
103        <span class="c"># when deploying using py2app (it will be in Contents/Resources), or</span>
104        <span class="c"># py2exe (it will be in the exec dir).</span>
105        <span class="kn">import</span> <span class="nn">sas.sasview</span>
106        <span class="n">cat_file</span> <span class="o">=</span> <span class="s">&quot;default_categories.json&quot;</span>
107       
108        <span class="n">possible_cat_file_paths</span> <span class="o">=</span> <span class="p">[</span>
109            <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">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">sas</span><span class="o">.</span><span class="n">sasview</span><span class="o">.</span><span class="n">__file__</span><span class="p">)[</span><span class="mi">0</span><span class="p">],</span> <span class="n">cat_file</span><span class="p">),</span>           <span class="c"># Source</span>
110            <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">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">executable</span><span class="p">),</span> <span class="s">&#39;..&#39;</span><span class="p">,</span> <span class="s">&#39;Resources&#39;</span><span class="p">,</span> <span class="n">cat_file</span><span class="p">),</span> <span class="c"># Mac</span>
111            <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">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">executable</span><span class="p">),</span> <span class="n">cat_file</span><span class="p">)</span>                     <span class="c"># Windows</span>
112        <span class="p">]</span>
113
114        <span class="k">for</span> <span class="n">path</span> <span class="ow">in</span> <span class="n">possible_cat_file_paths</span><span class="p">:</span>
115            <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">path</span><span class="p">):</span>
116                <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">dirname</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
117           
118        <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s">&#39;CategoryInstaller: Could not find folder containing default categories&#39;</span><span class="p">)</span>
119
120    <span class="nd">@staticmethod</span>
121    <span class="k">def</span> <span class="nf">_get_home_dir</span><span class="p">():</span>
122        <span class="sd">&quot;&quot;&quot;</span>
123<span class="sd">        returns the users sasview config dir</span>
124<span class="sd">        &quot;&quot;&quot;</span>
125        <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">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">expanduser</span><span class="p">(</span><span class="s">&quot;~&quot;</span><span class="p">),</span> <span class="s">&quot;.sasview&quot;</span><span class="p">)</span>
126
127    <span class="nd">@staticmethod</span>
128    <span class="k">def</span> <span class="nf">_regenerate_model_dict</span><span class="p">(</span><span class="n">master_category_dict</span><span class="p">):</span>
129        <span class="sd">&quot;&quot;&quot;</span>
130<span class="sd">        regenerates self.by_model_dict which has each model name as the key</span>
131<span class="sd">        and the list of categories belonging to that model</span>
132<span class="sd">        along with the enabled mapping</span>
133<span class="sd">        returns tuplet (by_model_dict, model_enabled_dict)</span>
134<span class="sd">        &quot;&quot;&quot;</span>
135        <span class="n">by_model_dict</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span>
136        <span class="n">model_enabled_dict</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">bool</span><span class="p">)</span>
137       
138        <span class="k">for</span> <span class="n">category</span> <span class="ow">in</span> <span class="n">master_category_dict</span><span class="p">:</span>
139            <span class="k">for</span> <span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">enabled</span><span class="p">)</span> <span class="ow">in</span> <span class="n">master_category_dict</span><span class="p">[</span><span class="n">category</span><span class="p">]:</span>
140                <span class="n">by_model_dict</span><span class="p">[</span><span class="n">model</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">category</span><span class="p">)</span>
141                <span class="n">model_enabled_dict</span><span class="p">[</span><span class="n">model</span><span class="p">]</span> <span class="o">=</span> <span class="n">enabled</span>
142   
143        <span class="k">return</span> <span class="p">(</span><span class="n">by_model_dict</span><span class="p">,</span> <span class="n">model_enabled_dict</span><span class="p">)</span>
144
145
146    <span class="nd">@staticmethod</span>
147    <span class="k">def</span> <span class="nf">_regenerate_master_dict</span><span class="p">(</span><span class="n">by_model_dict</span><span class="p">,</span> <span class="n">model_enabled_dict</span><span class="p">):</span>
148        <span class="sd">&quot;&quot;&quot;</span>
149<span class="sd">        regenerates master_category_dict from by_model_dict </span>
150<span class="sd">        and model_enabled_dict</span>
151<span class="sd">        returns the master category dictionary</span>
152<span class="sd">        &quot;&quot;&quot;</span>
153        <span class="n">master_category_dict</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span>
154        <span class="k">for</span> <span class="n">model</span> <span class="ow">in</span> <span class="n">by_model_dict</span><span class="p">:</span>
155            <span class="k">for</span> <span class="n">category</span> <span class="ow">in</span> <span class="n">by_model_dict</span><span class="p">[</span><span class="n">model</span><span class="p">]:</span>
156                <span class="n">master_category_dict</span><span class="p">[</span><span class="n">category</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>\
157                    <span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">model_enabled_dict</span><span class="p">[</span><span class="n">model</span><span class="p">]))</span>
158       
159        <span class="k">return</span> <span class="n">master_category_dict</span>
160
161    <span class="nd">@staticmethod</span>
162<div class="viewcode-block" id="CategoryInstaller.get_user_file"><a class="viewcode-back" href="../../../dev/api/sas.guiframe.html#sas.guiframe.CategoryInstaller.CategoryInstaller.get_user_file">[docs]</a>    <span class="k">def</span> <span class="nf">get_user_file</span><span class="p">():</span>
163        <span class="sd">&quot;&quot;&quot;</span>
164<span class="sd">        returns the user data file, eg .sasview/serialized_cat.json</span>
165<span class="sd">        &quot;&quot;&quot;</span>
166        <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">CategoryInstaller</span><span class="o">.</span><span class="n">_get_home_dir</span><span class="p">(),</span>
167                            <span class="n">USER_FILE</span><span class="p">)</span>
168</div>
169    <span class="nd">@staticmethod</span>
170<div class="viewcode-block" id="CategoryInstaller.get_default_file"><a class="viewcode-back" href="../../../dev/api/sas.guiframe.html#sas.guiframe.CategoryInstaller.CategoryInstaller.get_default_file">[docs]</a>    <span class="k">def</span> <span class="nf">get_default_file</span><span class="p">():</span>
171        <span class="sd">&quot;&quot;&quot;</span>
172<span class="sd">        returns the path of the default file</span>
173<span class="sd">        e.g. blahblah/default_categories.json</span>
174<span class="sd">        &quot;&quot;&quot;</span>
175        <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>\
176            <span class="n">CategoryInstaller</span><span class="o">.</span><span class="n">_get_default_cat_file_dir</span><span class="p">(),</span> <span class="s">&quot;default_categories.json&quot;</span><span class="p">)</span>
177        </div>
178    <span class="nd">@staticmethod</span>
179<div class="viewcode-block" id="CategoryInstaller.check_install"><a class="viewcode-back" href="../../../dev/api/sas.guiframe.html#sas.guiframe.CategoryInstaller.CategoryInstaller.check_install">[docs]</a>    <span class="k">def</span> <span class="nf">check_install</span><span class="p">(</span><span class="n">homedir</span> <span class="o">=</span> <span class="bp">None</span><span class="p">,</span> <span class="n">model_list</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
180        <span class="sd">&quot;&quot;&quot;</span>
181<span class="sd">        the main method of this class</span>
182<span class="sd">        makes sure serialized_cat.json exists and if not</span>
183<span class="sd">        compile it and install</span>
184<span class="sd">        :param homefile: Override the default home directory</span>
185<span class="sd">        :param model_list: List of model names except customized models</span>
186<span class="sd">        &quot;&quot;&quot;</span>
187        <span class="c">#model_list = []</span>
188        <span class="n">default_file</span> <span class="o">=</span> <span class="n">CategoryInstaller</span><span class="o">.</span><span class="n">get_default_file</span><span class="p">()</span>
189        <span class="n">serialized_file</span> <span class="o">=</span> <span class="bp">None</span>
190        <span class="n">master_category_dict</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span>
191        <span class="k">if</span> <span class="n">homedir</span> <span class="o">==</span> <span class="bp">None</span><span class="p">:</span>
192            <span class="n">serialized_file</span> <span class="o">=</span> <span class="n">CategoryInstaller</span><span class="o">.</span><span class="n">get_user_file</span><span class="p">()</span>
193        <span class="k">else</span><span class="p">:</span>
194            <span class="n">serialized_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">join</span><span class="p">(</span><span class="n">homedir</span><span class="p">,</span> <span class="n">USER_FILE</span><span class="p">)</span>
195        <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">serialized_file</span><span class="p">):</span>
196            <span class="n">cat_file</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">serialized_file</span><span class="p">,</span> <span class="s">&#39;rb&#39;</span><span class="p">)</span>
197        <span class="k">else</span><span class="p">:</span>
198            <span class="n">cat_file</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">default_file</span><span class="p">,</span> <span class="s">&#39;rb&#39;</span><span class="p">)</span>
199        <span class="n">master_category_dict</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">cat_file</span><span class="p">)</span>
200<span class="c">#        master_category_dict = pickle.Unpickler(cat_file).load()</span>
201        <span class="p">(</span><span class="n">by_model_dict</span><span class="p">,</span> <span class="n">model_enabled_dict</span><span class="p">)</span> <span class="o">=</span> \
202                <span class="n">CategoryInstaller</span><span class="o">.</span><span class="n">_regenerate_model_dict</span><span class="p">(</span><span class="n">master_category_dict</span><span class="p">)</span>
203        <span class="n">cat_file</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
204        <span class="n">add_list</span> <span class="o">=</span> <span class="n">model_list</span>
205        <span class="n">del_name</span> <span class="o">=</span> <span class="bp">False</span>
206        <span class="k">for</span> <span class="n">cat</span> <span class="ow">in</span> <span class="n">master_category_dict</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
207            <span class="k">for</span> <span class="n">ind</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">master_category_dict</span><span class="p">[</span><span class="n">cat</span><span class="p">])):</span>
208                <span class="n">model_name</span><span class="p">,</span> <span class="n">enabled</span> <span class="o">=</span> <span class="n">master_category_dict</span><span class="p">[</span><span class="n">cat</span><span class="p">][</span><span class="n">ind</span><span class="p">]</span>
209                <span class="k">if</span> <span class="n">model_name</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">model_list</span><span class="p">:</span>
210                    <span class="n">del_name</span> <span class="o">=</span> <span class="bp">True</span> 
211                    <span class="k">try</span><span class="p">:</span>
212                        <span class="n">by_model_dict</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">model_name</span><span class="p">)</span>
213                        <span class="n">model_enabled_dict</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">model_name</span><span class="p">)</span>
214                    <span class="k">except</span><span class="p">:</span>
215                        <span class="k">pass</span>
216                <span class="k">else</span><span class="p">:</span>
217                    <span class="n">add_list</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">model_name</span><span class="p">)</span>
218        <span class="k">if</span> <span class="n">del_name</span> <span class="ow">or</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">add_list</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">):</span>
219            <span class="k">for</span> <span class="n">model</span> <span class="ow">in</span> <span class="n">add_list</span><span class="p">:</span>
220                <span class="n">model_enabled_dict</span><span class="p">[</span><span class="n">model</span><span class="p">]</span><span class="o">=</span> <span class="bp">True</span>
221                <span class="n">by_model_dict</span><span class="p">[</span><span class="n">model</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39;Uncategorized&#39;</span><span class="p">)</span>
222   
223            <span class="n">master_category_dict</span> <span class="o">=</span> \
224                <span class="n">CategoryInstaller</span><span class="o">.</span><span class="n">_regenerate_master_dict</span><span class="p">(</span><span class="n">by_model_dict</span><span class="p">,</span>
225                                                          <span class="n">model_enabled_dict</span><span class="p">)</span>
226           
227            <span class="n">json</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span> <span class="n">master_category_dict</span><span class="p">,</span>
228                         <span class="nb">open</span><span class="p">(</span><span class="n">serialized_file</span><span class="p">,</span> <span class="s">&#39;wb&#39;</span><span class="p">)</span> <span class="p">)</span>
229           
230            <span class="k">try</span><span class="p">:</span>
231                <span class="c">#It happens only in source environment</span>
232                <span class="n">shutil</span><span class="o">.</span><span class="n">copyfile</span><span class="p">(</span><span class="n">serialized_file</span><span class="p">,</span> <span class="n">default_file</span><span class="p">)</span>
233            <span class="k">except</span><span class="p">:</span>
234                <span class="k">pass</span>
235        </div></div>
236</pre></div>
237
238          </div>
239        </div>
240      </div>
241      <div class="sphinxsidebar">
242        <div class="sphinxsidebarwrapper">
243<div id="searchbox" style="display: none">
244  <h3>Quick search</h3>
245    <form class="search" action="../../../search.html" method="get">
246      <input type="text" name="q" />
247      <input type="submit" value="Go" />
248      <input type="hidden" name="check_keywords" value="yes" />
249      <input type="hidden" name="area" value="default" />
250    </form>
251    <p class="searchtip" style="font-size: 90%">
252    Enter search terms or a module, class or function name.
253    </p>
254</div>
255<script type="text/javascript">$('#searchbox').show(0);</script>
256        </div>
257      </div>
258      <div class="clearer"></div>
259    </div>
260    <div class="related">
261      <h3>Navigation</h3>
262      <ul>
263        <li class="right" style="margin-right: 10px">
264          <a href="../../../genindex.html" title="General Index"
265             >index</a></li>
266        <li class="right" >
267          <a href="../../../py-modindex.html" title="Python Module Index"
268             >modules</a> |</li>
269        <li><a href="../../../index.html">SasView 3.0.0 documentation</a> &raquo;</li>
270          <li><a href="../../index.html" >Module code</a> &raquo;</li>
271          <li><a href="../guiframe.html" >sas.guiframe</a> &raquo;</li> 
272      </ul>
273    </div>
274    <div class="footer">
275        &copy; Copyright 2013, The SasView Project.
276      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
277    </div>
278  </body>
279</html>
Note: See TracBrowser for help on using the repository browser.