@@ -133,7 +133,35 @@ async def get_body(self) -> bytes:
133133 return self .request .body
134134
135135 async def get_form_data (self ) -> FormData :
136- return self .request .form_data
136+ form_data = self .request .form_data
137+ # Handle legacy case where form_data might be a dict
138+ if isinstance (form_data , dict ):
139+ return FormData (
140+ files = form_data .get ("files" , {}), form = form_data .get ("form" , {})
141+ )
142+ return form_data
143+
144+ @property
145+ def url (self ) -> str :
146+ scheme = self .request .consumer .scope ["scheme" ]
147+ host = self .headers .get ("host" , "localhost" )
148+ path = self .request .consumer .scope ["path" ]
149+ query_string = self .request .consumer .scope ["query_string" ]
150+ url = f"{ scheme } ://{ host } { path } "
151+ if query_string :
152+ url += f"?{ query_string .decode ()} "
153+ return url
154+
155+ @property
156+ def cookies (self ) -> Mapping [str , str ]:
157+ cookie_header = self .headers .get ("cookie" , "" )
158+ cookies = {}
159+ if cookie_header :
160+ for cookie in cookie_header .split (";" ):
161+ if "=" in cookie :
162+ key , value = cookie .split ("=" , 1 )
163+ cookies [key .strip ()] = value .strip ()
164+ return cookies
137165
138166
139167class SyncChannelsRequestAdapter (BaseChannelsRequestAdapter , SyncHTTPRequestAdapter ):
@@ -143,11 +171,50 @@ def body(self) -> bytes:
143171
144172 @property
145173 def post_data (self ) -> Mapping [str , Union [str , bytes ]]:
146- return self .request .form_data ["form" ]
174+ form_data = self .request .form_data
175+ # Handle legacy case where form_data might be a dict
176+ if isinstance (form_data , dict ):
177+ return form_data .get ("form" , {})
178+ return form_data .form
147179
148180 @property
149181 def files (self ) -> Mapping [str , Any ]:
150- return self .request .form_data ["files" ]
182+ form_data = self .request .form_data
183+ # Handle legacy case where form_data might be a dict
184+ if isinstance (form_data , dict ):
185+ return form_data .get ("files" , {})
186+ return form_data .files
187+
188+ def get_form_data (self ) -> FormData :
189+ form_data = self .request .form_data
190+ # Handle legacy case where form_data might be a dict
191+ if isinstance (form_data , dict ):
192+ return FormData (
193+ files = form_data .get ("files" , {}), form = form_data .get ("form" , {})
194+ )
195+ return form_data
196+
197+ @property
198+ def url (self ) -> str :
199+ scheme = self .request .consumer .scope ["scheme" ]
200+ host = self .headers .get ("host" , "localhost" )
201+ path = self .request .consumer .scope ["path" ]
202+ query_string = self .request .consumer .scope ["query_string" ]
203+ url = f"{ scheme } ://{ host } { path } "
204+ if query_string :
205+ url += f"?{ query_string .decode ()} "
206+ return url
207+
208+ @property
209+ def cookies (self ) -> Mapping [str , str ]:
210+ cookie_header = self .headers .get ("cookie" , "" )
211+ cookies = {}
212+ if cookie_header :
213+ for cookie in cookie_header .split (";" ):
214+ if "=" in cookie :
215+ key , value = cookie .split ("=" , 1 )
216+ cookies [key .strip ()] = value .strip ()
217+ return cookies
151218
152219
153220class BaseGraphQLHTTPConsumer (ChannelsConsumer , AsyncHttpConsumer ):
0 commit comments