22import logging
33import re
44from collections import defaultdict
5+ from collections .abc import Iterable
56from typing import Any , Literal
67
78import requests
@@ -25,16 +26,16 @@ def __init__(
2526 self ,
2627 extra_filters : dict [str , dict [Operators , FilterValue ]] | None = None ,
2728 community_cloud : bool = True ,
29+ order : Iterable [tuple [str , str ]] = [("score" , "desc" )],
2830 ):
2931 self .extra_filters = extra_filters
3032 self .community_cloud = community_cloud
33+ self .order = list (order )
3134
3235 def get (
3336 self , query_filter : QueryFilter | None = None , balance_resources : bool = True
3437 ) -> list [RawCatalogItem ]:
35- filters : dict [str , Any ] = self .make_filters (
36- query_filter or QueryFilter (), community_cloud = self .community_cloud
37- )
38+ filters : dict [str , Any ] = self .make_filters (query_filter or QueryFilter ())
3839 if self .extra_filters :
3940 for key , constraints in self .extra_filters .items ():
4041 for op , value in constraints .items ():
@@ -85,10 +86,7 @@ def get(
8586 instance_offers .append (spot_offer )
8687 return instance_offers
8788
88- @staticmethod
89- def make_filters (
90- q : QueryFilter , community_cloud : bool = True
91- ) -> dict [str , dict [Operators , FilterValue ]]:
89+ def make_filters (self , q : QueryFilter ) -> dict [str , dict [Operators , FilterValue ]]:
9290 filters = defaultdict (dict )
9391 if q .min_cpu is not None :
9492 filters ["cpu_cores" ]["gte" ] = q .min_cpu
@@ -132,11 +130,11 @@ def make_filters(
132130 # Datacenter offers map to Vast's "server cloud" scope.
133131 # When community_cloud is enabled, keep scope unfiltered so both
134132 # server and community offers are returned.
135- if not community_cloud :
133+ if not self . community_cloud :
136134 filters ["datacenter" ]["eq" ] = True
137135 filters ["rentable" ]["eq" ] = True
138136 filters ["rented" ]["eq" ] = False
139- filters ["order" ] = [[ "score" , "desc" ]]
137+ filters ["order" ] = self . order
140138 return filters
141139
142140 @staticmethod
0 commit comments