ciocore 9.1.0b2__py2.py3-none-any.whl → 9.1.0rc1__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.

Binary file
ciocore/package_tree.py CHANGED
@@ -290,10 +290,6 @@ class PackageTree(object):
290
290
  def __bool__(self):
291
291
  return True if self._tree["children"] else False
292
292
 
293
- def __nonzero__(self):
294
- # Python 2.7
295
- return self.__bool__()
296
-
297
293
  def as_dict(self):
298
294
  """
299
295
  Returns:
ciocore/worker.py CHANGED
@@ -621,11 +621,7 @@ class JobManager():
621
621
  q_size = self.work_queues[index].qsize()
622
622
  worker_threads = self.workers[index].threads
623
623
 
624
- # thread.isAlive() was renamed to is_alive() in Python 3.9
625
- try:
626
- num_active_threads = len([thd for thd in worker_threads if thd.isAlive()])
627
- except AttributeError:
628
- num_active_threads = len([thd for thd in worker_threads if thd.is_alive()])
624
+ num_active_threads = len([thd for thd in worker_threads if thd.is_alive()])
629
625
 
630
626
  msg += '%s \titems in queue: %s' % (q_size, worker_class.__name__)
631
627
  msg += '\t\t%s threads' % num_active_threads
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ciocore
3
- Version: 9.1.0b2
3
+ Version: 9.1.0rc1
4
4
  Summary: Core functionality for Conductor's client tools
5
5
  Home-page: https://github.com/ConductorTechnologies/ciocore
6
6
  Author: conductor
@@ -9,9 +9,8 @@ Classifier: Operating System :: OS Independent
9
9
  Classifier: Programming Language :: Python
10
10
  Classifier: Topic :: Multimedia :: Graphics :: 3D Rendering
11
11
  Description-Content-Type: text/markdown
12
- Requires-Dist: requests[use_chardet_on_py3]==2.28.1
13
- Requires-Dist: pyjwt==1.7.1
14
- Requires-Dist: future>=0.18.2
12
+ Requires-Dist: requests>=2.31.0
13
+ Requires-Dist: pyjwt==2.9.0
15
14
  Requires-Dist: cioseq<1.0.0,>=0.4.1
16
15
  Requires-Dist: Click<9.0.0,>=8.1.3
17
16
  Requires-Dist: markdown<4.0.0,>=3.5.2
@@ -51,12 +50,18 @@ See [CONTRIBUTING](CONTRIBUTING.md)
51
50
 
52
51
  ## Changelog
53
52
 
54
- ## Unreleased:
53
+ ## Version:9.1.0-rc.1 -- 11 Dec 2024
54
+
55
55
  * Adds required changes to parallelize multi-part uploads
56
56
  * Cleans up the output when explicit paths are uploaded
57
57
  * Fixes logic so managers doesn't erroneously try and call join a second time if cancelled
58
+ * Use the new required jwt parameters
59
+ * Removing py2.7 compatibility
58
60
 
61
+ ## Version:8.3.3 -- 04 Dec 2024
59
62
 
63
+ * Adds filter option for API data query
64
+
60
65
  ## Version:8.3.2 -- 01 Oct 2024
61
66
 
62
67
  * Tweak to package order behavior for markdown package query
@@ -1,24 +1,23 @@
1
- ciocore/VERSION,sha256=V-Kb1TSOiqU51Ac0b71EzlP2Ib7nl3rdmaEL7bhM4iY,12
1
+ ciocore/VERSION,sha256=ax2aQwModu65ZstFnKm4dTChIjzu_0ljZcaKGDaGkSA,10
2
2
  ciocore/__init__.py,sha256=aTP7LeeosQA8BZE67gDV4jgfTK5zxmwZRjiTRu_ZWj0,646
3
- ciocore/api_client.py,sha256=SBxEwAiwn2XtH7T_ipefUbWhczXjoNdNbQBur1RV-Bw,32810
3
+ ciocore/api_client.py,sha256=KKL7TsYygNcfkFZDPPq1CSJsrVN_QLK4PqP44vXsCQg,33101
4
4
  ciocore/cli.py,sha256=jZ1lOKQiUcrMhsVmD9SVmPMFwHtgDF4SaoAf2-PBS54,15449
5
5
  ciocore/client_db.py,sha256=tTz3bl2xeDPPcYSDS3g3QgV_xYihJMx0Kj6OeN2klK0,12978
6
6
  ciocore/common.py,sha256=mBIS6KiYoQsjWe6aIFUGRRvCMl8BIN2kmLZ4J8icap8,14982
7
- ciocore/compat.py,sha256=5uEXPSog_jxsDMaHBswAKEtfyXT25VgU6WNGIhz9PHU,256
8
7
  ciocore/conductor_submit.py,sha256=bxvzdyNzscAOOOsqTvAYh5DQsTWyCQJNb16Mf-n_F0M,9702
9
8
  ciocore/config.py,sha256=rCL7kaFn1tYgSglN8q9Wx6SwMpoXTq0BMQGwPRVwVIg,8973
10
- ciocore/data.py,sha256=Ji0qUk8nJXBNakoHSqBiVx8O58SbZXyt273SHlEDn3U,7027
9
+ ciocore/data.py,sha256=zT3zpkSbHPHHGlLeLDTbwkB8_-Ct6zd8qQ-7U1pDCHM,7215
11
10
  ciocore/exceptions.py,sha256=4Oq-WX-qiN6kPUdBCHvvd6mtSQ0nCkDbJxWt2CNtpv8,1504
12
11
  ciocore/file_utils.py,sha256=swA7th9WhDEloW69YViRTKB-oeC9UmNdEGegfH1r-Gw,17176
13
12
  ciocore/hardware_set.py,sha256=FlRQiGCLRcSW7Oko_gzgVK8ZqJ_J92eT8e_AleAbS2E,17047
14
13
  ciocore/loggeria.py,sha256=dk8n899TYFiMTD2gjjj8oiumJkPtCus0a_IY2GORAvU,15251
15
14
  ciocore/package_environment.py,sha256=MEHV7jfs3NJIEYCIaW8JfJdBmelvPHZMmBzPlXETiRo,7808
16
15
  ciocore/package_query.py,sha256=hWi_JmRieZ8f2Ji5JR7tQnHnm29Ktb88scbIXNsDu-8,6181
17
- ciocore/package_tree.py,sha256=vkORKXxQ7dO8l0_96eFwm-5AUVL0rP9bhgWYhW_v3lo,15649
16
+ ciocore/package_tree.py,sha256=FDKHxYZS8ZAkz3hpjMYFy-P8hwU1V9w4wA7gNqhruqs,15569
18
17
  ciocore/post_install.py,sha256=zu5Ctz2ANbKD-f5G2ODLIhKkWENBi4F3UKKu50OEWrg,1000
19
18
  ciocore/retry.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
19
  ciocore/validator.py,sha256=f_K7gxz122W_i5AxVx6dKhckOygl8TnmQiVj7tyX5zw,2344
21
- ciocore/worker.py,sha256=YnE0mGqkky9uxPMyDRmvdt1p1ER_GN39AeZPIGw6f4U,21832
20
+ ciocore/worker.py,sha256=3C4KJuBTdeqvMWdBn3cRnTju5dUjNKG0OGtHp0SZ4l8,21613
22
21
  ciocore/auth/__init__.py,sha256=cdS-xZzMq41yXM5cz8sUlcYgo8CJYh8HcCCWmhbDgf0,606
23
22
  ciocore/auth/server.py,sha256=8btX9-EokUl6q55V8muDmEV2tvvbTBD0BHeWFbwkzUc,3892
24
23
  ciocore/docsite/404.html,sha256=xP-mZwn-87pnlkD-paIYzdXDLQr7DS551KflVdFfrCk,17207
@@ -26,14 +25,14 @@ ciocore/docsite/index.html,sha256=NEK4HaX2yaetTajVtQuTmS9C5cPnkAtxgeKEj7wQ9t0,20
26
25
  ciocore/docsite/logo.png,sha256=gArgFFWdw8w985-0TkuGIgU_pW9sziEMZdqytXb5WLo,2825
27
26
  ciocore/docsite/objects.inv,sha256=XwmLactPEWWC4fAWqHNPBXGsluRxLLTrwDLQqq51ONY,775
28
27
  ciocore/docsite/sitemap.xml,sha256=M_V85zl0y2adRvzJAnoCxlZH_Hl7TLnIb1A-6l_xGmI,109
29
- ciocore/docsite/sitemap.xml.gz,sha256=mThGdpcFPBqhVOOM7T3lZOZMuSVSoDrSjqxs4psAmeY,127
30
- ciocore/docsite/apidoc/api_client/index.html,sha256=TvoSl4iqdXhBVfesDxe_sBPA6G-Jt1-gpWA40xXspa0,188372
28
+ ciocore/docsite/sitemap.xml.gz,sha256=5N9BP1xbOEPkbpLHoqTsfzUJD3N4IJB55-_WR8JLfrc,127
29
+ ciocore/docsite/apidoc/api_client/index.html,sha256=kkhKzA7OThkpASLveONRPNS7gGppf8Ot2rxek1lZxHc,189722
31
30
  ciocore/docsite/apidoc/apidoc/index.html,sha256=GOSvv6KZPOtgekgshRE4j7aDvJkkaiBQLwA_By9J94g,26171
32
31
  ciocore/docsite/apidoc/config/index.html,sha256=WDqy4MLR3EMp9T_2-Z9Op61rTFkvb0aTWmtjiR8sbjA,72559
33
- ciocore/docsite/apidoc/data/index.html,sha256=vjC5u7wcm2ryOW28GctA9ZG6dXgBTkMJLLomJ9Kqxo0,50850
32
+ ciocore/docsite/apidoc/data/index.html,sha256=8ldmfisgelzdWtTqGY8uebvVRcskhbv-reO3hMcIgGI,51627
34
33
  ciocore/docsite/apidoc/hardware_set/index.html,sha256=SpYg-lwuCvfLPbNIIM7aQL2jGt-NA5wlVMlIKixGwBo,123042
35
34
  ciocore/docsite/apidoc/package_environment/index.html,sha256=V6_ah3V1_4_aOwJbEcITCdwuHxe1vGtfn0maRrbflUs,69248
36
- ciocore/docsite/apidoc/package_tree/index.html,sha256=60Ir6X1Q9k17bQCqozXzuMAcSVuu6DuC5zGfBk4LLnw,109393
35
+ ciocore/docsite/apidoc/package_tree/index.html,sha256=5_4vV8x_GmpsyWHnMP62gBaAcdzfM7L-mP7uQKh_DH4,109054
37
36
  ciocore/docsite/assets/_mkdocstrings.css,sha256=K3bqYEmxlOHQ3-M11JNbBWHCBDBLarkFRm8HuEYrAG4,341
38
37
  ciocore/docsite/assets/images/favicon.png,sha256=AjhUxD_Eslt5XuSVHIAZ494Fk__rb5GLXR8qm0elfP4,1870
39
38
  ciocore/docsite/assets/javascripts/bundle.4e31edb1.min.js,sha256=vMxCR_BtNIcbmbPV6j8Z-YDLQ9ckt4RzvGuzCTg034s,97250
@@ -81,7 +80,7 @@ ciocore/docsite/cmdline/downloader/index.html,sha256=nygj-0GQmpD79B5AxHjwzQxOFv8
81
80
  ciocore/docsite/cmdline/packages/index.html,sha256=_kXB85PBAgrqW09OerYpxnJuyERHMbcLn6qBGRdyHwk,20923
82
81
  ciocore/docsite/cmdline/uploader/index.html,sha256=vuQ06Gys9Eoxs87PXlqnM5AgB6Ag00BlDIy6oaprjis,25123
83
82
  ciocore/docsite/how-to-guides/index.html,sha256=KifCHl2S3RfPBZhP1UXwUNWuhcXPlPPqM4Gk6rVGhjQ,20100
84
- ciocore/docsite/search/search_index.json,sha256=vBLU-rkC0pxOPX0O3MNKXRKGfgsaS1-91KsV17Gf9SY,189092
83
+ ciocore/docsite/search/search_index.json,sha256=LP1ck_wuTP9A_dWTyaVF8Fugg22q1O0XS6hGqg2zk0M,189860
85
84
  ciocore/docsite/stylesheets/extra.css,sha256=_Cxe9Dhg1BBi6Kqaz_iZD9z9VyqxA9vtONRjP4PVic0,354
86
85
  ciocore/docsite/stylesheets/tables.css,sha256=LE_zwGRxGcdPIy-9QiVPecOzlEBSqZb_WP5vDkFE0ZM,3235
87
86
  ciocore/downloader/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -100,16 +99,14 @@ ciocore/uploader/thread_queue_job.py,sha256=MzOcetttfWtDfwy-M0_ARwUf8_OjaGjyy-dA
100
99
  ciocore/uploader/upload_stats/__init__.py,sha256=Lg1y4zq1i0cwc6Hh2K1TAQDYymLff49W-uIo1xjcvdI,5309
101
100
  ciocore/uploader/upload_stats/stats_formats.py,sha256=giNirtObU66VALWghPFSRhg3q_vw5MvESsnXhb_I3y8,2402
102
101
  tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
103
- tests/extra_env_fixtures.py,sha256=8qvU4d8SXGKzRVNR5whVqKCQOwOVMiFVfbKBAjxa2gE,1119
104
102
  tests/instance_type_fixtures.py,sha256=uIzQduqKQVgjllMuyXaYnRC-pwqk5lnTx3NY2M5Nujo,4320
105
103
  tests/package_fixtures.py,sha256=od7ZHofG8ubpQ3PqlUsrcHBcbmD3qVWih9eiIg1WtSQ,5361
106
- tests/project_fixtures.py,sha256=iBm_th_JtAw76vlNu7Jjhh9tLH4oOaNi-MgtPzCV7yQ,138
107
- tests/test_api_client.py,sha256=4jhj-YrBPcLj7XZn3ngguau2DPxpCYGMSuqPJ3hW0GQ,14497
104
+ tests/test_api_client.py,sha256=isntMDs3QTyTWdghBa_LbFAiC7ydZD1RWb655oEZo24,14452
108
105
  tests/test_base_downloader.py,sha256=SS7tWKv2ZZhpUDk4UCg1TkrNrpntjSewgzLl1mEubSE,3603
109
106
  tests/test_cli.py,sha256=_WTs2SWlEgd6wtg1hmOBlFnbWVdFLvqp0KqNhy-y2e8,5532
110
- tests/test_common.py,sha256=tY_-SY-JmJX09UehFs9RIDqZ785AmhfTl6eVKJeIUFY,763
111
- tests/test_config.py,sha256=-_G682Ss3Zr1FmcMkjla1zAZprX2tQKpKc5_wD28rII,13340
112
- tests/test_data.py,sha256=NIBXpCjG3Os3vpc1CkiVONrebro8D_jqQyJ0N3kbucU,5433
107
+ tests/test_common.py,sha256=5N9xeeGVuwN4kcjIg30eBliUD8PePzCNNLuLipGuTgk,410
108
+ tests/test_config.py,sha256=iiMPwoVA9C3vvGGR6_gKKMbYkSxheNLdljeOA-iPrJU,13295
109
+ tests/test_data.py,sha256=o320GdvOJ2TouWtuA8jcs8Cr_gQWlQ6KxWVSWtmARlY,7614
113
110
  tests/test_downloader.py,sha256=hceljsjnuvk5Vk5X4mHgavIEcpbv8ylPwpz7rTwJ-aE,4721
114
111
  tests/test_hardware_set.py,sha256=hW7A_suyYdU7WkB7qoHSBPLxaAP2CKqI0i_ULfO5GeY,4408
115
112
  tests/test_imports_2and3.py,sha256=ehqpRYPVY7djBcb8OT_cnh86iCJJ9wuMWnfSR9RHxmY,507
@@ -117,13 +114,13 @@ tests/test_job_downloader.py,sha256=_dZqyLZhc2Bq2n7-skERfodHx1JgFyHw8TamHp6ID9I,
117
114
  tests/test_package_environment.py,sha256=CdiC2PDVSnbcwTb4fsDTWqGYSzs1n5ca2KMoyISckGA,5893
118
115
  tests/test_package_query.py,sha256=LZqvCrGkWs0lMtIMumjDatX0ypeYYvabh_k1R0A6sS0,1451
119
116
  tests/test_package_tree.py,sha256=K2kzJwRHCr6ojc4MZHjdH7VtmvG5O97OoH6vzwAE9GQ,6780
120
- tests/test_submit.py,sha256=ppijBcpLXeHUZh7UXyClxLalSV6cTfKb6Ygw5zXQPKo,5836
121
- tests/test_uploader.py,sha256=B1llTJt_fqR6e_V_Jxfw9z73QgkFlEPU87xLYGzt-TQ,2914
117
+ tests/test_submit.py,sha256=v75ciL-C0XjiO7wUFQvYBZj0UoqhYOmTLa8TiUyhKqw,5769
118
+ tests/test_uploader.py,sha256=JGp6GEyqRXRtbQSb-IW-cCX_BzNotWdCbnJnLwZvpUM,2869
122
119
  tests/test_validator.py,sha256=2fY66ayNc08PGyj2vTI-V_1yeCWJDngkj2zkUM5TTCI,1526
123
120
  tests/mocks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
124
121
  tests/mocks/glob.py,sha256=J2MH7nqi6NJOHuGdVWxhfeBd700_Ckj6cLh_8jSNkfg,215
125
- ciocore-9.1.0b2.dist-info/METADATA,sha256=g67y_5StIUtJ3HXVWUsECxrGN5X6LrT8NU96amgI_fg,19085
126
- ciocore-9.1.0b2.dist-info/WHEEL,sha256=qUzzGenXXuJTzyjFah76kDVqDvnk-YDzY00svnrl84w,109
127
- ciocore-9.1.0b2.dist-info/entry_points.txt,sha256=cCqcALMYbC4d8545V9w0Zysfg9MVuKWhzDQ2er4UfGE,47
128
- ciocore-9.1.0b2.dist-info/top_level.txt,sha256=SvlM5JlqULzAz00JZWfiUhfjhqDzYzSWssA87zdJl0o,14
129
- ciocore-9.1.0b2.dist-info/RECORD,,
122
+ ciocore-9.1.0rc1.dist-info/METADATA,sha256=R_i2XrMj2RbhWLQrczzrbq71Ufz_3Q37WY3d0qIe2m8,19201
123
+ ciocore-9.1.0rc1.dist-info/WHEEL,sha256=qUzzGenXXuJTzyjFah76kDVqDvnk-YDzY00svnrl84w,109
124
+ ciocore-9.1.0rc1.dist-info/entry_points.txt,sha256=cCqcALMYbC4d8545V9w0Zysfg9MVuKWhzDQ2er4UfGE,47
125
+ ciocore-9.1.0rc1.dist-info/top_level.txt,sha256=SvlM5JlqULzAz00JZWfiUhfjhqDzYzSWssA87zdJl0o,14
126
+ ciocore-9.1.0rc1.dist-info/RECORD,,
tests/test_api_client.py CHANGED
@@ -7,10 +7,7 @@ import json
7
7
  import sys
8
8
  import unittest
9
9
 
10
- try:
11
- from unittest import mock
12
- except ImportError:
13
- import mock
10
+ from unittest import mock
14
11
 
15
12
  from ciocore import api_client
16
13
 
tests/test_common.py CHANGED
@@ -9,17 +9,7 @@ FILES_PATH = os.path.join(os.path.dirname(__file__), "files")
9
9
 
10
10
 
11
11
  class TestMd5(unittest.TestCase):
12
-
13
- # def test_get_base64_md5_is_correct_md5(self):
14
- # from ciocore import common
15
- # fn1 = os.path.join(FILES_PATH, "one")
16
- # md5=common.get_base64_md5(fn1)
17
- # if os.name == "nt":
18
- # self.assertEqual(md5, "w8F8opHbdwHIozghPc63XA==")
19
- # else:
20
- # self.assertEqual(md5, "9iVbsBxkj+lncU1SqJ6OnA==")
21
-
22
-
12
+
23
13
  def test_get_base64_md5_is_correct_type(self):
24
14
  from ciocore import common
25
15
  from builtins import str
tests/test_config.py CHANGED
@@ -6,10 +6,7 @@ import sys
6
6
  import os
7
7
  import logging
8
8
 
9
- try:
10
- from unittest import mock
11
- except ImportError:
12
- import mock
9
+ from unittest import mock
13
10
 
14
11
  APIKEY = '{"auth_provider_x509_cert_url": "https://www.exampleapis.com/oauth2/v1/certs", "auth_uri": "https://accounts.example.com/o/oauth2/auth", "client_email": "account-5641301770895360@eloquent-vector-104019.iam.gserviceaccount.com", "client_id": "106815243682887997903", "client_x509_cert_url": "https://www.exampleapis.com/robot/v1/metadata/x509/account-5641301770895360%40eloquent-vector-104019.iam.gserviceaccount.com", "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDcadqRWyd7VpYN\n804fEn07qlqNXU0ihz6g2dfbj9gzZDhHGVCI5QvPFskAQcV91k8cDdFu380m+sh1\nz9wlcdaM/lksRV/DRJiV76qrqyrNi0gSekZUuYhSsyMWUGvG4aSbf5BzVf1j8W4I\nUArH+ht5pgdSjowNc4zQIqmMH2XY+Ntr+NysBBfIv1PI6GoHFgDYOTSzsvz0qFYS\nWuonYGTjzNz4CY9Yh5ki8iq0/ijKzpUWeRUkpK9uF7WBoxrj3EyFFHejtfhVX2l0\n2KxrIF0kkmy5nmxVUck76FqdQ6vyvaHudREd3z/08hgdYogemQUTKFE/0LQmKuBV\nIJipPvORAgMBAAECggEAZvPMozN8LBikC00XstzMgRePp1MqydN5NeG6+TPlrQ+F\nV/RjkSXHT8oZRdTy3dXB6t0rc4n2xdvC0YCvGBBlwkK1vT+EPO2oBfTF99yCKDME\nDZlui3mDyvkgjPYweVuBKx65Bp5mNo4ZMqnMd18EAVxDM9UgZtIPtlJSdoBd7qtk\nyCGr03l+SV0krmvPV+KS9vyDOg/7Km5gMhTMaIveNyS1pG6AmZ0ggQA5djg/P2iF\nxGwYdvfADY5cBzg0OG5ELv9hvyA4CKN6RLfYv3JJS2gbNaMknjmsjaM/p0LtE2HL\n+uFPL0ZjoMwV3BlEFQIHwhNWS63H43ISBa1/2XvGPwKBgQDw4a4kQ9+Ce3edWonz\n3Fm/3no+HrMSVjbv28qphAHMFrSUdbMejQm4QSbNeOW1pEcVvW21u8tYagrJEsaU\ns4DulFXRep36teVDWpc1FrNowWEPPVeC8CO74VfssK1h2Itqis8JPbzXOcNtSH9+\nAg1EvrB9XnyEvJuM6GOGo3juTwKBgQDqP058+H3iSZe6al4P6Ib3g/82nr2dHeN5\n4xxGu1fzTMNX5lopbNji6tQcsMoMVPdOvCQy5c0PEUbvo7mxfZ8fOZwgBjIcXbYg\nzIJkPTSv7nxSE5M5lW5juzLkdq2k5k0qt9ByWuWEA3PSn/DEANa5888phSCoJSw/\nPjpwHhZoHwKBgQDCoQbMxI6e5lYCrToT8PIPhpptAO8dnM2sxoGcsE2ncp0b63H7\n+GdnGjVZBhtMxdyt4y33DjLCUIRAbUxIsDU4EGC67oEhJsGEx3iva5Uwyjc7UgwY\nfyHQV8ZsN2EQUyBqyJd6VwjzOff+n/prfQrthcoisiqYMbDZjJeGHSXEHwKBgAo4\nBsmG4Z78jOTx/PZ+s1ya4ohUdnsjMahAkxw20ghoIeF0yBwkhnWnvucdg0L0dfF2\nXbHmuoJcw5ZyswgeLdHj5n6zJn58TBS0Nz/+N40xPzUpa3PIpA8vvHGhB8Q408b4\nS9yhQH/40pWuqocybiugijoKd7k+HecIZO49MccLAoGBAPDScJHSxKPW6wJKjxDC\nXXWWQ2flbwv4Sja487QV/trWMSRnHJHnCVHqv/F7ThPaoHM+MJSzrJ7wr/CJhk0H\noEt+0Rn6qPd/A36bSjTfXMFLXWi75ovek+IJGKxr7B46jrcS/oe1XIIOlV1+OvOY\nVoO6vgYkPhpMkth2hyZ/luea\n-----END PRIVATE KEY-----\n", "private_key_id": "3dfe3bdc40d4dc431d283bf22feb113c9b622dd3", "project_id": "eloquent-vector-104019", "token_uri": "https://oauth2.exampleapis.com/token", "type": "service_account"}'
15
12
 
tests/test_data.py CHANGED
@@ -1,163 +1,173 @@
1
- """ test data
2
-
3
- isort:skip_file
4
- """
5
-
6
1
  import unittest
2
+ from unittest.mock import patch
3
+ from ciocore import data as coredata
7
4
 
8
- try:
9
- from unittest import mock
10
- except ImportError:
11
- import mock
12
-
13
- from ciocore import data
14
-
15
-
16
- from project_fixtures import PROJECTS
17
- from package_fixtures import SOFTWARE_DATA
18
- from instance_type_fixtures import LIN_INSTANCE_TYPES, ALL_INSTANCE_TYPES
19
-
20
- class TestDataAllInstanceTypes(unittest.TestCase):
5
+ class TestCoreData(unittest.TestCase):
21
6
  def setUp(self):
22
- self.default_cache = {
23
- "projects": PROJECTS,
24
- "instance_types": ALL_INSTANCE_TYPES,
25
- "packages": SOFTWARE_DATA,
7
+ """Set up test fixtures before each test method."""
8
+ self.mock_api_responses = {
9
+ 'projects': ['ProjectA', 'ProjectB'],
10
+ 'instance_types': [
11
+ {'operating_system': 'windows', 'name': 'win_machine', 'cores': 1, 'memory': '1024'},
12
+ {'operating_system': 'linux', 'name': 'linux_machine', 'cores': 1, 'memory': '1024'}
13
+ ],
14
+ 'software': [ # Added package_id to each package
15
+ {
16
+ 'name': 'maya-io',
17
+ 'version': '2022',
18
+ 'platform': 'windows',
19
+ 'product': 'maya-io',
20
+ 'package_id': '123456789'
21
+ },
22
+ {
23
+ 'name': 'maya-io',
24
+ 'version': '2022',
25
+ 'platform': 'linux',
26
+ 'product': 'maya-io',
27
+ 'package_id': '123456780'
28
+ },
29
+ {
30
+ 'name': 'nuke',
31
+ 'version': '13.0',
32
+ 'platform': 'linux',
33
+ 'product': 'nuke',
34
+ 'package_id': '123456781'
35
+ }
36
+ ],
37
+ 'extra_env': ['PATH=/custom/path', 'LICENSE_SERVER=1234']
26
38
  }
27
-
28
- # self.get_data_patcher = mock.patch.object(DataCache, "get_data", return_value=self.default_cache)
29
-
30
- # self.account_id_patcher = mock.patch(
31
- # "ciocore.data.get_account_id", return_value="1234"
32
- # )
33
-
34
- # self.mock_get_data = self.get_data_patcher.start()
35
- # self.mock_account_id = self.account_id_patcher.start()
36
-
37
- data.__data__ = {}
38
- data.__products__ = None
39
+ # Clear data before each test
40
+ coredata.clear()
39
41
 
40
42
  def tearDown(self):
41
- # self.get_data_patcher.stop()
42
- # self.account_id_patcher.stop()
43
- pass
44
-
45
- # def override_default_cache(self, **kwargs):
46
- # return_val = {}
47
- # return_val.update(self.default_cache)
48
- # return_val.update(kwargs)
49
- # self.mock_get_data.return_value = return_val
50
-
51
- # def test_smoke(self):
52
- # self.assertEqual(1, 1)
53
-
54
- # def test_init_empty_projects_global(self):
55
- # data.init()
56
- # self.assertEqual(data.products(), [])
57
-
58
- # def test_init_stores_all_args(self):
59
- # data.init("a", "b", "c")
60
- # self.assertEqual(data.products(), ["a", "b", "c"])
61
-
62
- # def test_data_raises_if_not_initialized(self):
63
- # with self.assertRaises(ValueError):
64
- # data.data()
65
-
66
- # def test_valid(self):
67
- # self.assertEqual(data.valid(), False)
68
- # data.init()
69
- # data.data()
70
- # self.assertEqual(data.valid(), True)
71
-
72
- # def test_clear(self):
73
- # data.init()
74
- # data.data()
75
- # self.assertEqual(data.valid(), True)
76
- # data.clear()
77
- # self.assertEqual(data.valid(), False)
78
-
79
- # def test_does_not_refresh_if_not_force(self):
80
- # data.init()
81
- # p1 = data.data()["projects"]
82
- # self.assertEqual(len(p1), 4)
83
- # # merge the default cache with a new projects list containing only two projects
84
- # # self.override_default_cache(projects=["a", "b"])
85
- # p2 = data.data()["projects"]
86
- # self.assertEqual(p2, p1)
87
-
88
- # def test_does_refresh_if_force_all(self):
89
- # data.init()
90
- # p1 = data.data()["projects"]
91
- # self.assertEqual(len(p1), 4)
92
- # # self.override_default_cache(projects=["a", "b"])
93
- # p2 = data.data(force=True)["projects"]
94
- # self.assertNotEqual(p2, p1)
95
- # self.assertEqual(len(p2), 2)
96
-
97
- # def test_get_data_for_one_product(self):
98
- # data.init("c4d")
99
- # # inst = data.data()["instance_types"]
100
- # sw = data.data()["software"]
101
- # self.assertEqual(len(sw.supported_host_names()), 2)
102
-
103
- # def test_several_products(self):
104
- # data.init("c4d", "maya")
105
- # sw = data.data()["software"]
106
- # self.assertEqual(len(sw.supported_host_names()), 5)
107
-
108
- # def test_one_product_can_be_a_plugin(self):
109
- # data.init("redshift")
110
- # sw = data.data()["software"]
111
- # self.assertEqual(len(sw.supported_host_names()), 4)
112
-
113
- # def test_several_products_ignore_plugins(self):
114
- # data.init("redshift", "c4d")
115
- # sw = data.data()["software"]
116
- # self.assertEqual(len(sw.supported_host_names()), 2)
117
-
118
- # def test_linux_only_instance_types(self):
119
- # # self.override_default_cache(instance_types=LIN_INSTANCE_TYPES)
120
- # data.init()
121
- # h = data.data()["instance_types"]
122
- # self.assertEqual(len(h.instance_types.keys()), 4)
123
-
124
- # def test_linux_only_packages_when_linux_only_instance_types(self):
125
- # # self.override_default_cache(instance_types=LIN_INSTANCE_TYPES)
126
- # data.init("c4d")
127
- # sw = data.data()["software"]
128
- # self.assertEqual(len(sw.supported_host_names()), 1)
129
-
130
- # def test_platforms_method_only_linux(self):
131
- # self.override_default_cache(instance_types=LIN_INSTANCE_TYPES)/
132
- # data.init("c4d")
133
- # data.data()
134
- # self.assertEqual({"linux"}, data.platforms())
135
-
136
- # def test_many_products(self):
137
- # self.override_default_cache(instance_types=LIN_INSTANCE_TYPES)
138
- # data.init("c4d", "maya")
139
- # sw = data.data()["software"]
140
- # self.assertEqual(len(sw.supported_host_names()), 4)
141
-
142
- # def test_product_keyword_translates_to_single_arg(self):
143
- # data.init(product="c4d")
144
- # sw = data.data()["software"]
145
- # self.assertEqual(len(sw.supported_host_names()), 2)
146
-
147
- # def test_product_keyword_all_translates_to_all_products(self):
148
- # data.init(product="all")
149
- # sw = data.data()["software"]
150
- # self.assertEqual(len(sw.supported_host_names()), 11)
151
-
152
- # def test_data_raises_if_both_products_and_kwarg_given(self):
153
- # with self.assertRaises(ValueError):
154
- # data.init("maya", product="c4d")
155
-
156
- # def test_data_raises_if_products_and_kwarg_given(self):
157
- # with self.assertRaises(ValueError):
158
- # data.init("maya", product="c4d")
159
-
160
- class TestDataSmoke(unittest.TestCase):
161
-
162
- def test_smoke(self):
163
- self.assertTrue(True)
43
+ """Clean up after each test method."""
44
+ coredata.clear()
45
+
46
+ def test_init_with_single_product(self):
47
+ """Test initializing with a single product"""
48
+ coredata.init("maya-io")
49
+ self.assertEqual(coredata.products(), ["maya-io"])
50
+ self.assertEqual(coredata.platforms(), set(["windows", "linux"]))
51
+
52
+ def test_init_with_multiple_products(self):
53
+ """Test initializing with multiple products"""
54
+ coredata.init("maya-io", "nuke")
55
+ self.assertEqual(coredata.products(), ["maya-io", "nuke"])
56
+
57
+ def test_init_with_deprecated_product(self):
58
+ """Test initializing with deprecated product kwarg"""
59
+ coredata.init(product="maya-io")
60
+ self.assertEqual(coredata.products(), ["maya-io"])
61
+
62
+ def test_init_with_all_products(self):
63
+ """Test initializing with 'all' products"""
64
+ coredata.init(product="all")
65
+ self.assertEqual(coredata.products(), [])
66
+
67
+ def test_init_conflict_raises_error(self):
68
+ """Test that using both products arg and product kwarg raises error"""
69
+ with self.assertRaises(ValueError):
70
+ coredata.init("maya-io", product="nuke")
71
+
72
+ def test_data_requires_init(self):
73
+ """Test that data() raises error if not initialized"""
74
+ with self.assertRaises(ValueError):
75
+ coredata.data()
76
+
77
+ @patch('ciocore.data.api_client')
78
+ def test_data_fetching(self, mock_client):
79
+ """Test fetching data through the data() function"""
80
+ # Setup mock responses
81
+ mock_client.request_projects.return_value = self.mock_api_responses['projects']
82
+ mock_client.request_instance_types.return_value = self.mock_api_responses['instance_types']
83
+ mock_client.request_software_packages.return_value = self.mock_api_responses['software']
84
+ mock_client.request_extra_environment.return_value = self.mock_api_responses['extra_env']
85
+
86
+ coredata.init("maya-io")
87
+ result = coredata.data()
88
+
89
+ self.assertIn("projects", result)
90
+ self.assertIn("instance_types", result)
91
+ self.assertIn("software", result)
92
+ self.assertIn("extra_environment", result)
93
+
94
+ self.assertEqual(result["projects"], self.mock_api_responses["projects"])
95
+ self.assertIsInstance(result["instance_types"], coredata.HardwareSet)
96
+ self.assertIsInstance(result["software"], coredata.PackageTree)
97
+
98
+ @patch('ciocore.data.api_client')
99
+ def test_force_refresh(self, mock_client):
100
+ """Test forcing data refresh"""
101
+ # Setup mock responses
102
+ mock_client.request_projects.return_value = self.mock_api_responses['projects']
103
+ mock_client.request_instance_types.return_value = self.mock_api_responses['instance_types']
104
+ mock_client.request_software_packages.return_value = self.mock_api_responses['software']
105
+ mock_client.request_extra_environment.return_value = self.mock_api_responses['extra_env']
106
+
107
+ coredata.init("maya-io")
108
+ first_data = coredata.data()
109
+
110
+ # Second call without force should not make new API calls
111
+ mock_client.request_projects.reset_mock()
112
+ second_data = coredata.data()
113
+ mock_client.request_projects.assert_not_called()
114
+
115
+ # Call with force=True should make new API calls
116
+ third_data = coredata.data(force=True)
117
+ mock_client.request_projects.assert_called_once()
118
+
119
+ def test_valid_state(self):
120
+ """Test valid() function behavior"""
121
+ self.assertFalse(coredata.valid()) # Should be invalid before initialization
122
+
123
+ coredata.init("maya-io")
124
+ self.assertFalse(coredata.valid()) # Should be invalid before data is fetched
125
+
126
+ with patch('ciocore.data.api_client') as mock_client:
127
+ # Setup mock responses
128
+ mock_client.request_projects.return_value = self.mock_api_responses['projects']
129
+ mock_client.request_instance_types.return_value = self.mock_api_responses['instance_types']
130
+ mock_client.request_software_packages.return_value = self.mock_api_responses['software']
131
+ mock_client.request_extra_environment.return_value = self.mock_api_responses['extra_env']
132
+
133
+ coredata.data() # Fetch data
134
+ self.assertTrue(coredata.valid()) # Should be valid after data is fetched
135
+
136
+ coredata.clear()
137
+ self.assertFalse(coredata.valid()) # Should be invalid after clear
138
+
139
+ @patch('ciocore.data.api_client')
140
+ def test_platforms_filtering(self, mock_client):
141
+ """Test platform filtering based on instance types and software"""
142
+ # Setup mock responses
143
+ mock_client.request_projects.return_value = self.mock_api_responses['projects']
144
+ mock_client.request_instance_types.return_value = self.mock_api_responses['instance_types']
145
+ mock_client.request_software_packages.return_value = self.mock_api_responses['software']
146
+ mock_client.request_extra_environment.return_value = self.mock_api_responses['extra_env']
147
+
148
+ coredata.init("nuke") # nuke only supports linux
149
+ coredata.data()
150
+
151
+ # Should only have linux instance types since nuke only supports linux
152
+ self.assertEqual(coredata.platforms(), {"linux"})
153
+
154
+ @patch('ciocore.data.api_client')
155
+ def test_instances_filter(self, mock_client):
156
+ """Testing that instance_types is passed correctly to api_client"""
157
+ # Set up mock response
158
+ mock_client.request_instance_types.return_value = self.mock_api_responses['instance_types']
159
+ coredata.init("maya-io")
160
+
161
+ # Test with no filter
162
+ coredata.data()
163
+ mock_client.request_instance_types.assert_called_with(filter_param="")
164
+
165
+ # Test with filter and force=True
166
+ mock_client.request_instance_types.reset_mock()
167
+
168
+ instances_filter = "gpu.gpu_count=gte:1:int"
169
+ coredata.data(force=True, instances_filter=instances_filter)
170
+ mock_client.request_instance_types.assert_called_with(filter_param=instances_filter)
171
+
172
+ if __name__ == '__main__':
173
+ unittest.main()
tests/test_submit.py CHANGED
@@ -5,10 +5,7 @@
5
5
 
6
6
  import unittest
7
7
 
8
- try:
9
- from unittest.mock import MagicMock, patch
10
- except ImportError:
11
- from mock import MagicMock, patch
8
+ from unittest.mock import MagicMock, patch
12
9
 
13
10
 
14
11
  def get_required_args():
tests/test_uploader.py CHANGED
@@ -1,10 +1,7 @@
1
1
  import unittest
2
2
  import sys
3
3
 
4
- try:
5
- from unittest import mock
6
- except ImportError:
7
- import mock
4
+ from unittest import mock
8
5
 
9
6
  PY3 = sys.version_info >= (3, 0)
10
7
  BUILTIN_OPEN = "builtins.open" if PY3 else "__builtin__.open"
ciocore/compat.py DELETED
@@ -1,15 +0,0 @@
1
- import sys
2
- if sys.version_info < (3,):
3
- import codecs
4
- def u(x):
5
- return codecs.unicode_escape_decode(x)[0]
6
-
7
- text_type = unicode
8
- binary_type = str
9
- else:
10
- def u(x):
11
- return str(x)
12
-
13
- text_type = str
14
- binary_type = bytes
15
-