testingapi / client.py
Charan5775's picture
Upload 4 files
661c514 verified
import requests
import os
class FileServerClient:
def __init__(self, base_url="http://localhost:7860"):
self.base_url = base_url
self.access_codes = {} # Store filename to access code mapping
def upload_file(self, file_path):
"""Upload a single file to the server"""
if not os.path.exists(file_path):
print(f"Error: File {file_path} not found")
return
with open(file_path, 'rb') as f:
files = {'file': f}
response = requests.post(f"{self.base_url}/upload/", files=files)
result = response.json()
# Store the access code
if 'access_code' in result:
self.access_codes[os.path.basename(file_path)] = result['access_code']
return result
def upload_multiple_files(self, file_paths):
"""Upload multiple files to the server"""
files = []
for file_path in file_paths:
if os.path.exists(file_path):
files.append(('files', open(file_path, 'rb')))
else:
print(f"Warning: File {file_path} not found, skipping...")
response = requests.post(f"{self.base_url}/upload-multiple/", files=files)
result = response.json()
# Store access codes
if 'files' in result:
for file_info in result['files']:
self.access_codes[file_info['filename']] = file_info['access_code']
# Close all opened files
for _, file_obj in files:
file_obj.close()
return result
def list_files(self):
"""List all files on the server"""
response = requests.get(f"{self.base_url}/files/")
return response.json()
def download_file(self, access_code, save_path):
"""Download a file using its access code"""
response = requests.get(f"{self.base_url}/download/{access_code}", stream=True)
if response.status_code == 200:
with open(save_path, 'wb') as f:
for chunk in response.iter_content(chunk_size=8192):
f.write(chunk)
return True
else:
print(f"Error: {response.json()['detail']}")
return False
def delete_file(self, access_code):
"""Delete a file using its access code"""
response = requests.delete(f"{self.base_url}/delete/{access_code}")
return response.json()
def main():
# Create client instance
client = FileServerClient()
print("\n=== File Server Client Demo ===\n")
# 1. Upload a single file
print("1. Testing single file upload:")
test_file = "test_upload.txt"
with open(test_file, "w") as f:
f.write("This is a test file for upload!")
result = client.upload_file(test_file)
print(result)
access_code = result['access_code']
# 2. List files
print("\n2. Listing all files on server:")
files = client.list_files()
print(files)
# 3. Download the file using access code
print("\n3. Downloading the file:")
download_path = "downloaded_test.txt"
success = client.download_file(access_code, download_path)
if success:
print(f"File downloaded successfully to {download_path}")
# 4. Upload multiple files
print("\n4. Testing multiple file upload:")
test_file2 = "test_upload2.txt"
with open(test_file2, "w") as f:
f.write("This is another test file!")
result = client.upload_multiple_files([test_file, test_file2])
print(result)
# 5. Delete files using access codes
print("\n5. Deleting test files from server:")
for file_info in result['files']:
print(client.delete_file(file_info['access_code']))
# Clean up local test files
os.remove(test_file)
os.remove(test_file2)
os.remove(download_path)
if __name__ == "__main__":
main()