@@ -67,9 +67,22 @@ def predefined_bodies(self) -> Dict:
6767 """
6868 return self ._predefined_bodies
6969
70- def set_default_body (self , query : Query , offset : int = 0 , size : int = 100 , sortField : str = "ticker" , sortType : str = "desc" , quoteType : str = "equity" , userId : str = "" , userIdType : str = "guid" ) -> None :
70+ def set_default_body (self , query : Query , offset : int = 0 , size : int = 100 , sortField : str = "ticker" , sortType : str = "desc" , quoteType : str = "equity" , userId : str = "" , userIdType : str = "guid" ) -> 'Screener' :
7171 """
72- Set the default body using a custom query
72+ Set the default body using a custom query.
73+
74+ Args:
75+ query (Query): The Query object to set as the body.
76+ offset (Optional[int]): The offset for the results. Defaults to 0.
77+ size (Optional[int]): The number of results to return. Defaults to 100. Maximum is 250 as set by Yahoo.
78+ sortField (Optional[str]): The field to sort the results by. Defaults to "ticker".
79+ sortType (Optional[str]): The type of sorting (e.g., "asc" or "desc"). Defaults to "desc".
80+ quoteType (Optional[str]): The type of quote (e.g., "equity"). Defaults to "equity".
81+ userId (Optional[str]): The user ID. Defaults to an empty string.
82+ userIdType (Optional[str]): The type of user ID (e.g., "guid"). Defaults to "guid".
83+
84+ Returns:
85+ Screener: self
7386
7487 Example:
7588
@@ -89,11 +102,18 @@ def set_default_body(self, query: Query, offset: int = 0, size: int = 100, sortF
89102 "userId" : userId ,
90103 "userIdType" : userIdType
91104 }
105+ return self
92106
93- def set_predefined_body (self , k : str ) -> None :
107+ def set_predefined_body (self , predefined_key : str ) -> 'Screener' :
94108 """
95109 Set a predefined body
96110
111+ Args:
112+ predefined_key (str): key to one of predefined screens
113+
114+ Returns:
115+ Screener: self
116+
97117 Example:
98118
99119 .. code-block:: python
@@ -106,16 +126,23 @@ def set_predefined_body(self, k: str) -> None:
106126 :attr:`Screener.predefined_bodies <yfinance.Screener.predefined_bodies>`
107127 supported predefined screens
108128 """
109- body = PREDEFINED_SCREENER_BODY_MAP .get (k , None )
129+ body = PREDEFINED_SCREENER_BODY_MAP .get (predefined_key , None )
110130 if not body :
111- raise ValueError (f'Invalid key { k } provided for predefined screener' )
131+ raise ValueError (f'Invalid key { predefined_key } provided for predefined screener' )
112132
113133 self ._body_updated = True
114134 self ._body = body
135+ return self
115136
116- def set_body (self , body : Dict ) -> None :
137+ def set_body (self , body : Dict ) -> 'Screener' :
117138 """
118- Set the fully custom body
139+ Set the fully custom body using dictionary input
140+
141+ Args:
142+ body (Dict): full query body
143+
144+ Returns:
145+ Screener: self
119146
120147 Example:
121148
@@ -142,11 +169,17 @@ def set_body(self, body: Dict) -> None:
142169
143170 self ._body_updated = True
144171 self ._body = body
172+ return self
145173
146-
147- def patch_body (self , values : Dict ) -> None :
174+ def patch_body (self , values : Dict ) -> 'Screener' :
148175 """
149- Patch parts of the body
176+ Patch parts of the body using dictionary input
177+
178+ Args:
179+ body (Dict): partial query body
180+
181+ Returns:
182+ Screener: self
150183
151184 Example:
152185
@@ -161,10 +194,14 @@ def patch_body(self, values: Dict) -> None:
161194 self ._body_updated = True
162195 for k in values :
163196 self ._body [k ] = values [k ]
197+ return self
164198
165199 def _validate_body (self ) -> None :
166200 if not all (k in self ._body for k in self ._accepted_body_keys ):
167201 raise ValueError ("Missing required keys in body" )
202+
203+ if self ._body ["size" ] > 250 :
204+ raise ValueError ("Yahoo limits query size to 250. Please decrease the size of the query." )
168205
169206 def _fetch (self ) -> Dict :
170207 params_dict = {"corsDomain" : "finance.yahoo.com" , "formatted" : "false" , "lang" : "en-US" , "region" : "US" }
0 commit comments