Skip to content

Commit 2269890

Browse files
committed
Extending clonable models and fixing shared resources cloning
1 parent 8775be0 commit 2269890

File tree

7 files changed

+47
-8
lines changed

7 files changed

+47
-8
lines changed

HISTORY.rst

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@
33
History
44
-------
55

6+
9.6.2 (2023-08-02)
7+
------------------
8+
9+
- Extending cloning to all available models and WhizzML scripts.
10+
- Fixing shared resources cloning.
11+
612
9.6.1 (2023-08-01)
713
------------------
814

bigml/api.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@
119119
LINEAR_REGRESSION_PATH, LINEAR_REGRESSION_RE, SCRIPT_PATH, SCRIPT_RE,
120120
EXECUTION_PATH, EXECUTION_RE, LIBRARY_PATH, LIBRARY_RE, STATUS_PATH,
121121
IRREGULAR_PLURALS, RESOURCES_WITH_FIELDS, FIELDS_PARENT,
122-
EXTERNAL_CONNECTOR_PATH, EXTERNAL_CONNECTOR_RE)
122+
EXTERNAL_CONNECTOR_PATH, EXTERNAL_CONNECTOR_RE, CLONABLE_PATHS)
123123

124124
from bigml.api_handlers.resourcehandler import (
125125
get_resource, get_resource_type, check_resource_type, get_source_id,
@@ -405,6 +405,11 @@ def __init__(self, username=None, api_key=None,
405405
resource_type, resource_type))
406406
self.listers[resource_type] = getattr(self,
407407
"list_%s" % method_name)
408+
self.cloners = {}
409+
for resource_type in CLONABLE_PATHS:
410+
method_name = RENAMED_RESOURCES.get(resource_type, resource_type)
411+
self.cloners[resource_type] = getattr(self,
412+
"clone_%s" % method_name)
408413

409414
def prepare_image_fields(self, model_info, input_data):
410415
"""Creating a source for each image field used by the model

bigml/api_handlers/fusionhandler.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,18 @@ def update_fusion(self, fusion, changes):
105105
message="A fusion id is needed.")
106106
return self.update_resource(fusion, changes)
107107

108+
def clone_fusion(self, fusion,
109+
args=None, wait_time=3, retries=10):
110+
"""Creates a cloned fusion from an existing `fusion`
111+
112+
"""
113+
create_args = self._set_clone_from_args(
114+
fusion, "fusion", args=args, wait_time=wait_time,
115+
retries=retries)
116+
117+
body = json.dumps(create_args)
118+
return self._create(self.fusion_url, body)
119+
108120
def delete_fusion(self, fusion, query_string=''):
109121
"""Deletes a fusion.
110122

bigml/api_handlers/resourcehandler.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -850,7 +850,7 @@ def _set_clone_from_args(self, origin, resource_type, args=None,
850850
if args is not None:
851851
create_args.update(args)
852852

853-
if origin["object"].get("shared_hash"):
853+
if isinstance(origin, dict) and origin["object"].get("shared_hash"):
854854
attr = "shared_hash"
855855
origin_id = origin["object"][attr]
856856
else:

bigml/api_handlers/scripthandler.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,18 @@ def update_script(self, script, changes):
164164
message="A script id is needed.")
165165
return self.update_resource(script, changes)
166166

167+
def clone_script(self, script,
168+
args=None, wait_time=3, retries=10):
169+
"""Creates a cloned script from an existing `script`
170+
171+
"""
172+
create_args = self._set_clone_from_args(
173+
script, "script", args=args, wait_time=wait_time,
174+
retries=retries)
175+
176+
body = json.dumps(create_args)
177+
return self._create(self.script_url, body)
178+
167179
def delete_script(self, script, query_string=''):
168180
"""Deletes a script.
169181

bigml/constants.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,12 @@
8080
ASSOCIATION_PATH,
8181
TOPIC_MODEL_PATH,
8282
TIME_SERIES_PATH,
83-
FUSION_PATH
83+
FUSION_PATH,
84+
PCA_PATH
8485
]
8586

87+
CLONABLE_PATHS = [SOURCE_PATH, DATASET_PATH, SCRIPT_PATH]
88+
CLONABLE_PATHS.extend(MODELS_PATHS)
8689

8790
PMML_MODELS = [
8891
MODEL_PATH,
@@ -95,7 +98,8 @@
9598
ID_PATTERN = '[a-f0-9]{24}'
9699
SHARED_PATTERN = '[a-zA-Z0-9]{24,30}'
97100
ID_RE = re.compile(r'^%s$' % ID_PATTERN)
98-
SOURCE_RE = re.compile(r'^%s/%s$' % (SOURCE_PATH, ID_PATTERN))
101+
SOURCE_RE = re.compile(r'^%s/%s|^shared/%s/%s$' % (SOURCE_PATH, ID_PATTERN,
102+
SOURCE_PATH, SHARED_PATTERN))
99103
DATASET_RE = re.compile(r'^(public/)?%s/%s$|^shared/%s/%s$' % (
100104
DATASET_PATH, ID_PATTERN, DATASET_PATH, SHARED_PATTERN))
101105
MODEL_RE = re.compile(r'^(public/)?%s/%s$|^shared/%s/%s$' % (
@@ -146,8 +150,8 @@
146150
(FORECAST_PATH, ID_PATTERN))
147151
DEEPNET_RE = re.compile(r'^%s/%s|^shared/%s/%s$' % \
148152
(DEEPNET_PATH, ID_PATTERN, DEEPNET_PATH, SHARED_PATTERN))
149-
OPTIML_RE = re.compile(r'^%s/%s|^shared/%s/%s$' % \
150-
(OPTIML_PATH, ID_PATTERN, OPTIML_PATH, SHARED_PATTERN))
153+
OPTIML_RE = re.compile(r'^%s/%s$' % \
154+
(OPTIML_PATH, ID_PATTERN))
151155
FUSION_RE = re.compile(r'^%s/%s|^shared/%s/%s$' % \
152156
(FUSION_PATH, ID_PATTERN, FUSION_PATH, SHARED_PATTERN))
153157
PCA_RE = re.compile(r'^%s/%s|^shared/%s/%s$' % \
@@ -158,7 +162,7 @@
158162
LINEAR_REGRESSION_RE = re.compile(r'^%s/%s|^shared/%s/%s$' % \
159163
(LINEAR_REGRESSION_PATH, ID_PATTERN,
160164
LINEAR_REGRESSION_PATH, SHARED_PATTERN))
161-
SCRIPT_RE = re.compile(r'^%s/%s|^shared/%s/%s$' % \
165+
SCRIPT_RE = re.compile(r'^(public/)?%s/%s$|^shared/%s/%s$' % \
162166
(SCRIPT_PATH, ID_PATTERN, SCRIPT_PATH, SHARED_PATTERN))
163167
EXECUTION_RE = re.compile(r'^%s/%s|^shared/%s/%s$' % \
164168
(EXECUTION_PATH, ID_PATTERN, EXECUTION_PATH, SHARED_PATTERN))

bigml/version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = '9.6.1'
1+
__version__ = '9.6.2'

0 commit comments

Comments
 (0)