@@ -85,9 +85,18 @@ async def get_cluster(self, name: str) -> Cluster:
8585 async def create_cluster (
8686 self ,
8787 name : str ,
88+ default_credits : Decimal | None = None ,
89+ default_quota : Quota = Quota (),
8890 ) -> Cluster :
8991 ...
9092
93+ @abstractmethod
94+ async def update_cluster (
95+ self ,
96+ cluster : Cluster ,
97+ ) -> None :
98+ ...
99+
91100 @abstractmethod
92101 async def delete_cluster (self , name : str ) -> Cluster :
93102 ...
@@ -414,6 +423,8 @@ async def create_org_cluster(
414423 org_name : str ,
415424 quota : Quota = Quota (),
416425 balance : Balance = Balance (),
426+ default_quota : Quota = Quota (),
427+ default_credits : Decimal | None = None ,
417428 ) -> OrgCluster :
418429 ...
419430
@@ -710,6 +721,10 @@ async def update_user(
710721 def _parse_cluster_payload (self , payload : dict [str , Any ]) -> Cluster :
711722 return Cluster (
712723 name = payload ["name" ],
724+ default_credits = Decimal (payload ["default_credits" ])
725+ if payload .get ("default_credits" )
726+ else None ,
727+ default_quota = self ._parse_quota (payload .get ("default_quota" )),
713728 )
714729
715730 async def list_clusters (self ) -> list [Cluster ]:
@@ -730,15 +745,42 @@ async def get_cluster(self, name: str) -> Cluster:
730745 async def create_cluster (
731746 self ,
732747 name : str ,
748+ default_credits : Decimal | None = None ,
749+ default_quota : Quota = Quota (),
733750 ) -> Cluster :
734- payload = {
751+ payload : dict [ str , Any ] = {
735752 "name" : name ,
753+ "default_quota" : {},
736754 }
755+ if default_credits :
756+ payload ["default_credits" ] = str (default_credits )
757+ if default_quota .total_running_jobs :
758+ payload ["default_quota" ]["total_running_jobs" ] = str (
759+ default_quota .total_running_jobs
760+ )
737761 async with self ._request ("POST" , "clusters" , json = payload ) as resp :
738762 resp .raise_for_status ()
739763 raw_cluster = await resp .json ()
740764 return self ._parse_cluster_payload (raw_cluster )
741765
766+ async def update_cluster (
767+ self ,
768+ cluster : Cluster ,
769+ ) -> None :
770+ payload : dict [str , Any ] = {
771+ "name" : cluster .name ,
772+ }
773+ if cluster .default_credits :
774+ payload ["default_credits" ] = str (cluster .default_credits )
775+ if cluster .default_quota .total_running_jobs :
776+ payload ["default_quota" ] = {
777+ "total_running_jobs" : str (cluster .default_quota .total_running_jobs )
778+ }
779+ async with self ._request (
780+ "PUT" , f"clusters/{ cluster .name } " , json = payload
781+ ) as resp :
782+ resp .raise_for_status ()
783+
742784 async def delete_cluster (self , name : str ) -> Cluster :
743785 async with self ._request ("DELETE" , f"clusters/{ name } " ) as resp :
744786 resp .raise_for_status ()
@@ -1273,6 +1315,10 @@ def _parse_org_cluster(
12731315 org_name = payload ["org_name" ],
12741316 balance = self ._parse_balance (payload .get ("balance" )),
12751317 quota = self ._parse_quota (payload .get ("quota" )),
1318+ default_credits = Decimal (payload ["default_credits" ])
1319+ if payload .get ("default_credits" )
1320+ else None ,
1321+ default_quota = self ._parse_quota (payload .get ("default_quota" )),
12761322 )
12771323
12781324 async def create_org_cluster (
@@ -1281,18 +1327,27 @@ async def create_org_cluster(
12811327 org_name : str ,
12821328 quota : Quota = Quota (),
12831329 balance : Balance = Balance (),
1330+ default_quota : Quota = Quota (),
1331+ default_credits : Decimal | None = None ,
12841332 ) -> OrgCluster :
12851333 payload : dict [str , Any ] = {
12861334 "org_name" : org_name ,
12871335 "quota" : {},
12881336 "balance" : {},
1337+ "default_quota" : {},
12891338 }
12901339 if quota .total_running_jobs is not None :
12911340 payload ["quota" ]["total_running_jobs" ] = quota .total_running_jobs
12921341 if balance .credits is not None :
12931342 payload ["balance" ]["credits" ] = str (balance .credits )
12941343 if balance .spent_credits is not None :
12951344 payload ["balance" ]["spent_credits" ] = str (balance .spent_credits )
1345+ if default_credits :
1346+ payload ["default_credits" ] = str (default_credits )
1347+ if default_quota .total_running_jobs is not None :
1348+ payload ["default_quota" ][
1349+ "total_running_jobs"
1350+ ] = default_quota .total_running_jobs
12961351 async with self ._request (
12971352 "POST" ,
12981353 f"clusters/{ cluster_name } /orgs" ,
@@ -1332,6 +1387,7 @@ async def update_org_cluster(self, org_cluster: OrgCluster) -> OrgCluster:
13321387 "org_name" : org_cluster .org_name ,
13331388 "quota" : {},
13341389 "balance" : {},
1390+ "default_quota" : {},
13351391 }
13361392 if org_cluster .quota .total_running_jobs is not None :
13371393 payload ["quota" ][
@@ -1341,6 +1397,12 @@ async def update_org_cluster(self, org_cluster: OrgCluster) -> OrgCluster:
13411397 payload ["balance" ]["credits" ] = str (org_cluster .balance .credits )
13421398 if org_cluster .balance .spent_credits is not None :
13431399 payload ["balance" ]["spent_credits" ] = str (org_cluster .balance .spent_credits )
1400+ if org_cluster .default_credits :
1401+ payload ["default_credits" ] = str (org_cluster .default_credits )
1402+ if org_cluster .default_quota .total_running_jobs is not None :
1403+ payload ["default_quota" ][
1404+ "total_running_jobs"
1405+ ] = org_cluster .default_quota .total_running_jobs
13441406 async with self ._request (
13451407 "PUT" ,
13461408 f"clusters/{ org_cluster .cluster_name } /orgs/{ org_cluster .org_name } " ,
@@ -1741,7 +1803,7 @@ class AdminClientDummy(AdminClientABC):
17411803 name = "user" ,
17421804 email = "email@example.com" ,
17431805 )
1744- DUMMY_CLUSTER = Cluster (name = "default" )
1806+ DUMMY_CLUSTER = Cluster (name = "default" , default_credits = None , default_quota = Quota () )
17451807 DUMMY_CLUSTER_USER = ClusterUserWithInfo (
17461808 cluster_name = "default" ,
17471809 user_name = "user" ,
@@ -1809,9 +1871,17 @@ async def get_cluster(self, name: str) -> Cluster:
18091871 async def create_cluster (
18101872 self ,
18111873 name : str ,
1874+ default_credits : Decimal | None = None ,
1875+ default_quota : Quota = Quota (),
18121876 ) -> Cluster :
18131877 return self .DUMMY_CLUSTER
18141878
1879+ async def update_cluster (
1880+ self ,
1881+ cluster : Cluster ,
1882+ ) -> None :
1883+ pass
1884+
18151885 async def delete_cluster (self , name : str ) -> Cluster :
18161886 pass
18171887
@@ -2126,6 +2196,8 @@ async def create_org_cluster(
21262196 org_name : str ,
21272197 quota : Quota = Quota (),
21282198 balance : Balance = Balance (),
2199+ default_quota : Quota = Quota (),
2200+ default_credits : Decimal | None = None ,
21292201 ) -> OrgCluster :
21302202 return self .DUMMY_ORG_CLUSTER
21312203
0 commit comments