Builds form parameters. :param files: File parameters. :return: Form parameters with files.
(
self,
files: Dict[str, Union[str, bytes, List[str], List[bytes], Tuple[str, bytes]]],
)
| 546 | return "&".join(["=".join(map(str, item)) for item in new_params]) |
| 547 | |
| 548 | def files_parameters( |
| 549 | self, |
| 550 | files: Dict[str, Union[str, bytes, List[str], List[bytes], Tuple[str, bytes]]], |
| 551 | ): |
| 552 | """Builds form parameters. |
| 553 | |
| 554 | :param files: File parameters. |
| 555 | :return: Form parameters with files. |
| 556 | """ |
| 557 | params = [] |
| 558 | for k, v in files.items(): |
| 559 | if isinstance(v, str): |
| 560 | with open(v, 'rb') as f: |
| 561 | filename = os.path.basename(f.name) |
| 562 | filedata = f.read() |
| 563 | elif isinstance(v, bytes): |
| 564 | filename = k |
| 565 | filedata = v |
| 566 | elif isinstance(v, tuple): |
| 567 | filename, filedata = v |
| 568 | elif isinstance(v, list): |
| 569 | for file_param in v: |
| 570 | params.extend(self.files_parameters({k: file_param})) |
| 571 | continue |
| 572 | else: |
| 573 | raise ValueError("Unsupported file value") |
| 574 | mimetype = ( |
| 575 | mimetypes.guess_type(filename)[0] |
| 576 | or 'application/octet-stream' |
| 577 | ) |
| 578 | params.append( |
| 579 | tuple([k, tuple([filename, filedata, mimetype])]) |
| 580 | ) |
| 581 | return params |
| 582 | |
| 583 | def select_header_accept(self, accepts: List[str]) -> Optional[str]: |
| 584 | """Returns `Accept` based on an array of accepts provided. |