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]
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.
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
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 ofstr
dict
or list ofdict
(withuuId
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')
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.
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)
View Source
def link_file(self, file): self._add_link(self, 'file', [file], list_name='files')
View Source
def unlink_file(self, file): self._delete_link(self, 'file', [file], list_name='files')
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
- builtins.dict
- setdefault
- pop
- popitem
- keys
- items
- values
- fromkeys
- clear
- copy