lightning-sdk 0.2.10__py3-none-any.whl → 0.2.11__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.
lightning_sdk/__init__.py CHANGED
@@ -31,6 +31,6 @@ __all__ = [
31
31
  "User",
32
32
  ]
33
33
 
34
- __version__ = "0.2.10"
34
+ __version__ = "0.2.11"
35
35
  _check_version_and_prompt_upgrade(__version__)
36
36
  _set_tqdm_envvars_noninteractive()
@@ -224,6 +224,7 @@ class DeploymentApi:
224
224
  def create_deployment(
225
225
  self,
226
226
  deployment: V1Deployment,
227
+ from_onboarding: Optional[bool] = None,
227
228
  ) -> V1Deployment:
228
229
  return self._client.jobs_service_create_deployment(
229
230
  project_id=deployment.project_id,
@@ -236,6 +237,7 @@ class DeploymentApi:
236
237
  replicas=deployment.replicas,
237
238
  spec=deployment.spec,
238
239
  strategy=deployment.strategy,
240
+ from_onboarding=from_onboarding,
239
241
  ),
240
242
  )
241
243
 
@@ -17,6 +17,7 @@ from lightning_sdk.lightning_cloud.openapi import (
17
17
  V1ClusterAccelerator,
18
18
  V1Endpoint,
19
19
  V1Job,
20
+ V1Model,
20
21
  V1ModelVersionArchive,
21
22
  V1MultiMachineJob,
22
23
  V1Project,
@@ -199,9 +200,7 @@ class TeamspaceApi:
199
200
 
200
201
  def delete_model(self, name: str, version: Optional[str], teamspace_id: str) -> None:
201
202
  """Delete a model or a version from the model store."""
202
- models = self.models_api.models_store_list_models(project_id=teamspace_id, name=name).models
203
- assert len(models) == 1, "Multiple models with the same name found"
204
- model = models[0]
203
+ model = self.get_model(teamspace_id=teamspace_id, model_name=name)
205
204
  # decide if delete only version of whole model
206
205
  if version:
207
206
  if version == "default":
@@ -257,7 +256,7 @@ class TeamspaceApi:
257
256
  if main_pbar:
258
257
  main_pbar.update(1)
259
258
 
260
- def complete_model_upload(self, model_id: str, version: str, teamspace_id: str) -> None:
259
+ def _complete_model_upload(self, model_id: str, version: str, teamspace_id: str) -> None:
261
260
  self.models_api.models_store_complete_model_upload(
262
261
  body=_DummyBody(),
263
262
  project_id=teamspace_id,
@@ -306,3 +305,29 @@ class TeamspaceApi:
306
305
  project_id=teamspace_id, id=cloud_account
307
306
  )
308
307
  return response.accelerator
308
+
309
+ def get_model(self, teamspace_id: str, model_id: Optional[str] = None, model_name: Optional[str] = None) -> V1Model:
310
+ if model_id:
311
+ return self.models_api.models_store_get_model(project_id=teamspace_id, model_id=model_id)
312
+ if not model_name:
313
+ raise ValueError("Either `model_id` or `model_name` must be provided.")
314
+ # list models with specific name
315
+ models = self.models_api.models_store_list_models(project_id=teamspace_id, name=model_name).models
316
+ if len(models) == 0:
317
+ raise ValueError(f"Model '{model_name}' does not exist.")
318
+ if len(models) > 1:
319
+ raise RuntimeError(f"Model name '{model_name}' is not a unique with this teamspace.")
320
+ # if there is only one model with the name, return it
321
+ return models[0]
322
+
323
+ def list_models(self, teamspace_id: str) -> List[V1Model]:
324
+ response = self.models_api.models_store_list_models(project_id=teamspace_id)
325
+ return response.models
326
+
327
+ def list_model_versions(
328
+ self, teamspace_id: str, model_id: Optional[str] = None, model_name: Optional[str] = None
329
+ ) -> List[V1ModelVersionArchive]:
330
+ if model_name and not model_id:
331
+ model_id = self.get_model(teamspace_id=teamspace_id, model_name=model_name).id
332
+ response = self.models_api.models_store_list_model_versions(project_id=teamspace_id, model_id=model_id)
333
+ return response.versions
@@ -333,12 +333,13 @@ class _Onboarding:
333
333
  return _OnboardingStatus.ONBOARDED
334
334
  return _OnboardingStatus.ONBOARDING
335
335
 
336
- def _wait(self, timeout: int = _POLL_TIMEOUT) -> None:
336
+ def _wait_user_onboarding(self, timeout: int = _POLL_TIMEOUT) -> None:
337
337
  """Wait for user onboarding if they can join the teamspace otherwise move to select a teamspace."""
338
338
  status = self.status
339
339
  if status == _OnboardingStatus.ONBOARDED:
340
340
  return
341
341
 
342
+ self.console.print("Waiting for account setup. Visit lightning.ai")
342
343
  start_time = datetime.now()
343
344
  while self.status != _OnboardingStatus.ONBOARDED:
344
345
  time.sleep(5)
@@ -351,9 +352,13 @@ class _Onboarding:
351
352
 
352
353
  def get_cloudspace_id(self, teamspace: Teamspace) -> Optional[str]:
353
354
  cloudspaces: List[V1CloudSpace] = self.client.cloud_space_service_list_cloud_spaces(teamspace.id).cloudspaces
354
- for cloudspace in cloudspaces:
355
- if "scratch-studio" in cloudspace.name or "scratch-studio" in cloudspace.display_name:
356
- return cloudspace.id
355
+ cloudspaces = sorted(cloudspaces, key=lambda cloudspace: cloudspace.created_at, reverse=True)
356
+ if len(cloudspaces) == 0:
357
+ raise RuntimeError("Error creating deployment! Finish account setup at lightning.ai first.")
358
+ # get the first cloudspace
359
+ cloudspace = cloudspaces[0]
360
+ if "scratch-studio" in cloudspace.name or "scratch-studio" in cloudspace.display_name:
361
+ return cloudspace.id
357
362
  return None
358
363
 
359
364
  def select_teamspace(self, teamspace: Optional[str], org: Optional[str], user: Optional[str]) -> Teamspace:
@@ -368,15 +373,8 @@ class _Onboarding:
368
373
 
369
374
  # Run only when user hasn't completed onboarding yet.
370
375
  menu = _TeamspacesMenu()
371
- possible_teamspaces = menu._get_possible_teamspaces(self.user)
372
- can_join_org = self.can_join_org
373
-
374
- if len(possible_teamspaces) == 1 and can_join_org:
375
- # wait for onboarding to complete so that user can join an org
376
- # create deployment in the org default teamspace
377
- self.console.print("Waiting for account setup. Visit lightning.ai")
378
- self._wait()
379
-
376
+ self._wait_user_onboarding()
377
+ # Onboarding has been completed - user already selected organization if they could
380
378
  possible_teamspaces = menu._get_possible_teamspaces(self.user)
381
379
  if len(possible_teamspaces) == 1:
382
380
  # User didn't select any org
@@ -465,13 +463,16 @@ def _handle_cloud(
465
463
  authenticate(shall_confirm=not non_interactive)
466
464
  user_status = poll_verified_status()
467
465
  cloudspace_id: Optional[str] = None
466
+ from_onboarding = False
468
467
  if not user_status["verified"]:
469
468
  console.print("❌ Verify phone number to continue. Visit lightning.ai.", style="red")
470
469
  return
471
470
  if not user_status["onboarded"]:
471
+ console.print("onboarding user")
472
472
  onboarding = _Onboarding(console)
473
473
  resolved_teamspace = onboarding.select_teamspace(teamspace, org, user)
474
474
  cloudspace_id = onboarding.get_cloudspace_id(resolved_teamspace)
475
+ from_onboarding = True
475
476
  else:
476
477
  resolved_teamspace = select_teamspace(teamspace, org, user)
477
478
 
@@ -517,6 +518,7 @@ def _handle_cloud(
517
518
  replicas=replicas,
518
519
  include_credentials=include_credentials,
519
520
  cloudspace_id=cloudspace_id,
521
+ from_onboarding=from_onboarding,
520
522
  )
521
523
  console.print(f"🚀 Deployment started, access at [i]{deployment_status.get('url')}[/i]")
522
524
  if user_status["onboarded"]:
@@ -120,6 +120,7 @@ class Deployment:
120
120
  cloudspace_id: Optional[str] = None,
121
121
  quantity: Optional[int] = None,
122
122
  include_credentials: Optional[bool] = None,
123
+ from_onboarding: Optional[bool] = None,
123
124
  ) -> None:
124
125
  """The Lightning AI Deployment.
125
126
 
@@ -146,6 +147,7 @@ class Deployment:
146
147
  cloudspace_id: Connect deployment to a Studio.
147
148
  quantity: The number of machines per replica to deploy.
148
149
  include_credentials: Whether to include the environment variables for the SDK to authenticate
150
+ from_onboarding: Whether the deployment is from onboarding.
149
151
 
150
152
  Note:
151
153
  Since a teamspace can either be owned by an org or by a user directly,
@@ -182,7 +184,8 @@ class Deployment:
182
184
  include_credentials=include_credentials if include_credentials is not None else True,
183
185
  ),
184
186
  strategy=to_strategy(release_strategy),
185
- )
187
+ ),
188
+ from_onboarding=from_onboarding,
186
189
  )
187
190
 
188
191
  # Overrides the name
lightning_sdk/models.py CHANGED
@@ -4,6 +4,7 @@ from pathlib import Path
4
4
  from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple, Union
5
5
 
6
6
  from lightning_sdk.api import OrgApi, TeamspaceApi, UserApi
7
+ from lightning_sdk.lightning_cloud.openapi import V1ModelVersionArchive
7
8
  from lightning_sdk.lightning_cloud.openapi.models import V1Membership, V1OwnerType
8
9
  from lightning_sdk.lightning_cloud.openapi.rest import ApiException
9
10
  from lightning_sdk.user import User
@@ -184,4 +185,19 @@ def delete_model(
184
185
  name = _extend_model_name_with_teamspace(name)
185
186
  org_name, teamspace_name, model_name, version = _parse_org_teamspace_model_version(name)
186
187
  teamspace = _get_teamspace(name=teamspace_name, organization=org_name)
187
- teamspace.delete_model(name=model_name)
188
+ teamspace.delete_model(name=f"{model_name}:{version}" if version else model_name)
189
+
190
+
191
+ def list_model_versions(
192
+ name: str,
193
+ ) -> List[V1ModelVersionArchive]:
194
+ """List all versions of a model.
195
+
196
+ Args:
197
+ name: The name of the model you want to list versions for.
198
+ This should have the format <ORGANIZATION-NAME>/<TEAMSPACE-NAME>/<MODEL-NAME>.
199
+ """
200
+ name = _extend_model_name_with_teamspace(name)
201
+ org_name, teamspace_name, model_name, _ = _parse_org_teamspace_model_version(name)
202
+ teamspace = _get_teamspace(name=teamspace_name, organization=org_name)
203
+ return teamspace.list_model_versions(name=model_name)
lightning_sdk/serve.py CHANGED
@@ -249,6 +249,7 @@ Update [underline]{os.path.abspath("Dockerfile")}[/underline] to add any additio
249
249
  port: Optional[int] = 8000,
250
250
  include_credentials: Optional[bool] = True,
251
251
  cloudspace_id: Optional[str] = None,
252
+ from_onboarding: bool = False,
252
253
  ) -> dict:
253
254
  """Run a deployment on the cloud. If the deployment already exists, it will be updated.
254
255
 
@@ -266,6 +267,7 @@ Update [underline]{os.path.abspath("Dockerfile")}[/underline] to add any additio
266
267
  port: The port to run the deployment on. Defaults to 8000.
267
268
  include_credentials: Whether to include credentials in the deployment. Defaults to True.
268
269
  cloudspace_id: Connect to a Studio.
270
+ from_onboarding: Deployment created during onboarding.
269
271
 
270
272
  Returns:
271
273
  dict: The deployment and the URL of the deployment.
@@ -300,6 +302,7 @@ Update [underline]{os.path.abspath("Dockerfile")}[/underline] to add any additio
300
302
  ports=[port],
301
303
  include_credentials=include_credentials,
302
304
  cloudspace_id=cloudspace_id,
305
+ from_onboarding=from_onboarding,
303
306
  )
304
307
 
305
308
  return {"deployment": deployment, "url": url}
@@ -6,7 +6,7 @@ from typing import TYPE_CHECKING, List, Optional, Tuple, Union
6
6
  import lightning_sdk
7
7
  from lightning_sdk.agents import Agent
8
8
  from lightning_sdk.api import TeamspaceApi
9
- from lightning_sdk.lightning_cloud.openapi import V1ProjectClusterBinding
9
+ from lightning_sdk.lightning_cloud.openapi import V1Model, V1ModelVersionArchive, V1ProjectClusterBinding
10
10
  from lightning_sdk.machine import Machine
11
11
  from lightning_sdk.models import UploadedModelInfo
12
12
  from lightning_sdk.organization import Organization
@@ -317,7 +317,7 @@ class Teamspace:
317
317
  teamspace_id=self.id,
318
318
  progress_bar=progress_bar,
319
319
  )
320
- self._teamspace_api.complete_model_upload(
320
+ self._teamspace_api._complete_model_upload(
321
321
  model_id=model.model_id,
322
322
  version=model.version,
323
323
  teamspace_id=self.id,
@@ -389,6 +389,18 @@ class Teamspace:
389
389
  name, version = _parse_model_and_version(name)
390
390
  self._teamspace_api.delete_model(name=name, version=version, teamspace_id=self.id)
391
391
 
392
+ def list_models(self) -> List[V1Model]:
393
+ """List all models in the model store."""
394
+ return self._teamspace_api.list_models(teamspace_id=self.id)
395
+
396
+ def list_model_versions(self, name: str) -> List[V1ModelVersionArchive]:
397
+ """List all versions of a model in the model store."""
398
+ if ":" in name:
399
+ raise ValueError(
400
+ "Model name should not contain a version tag. Please provide the model name without a version."
401
+ )
402
+ return self._teamspace_api.list_model_versions(teamspace_id=self.id, model_name=name)
403
+
392
404
 
393
405
  def _list_files(path: Union[str, Path]) -> Tuple[List[Path], List[str]]:
394
406
  """List all folders in a directory and return them as a list and relative path."""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lightning_sdk
3
- Version: 0.2.10
3
+ Version: 0.2.11
4
4
  Summary: SDK to develop using Lightning AI Studios
5
5
  Author-email: Lightning-AI <justus@lightning.ai>
6
6
  License: MIT License
@@ -1,32 +1,32 @@
1
1
  docs/source/conf.py,sha256=r8yX20eC-4mHhMTd0SbQb5TlSWHhO6wnJ0VJ_FBFpag,13249
2
- lightning_sdk/__init__.py,sha256=-t2JkyMlxbkPfbSjgk84YQIBy91o4GStvVhwQxiDHAc,1105
2
+ lightning_sdk/__init__.py,sha256=CndcMqG7IuvuyazHxh3jvRLoKhhy72_ST2Y_mfjGIeM,1105
3
3
  lightning_sdk/agents.py,sha256=ly6Ma1j0ZgGPFyvPvMN28JWiB9dATIstFa5XM8pMi6I,1577
4
4
  lightning_sdk/ai_hub.py,sha256=iI1vNhgcz_Ff1c3rN1ogN7dK-r-HXRj6NMtS2cA14UA,6925
5
5
  lightning_sdk/constants.py,sha256=ztl1PTUBULnqTf3DyKUSJaV_O20hNtUYT6XvAYIrmIk,749
6
6
  lightning_sdk/helpers.py,sha256=KWMWnORHItIIA3PGn71YPs-7RjzGi8IXa2kQ5Qo4U8M,2459
7
7
  lightning_sdk/lit_container.py,sha256=8ys49TXI9MO89jLTA7MwDrKrssTRARAIF9OVmolDLq0,5273
8
8
  lightning_sdk/machine.py,sha256=EMr-ulyYEYhIkKFnGBOofnFf4asndTSeoOQxlyd3xW4,3632
9
- lightning_sdk/models.py,sha256=1v0eNZ-KQvXBAG3IOpyYbCuErqmT5gWK_mtwKOarkBI,7163
9
+ lightning_sdk/models.py,sha256=tPFiiDQiDsFhfStcVPH5_PcujbBEfKS2IB5FS9NfwZk,7838
10
10
  lightning_sdk/organization.py,sha256=WCfzdgjtvY1_A07DnxOpp74V2JR2gQwtXbIEcFDnoVU,1232
11
11
  lightning_sdk/owner.py,sha256=t5svD2it4C9pbSpVuG9WJL46CYi37JXNziwnXxhiU5U,1361
12
12
  lightning_sdk/plugin.py,sha256=_K0m-PSyXE86B-SFQVQm0JEvfdIVXeARmnlATCAiMdo,14632
13
- lightning_sdk/serve.py,sha256=tv7x86T682EE3j6a88bpnR5J__COtPT6rMOctyqBIIg,11663
13
+ lightning_sdk/serve.py,sha256=vtnxjJRLcpipTgM_64WNZls_zW1uOdSiPX4-OHFYQhk,11814
14
14
  lightning_sdk/status.py,sha256=lLGAuSvXBoXQFEEsEYwdCi0RcSNatUn5OPjJVjDtoM0,386
15
15
  lightning_sdk/studio.py,sha256=hyvAiVhkETAtbu0RRF1Aw6F8Y__E1SSAmsB8PHfmqHo,19935
16
- lightning_sdk/teamspace.py,sha256=mCUwNJdQsl-hcu8q1qs7jj-0dheHXrNHuybaDVh6dL0,15921
16
+ lightning_sdk/teamspace.py,sha256=GL0fiZ7oz3Uz1qftDmSFZScpuUm3H4kBcm4abv06xLM,16533
17
17
  lightning_sdk/user.py,sha256=vdn8pZqkAZO0-LoRsBdg0TckRKtd_H3QF4gpiZcl4iY,1130
18
18
  lightning_sdk/api/__init__.py,sha256=Qn2VVRvir_gO7w4yxGLkZY-R3T7kdiTPKgQ57BhIA9k,413
19
19
  lightning_sdk/api/agents_api.py,sha256=G47TbFo9kYqnBMqdw2RW-lfS1VAUBSXDmzs6fpIEMUs,4059
20
20
  lightning_sdk/api/ai_hub_api.py,sha256=azqDZ-PzasVAcoQHno7k7OO_xFOHQ4NDozxF8jEh83Y,7864
21
21
  lightning_sdk/api/cluster_api.py,sha256=OxAhEdNt-9bYQ-u3MCADdVGsilXf2e7Wcxvb73Cmn8k,916
22
- lightning_sdk/api/deployment_api.py,sha256=-zoIuMhZBsgona2__msh_Vm6e2m1Z323J-43by37hj8,22639
22
+ lightning_sdk/api/deployment_api.py,sha256=a3QIlQDQBAUv-acU_pLdBGbGQMsfPvfvex2ShlxfotY,22736
23
23
  lightning_sdk/api/job_api.py,sha256=_mMAI_BG_48i-BLwCP_U72zgmM5zYa2KUZ7u66HWkIc,13568
24
24
  lightning_sdk/api/lit_container_api.py,sha256=WQRNTOu74wSTfg0TKLxGPDRvnu2o0hCOw9fOTr-56Tw,11206
25
25
  lightning_sdk/api/mmt_api.py,sha256=-v7ATab-ThAM-HRClS92Ehxuu9MlBfdKWWFCGvVUHiM,8962
26
26
  lightning_sdk/api/org_api.py,sha256=Ze3z_ATVrukobujV5YdC42DKj45Vuwl7X52q_Vr-o3U,803
27
27
  lightning_sdk/api/pipeline_api.py,sha256=P5P9C6qOpyBGU0t5N68h1LuFAsAKmPPgkac6uObrYKw,1676
28
28
  lightning_sdk/api/studio_api.py,sha256=BqmGmotUJrM-RoMfwYSdymAir491tBkPsIlvdJqOoUw,25858
29
- lightning_sdk/api/teamspace_api.py,sha256=4sCKenZOVIueMLwtCPZseMtEfRwI4PIznC2o0fnMdeY,11823
29
+ lightning_sdk/api/teamspace_api.py,sha256=syN_FK8nHhLl3FG9Oxe8L6aK5YbOMn_GQlkijhTRJA8,13147
30
30
  lightning_sdk/api/user_api.py,sha256=sL7RIjjtmZmvCZWx7BBZslhj1BeNh4Idn-RVcdmf7M0,2598
31
31
  lightning_sdk/api/utils.py,sha256=3KvVmucfrUIPV0HC0y5DHhWB0b3D5tvLFXSrDU6XjcI,23833
32
32
  lightning_sdk/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -49,7 +49,7 @@ lightning_sdk/cli/list.py,sha256=bH_rX9J_Ubb9dkF2fpoZf0zMXH9YoEjcm63gk5v0zs4,109
49
49
  lightning_sdk/cli/mmts_menu.py,sha256=HUXo3ZoZ3fWOCNWTQWoJgUlFXYq5uVm_6uFjAq7BDe8,2219
50
50
  lightning_sdk/cli/open.py,sha256=sgMLWBnkXdIq8H9XK_rph2bye3b07AKTJBQIk9fCGVc,1937
51
51
  lightning_sdk/cli/run.py,sha256=8JZiDrKwDhlaTOJd6qq2mCWJRqKm6shCWLzpbmFYIkE,13929
52
- lightning_sdk/cli/serve.py,sha256=L6sHbC0sPt47ns0VeGluhrbkq5bxJuegg66eSJebrew,18756
52
+ lightning_sdk/cli/serve.py,sha256=lNSa2tg66vLCrtYikNmFAiG2fMX-luhpnizyyB1Xlqk,18968
53
53
  lightning_sdk/cli/start.py,sha256=jUk52lkEFC_fqiEPkwM8GwE68WMNEtzBuzjkvr3POd0,1840
54
54
  lightning_sdk/cli/stop.py,sha256=5nCrUe1BONpX1nKNhbSFqLaXXKaRhSO7PvM1BVYLgn4,2864
55
55
  lightning_sdk/cli/studios_menu.py,sha256=TA9rO6_fFHGMz0Nt4rJ6iV80X5pZE4xShrSiyXoU-oQ,4129
@@ -57,7 +57,7 @@ lightning_sdk/cli/switch.py,sha256=qLvDoQRldCNgO1XvIGg-i-GyqnkHVb_U1-X4svqeNNU,1
57
57
  lightning_sdk/cli/teamspace_menu.py,sha256=C3g3spTKgtMwoK7pnooy0MBPz4AKhFjcObkvZyZ4v04,3797
58
58
  lightning_sdk/cli/upload.py,sha256=jQbWVlwxsDp3YnFtZTXFeK_PqDssNpyFzL8wV3NkWk8,13849
59
59
  lightning_sdk/deployment/__init__.py,sha256=dXsa4psDzFYFklsq3JC-2V_L4FQjGZnQAf-ZiVlqG9c,545
60
- lightning_sdk/deployment/deployment.py,sha256=dPLXxPNSi86oZiCLNJFxaiMoPe1PJyLlZfG0L_sBMfQ,18356
60
+ lightning_sdk/deployment/deployment.py,sha256=KF7YtYQm9GCiUrPtSNnJLIUIi6BqQ2dvLRSJ-xpbBzQ,18522
61
61
  lightning_sdk/job/__init__.py,sha256=1MxjQ6rHkyUHCypSW9RuXuVMVH11WiqhIXcU2LCFMwE,64
62
62
  lightning_sdk/job/base.py,sha256=TS5KavtfBAFbLbNqqumEizY9edjO1joSmtUdcO5CThQ,17748
63
63
  lightning_sdk/job/job.py,sha256=1Xf0ne4wwXpkb_GJgWD8mfueJZoKR8G4lC5T6OXijlw,13075
@@ -1004,9 +1004,9 @@ lightning_sdk/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSu
1004
1004
  lightning_sdk/utils/dynamic.py,sha256=glUTO1JC9APtQ6Gr9SO02a3zr56-sPAXM5C3NrTpgyQ,1959
1005
1005
  lightning_sdk/utils/enum.py,sha256=h2JRzqoBcSlUdanFHmkj_j5DleBHAu1esQYUsdNI-hU,4106
1006
1006
  lightning_sdk/utils/resolve.py,sha256=6qlBUkOmcFTjhQx_CAGfnvWBbMYp6XrCV_sX_IqplLE,6748
1007
- lightning_sdk-0.2.10.dist-info/LICENSE,sha256=uFIuZwj5z-4TeF2UuacPZ1o17HkvKObT8fY50qN84sg,1064
1008
- lightning_sdk-0.2.10.dist-info/METADATA,sha256=cF9VhuDfRfSM1wx3EMN0XgcSuVL94cAUo-Z5pNrDwUA,3992
1009
- lightning_sdk-0.2.10.dist-info/WHEEL,sha256=iAkIy5fosb7FzIOwONchHf19Qu7_1wCWyFNR5gu9nU0,91
1010
- lightning_sdk-0.2.10.dist-info/entry_points.txt,sha256=msB9PJWIJ784dX-OP8by51d4IbKYH3Fj1vCuA9oXjHY,68
1011
- lightning_sdk-0.2.10.dist-info/top_level.txt,sha256=ps8doKILFXmN7F1mHncShmnQoTxKBRPIcchC8TpoBw4,19
1012
- lightning_sdk-0.2.10.dist-info/RECORD,,
1007
+ lightning_sdk-0.2.11.dist-info/LICENSE,sha256=uFIuZwj5z-4TeF2UuacPZ1o17HkvKObT8fY50qN84sg,1064
1008
+ lightning_sdk-0.2.11.dist-info/METADATA,sha256=c2dtRhsFy2j9rD0ioEa85TOrK3eSSlHCPmFGtBfiuzY,3992
1009
+ lightning_sdk-0.2.11.dist-info/WHEEL,sha256=iAkIy5fosb7FzIOwONchHf19Qu7_1wCWyFNR5gu9nU0,91
1010
+ lightning_sdk-0.2.11.dist-info/entry_points.txt,sha256=msB9PJWIJ784dX-OP8by51d4IbKYH3Fj1vCuA9oXjHY,68
1011
+ lightning_sdk-0.2.11.dist-info/top_level.txt,sha256=ps8doKILFXmN7F1mHncShmnQoTxKBRPIcchC8TpoBw4,19
1012
+ lightning_sdk-0.2.11.dist-info/RECORD,,