projectal.entities.folder API documentation

# projectal.entities.folder

View Source

    from projectal.entity import Entity
    from projectal.linkers import *
    from projectal import api

    class Folder(Entity, FolderLinker, FileLinker):
        """
        Implementation of the [Folder](https://projectal.com/docs/latest/#tag/Folder) API.
        """
        _path = 'folder'
        _name = 'STORAGE_FOLDER'

        @classmethod
        def create(cls, entity):
            payload = entity
            endpoint = '/api/folder/add'
            response = api.post(endpoint, payload)
            entity['uuId'] = response['jobClue']['uuId'];
            return cls(entity)

        @classmethod
        def get(cls, uuId):
            return cls(api.get('/api/folder/get?uuId={}'.format(uuId)))

        @classmethod
        def update(cls, entity):
            payload = entity
            api.put('/api/folder/update', payload)
            return True

        @classmethod
        def delete(cls, uuId):
            api.delete('/api/folder/delete/{}'.format(uuId))
            return True

        # TODO: reimplemented here due to differences in list name vs other file linkers.
        # Remove in future if/when api is fixed
        def link_file(self, file):
            self._add_link(self, 'file', [file], list_name='files')

        def unlink_file(self,  file):
            self._delete_link(self, 'file', [file], list_name='files')

        @classmethod
        def list(cls, expand=True):
            """Return all folders as a list"""
            folders = api.get('/api/folder/list')
            return [cls(f) for f in folders]

class Folder(projectal.entity.Entity, projectal.linkers.FolderLinker, projectal.linkers.FileLinker):
View Source

    class Folder(Entity, FolderLinker, FileLinker):
        """
        Implementation of the [Folder](https://projectal.com/docs/latest/#tag/Folder) API.
        """
        _path = 'folder'
        _name = 'STORAGE_FOLDER'

        @classmethod
        def create(cls, entity):
            payload = entity
            endpoint = '/api/folder/add'
            response = api.post(endpoint, payload)
            entity['uuId'] = response['jobClue']['uuId'];
            return cls(entity)

        @classmethod
        def get(cls, uuId):
            return cls(api.get('/api/folder/get?uuId={}'.format(uuId)))

        @classmethod
        def update(cls, entity):
            payload = entity
            api.put('/api/folder/update', payload)
            return True

        @classmethod
        def delete(cls, uuId):
            api.delete('/api/folder/delete/{}'.format(uuId))
            return True

        # TODO: reimplemented here due to differences in list name vs other file linkers.
        # Remove in future if/when api is fixed
        def link_file(self, file):
            self._add_link(self, 'file', [file], list_name='files')

        def unlink_file(self,  file):
            self._delete_link(self, 'file', [file], list_name='files')

        @classmethod
        def list(cls, expand=True):
            """Return all folders as a list"""
            folders = api.get('/api/folder/list')
            return [cls(f) for f in folders]

Implementation of the Folder API.

@classmethod
def create(cls, entity):
View Source

        @classmethod
        def create(cls, entity):
            payload = entity
            endpoint = '/api/folder/add'
            response = api.post(endpoint, payload)
            entity['uuId'] = response['jobClue']['uuId'];
            return cls(entity)

Create one or more entities of the same type. The entity type is determined by the subclass calling this method.

`entities`: Can be a `dict` to create a single entity, or a list of `dict`s to create many entities in bulk.

`params`: Optional URL parameters that may apply to the entity's API (e.g: `?holder=1234`).

If input was a `dict`, returns an entity subclass. If input was a list of `dict`s, returns a list of entity subclasses.

    # Example usage:
    projectal.Customer.create({'name': 'NewCustomer'})
    # returns Customer object

@classmethod
def get(cls, uuId):
View Source

        @classmethod
        def get(cls, uuId):
            return cls(api.get('/api/folder/get?uuId={}'.format(uuId)))

Get one or more entities of the same type. The entity type is determined by the subclass calling this method.

`entities`: One of several formats containing the `uuId`s of the entities you want to get (see bottom for examples):

- `str` or list of `str`
- `dict` or list of `dict` (with `uuId` key)

`links`: Optional URL parameter to request entity links as part of the response (e.g: `?links=COMPANY,LOCATION,`). For performance reasons, links are only returned on demand.

Links follow a common naming convention in the output with a _List suffix. E.g.: `?links=COMPANY,LOCATION` will appear as `companyList` and `locationList` in the response.

    # Example usage:
    # str
    projectal.Project.get('1b21e445-f29a-4a9f-95ff-fe253a3e1b11')

    # list of str
    ids = ['1b21e445-f29a...', '1b21e445-f29a...', '1b21e445-f29a...']
    projectal.Project.get(ids)

    # dict
    project = project.Project.create({'name': 'MyProject'})
    # project = {'uuId': '1b21e445-f29a...', 'name': 'MyProject', ...}
    projectal.Project.get(project)

    # list of dicts (e.g. from a query)
    # projects = [{'uuId': '1b21e445-f29a...'}, {'uuId': '1b21e445-f29a...'}, ...]
    project.Project.get(projects)

    # str with links
    projectal.Project.get('1b21e445-f29a...', 'links=COMPANY,LOCATION')

@classmethod
def update(cls, entity):
View Source

        @classmethod
        def update(cls, entity):
            payload = entity
            api.put('/api/folder/update', payload)
            return True

Save one or more entities of the same type. The entity type is determined by the subclass calling this method. Only the fields that have been modifier will be sent to the server as part of the request.

`entities`: Can be a `dict` to update a single entity, or a list of `dict`s to update many entities in bulk.

Returns `True` if all entities update successfully.

    # Example usage:
    rebate = projectal.Rebate.create({'name': 'Rebate2022', 'rebate': 0.2})
    rebate['name'] = 'Rebate2024'
    projectal.Rebate.update(rebate)
    # Returns True. New rebate name has been saved.

@classmethod
def delete(cls, uuId):
View Source

        @classmethod
        def delete(cls, uuId):
            api.delete('/api/folder/delete/{}'.format(uuId))
            return True

Delete one or more entities of the same type. The entity type is determined by the subclass calling this method.

`entities`: See `Entity.get()` for expected formats.

    # Example usage:
    ids = ['1b21e445-f29a...', '1b21e445-f29a...', '1b21e445-f29a...']
    projectal.Customer.delete(ids)

def link_file(self, file):
View Source

        def link_file(self, file):
            self._add_link(self, 'file', [file], list_name='files')

def unlink_file(self, file):
View Source

        def unlink_file(self,  file):
            self._delete_link(self, 'file', [file], list_name='files')

@classmethod
def list(cls, expand=True):
View Source

        @classmethod
        def list(cls, expand=True):
            """Return all folders as a list"""
            folders = api.get('/api/folder/list')
            return [cls(f) for f in folders]

Return all folders as a list

##### Inherited Members

projectal.entity.Entity
  Entity
  save
  clone
  history
  match
  match_startswith
  match_endswith
  search
  query
  profile_get
  profile_set
  changes
  set_readonly
projectal.linkers.FolderLinker
  link_folder
  unlink_folder
builtins.dict
  setdefault
  pop
  popitem
  keys
  items
  values
  fromkeys
  clear
  copy