1111)
1212
1313from ..exc import MultipleResultsFound , NoResultFound
14- from ..http import session
14+ from ..http import Session , session as global_session
1515
1616
1717@dataclass
@@ -46,19 +46,21 @@ def to_dict(self):
4646
4747class Retrievable (Resource ):
4848 @classmethod
49- def retrieve (cls , id : str ) -> Resource :
49+ def retrieve (
50+ cls , id : str , * , session : Session = global_session
51+ ) -> Resource :
5052 resp = session .get (f'/{ cls ._resource } /{ id } ' )
5153 return cls ._from_dict (resp )
5254
53- def refresh (self ):
54- new = self .retrieve (self .id )
55+ def refresh (self , * , session : Session = global_session ):
56+ new = self .retrieve (self .id , session = session )
5557 for attr , value in new .__dict__ .items ():
5658 setattr (self , attr , value )
5759
5860
5961class Creatable (Resource ):
6062 @classmethod
61- def _create (cls , ** data ) -> Resource :
63+ def _create (cls , * , session : Session = global_session , * *data ) -> Resource :
6264 resp = session .post (cls ._resource , data )
6365 return cls ._from_dict (resp )
6466
@@ -68,7 +70,9 @@ class Updateable(Resource):
6870 updated_at : dt .datetime
6971
7072 @classmethod
71- def _update (cls , id : str , ** data ) -> Resource :
73+ def _update (
74+ cls , id : str , * , session : Session = global_session , ** data
75+ ) -> Resource :
7276 resp = session .patch (f'/{ cls ._resource } /{ id } ' , data )
7377 return cls ._from_dict (resp )
7478
@@ -80,7 +84,9 @@ class Queryable(Resource):
8084 created_at : dt .datetime
8185
8286 @classmethod
83- def one (cls , ** query_params ) -> Resource :
87+ def one (
88+ cls , * , session : Session = global_session , ** query_params
89+ ) -> Resource :
8490 q = cls ._query_params (limit = 2 , ** query_params )
8591 resp = session .get (cls ._resource , q .dict ())
8692 items = resp ['items' ]
@@ -92,7 +98,9 @@ def one(cls, **query_params) -> Resource:
9298 return cls ._from_dict (items [0 ])
9399
94100 @classmethod
95- def first (cls , ** query_params ) -> Optional [Resource ]:
101+ def first (
102+ cls , * , session : Session = global_session , ** query_params
103+ ) -> Optional [Resource ]:
96104 q = cls ._query_params (limit = 1 , ** query_params )
97105 resp = session .get (cls ._resource , q .dict ())
98106 try :
@@ -104,13 +112,18 @@ def first(cls, **query_params) -> Optional[Resource]:
104112 return rv
105113
106114 @classmethod
107- def count (cls , ** query_params ) -> int :
115+ def count (
116+ cls , * , session : Session = global_session , ** query_params
117+ ) -> int :
108118 q = cls ._query_params (count = True , ** query_params )
109119 resp = session .get (cls ._resource , q .dict ())
110120 return resp ['count' ]
111121
112122 @classmethod
113- def all (cls , ** query_params ) -> Generator [Resource , None , None ]:
123+ def all (
124+ cls , * , session : Session = global_session , ** query_params
125+ ) -> Generator [Resource , None , None ]:
126+ session = session or global_session
114127 q = cls ._query_params (** query_params )
115128 next_page_uri = f'{ cls ._resource } ?{ urlencode (q .dict ())} '
116129 while next_page_uri :
0 commit comments