projectal.entities.file

  1from projectal.entity import Entity
  2from projectal.linkers import *
  3from projectal import api
  4
  5
  6class File(
  7    Entity,
  8    CompanyLinker,
  9    CustomerLinker,
 10    FolderLinker,
 11    ProjectLinker,
 12    StaffLinker,
 13    TaskLinker,
 14    TaskTemplateLinker,
 15    NoteLinker,
 16    TagLinker,
 17):
 18    """
 19    Implementation of the [File](https://projectal.com/docs/latest/#tag/File) API.
 20    """
 21
 22    _path = "file"
 23    _name = "file"
 24    _links = [NoteLinker, TagLinker]
 25    _links_reverse = [
 26        CompanyLinker,
 27        CustomerLinker,
 28        FolderLinker,
 29        ProjectLinker,
 30        StaffLinker,
 31        TaskLinker,
 32        TaskTemplateLinker,
 33    ]
 34
 35    @classmethod
 36    def create(cls, file_data, entity):
 37        """
 38        Create a File entity with file data.
 39
 40        `file_data` is the raw file data in bytes
 41
 42        `entity` is the File entity and its fields.
 43        """
 44        payload = entity
 45        url = "/api/file/upload"
 46        file = {"file": file_data}
 47        response = api.post(url, payload, file=file)
 48        entity["uuId"] = response["jobClue"]["uuId"]
 49        return cls(entity)
 50
 51    @classmethod
 52    def get(cls, uuId, links=None):
 53        """Get the File entity. No file data is included."""
 54        link_set = cls._get_linkset(links)
 55        url = "/api/file/get?uuId={}".format(uuId)
 56        if link_set:
 57            url += "&links=" + ",".join(link_set)
 58        return cls(api.get(url))
 59
 60    @classmethod
 61    def update(cls, entity, file_data=None):
 62        """
 63        Update the File entity. Optionally, also update the
 64        file data that this File holds.
 65        """
 66        payload = entity
 67        url = "/api/file/update"
 68        if file_data:
 69            file = {"file": file_data}
 70            api.put(url, payload, file=file)
 71        else:
 72            api.put(url, payload, form=True)
 73
 74    @classmethod
 75    def get_file_data(cls, uuId):
 76        """
 77        Get the file data that is held by the file with `uuId`.
 78        Returns the raw content of the response.
 79        """
 80        url = "/api/file/{}".format(uuId)
 81        response = api.get(url, is_json=False)
 82        return response.content
 83
 84    @classmethod
 85    def download_to_browser(cls, uuId):
 86        """
 87        Get the file data that is held by the file with `uuId`.
 88        Returns the response object which will have headers suitable
 89        to initiate a download by the user agent.
 90        """
 91        url = "/api/file/download"
 92        payload = {"uuId": uuId}
 93        response = api.post(url, payload, is_json=False)
 94        return response
 95
 96    @classmethod
 97    def delete(cls, uuId):
 98        """
 99        Delete the File entity and its file data.
100        """
101        url = "/api/file/delete/{}".format(uuId)
102        api.delete(url)
103        return True
104
105    @classmethod
106    def download_multiple(cls, list):
107        """
108        Given a list of File entities, return the file data held by
109        each as a `.zip` file.
110        """
111        url = "/api/file/multidownload"
112        response = api.post(url, list, is_json=False)
113        return response.content
114
115    @classmethod
116    def list(cls, expand=True):
117        """Return all files as a list"""
118        files = api.get("/api/file/list")
119        return [cls(f) for f in files]
  7class File(
  8    Entity,
  9    CompanyLinker,
 10    CustomerLinker,
 11    FolderLinker,
 12    ProjectLinker,
 13    StaffLinker,
 14    TaskLinker,
 15    TaskTemplateLinker,
 16    NoteLinker,
 17    TagLinker,
 18):
 19    """
 20    Implementation of the [File](https://projectal.com/docs/latest/#tag/File) API.
 21    """
 22
 23    _path = "file"
 24    _name = "file"
 25    _links = [NoteLinker, TagLinker]
 26    _links_reverse = [
 27        CompanyLinker,
 28        CustomerLinker,
 29        FolderLinker,
 30        ProjectLinker,
 31        StaffLinker,
 32        TaskLinker,
 33        TaskTemplateLinker,
 34    ]
 35
 36    @classmethod
 37    def create(cls, file_data, entity):
 38        """
 39        Create a File entity with file data.
 40
 41        `file_data` is the raw file data in bytes
 42
 43        `entity` is the File entity and its fields.
 44        """
 45        payload = entity
 46        url = "/api/file/upload"
 47        file = {"file": file_data}
 48        response = api.post(url, payload, file=file)
 49        entity["uuId"] = response["jobClue"]["uuId"]
 50        return cls(entity)
 51
 52    @classmethod
 53    def get(cls, uuId, links=None):
 54        """Get the File entity. No file data is included."""
 55        link_set = cls._get_linkset(links)
 56        url = "/api/file/get?uuId={}".format(uuId)
 57        if link_set:
 58            url += "&links=" + ",".join(link_set)
 59        return cls(api.get(url))
 60
 61    @classmethod
 62    def update(cls, entity, file_data=None):
 63        """
 64        Update the File entity. Optionally, also update the
 65        file data that this File holds.
 66        """
 67        payload = entity
 68        url = "/api/file/update"
 69        if file_data:
 70            file = {"file": file_data}
 71            api.put(url, payload, file=file)
 72        else:
 73            api.put(url, payload, form=True)
 74
 75    @classmethod
 76    def get_file_data(cls, uuId):
 77        """
 78        Get the file data that is held by the file with `uuId`.
 79        Returns the raw content of the response.
 80        """
 81        url = "/api/file/{}".format(uuId)
 82        response = api.get(url, is_json=False)
 83        return response.content
 84
 85    @classmethod
 86    def download_to_browser(cls, uuId):
 87        """
 88        Get the file data that is held by the file with `uuId`.
 89        Returns the response object which will have headers suitable
 90        to initiate a download by the user agent.
 91        """
 92        url = "/api/file/download"
 93        payload = {"uuId": uuId}
 94        response = api.post(url, payload, is_json=False)
 95        return response
 96
 97    @classmethod
 98    def delete(cls, uuId):
 99        """
100        Delete the File entity and its file data.
101        """
102        url = "/api/file/delete/{}".format(uuId)
103        api.delete(url)
104        return True
105
106    @classmethod
107    def download_multiple(cls, list):
108        """
109        Given a list of File entities, return the file data held by
110        each as a `.zip` file.
111        """
112        url = "/api/file/multidownload"
113        response = api.post(url, list, is_json=False)
114        return response.content
115
116    @classmethod
117    def list(cls, expand=True):
118        """Return all files as a list"""
119        files = api.get("/api/file/list")
120        return [cls(f) for f in files]

Implementation of the File API.

@classmethod
def create(cls, file_data, entity):
36    @classmethod
37    def create(cls, file_data, entity):
38        """
39        Create a File entity with file data.
40
41        `file_data` is the raw file data in bytes
42
43        `entity` is the File entity and its fields.
44        """
45        payload = entity
46        url = "/api/file/upload"
47        file = {"file": file_data}
48        response = api.post(url, payload, file=file)
49        entity["uuId"] = response["jobClue"]["uuId"]
50        return cls(entity)

Create a File entity with file data.

file_data is the raw file data in bytes

entity is the File entity and its fields.

@classmethod
def get(cls, uuId, links=None):
52    @classmethod
53    def get(cls, uuId, links=None):
54        """Get the File entity. No file data is included."""
55        link_set = cls._get_linkset(links)
56        url = "/api/file/get?uuId={}".format(uuId)
57        if link_set:
58            url += "&links=" + ",".join(link_set)
59        return cls(api.get(url))

Get the File entity. No file data is included.

@classmethod
def update(cls, entity, file_data=None):
61    @classmethod
62    def update(cls, entity, file_data=None):
63        """
64        Update the File entity. Optionally, also update the
65        file data that this File holds.
66        """
67        payload = entity
68        url = "/api/file/update"
69        if file_data:
70            file = {"file": file_data}
71            api.put(url, payload, file=file)
72        else:
73            api.put(url, payload, form=True)

Update the File entity. Optionally, also update the file data that this File holds.

@classmethod
def get_file_data(cls, uuId):
75    @classmethod
76    def get_file_data(cls, uuId):
77        """
78        Get the file data that is held by the file with `uuId`.
79        Returns the raw content of the response.
80        """
81        url = "/api/file/{}".format(uuId)
82        response = api.get(url, is_json=False)
83        return response.content

Get the file data that is held by the file with uuId. Returns the raw content of the response.

@classmethod
def download_to_browser(cls, uuId):
85    @classmethod
86    def download_to_browser(cls, uuId):
87        """
88        Get the file data that is held by the file with `uuId`.
89        Returns the response object which will have headers suitable
90        to initiate a download by the user agent.
91        """
92        url = "/api/file/download"
93        payload = {"uuId": uuId}
94        response = api.post(url, payload, is_json=False)
95        return response

Get the file data that is held by the file with uuId. Returns the response object which will have headers suitable to initiate a download by the user agent.

@classmethod
def delete(cls, uuId):
 97    @classmethod
 98    def delete(cls, uuId):
 99        """
100        Delete the File entity and its file data.
101        """
102        url = "/api/file/delete/{}".format(uuId)
103        api.delete(url)
104        return True

Delete the File entity and its file data.

@classmethod
def download_multiple(cls, list):
106    @classmethod
107    def download_multiple(cls, list):
108        """
109        Given a list of File entities, return the file data held by
110        each as a `.zip` file.
111        """
112        url = "/api/file/multidownload"
113        response = api.post(url, list, is_json=False)
114        return response.content

Given a list of File entities, return the file data held by each as a .zip file.

@classmethod
def list(cls, expand=True):
116    @classmethod
117    def list(cls, expand=True):
118        """Return all files as a list"""
119        files = api.get("/api/file/list")
120        return [cls(f) for f in files]

Return all files as a list