ciocore 9.1.0rc2__py2.py3-none-any.whl → 9.1.1b1__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of ciocore might be problematic. Click here for more details.
- ciocore/VERSION +1 -1
- ciocore/cli.py +113 -26
- ciocore/docsite/apidoc/api_client/index.html +33 -33
- ciocore/docsite/apidoc/config/index.html +11 -11
- ciocore/docsite/apidoc/data/index.html +10 -10
- ciocore/docsite/apidoc/hardware_set/index.html +32 -32
- ciocore/docsite/apidoc/package_environment/index.html +13 -13
- ciocore/docsite/apidoc/package_tree/index.html +28 -28
- ciocore/docsite/how-to-guides/index.html +2 -2
- ciocore/docsite/sitemap.xml.gz +0 -0
- ciocore/downloader/base_downloader.py +71 -33
- {ciocore-9.1.0rc2.dist-info → ciocore-9.1.1b1.dist-info}/METADATA +71 -7
- {ciocore-9.1.0rc2.dist-info → ciocore-9.1.1b1.dist-info}/RECORD +18 -18
- tests/test_base_downloader.py +189 -13
- tests/test_config.py +15 -4
- {ciocore-9.1.0rc2.dist-info → ciocore-9.1.1b1.dist-info}/WHEEL +0 -0
- {ciocore-9.1.0rc2.dist-info → ciocore-9.1.1b1.dist-info}/entry_points.txt +0 -0
- {ciocore-9.1.0rc2.dist-info → ciocore-9.1.1b1.dist-info}/top_level.txt +0 -0
|
@@ -867,10 +867,10 @@ PackageEnvironment </code>
|
|
|
867
867
|
|
|
868
868
|
<details class="quote">
|
|
869
869
|
<summary>Source code in <code>ciocore/package_environment.py</code></summary>
|
|
870
|
-
<div class="highlight"><pre><span></span><code><span class="k">class</span>
|
|
870
|
+
<div class="highlight"><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">PackageEnvironment</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
|
871
871
|
|
|
872
872
|
|
|
873
|
-
<span class="k">def</span>
|
|
873
|
+
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">env_list</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">platform</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
874
874
|
<span class="w"> </span><span class="sd">"""</span>
|
|
875
875
|
<span class="sd"> Encapsulate a list of environment variables.</span>
|
|
876
876
|
|
|
@@ -888,7 +888,7 @@ PackageEnvironment </code>
|
|
|
888
888
|
<span class="bp">self</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">env_list</span><span class="p">,</span> <span class="n">platform</span><span class="p">)</span>
|
|
889
889
|
|
|
890
890
|
|
|
891
|
-
<span class="k">def</span>
|
|
891
|
+
<span class="k">def</span><span class="w"> </span><span class="nf">extend</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">env_list</span><span class="p">,</span> <span class="n">platform</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
892
892
|
<span class="w"> </span><span class="sd">"""</span>
|
|
893
893
|
<span class="sd"> Extend the Package environment with the given variable specifications.</span>
|
|
894
894
|
|
|
@@ -971,7 +971,7 @@ PackageEnvironment </code>
|
|
|
971
971
|
<span class="bp">self</span><span class="o">.</span><span class="n">_set</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
|
|
972
972
|
|
|
973
973
|
|
|
974
|
-
<span class="k">def</span>
|
|
974
|
+
<span class="k">def</span><span class="w"> </span><span class="nf">_set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
|
975
975
|
<span class="w"> </span><span class="sd">"""Set the value of an exclusive variable.</span>
|
|
976
976
|
|
|
977
977
|
<span class="sd"> Can be overwritten by subsequent adds.</span>
|
|
@@ -984,7 +984,7 @@ PackageEnvironment </code>
|
|
|
984
984
|
<span class="p">)</span>
|
|
985
985
|
<span class="bp">self</span><span class="o">.</span><span class="n">_env</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span>
|
|
986
986
|
|
|
987
|
-
<span class="k">def</span>
|
|
987
|
+
<span class="k">def</span><span class="w"> </span><span class="nf">_append</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
|
988
988
|
<span class="w"> </span><span class="sd">"""Set the value of an append variable.</span>
|
|
989
989
|
|
|
990
990
|
<span class="sd"> Can be appended to with subsequent adds.</span>
|
|
@@ -1000,7 +1000,7 @@ PackageEnvironment </code>
|
|
|
1000
1000
|
<span class="bp">self</span><span class="o">.</span><span class="n">_env</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
|
|
1001
1001
|
<span class="bp">self</span><span class="o">.</span><span class="n">_env</span><span class="p">[</span><span class="n">name</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
1002
1002
|
|
|
1003
|
-
<span class="k">def</span>
|
|
1003
|
+
<span class="k">def</span><span class="w"> </span><span class="nf">_prepend</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
|
1004
1004
|
<span class="w"> </span><span class="sd">"""Set the value of an append/prepend variable.</span>
|
|
1005
1005
|
|
|
1006
1006
|
<span class="sd"> Can be appended to with subsequent adds.</span>
|
|
@@ -1016,7 +1016,7 @@ PackageEnvironment </code>
|
|
|
1016
1016
|
<span class="bp">self</span><span class="o">.</span><span class="n">_env</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="p">[]</span>
|
|
1017
1017
|
<span class="bp">self</span><span class="o">.</span><span class="n">_env</span><span class="p">[</span><span class="n">name</span><span class="p">]</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
|
|
1018
1018
|
|
|
1019
|
-
<span class="k">def</span>
|
|
1019
|
+
<span class="k">def</span><span class="w"> </span><span class="fm">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
1020
1020
|
<span class="w"> </span><span class="sd">"""Cast the object as a dict."""</span>
|
|
1021
1021
|
<span class="n">sep</span> <span class="o">=</span> <span class="s2">";"</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">platform</span> <span class="o">==</span> <span class="s2">"windows"</span> <span class="k">else</span> <span class="s2">":"</span>
|
|
1022
1022
|
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_env</span><span class="p">:</span>
|
|
@@ -1026,7 +1026,7 @@ PackageEnvironment </code>
|
|
|
1026
1026
|
<span class="k">else</span><span class="p">:</span>
|
|
1027
1027
|
<span class="k">yield</span> <span class="n">key</span><span class="p">,</span> <span class="n">var</span>
|
|
1028
1028
|
|
|
1029
|
-
<span class="k">def</span>
|
|
1029
|
+
<span class="k">def</span><span class="w"> </span><span class="fm">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">):</span>
|
|
1030
1030
|
<span class="w"> </span><span class="sd">"""Allow access by key."""</span>
|
|
1031
1031
|
<span class="n">sep</span> <span class="o">=</span> <span class="s2">";"</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">platform</span> <span class="o">==</span> <span class="s2">"windows"</span> <span class="k">else</span> <span class="s2">":"</span>
|
|
1032
1032
|
<span class="n">var</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_env</span><span class="o">.</span><span class="fm">__getitem__</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
|
|
@@ -1094,7 +1094,7 @@ PackageEnvironment </code>
|
|
|
1094
1094
|
|
|
1095
1095
|
<details class="quote">
|
|
1096
1096
|
<summary>Source code in <code>ciocore/package_environment.py</code></summary>
|
|
1097
|
-
<div class="highlight"><pre><span></span><code><span class="k">def</span>
|
|
1097
|
+
<div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">env_list</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">platform</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
1098
1098
|
<span class="w"> </span><span class="sd">"""</span>
|
|
1099
1099
|
<span class="sd"> Encapsulate a list of environment variables.</span>
|
|
1100
1100
|
|
|
@@ -1182,7 +1182,7 @@ PackageEnvironment </code>
|
|
|
1182
1182
|
</tbody>
|
|
1183
1183
|
</table>
|
|
1184
1184
|
<p><strong>Examples:</strong></p>
|
|
1185
|
-
<div class="highlight"><pre><span></span><code><span class="o">>>></span> <span class="kn">from</span>
|
|
1185
|
+
<div class="highlight"><pre><span></span><code><span class="o">>>></span> <span class="kn">from</span><span class="w"> </span><span class="nn">ciocore</span><span class="w"> </span><span class="kn">import</span> <span class="n">api_client</span><span class="p">,</span> <span class="n">package_tree</span><span class="p">,</span> <span class="n">package_environment</span>
|
|
1186
1186
|
<span class="o">>>></span> <span class="n">packages</span> <span class="o">=</span> <span class="n">api_client</span><span class="o">.</span><span class="n">request_software_packages</span><span class="p">()</span>
|
|
1187
1187
|
<span class="o">>>></span> <span class="n">pt</span> <span class="o">=</span> <span class="n">package_tree</span><span class="o">.</span><span class="n">PackageTree</span><span class="p">(</span><span class="n">packages</span><span class="p">,</span> <span class="n">product</span><span class="o">=</span><span class="s2">"cinema4d"</span><span class="p">)</span>
|
|
1188
1188
|
<span class="o">>>></span> <span class="n">one_dcc_name</span> <span class="o">=</span> <span class="n">pt</span><span class="o">.</span><span class="n">supported_host_names</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span>
|
|
@@ -1215,7 +1215,7 @@ PackageEnvironment </code>
|
|
|
1215
1215
|
|
|
1216
1216
|
<details class="quote">
|
|
1217
1217
|
<summary>Source code in <code>ciocore/package_environment.py</code></summary>
|
|
1218
|
-
<div class="highlight"><pre><span></span><code><span class="k">def</span>
|
|
1218
|
+
<div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">extend</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">env_list</span><span class="p">,</span> <span class="n">platform</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
1219
1219
|
<span class="w"> </span><span class="sd">"""</span>
|
|
1220
1220
|
<span class="sd"> Extend the Package environment with the given variable specifications.</span>
|
|
1221
1221
|
|
|
@@ -1323,7 +1323,7 @@ PackageEnvironment </code>
|
|
|
1323
1323
|
|
|
1324
1324
|
<details class="quote">
|
|
1325
1325
|
<summary>Source code in <code>ciocore/package_environment.py</code></summary>
|
|
1326
|
-
<div class="highlight"><pre><span></span><code><span class="k">def</span>
|
|
1326
|
+
<div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="fm">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
1327
1327
|
<span class="w"> </span><span class="sd">"""Cast the object as a dict."""</span>
|
|
1328
1328
|
<span class="n">sep</span> <span class="o">=</span> <span class="s2">";"</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">platform</span> <span class="o">==</span> <span class="s2">"windows"</span> <span class="k">else</span> <span class="s2">":"</span>
|
|
1329
1329
|
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_env</span><span class="p">:</span>
|
|
@@ -1359,7 +1359,7 @@ PackageEnvironment </code>
|
|
|
1359
1359
|
|
|
1360
1360
|
<details class="quote">
|
|
1361
1361
|
<summary>Source code in <code>ciocore/package_environment.py</code></summary>
|
|
1362
|
-
<div class="highlight"><pre><span></span><code><span class="k">def</span>
|
|
1362
|
+
<div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="fm">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">):</span>
|
|
1363
1363
|
<span class="w"> </span><span class="sd">"""Allow access by key."""</span>
|
|
1364
1364
|
<span class="n">sep</span> <span class="o">=</span> <span class="s2">";"</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">platform</span> <span class="o">==</span> <span class="s2">"windows"</span> <span class="k">else</span> <span class="s2">":"</span>
|
|
1365
1365
|
<span class="n">var</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_env</span><span class="o">.</span><span class="fm">__getitem__</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
|
|
@@ -964,8 +964,8 @@ PackageTree </code>
|
|
|
964
964
|
|
|
965
965
|
<details class="quote">
|
|
966
966
|
<summary>Source code in <code>ciocore/package_tree.py</code></summary>
|
|
967
|
-
<div class="highlight"><pre><span></span><code><span class="k">class</span>
|
|
968
|
-
<span class="k">def</span>
|
|
967
|
+
<div class="highlight"><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">PackageTree</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
|
968
|
+
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">packages</span><span class="p">,</span> <span class="o">*</span><span class="n">host_products</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
|
969
969
|
<span class="w"> </span><span class="sd">"""Build the tree with a list of packages.</span>
|
|
970
970
|
|
|
971
971
|
<span class="sd"> Args:</span>
|
|
@@ -1019,7 +1019,7 @@ PackageTree </code>
|
|
|
1019
1019
|
|
|
1020
1020
|
<span class="bp">self</span><span class="o">.</span><span class="n">_tree</span> <span class="o">=</span> <span class="n">_build_tree</span><span class="p">(</span><span class="n">packages</span><span class="p">,</span> <span class="p">{</span><span class="s2">"children"</span><span class="p">:</span> <span class="p">[],</span> <span class="s2">"plugins"</span><span class="p">:</span> <span class="n">root_ids</span><span class="p">})</span>
|
|
1021
1021
|
|
|
1022
|
-
<span class="k">def</span>
|
|
1022
|
+
<span class="k">def</span><span class="w"> </span><span class="nf">supported_host_names</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
1023
1023
|
<span class="w"> </span><span class="sd">"""</span>
|
|
1024
1024
|
<span class="sd"> All host names from the software tree.</span>
|
|
1025
1025
|
|
|
@@ -1048,7 +1048,7 @@ PackageTree </code>
|
|
|
1048
1048
|
<span class="n">paths</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">to_name</span><span class="p">(</span><span class="n">pkg</span><span class="p">))</span>
|
|
1049
1049
|
<span class="k">return</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">paths</span><span class="p">)</span>
|
|
1050
1050
|
|
|
1051
|
-
<span class="k">def</span>
|
|
1051
|
+
<span class="k">def</span><span class="w"> </span><span class="nf">supported_plugins</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">host</span><span class="p">):</span>
|
|
1052
1052
|
<span class="w"> </span><span class="sd">"""</span>
|
|
1053
1053
|
<span class="sd"> Find the plugins that are children of the given DCC host.</span>
|
|
1054
1054
|
|
|
@@ -1108,7 +1108,7 @@ PackageTree </code>
|
|
|
1108
1108
|
|
|
1109
1109
|
<span class="k">return</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">plugins</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">k</span><span class="p">:</span> <span class="n">k</span><span class="p">[</span><span class="s2">"plugin"</span><span class="p">])</span>
|
|
1110
1110
|
|
|
1111
|
-
<span class="k">def</span>
|
|
1111
|
+
<span class="k">def</span><span class="w"> </span><span class="nf">find_by_name</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">limit</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
1112
1112
|
<span class="w"> </span><span class="sd">"""</span>
|
|
1113
1113
|
<span class="sd"> Search the tree for a product with the given name.</span>
|
|
1114
1114
|
|
|
@@ -1140,7 +1140,7 @@ PackageTree </code>
|
|
|
1140
1140
|
|
|
1141
1141
|
<span class="k">return</span> <span class="n">_find_by_name</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_tree</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">limit</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
|
|
1142
1142
|
|
|
1143
|
-
<span class="k">def</span>
|
|
1143
|
+
<span class="k">def</span><span class="w"> </span><span class="nf">find_by_path</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">):</span>
|
|
1144
1144
|
<span class="w"> </span><span class="sd">"""</span>
|
|
1145
1145
|
<span class="sd"> Find the package uniquely described by the given path.</span>
|
|
1146
1146
|
|
|
@@ -1172,7 +1172,7 @@ PackageTree </code>
|
|
|
1172
1172
|
<span class="k">return</span> <span class="n">_find_by_path</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_tree</span><span class="p">,</span> <span class="n">path</span><span class="p">)</span>
|
|
1173
1173
|
|
|
1174
1174
|
|
|
1175
|
-
<span class="k">def</span>
|
|
1175
|
+
<span class="k">def</span><span class="w"> </span><span class="nf">to_path_list</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
1176
1176
|
<span class="w"> </span><span class="sd">"""</span>
|
|
1177
1177
|
<span class="sd"> Get paths to all nodes.</span>
|
|
1178
1178
|
|
|
@@ -1209,7 +1209,7 @@ PackageTree </code>
|
|
|
1209
1209
|
<span class="k">return</span> <span class="n">_to_path_list</span><span class="p">(</span><span class="n">subtree</span><span class="p">)</span>
|
|
1210
1210
|
<span class="k">return</span> <span class="n">_to_path_list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_tree</span><span class="p">)</span>
|
|
1211
1211
|
|
|
1212
|
-
<span class="k">def</span>
|
|
1212
|
+
<span class="k">def</span><span class="w"> </span><span class="nf">platforms</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
1213
1213
|
<span class="w"> </span><span class="sd">"""</span>
|
|
1214
1214
|
<span class="sd"> Get the platforms represented by packages in the tree.</span>
|
|
1215
1215
|
|
|
@@ -1220,7 +1220,7 @@ PackageTree </code>
|
|
|
1220
1220
|
<span class="c1"># No need to recurse. Plugins are assumed to be compatible with the host.</span>
|
|
1221
1221
|
<span class="k">return</span> <span class="nb">set</span><span class="p">([</span><span class="n">host</span><span class="p">[</span><span class="s2">"platform"</span><span class="p">]</span> <span class="k">for</span> <span class="n">host</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tree</span><span class="p">[</span><span class="s2">"children"</span><span class="p">]])</span>
|
|
1222
1222
|
|
|
1223
|
-
<span class="k">def</span>
|
|
1223
|
+
<span class="k">def</span><span class="w"> </span><span class="nf">json</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
1224
1224
|
<span class="w"> </span><span class="sd">"""</span>
|
|
1225
1225
|
<span class="sd"> The whole tree of softwware as json.</span>
|
|
1226
1226
|
|
|
@@ -1230,10 +1230,10 @@ PackageTree </code>
|
|
|
1230
1230
|
<span class="sd"> """</span>
|
|
1231
1231
|
<span class="k">return</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_tree</span><span class="p">)</span>
|
|
1232
1232
|
|
|
1233
|
-
<span class="k">def</span>
|
|
1233
|
+
<span class="k">def</span><span class="w"> </span><span class="fm">__bool__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
1234
1234
|
<span class="k">return</span> <span class="kc">True</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_tree</span><span class="p">[</span><span class="s2">"children"</span><span class="p">]</span> <span class="k">else</span> <span class="kc">False</span>
|
|
1235
1235
|
|
|
1236
|
-
<span class="k">def</span>
|
|
1236
|
+
<span class="k">def</span><span class="w"> </span><span class="nf">as_dict</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
1237
1237
|
<span class="w"> </span><span class="sd">"""</span>
|
|
1238
1238
|
<span class="sd"> Returns:</span>
|
|
1239
1239
|
<span class="sd"> dict: The underlying software dictionary.</span>
|
|
@@ -1339,7 +1339,7 @@ PackageTree </code>
|
|
|
1339
1339
|
</tbody>
|
|
1340
1340
|
</table>
|
|
1341
1341
|
<p><strong>Examples:</strong></p>
|
|
1342
|
-
<div class="highlight"><pre><span></span><code><span class="o">>>></span> <span class="kn">from</span>
|
|
1342
|
+
<div class="highlight"><pre><span></span><code><span class="o">>>></span> <span class="kn">from</span><span class="w"> </span><span class="nn">ciocore</span><span class="w"> </span><span class="kn">import</span> <span class="n">api_client</span><span class="p">,</span> <span class="n">package_tree</span>
|
|
1343
1343
|
<span class="c1"># Request packages as a flat list from Conductor.</span>
|
|
1344
1344
|
<span class="o">>>></span> <span class="n">packages</span> <span class="o">=</span> <span class="n">api_client</span><span class="o">.</span><span class="n">request_software_packages</span><span class="p">()</span>
|
|
1345
1345
|
<span class="c1"># Build tree of dependencies from packages list</span>
|
|
@@ -1354,7 +1354,7 @@ PackageTree </code>
|
|
|
1354
1354
|
|
|
1355
1355
|
<details class="quote">
|
|
1356
1356
|
<summary>Source code in <code>ciocore/package_tree.py</code></summary>
|
|
1357
|
-
<div class="highlight"><pre><span></span><code><span class="k">def</span>
|
|
1357
|
+
<div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">packages</span><span class="p">,</span> <span class="o">*</span><span class="n">host_products</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
|
1358
1358
|
<span class="w"> </span><span class="sd">"""Build the tree with a list of packages.</span>
|
|
1359
1359
|
|
|
1360
1360
|
<span class="sd"> Args:</span>
|
|
@@ -1448,7 +1448,7 @@ and get package IDs.</p>
|
|
|
1448
1448
|
</tbody>
|
|
1449
1449
|
</table>
|
|
1450
1450
|
<p><strong>Examples:</strong></p>
|
|
1451
|
-
<div class="highlight"><pre><span></span><code><span class="o">>>></span> <span class="kn">from</span>
|
|
1451
|
+
<div class="highlight"><pre><span></span><code><span class="o">>>></span> <span class="kn">from</span><span class="w"> </span><span class="nn">ciocore</span><span class="w"> </span><span class="kn">import</span> <span class="n">api_client</span><span class="p">,</span> <span class="n">package_tree</span>
|
|
1452
1452
|
<span class="o">>>></span> <span class="n">packages</span> <span class="o">=</span> <span class="n">api_client</span><span class="o">.</span><span class="n">request_software_packages</span><span class="p">()</span>
|
|
1453
1453
|
<span class="o">>>></span> <span class="n">pt</span> <span class="o">=</span> <span class="n">package_tree</span><span class="o">.</span><span class="n">PackageTree</span><span class="p">(</span><span class="n">packages</span><span class="p">,</span> <span class="n">product</span><span class="o">=</span><span class="s2">"cinema4d"</span><span class="p">)</span>
|
|
1454
1454
|
<span class="o">>>></span> <span class="n">pt</span><span class="o">.</span><span class="n">supported_host_names</span><span class="p">()</span>
|
|
@@ -1462,7 +1462,7 @@ and get package IDs.</p>
|
|
|
1462
1462
|
|
|
1463
1463
|
<details class="quote">
|
|
1464
1464
|
<summary>Source code in <code>ciocore/package_tree.py</code></summary>
|
|
1465
|
-
<div class="highlight"><pre><span></span><code><span class="k">def</span>
|
|
1465
|
+
<div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">supported_host_names</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
1466
1466
|
<span class="w"> </span><span class="sd">"""</span>
|
|
1467
1467
|
<span class="sd"> All host names from the software tree.</span>
|
|
1468
1468
|
|
|
@@ -1548,7 +1548,7 @@ and get package IDs.</p>
|
|
|
1548
1548
|
</tbody>
|
|
1549
1549
|
</table>
|
|
1550
1550
|
<p><strong>Examples:</strong></p>
|
|
1551
|
-
<div class="highlight"><pre><span></span><code><span class="o">>>></span> <span class="kn">from</span>
|
|
1551
|
+
<div class="highlight"><pre><span></span><code><span class="o">>>></span> <span class="kn">from</span><span class="w"> </span><span class="nn">ciocore</span><span class="w"> </span><span class="kn">import</span> <span class="n">api_client</span><span class="p">,</span> <span class="n">package_tree</span>
|
|
1552
1552
|
<span class="o">>>></span> <span class="n">packages</span> <span class="o">=</span> <span class="n">api_client</span><span class="o">.</span><span class="n">request_software_packages</span><span class="p">()</span>
|
|
1553
1553
|
<span class="o">>>></span> <span class="n">pt</span> <span class="o">=</span> <span class="n">package_tree</span><span class="o">.</span><span class="n">PackageTree</span><span class="p">(</span><span class="n">packages</span><span class="p">,</span> <span class="n">product</span><span class="o">=</span><span class="s2">"cinema4d"</span><span class="p">)</span>
|
|
1554
1554
|
<span class="o">>>></span> <span class="n">name</span> <span class="o">=</span> <span class="n">pt</span><span class="o">.</span><span class="n">supported_host_names</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span>
|
|
@@ -1575,7 +1575,7 @@ and get package IDs.</p>
|
|
|
1575
1575
|
|
|
1576
1576
|
<details class="quote">
|
|
1577
1577
|
<summary>Source code in <code>ciocore/package_tree.py</code></summary>
|
|
1578
|
-
<div class="highlight"><pre><span></span><code><span class="k">def</span>
|
|
1578
|
+
<div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">supported_plugins</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">host</span><span class="p">):</span>
|
|
1579
1579
|
<span class="w"> </span><span class="sd">"""</span>
|
|
1580
1580
|
<span class="sd"> Find the plugins that are children of the given DCC host.</span>
|
|
1581
1581
|
|
|
@@ -1708,7 +1708,7 @@ and get package IDs.</p>
|
|
|
1708
1708
|
</tbody>
|
|
1709
1709
|
</table>
|
|
1710
1710
|
<p><strong>Examples:</strong></p>
|
|
1711
|
-
<div class="highlight"><pre><span></span><code><span class="o">>>></span> <span class="kn">from</span>
|
|
1711
|
+
<div class="highlight"><pre><span></span><code><span class="o">>>></span> <span class="kn">from</span><span class="w"> </span><span class="nn">ciocore</span><span class="w"> </span><span class="kn">import</span> <span class="n">api_client</span><span class="p">,</span> <span class="n">package_tree</span>
|
|
1712
1712
|
<span class="o">>>></span> <span class="n">packages</span> <span class="o">=</span> <span class="n">api_client</span><span class="o">.</span><span class="n">request_software_packages</span><span class="p">()</span>
|
|
1713
1713
|
<span class="o">>>></span> <span class="n">pt</span> <span class="o">=</span> <span class="n">package_tree</span><span class="o">.</span><span class="n">PackageTree</span><span class="p">(</span><span class="n">packages</span><span class="p">,</span> <span class="n">product</span><span class="o">=</span><span class="s2">"cinema4d"</span><span class="p">)</span>
|
|
1714
1714
|
<span class="o">>>></span> <span class="n">pt</span><span class="o">.</span><span class="n">find_by_name</span><span class="p">(</span><span class="s2">"redshift-cinema4d 3.0.64 linux"</span><span class="p">)</span>
|
|
@@ -1726,7 +1726,7 @@ and get package IDs.</p>
|
|
|
1726
1726
|
|
|
1727
1727
|
<details class="quote">
|
|
1728
1728
|
<summary>Source code in <code>ciocore/package_tree.py</code></summary>
|
|
1729
|
-
<div class="highlight"><pre><span></span><code><span class="k">def</span>
|
|
1729
|
+
<div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">find_by_name</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">limit</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
1730
1730
|
<span class="w"> </span><span class="sd">"""</span>
|
|
1731
1731
|
<span class="sd"> Search the tree for a product with the given name.</span>
|
|
1732
1732
|
|
|
@@ -1815,7 +1815,7 @@ and get package IDs.</p>
|
|
|
1815
1815
|
</tbody>
|
|
1816
1816
|
</table>
|
|
1817
1817
|
<p><strong>Examples:</strong></p>
|
|
1818
|
-
<div class="highlight"><pre><span></span><code><span class="o">>>></span> <span class="kn">from</span>
|
|
1818
|
+
<div class="highlight"><pre><span></span><code><span class="o">>>></span> <span class="kn">from</span><span class="w"> </span><span class="nn">ciocore</span><span class="w"> </span><span class="kn">import</span> <span class="n">api_client</span><span class="p">,</span> <span class="n">package_tree</span><span class="p">,</span> <span class="n">package_environment</span>
|
|
1819
1819
|
<span class="o">>>></span> <span class="n">packages</span> <span class="o">=</span> <span class="n">api_client</span><span class="o">.</span><span class="n">request_software_packages</span><span class="p">()</span>
|
|
1820
1820
|
<span class="o">>>></span> <span class="n">pt</span> <span class="o">=</span> <span class="n">package_tree</span><span class="o">.</span><span class="n">PackageTree</span><span class="p">(</span><span class="n">packages</span><span class="p">,</span> <span class="n">product</span><span class="o">=</span><span class="s2">"cinema4d"</span><span class="p">)</span>
|
|
1821
1821
|
<span class="o">>>></span> <span class="n">pt</span><span class="o">.</span><span class="n">find_by_path</span><span class="p">(</span><span class="s2">"cinema4d 24.111 linux/redshift-cinema4d 3.0.62 linux"</span><span class="p">)</span>
|
|
@@ -1834,7 +1834,7 @@ and get package IDs.</p>
|
|
|
1834
1834
|
|
|
1835
1835
|
<details class="quote">
|
|
1836
1836
|
<summary>Source code in <code>ciocore/package_tree.py</code></summary>
|
|
1837
|
-
<div class="highlight"><pre><span></span><code><span class="k">def</span>
|
|
1837
|
+
<div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">find_by_path</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">path</span><span class="p">):</span>
|
|
1838
1838
|
<span class="w"> </span><span class="sd">"""</span>
|
|
1839
1839
|
<span class="sd"> Find the package uniquely described by the given path.</span>
|
|
1840
1840
|
|
|
@@ -1924,7 +1924,7 @@ appropriate UI.</p>
|
|
|
1924
1924
|
</tbody>
|
|
1925
1925
|
</table>
|
|
1926
1926
|
<p><strong>Examples:</strong></p>
|
|
1927
|
-
<div class="highlight"><pre><span></span><code><span class="o">>>></span> <span class="kn">from</span>
|
|
1927
|
+
<div class="highlight"><pre><span></span><code><span class="o">>>></span> <span class="kn">from</span><span class="w"> </span><span class="nn">ciocore</span><span class="w"> </span><span class="kn">import</span> <span class="n">api_client</span><span class="p">,</span> <span class="n">package_tree</span>
|
|
1928
1928
|
<span class="o">>>></span> <span class="n">packages</span> <span class="o">=</span> <span class="n">api_client</span><span class="o">.</span><span class="n">request_software_packages</span><span class="p">()</span>
|
|
1929
1929
|
<span class="o">>>></span> <span class="n">pt</span> <span class="o">=</span> <span class="n">package_tree</span><span class="o">.</span><span class="n">PackageTree</span><span class="p">(</span><span class="n">packages</span><span class="p">,</span> <span class="n">product</span><span class="o">=</span><span class="s2">"cinema4d"</span><span class="p">)</span>
|
|
1930
1930
|
<span class="o">>>></span> <span class="n">pt</span><span class="o">.</span><span class="n">to_path_list</span><span class="p">()</span>
|
|
@@ -1944,7 +1944,7 @@ appropriate UI.</p>
|
|
|
1944
1944
|
|
|
1945
1945
|
<details class="quote">
|
|
1946
1946
|
<summary>Source code in <code>ciocore/package_tree.py</code></summary>
|
|
1947
|
-
<div class="highlight"><pre><span></span><code><span class="k">def</span>
|
|
1947
|
+
<div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">to_path_list</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
1948
1948
|
<span class="w"> </span><span class="sd">"""</span>
|
|
1949
1949
|
<span class="sd"> Get paths to all nodes.</span>
|
|
1950
1950
|
|
|
@@ -2019,7 +2019,7 @@ appropriate UI.</p>
|
|
|
2019
2019
|
</table>
|
|
2020
2020
|
<details class="quote">
|
|
2021
2021
|
<summary>Source code in <code>ciocore/package_tree.py</code></summary>
|
|
2022
|
-
<div class="highlight"><pre><span></span><code><span class="k">def</span>
|
|
2022
|
+
<div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">platforms</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
2023
2023
|
<span class="w"> </span><span class="sd">"""</span>
|
|
2024
2024
|
<span class="sd"> Get the platforms represented by packages in the tree.</span>
|
|
2025
2025
|
|
|
@@ -2068,7 +2068,7 @@ appropriate UI.</p>
|
|
|
2068
2068
|
</table>
|
|
2069
2069
|
<details class="quote">
|
|
2070
2070
|
<summary>Source code in <code>ciocore/package_tree.py</code></summary>
|
|
2071
|
-
<div class="highlight"><pre><span></span><code><span class="k">def</span>
|
|
2071
|
+
<div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">json</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
2072
2072
|
<span class="w"> </span><span class="sd">"""</span>
|
|
2073
2073
|
<span class="sd"> The whole tree of softwware as json.</span>
|
|
2074
2074
|
|
|
@@ -2116,7 +2116,7 @@ appropriate UI.</p>
|
|
|
2116
2116
|
</table>
|
|
2117
2117
|
<details class="quote">
|
|
2118
2118
|
<summary>Source code in <code>ciocore/package_tree.py</code></summary>
|
|
2119
|
-
<div class="highlight"><pre><span></span><code><span class="k">def</span>
|
|
2119
|
+
<div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">as_dict</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
2120
2120
|
<span class="w"> </span><span class="sd">"""</span>
|
|
2121
2121
|
<span class="sd"> Returns:</span>
|
|
2122
2122
|
<span class="sd"> dict: The underlying software dictionary.</span>
|
|
@@ -2193,7 +2193,7 @@ necessarily possible to go the other way and extract version fields from the nam
|
|
|
2193
2193
|
</tbody>
|
|
2194
2194
|
</table>
|
|
2195
2195
|
<p><strong>Examples:</strong></p>
|
|
2196
|
-
<div class="highlight"><pre><span></span><code><span class="o">>>></span> <span class="kn">from</span>
|
|
2196
|
+
<div class="highlight"><pre><span></span><code><span class="o">>>></span> <span class="kn">from</span><span class="w"> </span><span class="nn">ciocore</span><span class="w"> </span><span class="kn">import</span> <span class="n">api_client</span><span class="p">,</span> <span class="n">package_tree</span>
|
|
2197
2197
|
<span class="o">>>></span> <span class="n">packages</span> <span class="o">=</span> <span class="n">api_client</span><span class="o">.</span><span class="n">request_software_packages</span><span class="p">()</span>
|
|
2198
2198
|
<span class="o">>>></span> <span class="n">package_tree</span><span class="o">.</span><span class="n">to_name</span><span class="p">(</span><span class="n">packages</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
|
2199
2199
|
<span class="n">redshift</span><span class="o">-</span><span class="n">maya</span> <span class="mf">3.0.64</span> <span class="n">linux</span>
|
|
@@ -2201,7 +2201,7 @@ necessarily possible to go the other way and extract version fields from the nam
|
|
|
2201
2201
|
|
|
2202
2202
|
<details class="quote">
|
|
2203
2203
|
<summary>Source code in <code>ciocore/package_tree.py</code></summary>
|
|
2204
|
-
<div class="highlight"><pre><span></span><code><span class="k">def</span>
|
|
2204
|
+
<div class="highlight"><pre><span></span><code><span class="k">def</span><span class="w"> </span><span class="nf">to_name</span><span class="p">(</span><span class="n">pkg</span><span class="p">):</span>
|
|
2205
2205
|
<span class="w"> </span><span class="sd">"""</span>
|
|
2206
2206
|
<span class="sd"> Generate a name like `houdini 16.5.323 linux` or `maya 2016.SP3 linux`.</span>
|
|
2207
2207
|
|
|
@@ -764,13 +764,13 @@
|
|
|
764
764
|
<p>This part of the documentation includes recipes and tutorials for common tasks and workflows using Conductor Core. If you have a suggestion for a new guide, feel free to <a href="https://support.conductortech.com/hc/en-us/requests/new">open an issue</a></p>
|
|
765
765
|
<h2 id="how-to-create-a-submission">How to create a submission?</h2>
|
|
766
766
|
<div class="highlight"><pre><span></span><code><span class="c1"># your_script.py</span>
|
|
767
|
-
<span class="kn">from</span>
|
|
767
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">ciocore</span><span class="w"> </span><span class="kn">import</span> <span class="n">data</span> <span class="k">as</span> <span class="n">coredata</span>
|
|
768
768
|
|
|
769
769
|
<span class="o">...</span>
|
|
770
770
|
</code></pre></div>
|
|
771
771
|
<h2 id="how-to-authenticate-with-an-api-key">How to authenticate with an API key?</h2>
|
|
772
772
|
<div class="highlight"><pre><span></span><code><span class="c1"># your_script.py</span>
|
|
773
|
-
<span class="kn">from</span>
|
|
773
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">ciocore</span><span class="w"> </span><span class="kn">import</span> <span class="n">api_client</span>
|
|
774
774
|
|
|
775
775
|
<span class="o">...</span>
|
|
776
776
|
</code></pre></div>
|
ciocore/docsite/sitemap.xml.gz
CHANGED
|
Binary file
|
|
@@ -293,7 +293,7 @@ class BaseDownloader(object):
|
|
|
293
293
|
self.emit_start_task_event(task_info)
|
|
294
294
|
for file_info in task_info["files"]:
|
|
295
295
|
|
|
296
|
-
file_info["output_dir"] =
|
|
296
|
+
file_info["output_dir"] = ensure_writable_output_path(file_info, task_info, self.output_path)
|
|
297
297
|
file_info["filepath"] = os.path.join(file_info["output_dir"], file_info["relative_path"])
|
|
298
298
|
|
|
299
299
|
future = executor.submit(self.attempt_download, file_info)
|
|
@@ -305,7 +305,6 @@ class BaseDownloader(object):
|
|
|
305
305
|
# Throttle to prevent the queue from growing too large.
|
|
306
306
|
time.sleep(self.WORK_QUEUE_THROTTLE)
|
|
307
307
|
|
|
308
|
-
|
|
309
308
|
def attempt_download(self, file_info):
|
|
310
309
|
"""
|
|
311
310
|
Attempt to download a file with exponential backoff retries.
|
|
@@ -316,6 +315,14 @@ class BaseDownloader(object):
|
|
|
316
315
|
Returns:
|
|
317
316
|
- file_done_event: A dictionary indicating the completion status of the download.
|
|
318
317
|
"""
|
|
318
|
+
|
|
319
|
+
if file_info["output_dir"] is None:
|
|
320
|
+
identifier = f"{file_info['job_id']}::{file_info['task_id']}::{file_info['relative_path']}"
|
|
321
|
+
logger.debug("Download destination is None for file %s.", identifier)
|
|
322
|
+
return self.generate_file_done_event(
|
|
323
|
+
file_info,
|
|
324
|
+
error=f"Download destination is None for file {identifier}."
|
|
325
|
+
)
|
|
319
326
|
filepath = file_info["filepath"]
|
|
320
327
|
attempts_remaining = self.max_attempts
|
|
321
328
|
retry_delay = self.delay
|
|
@@ -368,37 +375,7 @@ class BaseDownloader(object):
|
|
|
368
375
|
# Return the final file done event after all attempts.
|
|
369
376
|
return file_done_event
|
|
370
377
|
|
|
371
|
-
|
|
372
|
-
def ensure_writable_output_path(self,file_info,task_info):
|
|
373
|
-
"""
|
|
374
|
-
Resolve the output directory for the file.
|
|
375
|
-
If the file's output directory is from a Windows machine, we provisionally use the fallback directory.
|
|
376
|
-
|
|
377
|
-
If the output_path is not writable, we try to use a fallback directory. If that fails, we use the temp folder.
|
|
378
|
-
"""
|
|
379
|
-
|
|
380
|
-
output_path = file_info["output_dir"]
|
|
381
|
-
if os.name == "posix":
|
|
382
|
-
if re.match(r"^[a-zA-Z]:", output_path):
|
|
383
|
-
self.output_path = os.path.expanduser(os.path.join("~", FALLBACK_DOWNLOADS_FOLDER))
|
|
384
|
-
|
|
385
|
-
if self.output_path:
|
|
386
|
-
output_path = os.path.join(self.output_path, task_info["job_id"])
|
|
387
|
-
|
|
388
|
-
try:
|
|
389
|
-
os.makedirs(output_path, exist_ok=True)
|
|
390
|
-
return output_path
|
|
391
|
-
except Exception:
|
|
392
|
-
logger.exception("Can't use specified output directory %s. Trying fallback", output_path)
|
|
393
|
-
|
|
394
|
-
output_path = os.path.expanduser(os.path.join("~", FALLBACK_DOWNLOADS_FOLDER, task_info["job_id"]))
|
|
395
|
-
try:
|
|
396
|
-
os.makedirs(output_path, exist_ok=True)
|
|
397
|
-
return output_path
|
|
398
|
-
except Exception:
|
|
399
|
-
logger.exception("Can't use fallback output directory %s. Trying temp folder", output_path)
|
|
400
|
-
return os.path.join(tempfile.gettempdir(), FALLBACK_DOWNLOADS_FOLDER, task_info["job_id"])
|
|
401
|
-
|
|
378
|
+
|
|
402
379
|
|
|
403
380
|
def can_skip(self, file_info):
|
|
404
381
|
"""Determine if a file download should be skipped.
|
|
@@ -642,3 +619,64 @@ class BaseDownloader(object):
|
|
|
642
619
|
md5_digest = md5_hash.digest()
|
|
643
620
|
md5_base64 = base64.b64encode(md5_digest)
|
|
644
621
|
return md5_base64.decode("utf-8")
|
|
622
|
+
|
|
623
|
+
|
|
624
|
+
def ensure_writable_output_path(file_info, task_info, user_specified_path=None):
|
|
625
|
+
"""
|
|
626
|
+
Resolve the output directory for the file.
|
|
627
|
+
If the file's output directory is from a Windows machine, we provisionally use the fallback directory.
|
|
628
|
+
|
|
629
|
+
If the output_path is not writable, we try to use a fallback directory. If that fails, we use the temp folder.
|
|
630
|
+
"""
|
|
631
|
+
fallback_path = get_fallback_path(task_info["job_id"])
|
|
632
|
+
identifier = f"{file_info['job_id']}::{file_info['task_id']}::{file_info['relative_path']}"
|
|
633
|
+
if user_specified_path:
|
|
634
|
+
logger.debug("Using user-specified output directory: %s", user_specified_path)
|
|
635
|
+
full_user_specified_path = os.path.join(user_specified_path, task_info["job_id"])
|
|
636
|
+
logger.debug("Using user-specified output directory: %s", full_user_specified_path)
|
|
637
|
+
if ensure_path_valid(full_user_specified_path):
|
|
638
|
+
return full_user_specified_path
|
|
639
|
+
if ensure_path_valid(fallback_path):
|
|
640
|
+
logger.info("Using fallback output directory: %s for file %s", fallback_path, identifier)
|
|
641
|
+
return fallback_path
|
|
642
|
+
logger.warning("No valid output directory found for file %s.", identifier)
|
|
643
|
+
return None
|
|
644
|
+
else:
|
|
645
|
+
logger.debug("No user-specified output directory. Using job's output directory.")
|
|
646
|
+
output_path = file_info["output_dir"]
|
|
647
|
+
if ensure_path_valid(output_path):
|
|
648
|
+
logger.debug("Using job's output directory: %s", output_path)
|
|
649
|
+
return output_path
|
|
650
|
+
if ensure_path_valid(fallback_path):
|
|
651
|
+
logger.info("%s is not valid. Using fallback output directory: %s for file %s", output_path, fallback_path, identifier)
|
|
652
|
+
return fallback_path
|
|
653
|
+
logger.warning("No valid output directory found for file %s.", identifier)
|
|
654
|
+
return None
|
|
655
|
+
|
|
656
|
+
def get_fallback_path(job_id):
|
|
657
|
+
return os.path.expanduser(os.path.join("~", FALLBACK_DOWNLOADS_FOLDER, job_id))
|
|
658
|
+
|
|
659
|
+
def ensure_path_valid(path):
|
|
660
|
+
"""
|
|
661
|
+
Ensure that a path is valid and writable.
|
|
662
|
+
|
|
663
|
+
This function ensures:
|
|
664
|
+
1. The path is a posix path, or a Windows path on a Windows system
|
|
665
|
+
2. The directory can be created and is writable
|
|
666
|
+
|
|
667
|
+
Parameters:
|
|
668
|
+
path (str): The filesystem path to validate
|
|
669
|
+
|
|
670
|
+
Returns:
|
|
671
|
+
bool: True if the path is valid and writable, False otherwise
|
|
672
|
+
"""
|
|
673
|
+
os_name = os.name
|
|
674
|
+
is_drive_letter_path = re.match(r"^[a-zA-Z]:", path)
|
|
675
|
+
|
|
676
|
+
if is_drive_letter_path and (os_name != "nt"):
|
|
677
|
+
return False
|
|
678
|
+
try:
|
|
679
|
+
os.makedirs(path, exist_ok=True)
|
|
680
|
+
return True
|
|
681
|
+
except Exception:
|
|
682
|
+
return False
|