truefoundry 0.5.6rc1__py3-none-any.whl → 0.5.7rc1__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 truefoundry might be problematic. Click here for more details.

@@ -54,10 +54,21 @@ def _get_default_spec_file():
54
54
  default=True,
55
55
  help="Wait and tail the deployment progress",
56
56
  )
57
+ @click.option(
58
+ "--force-deploy/--no-force-deploy",
59
+ is_flag=True,
60
+ show_default=True,
61
+ default=False,
62
+ help="Force create a new deployment by canceling any ongoing deployments",
63
+ )
57
64
  @click.pass_context
58
65
  @handle_exception_wrapper
59
66
  def deploy_command(
60
- ctx: click.Context, file: str, workspace_fqn: Optional[str], wait: bool
67
+ ctx: click.Context,
68
+ file: str,
69
+ workspace_fqn: Optional[str],
70
+ wait: bool,
71
+ force_deploy: bool,
61
72
  ):
62
73
  if ctx.invoked_subcommand is not None:
63
74
  return
@@ -74,7 +85,9 @@ def deploy_command(
74
85
  application_definition = yaml.safe_load(f)
75
86
 
76
87
  application = Application.parse_obj(application_definition)
77
- application.deploy(workspace_fqn=workspace_fqn, wait=wait)
88
+ application.deploy(
89
+ workspace_fqn=workspace_fqn, wait=wait, force_deploy=force_deploy
90
+ )
78
91
  sys.exit(0)
79
92
 
80
93
  click.echo(
@@ -239,12 +239,16 @@ class ServiceFoundryServiceClient(BaseServiceFoundryServiceClient):
239
239
 
240
240
  @check_min_cli_version
241
241
  def deploy_application(
242
- self, workspace_id: str, application: auto_gen_models.Workflow
242
+ self,
243
+ workspace_id: str,
244
+ application: auto_gen_models.Workflow,
245
+ force_deploy: bool,
243
246
  ) -> Deployment:
244
247
  data = {
245
248
  "workspaceId": workspace_id,
246
249
  "name": application.name,
247
250
  "manifest": application.dict(exclude_none=True),
251
+ "forceDeploy": force_deploy,
248
252
  }
249
253
  logger.debug(json.dumps(data))
250
254
  url = f"{self._api_server_url}/{VERSION_PREFIX}/deployment"
@@ -249,7 +249,10 @@ or pass it explicitly using `--workspace-fqn` argument on CLI.
249
249
 
250
250
 
251
251
  def deploy_component(
252
- component: Component, workspace_fqn: Optional[str] = None, wait: bool = True
252
+ component: Component,
253
+ workspace_fqn: Optional[str] = None,
254
+ wait: bool = True,
255
+ force_deploy: bool = False,
253
256
  ) -> Deployment:
254
257
  _warn_when_gpu_selected_without_cuda(component=component)
255
258
  workspace_fqn = _resolve_workspace_fqn(
@@ -269,7 +272,9 @@ def deploy_component(
269
272
  )
270
273
  client = ServiceFoundryServiceClient()
271
274
  response = client.deploy_application(
272
- workspace_id=workspace_id, application=updated_component
275
+ workspace_id=workspace_id,
276
+ application=updated_component,
277
+ force_deploy=force_deploy,
273
278
  )
274
279
  logger.info(
275
280
  "🚀 Deployment started for application '%s'. Deployment FQN is '%s'.",
@@ -1,7 +1,7 @@
1
1
  import os
2
2
  import sys
3
3
  from pathlib import Path
4
- from typing import Dict, List, Optional, Union
4
+ from typing import Callable, Dict, List, Optional, Union
5
5
 
6
6
  import requirements
7
7
  from flytekit.configuration import (
@@ -37,13 +37,16 @@ from truefoundry.workflow.workflow import (
37
37
 
38
38
 
39
39
  def _handle_code_upload_for_workflow(
40
- workflow: auto_gen_models.Workflow, workspace_fqn: str
40
+ workflow: auto_gen_models.Workflow,
41
+ workspace_fqn: str,
42
+ upload_code_package: Callable[[str, str, str], str],
41
43
  ) -> auto_gen_models.Workflow:
42
44
  new_workflow = workflow.copy(deep=True)
43
45
  new_workflow.source = local_source_to_remote_source(
44
46
  local_source=workflow.source,
45
47
  workspace_fqn=workspace_fqn,
46
48
  component_name=workflow.name,
49
+ upload_code_package=upload_code_package,
47
50
  )
48
51
  return new_workflow
49
52
 
@@ -270,6 +273,7 @@ def deploy_workflow(
270
273
  workflow: auto_gen_models.Workflow,
271
274
  workspace_fqn: str,
272
275
  wait: bool = True,
276
+ force_deploy: bool = False,
273
277
  ) -> Deployment:
274
278
  _generate_manifest_for_workflow(workflow)
275
279
  _validate_workspace_fqn(workflow, workspace_fqn)
@@ -283,12 +287,14 @@ def deploy_workflow(
283
287
  logger.info(
284
288
  f"Deploying workflow {workflow.name} to workspace {workspace_fqn} ({workspace_id})"
285
289
  )
290
+ client = ServiceFoundryServiceClient()
286
291
 
287
292
  workflow = _handle_code_upload_for_workflow(
288
- workflow=workflow, workspace_fqn=workspace_fqn
293
+ workflow=workflow,
294
+ workspace_fqn=workspace_fqn,
295
+ upload_code_package=client.upload_code_package,
289
296
  )
290
297
 
291
- client = ServiceFoundryServiceClient()
292
298
  deployment = client.deploy_application(
293
299
  workspace_id=workspace_id, application=workflow
294
300
  )
@@ -11,8 +11,15 @@ class DeployablePatchedModelBase(BaseModel):
11
11
  class Config:
12
12
  extra = "forbid"
13
13
 
14
- def deploy(self, workspace_fqn: str, wait: bool = True) -> Deployment:
15
- return deploy_component(component=self, workspace_fqn=workspace_fqn, wait=wait)
14
+ def deploy(
15
+ self, workspace_fqn: str, wait: bool = True, force_deploy: bool = False
16
+ ) -> Deployment:
17
+ return deploy_component(
18
+ component=self,
19
+ workspace_fqn=workspace_fqn,
20
+ wait=wait,
21
+ force_deploy=force_deploy,
22
+ )
16
23
 
17
24
 
18
25
  class Service(models.Service, DeployablePatchedModelBase):
@@ -73,7 +80,9 @@ class SSHServer(models.SSHServer, DeployablePatchedModelBase):
73
80
 
74
81
 
75
82
  class Application(models.Application, DeployablePatchedModelBase):
76
- def deploy(self, workspace_fqn: str, wait: bool = True) -> Deployment:
83
+ def deploy(
84
+ self, workspace_fqn: str, wait: bool = True, force_deploy: bool = False
85
+ ) -> Deployment:
77
86
  if isinstance(self.__root__, models.Workflow):
78
87
  from truefoundry.deploy.v2.lib.deploy_workflow import deploy_workflow
79
88
 
@@ -81,10 +90,14 @@ class Application(models.Application, DeployablePatchedModelBase):
81
90
  workflow=self.__root__,
82
91
  workspace_fqn=workspace_fqn,
83
92
  wait=wait,
93
+ force_deploy=force_deploy,
84
94
  )
85
95
  else:
86
96
  return deploy_component(
87
- component=self.__root__, workspace_fqn=workspace_fqn, wait=wait
97
+ component=self.__root__,
98
+ workspace_fqn=workspace_fqn,
99
+ wait=wait,
100
+ force_deploy=force_deploy,
88
101
  )
89
102
 
90
103
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: truefoundry
3
- Version: 0.5.6rc1
3
+ Version: 0.5.7rc1
4
4
  Summary: TrueFoundry CLI
5
5
  Author: Abhishek Choudhary
6
6
  Author-email: abhishek@truefoundry.com
@@ -61,7 +61,7 @@ truefoundry/deploy/cli/commands/apply_command.py,sha256=Y2e_C8HVpo8CssVod-3JRz-8
61
61
  truefoundry/deploy/cli/commands/build_command.py,sha256=zJBywMatbpUlXx5O2aqpEVmPeBIJ9RNnG9abSc8C8CE,1234
62
62
  truefoundry/deploy/cli/commands/create_command.py,sha256=rCajvQvAfZU10nDZOYpRACbAATH1zj52ihTWrhnLLUc,1829
63
63
  truefoundry/deploy/cli/commands/delete_command.py,sha256=JMibxvt1rsZ8sODa0jI1e6vavjN8Pv04ttVFURSTKTw,2362
64
- truefoundry/deploy/cli/commands/deploy_command.py,sha256=YW4OG-5ZD1BZn82ckrNInNRHWxVOwaUjHhRTgfCEUCU,3890
64
+ truefoundry/deploy/cli/commands/deploy_command.py,sha256=JW7_gUwM7sg7cNkK-28AdNdgFj26Oj2KjkqIO-CvZFg,4172
65
65
  truefoundry/deploy/cli/commands/deploy_init_command.py,sha256=g-jBfrEmhZ0TDWsyqPDn4K6q33EqJSGmBTt1eMYig-w,600
66
66
  truefoundry/deploy/cli/commands/get_command.py,sha256=HZQGWib-qrS0RdzctRDwDLfMGu0wqWkAM1u26cTZlsc,5944
67
67
  truefoundry/deploy/cli/commands/list_command.py,sha256=zKu_JWY35eMIzgSNFYtmwi2uezZ4k-8yk3C1Vqsvshc,4470
@@ -81,7 +81,7 @@ truefoundry/deploy/io/output_callback.py,sha256=V2YwUFec4G4a67lM4r-x_64AqdOVNo_9
81
81
  truefoundry/deploy/io/rich_output_callback.py,sha256=TJLiRD-EnFVwgcepxR7WN0koKqW1X2DevETPhNPi_nU,829
82
82
  truefoundry/deploy/lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
83
83
  truefoundry/deploy/lib/clients/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
84
- truefoundry/deploy/lib/clients/servicefoundry_client.py,sha256=5U-r9BGhpcyt1LtzxYIwKno6i9Qf-m27L40tPfeKMyI,26358
84
+ truefoundry/deploy/lib/clients/servicefoundry_client.py,sha256=twgEUKSES8HWewMj-8xeD1O3AOz9kfhaaZA4D0BATxk,26444
85
85
  truefoundry/deploy/lib/const.py,sha256=Wg0GDnfFu-g1fJr4lU80NH2ULw0R0dYjV7LnW-PbOeM,173
86
86
  truefoundry/deploy/lib/dao/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
87
87
  truefoundry/deploy/lib/dao/application.py,sha256=oMszpueXPUfTUuN_XdKwoRjQyqAgWHhZ-10cbprCVdM,9226
@@ -98,9 +98,9 @@ truefoundry/deploy/lib/win32.py,sha256=1RcvPTdlOAJ48rt8rCbE2Ufha2ztRqBAE9dueNXAr
98
98
  truefoundry/deploy/python_deploy_codegen.py,sha256=qJHH1BJQII9e6PhkcRFYiE_3De7_VMMm8nM4AX5Eq1o,6513
99
99
  truefoundry/deploy/v2/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
100
100
  truefoundry/deploy/v2/lib/__init__.py,sha256=WEiVMZXOVljzEE3tpGJil14liIn_PCDoACJ6b3tZ6sI,188
101
- truefoundry/deploy/v2/lib/deploy.py,sha256=bkVdVhxxyO0SMMOrpxc6CgIN0lLKf8aMWkXp1Yk298w,12356
102
- truefoundry/deploy/v2/lib/deploy_workflow.py,sha256=6Y4PNhd5PCc_4TjpcIZPkr6FCm3BNIQ_SsJTvpUu7a0,12579
103
- truefoundry/deploy/v2/lib/deployable_patched_models.py,sha256=FmpZWpSbBTHe4yt0XMIPgdCNy_Rw1aXQCt8icv8TcWE,3701
101
+ truefoundry/deploy/v2/lib/deploy.py,sha256=Uk4osyx7uGfYWgyzd6FlmDEnR6tnIjDdytIlCQAq9Xs,12441
102
+ truefoundry/deploy/v2/lib/deploy_workflow.py,sha256=NM6MDdJ7qeqr1HPM5dLLhwkshQ3OweKQOFjzRZ_2c5w,12797
103
+ truefoundry/deploy/v2/lib/deployable_patched_models.py,sha256=6zLJmzRfKXoYa151lc_WUIUOc4wBtNthFfGS9IWMrQc,3990
104
104
  truefoundry/deploy/v2/lib/models.py,sha256=pSolLMTArDuYpeNsmeeS5DWliloN_iCDfZSpRllMHUg,1120
105
105
  truefoundry/deploy/v2/lib/patched_models.py,sha256=-YnzXSabKs8XDx2I5zYjSKj1lM2qf-L4huewtHSvnP4,16310
106
106
  truefoundry/deploy/v2/lib/source.py,sha256=wArU8AwSy7U9EUGLEMmB4Ke7ZwgZWmh8fFU-PACogIk,9347
@@ -367,7 +367,7 @@ truefoundry/workflow/remote_filesystem/tfy_signed_url_client.py,sha256=xcT0wQmQl
367
367
  truefoundry/workflow/remote_filesystem/tfy_signed_url_fs.py,sha256=nSGPZu0Gyd_jz0KsEE-7w_BmnTD8CVF1S8cUJoxaCbc,13305
368
368
  truefoundry/workflow/task.py,sha256=34m55mALXx6ko9o5HkK6FDtMajdvJzBhOsHwDM2RcBA,1779
369
369
  truefoundry/workflow/workflow.py,sha256=WaTqUjhwfAXDWu4E5ehuwAxrCbDJkoAf1oWmR2E9Qy0,4575
370
- truefoundry-0.5.6rc1.dist-info/METADATA,sha256=gyC5cfqMcw0-catsE0shKVkzS4W68Ifj5WC-2LI8fBw,2887
371
- truefoundry-0.5.6rc1.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
372
- truefoundry-0.5.6rc1.dist-info/entry_points.txt,sha256=TXvUxQkI6zmqJuycPsyxEIMr3oqfDjgrWj0m_9X12x4,95
373
- truefoundry-0.5.6rc1.dist-info/RECORD,,
370
+ truefoundry-0.5.7rc1.dist-info/METADATA,sha256=x5GilnYFCgdiFnR85bO_VZSTstYfnHbumizGDELekAM,2887
371
+ truefoundry-0.5.7rc1.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
372
+ truefoundry-0.5.7rc1.dist-info/entry_points.txt,sha256=TXvUxQkI6zmqJuycPsyxEIMr3oqfDjgrWj0m_9X12x4,95
373
+ truefoundry-0.5.7rc1.dist-info/RECORD,,