File size: 1,578 Bytes
bbd909e
 
 
 
 
 
 
e0cbbfe
bbd909e
 
 
 
 
e0cbbfe
 
bbd909e
e0cbbfe
 
bbd909e
 
 
e0cbbfe
bbd909e
 
e0cbbfe
bbd909e
 
 
e0cbbfe
bbd909e
 
 
e0cbbfe
bbd909e
 
 
e0cbbfe
bbd909e
 
e0cbbfe
bbd909e
 
 
 
e0cbbfe
 
 
bbd909e
e0cbbfe
bbd909e
e0cbbfe
bbd909e
 
e0cbbfe
bbd909e
 
e0cbbfe
bbd909e
 
e0cbbfe
bbd909e
e0cbbfe
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import asyncio
from pydantic import BaseModel


class File(BaseModel):
    name: str
    content: bytes

    @classmethod
    def from_path(cls, path: str):
        with open(path, "rb") as f:
            path = path.split("/")[-1]
            return cls(name=path, content=f.read())

    @classmethod
    async def afrom_path(cls, path: str):
        await asyncio.to_thread(cls.from_path, path)

    @classmethod
    def from_url(cls, url: str):
        import requests  # type: ignore

        r = requests.get(url)
        return cls(name=url.split("/")[-1], content=r.content)

    @classmethod
    async def afrom_url(cls, url: str):
        import aiohttp

        async with aiohttp.ClientSession() as session:
            async with session.get(url) as r:
                return cls(name=url.split("/")[-1], content=await r.read())

    def save(self, path: str):
        with open(path, "wb") as f:
            f.write(self.content)

    async def asave(self, path: str):
        await asyncio.to_thread(self.save, path)

    def show_image(self):
        try:
            from PIL import Image  # type: ignore
        except ImportError:
            print(
                "Please install it with `pip install codeinterpreterapi[image_support]` to display images."
            )
            exit(1)

        from io import BytesIO

        img_io = BytesIO(self.content)
        img = Image.open(img_io)

        # Display the image
        img.show()

    def __str__(self):
        return self.name

    def __repr__(self):
        return f"File(name={self.name})"