Code¶
The cmislib.model
Module¶
When working with the repository, the first thing you need to do is grab an instance of cmislib.CmisClient
, passing it the repository endpoint URL, username, and password.
For example, in Alfresco 4.2 and higher, the repository endpoint for CMIS 1.1 and the Atom Pub binding is ‘http://localhost:8080/alfresco/api/-default-/public/cmis/versions/1.1/atom‘. Earlier versions have different URLs. The default username and password are typically ‘admin’ and ‘admin’.
So, to connect to an Alfresco server running on localhost, you would use:
>>> cmisClient = cmislib.CmisClient('http://localhost:8080/alfresco/api/-default-/public/cmis/versions/1.1/atom', 'admin', 'admin')
From there you can get the default repository...
>>> repo = cmisClient.defaultRepository
An Alfresco server has a single repository. Servers from other vendors may have multiple repositories. In those cases, you can get a specific repository if you know the repository ID.
>>> repo = cmisClient.getRepository('83beb297-a6fa-4ac5-844b-98c871c0eea9')
Once you have that, you’re off to the races. Use the cmislib.Repository
class to create new cmislib.Folder
and cmislib.Document
objects, perform searches, etc.
The model module contains the CmisClient object, which is responsible for keeping track of connection information. The name ‘model’ is no longer really appropriate, but it is kept for backwards compatibility.
-
class
cmislib.model.
CmisClient
(repositoryUrl, username, password, **kwargs)¶ Handles all communication with the CMIS provider.
-
defaultRepository
¶ There does not appear to be anything in the spec that identifies a repository as being the default, so we’ll define it to be the first one in the list.
>>> repo = client.getDefaultRepository() >>> repo.getRepositoryId() u'83beb297-a6fa-4ac5-844b-98c871c0eea9'
-
getDefaultRepository
()¶ There does not appear to be anything in the spec that identifies a repository as being the default, so we’ll define it to be the first one in the list.
>>> repo = client.getDefaultRepository() >>> repo.getRepositoryId() u'83beb297-a6fa-4ac5-844b-98c871c0eea9'
-
getRepositories
()¶ Returns a dict of high-level info about the repositories available at this service. The dict contains entries for ‘repositoryId’ and ‘repositoryName’.
>>> client.getRepositories() [{'repositoryName': u'Main Repository', 'repositoryId': u'83beb297-a6fa-4ac5-844b-98c871c0eea9'}]
-
getRepository
(repositoryId)¶ Returns the repository identified by the specified repositoryId.
>>> repo = client.getRepository('83beb297-a6fa-4ac5-844b-98c871c0eea9') >>> repo.getRepositoryName() u'Main Repository'
-
repositories
¶ Returns a dict of high-level info about the repositories available at this service. The dict contains entries for ‘repositoryId’ and ‘repositoryName’.
>>> client.getRepositories() [{'repositoryName': u'Main Repository', 'repositoryId': u'83beb297-a6fa-4ac5-844b-98c871c0eea9'}]
-
The cmislib.domain
Module¶
These are the generic domain objects that establish the interface to the cmislib API. Regardless of which actual binding you use (AtomPub or Browser), you will work with these objects.
This module contains the domain objects used to work with a CMIS provider.
-
class
cmislib.domain.
ACE
(principalId=None, permissions=None, direct=None)¶ Represents an individual Access Control Entry.
-
copy
()¶ return a deep copy of the ace instance
-
direct
¶ Getter for direct
-
permissions
¶ Getter for permissions
-
principalId
¶ Getter for principalId
-
-
class
cmislib.domain.
ACL
¶ Represents the Access Control List for an object.
-
addEntry
(principalId, access, direct)¶ Adds an
ACE
entry to the ACL.>>> acl = folder.getACL() >>> acl.addEntry('jpotts', 'cmis:read', 'true') >>> acl.addEntry('jsmith', 'cmis:write', 'true') >>> acl.getEntries() {u'GROUP_EVERYONE': <cmislib.atompub.binding.AtomPubACE object at 0x100731410>, u'jdoe': <cmislib.atompub.binding.AtomPubACE object at 0x100731150>, 'jpotts': <cmislib.atompub.binding.AtomPubACE object at 0x1005a22d0>, 'jsmith': <cmislib.atompub.binding.AtomPubACE object at 0x1005a2210>}
-
clearEntries
()¶ Clears all
ACE
entries from the ACL and removes the internal XML representation of the ACL.>>> acl = ACL() >>> acl.addEntry(ACE('jsmith', 'cmis:write', 'true')) >>> acl.addEntry(ACE('jpotts', 'cmis:write', 'true')) >>> acl.entries {'jpotts': <cmislib.atompub.binding.AtomPubACE object at 0x1012c7310>, 'jsmith': <cmislib.atompub.binding.AtomPubACE object at 0x100528490>} >>> acl.getXmlDoc() <xml.dom.minidom.Document instance at 0x1012cbb90> >>> acl.clearEntries() >>> acl.entries >>> acl.getXmlDoc()
-
entries
¶ Returns a dictionary of
ACE
objects for each Access Control Entry in the ACL. The key value is the ACE principalid.>>> acl = ACL() >>> acl.addEntry(ACE('jsmith', 'cmis:write', 'true')) >>> acl.addEntry(ACE('jpotts', 'cmis:write', 'true')) >>> for ace in acl.entries.values(): ... print 'principal:%s has the following permissions...' % ace.principalId ... for perm in ace.permissions: ... print perm ... principal:jpotts has the following permissions... cmis:write principal:jsmith has the following permissions... cmis:write
-
getEntries
()¶ Returns a dictionary of
ACE
objects for each Access Control Entry in the ACL. The key value is the ACE principalid.>>> acl = ACL() >>> acl.addEntry(ACE('jsmith', 'cmis:write', 'true')) >>> acl.addEntry(ACE('jpotts', 'cmis:write', 'true')) >>> for ace in acl.entries.values(): ... print 'principal:%s has the following permissions...' % ace.principalId ... for perm in ace.permissions: ... print perm ... principal:jpotts has the following permissions... cmis:write principal:jsmith has the following permissions... cmis:write
-
removeEntry
(principalId)¶ Removes the
ACE
entry given a specific principalId.>>> acl.getEntries() {u'GROUP_EVERYONE': <cmislib.atompub.binding.AtomPubACE object at 0x100731410>, u'jdoe': <cmislib.atompub.binding.AtomPubACE object at 0x100731150>, 'jpotts': <cmislib.atompub.binding.AtomPubACE object at 0x1005a22d0>, 'jsmith': <cmislib.atompub.binding.AtomPubACE object at 0x1005a2210>} >>> acl.removeEntry('jsmith') >>> acl.getEntries() {u'GROUP_EVERYONE': <cmislib.atompub.binding.AtomPubACE object at 0x100731410>, u'jdoe': <cmislib.atompub.binding.AtomPubACE object at 0x100731150>, 'jpotts': <cmislib.atompub.binding.AtomPubACE object at 0x1005a22d0>}
-
-
class
cmislib.domain.
ChangeEntry
¶ Represents a change log entry. Retrieve a list of change entries via
Repository.getContentChanges()
.>>> for changeEntry in rs: ... changeEntry.objectId ... changeEntry.id ... changeEntry.changeType ... changeEntry.changeTime ... 'workspace://SpacesStore/0e2dc775-16b7-4634-9e54-2417a196829b' u'urn:uuid:0e2dc775-16b7-4634-9e54-2417a196829b' u'created' datetime.datetime(2010, 2, 11, 12, 55, 14) 'workspace://SpacesStore/bd768f9f-99a7-4033-828d-5b13f96c6923' u'urn:uuid:bd768f9f-99a7-4033-828d-5b13f96c6923' u'updated' datetime.datetime(2010, 2, 11, 12, 55, 13) 'workspace://SpacesStore/572c2cac-6b26-4cd8-91ad-b2931fe5b3fb' u'urn:uuid:572c2cac-6b26-4cd8-91ad-b2931fe5b3fb' u'updated'
-
changeTime
¶ Returns a datetime object representing the time the change occurred.
-
changeType
¶ Returns the type of change that occurred. The resulting value must be one of:
- created
- updated
- deleted
- security
-
getChangeTime
()¶ Returns a datetime object representing the time the change occurred.
-
getChangeType
()¶ Returns the type of change that occurred. The resulting value must be one of:
- created
- updated
- deleted
- security
-
getId
()¶ Returns the unique ID of the change entry.
-
getObjectId
()¶ Returns the object ID of the object that changed.
-
getProperties
()¶ Returns the properties of the change entry. Note that depending on the capabilities of the repository (“capabilityChanges”) the list may not include the actual property values that changed.
-
id
¶ Returns the unique ID of the change entry.
-
objectId
¶ Returns the object ID of the object that changed.
-
properties
¶ Returns the properties of the change entry. Note that depending on the capabilities of the repository (“capabilityChanges”) the list may not include the actual property values that changed.
-
-
class
cmislib.domain.
ChangeEntryResultSet
¶ A specialized type of
ResultSet
that knows how to instantiateChangeEntry
objects. The parent class assumes children ofCmisObject
which doesn’t work for ChangeEntries.-
getResults
()¶ Overriding to make it work with a list instead of a dict.
-
-
class
cmislib.domain.
CmisId
¶ This is a marker class to be used for Strings that are used as CMIS ID’s. Making the objects instances of this class makes it easier to create the Atom entry XML with the appropriate type, ie, cmis:propertyId, instead of cmis:propertyString.
-
class
cmislib.domain.
CmisObject
¶ Common ancestor class for other CMIS domain objects such as
Document
andFolder
.-
ACL
¶ Repository.getCapabilities[‘ACL’] must return manage or discover.
>>> acl = folder.getACL() >>> acl.getEntries() {u'GROUP_EVERYONE': <cmislib.atompub.binding.AtomPubACE object at 0x10071a8d0>, 'jdoe': <cmislib.atompub.binding.AtomPubACE object at 0x10071a590>}
The optional onlyBasicPermissions argument is currently not supported.
-
allowableActions
¶ Returns a dictionary of allowable actions, keyed off of the action name.
>>> actions = doc.getAllowableActions() >>> for a in actions: ... print "%s:%s" % (a,actions[a]) ... canDeleteContentStream:True canSetContentStream:True canCreateRelationship:True canCheckIn:False canApplyACL:False canDeleteObject:True canGetAllVersions:True canGetObjectParents:True canGetProperties:True
-
applyACL
(acl)¶ Updates the object with the provided
ACL
. Repository.getCapabilities[‘ACL’] must return manage to invoke this call.>>> acl = folder.getACL() >>> acl.addEntry(ACE('jdoe', 'cmis:write', 'true')) >>> acl.getEntries() {u'GROUP_EVERYONE': <cmislib.atompub.binding.AtomPubACE object at 0x10071a8d0>, 'jdoe': <cmislib.atompub.binding.AtomPubACE object at 0x10071a590>}
-
applyPolicy
(policyId)¶ This is not yet implemented.
-
createRelationship
(targetObj, relTypeId)¶ Creates a relationship between this object and a specified target object using the relationship type specified. Returns the new
Relationship
object.>>> rel = tstDoc1.createRelationship(tstDoc2, 'R:cmiscustom:assoc') >>> rel.getProperties() {u'cmis:objectId': u'workspace://SpacesStore/271c48dd-6548-4771-a8f5-0de69b7cdc25', u'cmis:creationDate': None, u'cmis:objectTypeId': u'R:cmiscustom:assoc', u'cmis:lastModificationDate': None, u'cmis:targetId': u'workspace://SpacesStore/0ca1aa08-cb49-42e2-8881-53aa8496a1c1', u'cmis:lastModifiedBy': None, u'cmis:baseTypeId': u'cmis:relationship', u'cmis:sourceId': u'workspace://SpacesStore/271c48dd-6548-4771-a8f5-0de69b7cdc25', u'cmis:changeToken': None, u'cmis:createdBy': None}
-
delete
(**kwargs)¶ Deletes this
CmisObject
from the repository. Note that in the case of aFolder
object, some repositories will refuse to delete it if it contains children and some will delete it without complaint. If what you really want to do is delete the folder and all of its descendants, usedeleteTree()
instead.>>> folder.delete()
The optional allVersions argument is supported.
-
getACL
()¶ Repository.getCapabilities[‘ACL’] must return manage or discover.
>>> acl = folder.getACL() >>> acl.getEntries() {u'GROUP_EVERYONE': <cmislib.atompub.binding.AtomPubACE object at 0x10071a8d0>, 'jdoe': <cmislib.atompub.binding.AtomPubACE object at 0x10071a590>}
The optional onlyBasicPermissions argument is currently not supported.
-
getAllowableActions
()¶ Returns a dictionary of allowable actions, keyed off of the action name.
>>> actions = doc.getAllowableActions() >>> for a in actions: ... print "%s:%s" % (a,actions[a]) ... canDeleteContentStream:True canSetContentStream:True canCreateRelationship:True canCheckIn:False canApplyACL:False canDeleteObject:True canGetAllVersions:True canGetObjectParents:True canGetProperties:True
-
getAppliedPolicies
()¶ This is not yet implemented.
-
getName
()¶ Returns the value of cmis:name from the getProperties() dictionary. We don’t need a getter for every standard CMIS property, but name is a pretty common one so it seems to make sense.
>>> doc.getName() u'system-overview.html'
-
getObjectId
()¶ Returns the object ID for this object.
>>> doc = resultSet.getResults()[0] >>> doc.getObjectId() u'workspace://SpacesStore/dc26102b-e312-471b-b2af-91bfb0225339'
-
getObjectParents
(**kwargs)¶ Gets the parents of this object as a
ResultSet
.- The following optional arguments are supported:
- filter
- includeRelationships
- renditionFilter
- includeAllowableActions
- includeRelativePathSegment
-
getPaths
()¶ Returns the object’s paths as a list of strings.
-
getProperties
()¶ Returns a dict of the object’s properties. If CMIS returns an empty element for a property, the property will be in the dict with a value of None.
>>> props = doc.getProperties() >>> for p in props: ... print "%s: %s" % (p, props[p]) ... cmis:contentStreamMimeType: text/html cmis:creationDate: 2009-12-15T09:45:35.369-06:00 cmis:baseTypeId: cmis:document cmis:isLatestMajorVersion: false cmis:isImmutable: false cmis:isMajorVersion: false cmis:objectId: workspace://SpacesStore/dc26102b-e312-471b-b2af-91bfb0225339
The optional filter argument is not yet implemented.
-
getRelationships
(**kwargs)¶ Returns a
ResultSet
ofRelationship
objects for each relationship where the source is this object.>>> rels = tstDoc1.getRelationships() >>> len(rels.getResults()) 1 >>> rel = rels.getResults().values()[0] >>> rel.getProperties() {u'cmis:objectId': u'workspace://SpacesStore/271c48dd-6548-4771-a8f5-0de69b7cdc25', u'cmis:creationDate': None, u'cmis:objectTypeId': u'R:cmiscustom:assoc', u'cmis:lastModificationDate': None, u'cmis:targetId': u'workspace://SpacesStore/0ca1aa08-cb49-42e2-8881-53aa8496a1c1', u'cmis:lastModifiedBy': None, u'cmis:baseTypeId': u'cmis:relationship', u'cmis:sourceId': u'workspace://SpacesStore/271c48dd-6548-4771-a8f5-0de69b7cdc25', u'cmis:changeToken': None, u'cmis:createdBy': None}
- The following optional arguments are supported:
- includeSubRelationshipTypes
- relationshipDirection
- typeId
- maxItems
- skipCount
- filter
- includeAllowableActions
-
getRepository
()¶ Returns the object’s repository
-
getTitle
()¶ Returns the value of the object’s cmis:title property.
-
id
¶ Returns the object ID for this object.
>>> doc = resultSet.getResults()[0] >>> doc.getObjectId() u'workspace://SpacesStore/dc26102b-e312-471b-b2af-91bfb0225339'
-
move
(sourceFolder, targetFolder)¶ Moves an object from the source folder to the target folder.
>>> sub1 = repo.getObjectByPath('/cmislib/sub1') >>> sub2 = repo.getObjectByPath('/cmislib/sub2') >>> doc = repo.getObjectByPath('/cmislib/sub1/testdoc1') >>> doc.move(sub1, sub2)
-
name
¶ Returns the value of cmis:name from the getProperties() dictionary. We don’t need a getter for every standard CMIS property, but name is a pretty common one so it seems to make sense.
>>> doc.getName() u'system-overview.html'
-
properties
¶ Returns a dict of the object’s properties. If CMIS returns an empty element for a property, the property will be in the dict with a value of None.
>>> props = doc.getProperties() >>> for p in props: ... print "%s: %s" % (p, props[p]) ... cmis:contentStreamMimeType: text/html cmis:creationDate: 2009-12-15T09:45:35.369-06:00 cmis:baseTypeId: cmis:document cmis:isLatestMajorVersion: false cmis:isImmutable: false cmis:isMajorVersion: false cmis:objectId: workspace://SpacesStore/dc26102b-e312-471b-b2af-91bfb0225339
The optional filter argument is not yet implemented.
-
reload
(**kwargs)¶ Fetches the latest representation of this object from the CMIS service. Some methods, like
^Document.checkout
do this for you.If you call reload with a properties filter, the filter will be in effect on subsequent calls until the filter argument is changed. To reset to the full list of properties, call reload with filter set to ‘*’.
-
removePolicy
(policyId)¶ This is not yet implemented.
-
repository
¶ Returns the object’s repository
-
title
¶ Returns the value of the object’s cmis:title property.
-
updateProperties
(properties)¶ Updates the properties of an object with the properties provided. Only provide the set of properties that need to be updated.
>>> folder = repo.getObjectByPath('/someFolder2') >>> folder.getName() u'someFolder2' >>> props = {'cmis:name': 'someFolderFoo'} >>> folder.updateProperties(props) <cmislib.atompub.binding.AtomPubFolder object at 0x103ab1210> >>> folder.getName() u'someFolderFoo'
-
-
class
cmislib.domain.
Document
¶ An object typically associated with file content.
-
cancelCheckout
()¶ Cancels the checkout of this object by retrieving the Private Working Copy (PWC) and then deleting it. After the PWC is deleted, this object will be reloaded to update properties related to a checkout.
>>> doc.isCheckedOut() True >>> doc.cancelCheckout() >>> doc.isCheckedOut() False
-
checkedOut
¶ Returns true if the document is checked out.
>>> doc.isCheckedOut() True >>> doc.cancelCheckout() >>> doc.isCheckedOut() False
-
checkin
(checkinComment=None, contentFile=None, contentType=None, properties=None, **kwargs)¶ Checks in this
Document
which must be a private working copy (PWC).>>> doc.isCheckedOut() False >>> pwc = doc.checkout() >>> doc.isCheckedOut() True >>> pwc.checkin() <cmislib.atompub.binding.AtomPubDocument object at 0x103a8ae90> >>> doc.isCheckedOut() False
- The following optional arguments are NOT supported:
- policies
- addACEs
- removeACEs
-
checkout
()¶ Performs a checkout on the
Document
and returns the Private Working Copy (PWC), which is also an instance ofDocument
>>> doc.getObjectId() u'workspace://SpacesStore/f0c8b90f-bec0-4405-8b9c-2ab570589808;1.0' >>> doc.isCheckedOut() False >>> pwc = doc.checkout() >>> doc.isCheckedOut() True
-
deleteContentStream
()¶ Delete’s the content stream associated with this object.
-
getAllVersions
(**kwargs)¶ Returns a
ResultSet
of document objects for the entire version history of this object, including any PWC’s.The optional filter and includeAllowableActions are supported.
-
getCheckedOutBy
()¶ Returns the ID who currently has the document checked out. >>> pwc = doc.checkout() >>> pwc.getCheckedOutBy() u’admin’
-
getContentStream
()¶ Returns the CMIS service response from invoking the ‘enclosure’ link.
>>> doc.getName() u'sample-b.pdf' >>> o = open('tmp.pdf', 'wb') >>> result = doc.getContentStream() >>> o.write(result.read()) >>> result.close() >>> o.close() >>> import os.path >>> os.path.getsize('tmp.pdf') 117248
The optional streamId argument is not yet supported.
-
getLatestVersion
(**kwargs)¶ Returns a
Document
object representing the latest version in the version series.- The following optional arguments are supported:
- major
- filter
- includeRelationships
- includePolicyIds
- renditionFilter
- includeACL
- includeAllowableActions
>>> latestDoc = doc.getLatestVersion() >>> latestDoc.getProperties()['cmis:versionLabel'] u'2.1' >>> latestDoc = doc.getLatestVersion(major='false') >>> latestDoc.getProperties()['cmis:versionLabel'] u'2.1' >>> latestDoc = doc.getLatestVersion(major='true') >>> latestDoc.getProperties()['cmis:versionLabel'] u'2.0'
-
getPaths
()¶ Returns the Document’s paths by asking for the parents with the includeRelativePathSegment flag set to true, then concats the value of cmis:path with the relativePathSegment.
-
getPrivateWorkingCopy
()¶ Retrieves the object using the object ID in the property: cmis:versionSeriesCheckedOutId then uses getObject to instantiate the object.
>>> doc.isCheckedOut() False >>> doc.checkout() <cmislib.atompub.binding.AtomPubDocument object at 0x103a25ad0> >>> pwc = doc.getPrivateWorkingCopy() >>> pwc.getTitle() u'sample-b (Working Copy).pdf'
-
getPropertiesOfLatestVersion
(**kwargs)¶ Like
^CmisObject.getProperties
, returns a dict of properties from the latest version of this object in the version series.The optional major and filter arguments are supported.
-
getRenditions
()¶ Returns an array of
Rendition
objects. The repository must support the Renditions capability.- The following optional arguments are not currently supported:
- renditionFilter
- maxItems
- skipCount
-
isCheckedOut
()¶ Returns true if the document is checked out.
>>> doc.isCheckedOut() True >>> doc.cancelCheckout() >>> doc.isCheckedOut() False
-
setContentStream
(contentFile, contentType=None)¶ Sets the content stream on this object.
- The following optional arguments are not yet supported:
- overwriteFlag=None
-
-
class
cmislib.domain.
Folder
¶ A container object that can hold other
CmisObject
objects-
addObject
(cmisObject, **kwargs)¶ Adds the specified object as a child of this object. No new object is created. The repository must support multifiling for this to work.
>>> sub1 = repo.getObjectByPath("/cmislib/sub1") >>> sub2 = repo.getObjectByPath("/cmislib/sub2") >>> doc = sub1.createDocument("testdoc1") >>> len(sub1.getChildren()) 1 >>> len(sub2.getChildren()) 0 >>> sub2.addObject(doc) >>> len(sub2.getChildren()) 1 >>> sub2.getChildren()[0].name u'testdoc1'
- The following optional arguments are supported:
- allVersions
-
createDocument
(name, properties={}, contentFile=None, contentType=None, contentEncoding=None)¶ Creates a new Document object in the repository using the properties provided.
Right now this is basically the same as createFolder, but this deals with contentStreams. The common logic should probably be moved to CmisObject.createObject.
The method will attempt to guess the appropriate content type and encoding based on the file. To specify it yourself, pass them in via the contentType and contentEncoding arguments.
>>> f = open('250px-Cmis_logo.png', 'rb') >>> subFolder.createDocument('logo.png', contentFile=f) <cmislib.atompub.binding.AtomPubDocument object at 0x10410fa10> >>> f.close()
If you wanted to set one or more properties when creating the doc, pass in a dict, like this:
>>> props = {'cmis:someProp':'someVal'} >>> f = open('250px-Cmis_logo.png', 'rb') >>> subFolder.createDocument('logo.png', props, contentFile=f) <cmislib.atompub.binding.AtomPubDocument object at 0x10410fa10> >>> f.close()
To specify a custom object type, pass in a property called cmis:objectTypeId set to the
CmisId
representing the type ID of the instance you want to create. If you do not pass in an object type ID, an instance of ‘cmis:document’ will be created.- The following optional arguments are not yet supported:
- versioningState
- policies
- addACEs
- removeACEs
-
createDocumentFromString
(name, properties={}, contentString=None, contentType=None, contentEncoding=None)¶ Creates a new document setting the content to the string provided. If the repository supports unfiled objects, you do not have to pass in a parent
Folder
otherwise it is required.This method is essentially a convenience method that wraps your string with a StringIO and then calls createDocument.
>>> testFolder.createDocumentFromString('testdoc3', contentString='hello, world', contentType='text/plain')
-
createFolder
(name, properties={})¶ Creates a new
Folder
using the properties provided. Right now I expect a property called ‘cmis:name’ but I don’t complain if it isn’t there (although the CMIS provider will). If a cmis:name property isn’t provided, the value passed in to the name argument will be used.To specify a custom folder type, pass in a property called cmis:objectTypeId set to the
CmisId
representing the type ID of the instance you want to create. If you do not pass in an object type ID, an instance of ‘cmis:folder’ will be created.>>> subFolder = folder.createFolder('someSubfolder') >>> subFolder.getName() u'someSubfolder'
- The following optional arguments are not supported:
- policies
- addACEs
- removeACEs
-
deleteTree
(**kwargs)¶ Deletes the folder and all of its descendant objects.
>>> resultSet = subFolder.getDescendants() >>> len(resultSet.getResults()) 2 >>> subFolder.deleteTree()
- The following optional arguments are supported:
- allVersions
- unfileObjects
- continueOnFailure
-
getChildren
(**kwargs)¶ Returns a paged
ResultSet
. The result set contains a list ofCmisObject
objects for each child of the Folder. The actual type of the object returned depends on the object’s CMIS base type id. For example, the method might return a list that contains bothDocument
objects andFolder
objects.>>> childrenRS = subFolder.getChildren() >>> children = childrenRS.getResults()
- The following optional arguments are supported:
- maxItems
- skipCount
- orderBy
- filter
- includeRelationships
- renditionFilter
- includeAllowableActions
- includePathSegment
-
getDescendants
(**kwargs)¶ Gets the descendants of this folder. The descendants are returned as a paged
ResultSet
object. The result set contains a list ofCmisObject
objects where the actual type of each object returned will vary depending on the object’s base type id. For example, the method might return a list that contains bothDocument
objects andFolder
objects.- The following optional argument is supported:
- depth. Use depth=-1 for all descendants, which is the default if no depth is specified.
>>> resultSet = folder.getDescendants() >>> len(resultSet.getResults()) 105 >>> resultSet = folder.getDescendants(depth=1) >>> len(resultSet.getResults()) 103
The following optional arguments may also work but haven’t been tested:
- filter
- includeRelationships
- renditionFilter
- includeAllowableActions
- includePathSegment
-
getParent
()¶ The optional filter argument is not yet supported.
-
getPaths
()¶ Returns the paths as a list of strings. The spec says folders cannot be multi-filed, so this should always be one value. We return a list to be symmetric with the same method in
Document
.
-
getTree
(**kwargs)¶ Unlike
Folder.getChildren
orFolder.getDescendants
, this method returns only the descendant objects that are folders. The results do not include the current folder.- The following optional arguments are supported:
- depth
- filter
- includeRelationships
- renditionFilter
- includeAllowableActions
- includePathSegment
>>> rs = folder.getTree(depth='2') >>> len(rs.getResults()) 3 >>> for folder in rs.getResults().values(): ... folder.getTitle() ... u'subfolder2' u'parent test folder' u'subfolder'
-
removeObject
(cmisObject)¶ Removes the specified object from this folder. The repository must support unfiling for this to work.
-
-
class
cmislib.domain.
ObjectType
¶ Represents the CMIS object type such as ‘cmis:document’ or ‘cmis:folder’. Contains metadata about the type.
-
baseId
¶ Getter for cmis:baseId
-
controllableACL
¶ Getter for cmis:controllableACL
-
controllablePolicy
¶ Getter for cmis:controllablePolicy
-
creatable
¶ Getter for cmis:creatable
-
description
¶ Getter for cmis:description
-
displayName
¶ Getter for cmis:displayName
-
fileable
¶ Getter for cmis:fileable
-
fulltextIndexed
¶ Getter for cmis:fulltextIndexed
-
getBaseId
()¶ Getter for cmis:baseId
-
getDescription
()¶ Getter for cmis:description
-
getDisplayName
()¶ Getter for cmis:displayName
-
getLink
(rel, linkType)¶ Gets the HREF for the link element with the specified rel and linkType.
>>> from cmislib.atompub.atompub_binding import ATOM_XML_FEED_TYPE >>> docType.getLink('down', ATOM_XML_FEED_TYPE) u'http://localhost:8080/alfresco/s/cmis/type/cmis:document/children'
-
getLocalName
()¶ Getter for cmis:localName
-
getLocalNamespace
()¶ Getter for cmis:localNamespace
-
getProperties
()¶ Returns a list of
Property
objects representing each property defined for this type.>>> objType = repo.getTypeDefinition('cmis:relationship') >>> for prop in objType.properties: ... print 'Id:%s' % prop.id ... print 'Cardinality:%s' % prop.cardinality ... print 'Description:%s' % prop.description ... print 'Display name:%s' % prop.displayName ... print 'Local name:%s' % prop.localName ... print 'Local namespace:%s' % prop.localNamespace ... print 'Property type:%s' % prop.propertyType ... print 'Query name:%s' % prop.queryName ... print 'Updatability:%s' % prop.updatability ... print 'Inherited:%s' % prop.inherited ... print 'Orderable:%s' % prop.orderable ... print 'Queryable:%s' % prop.queryable ... print 'Required:%s' % prop.required ... print 'Open choice:%s' % prop.openChoice
-
getQueryName
()¶ Getter for cmis:queryName
-
getTypeId
()¶ Returns the type ID for this object.
>>> docType = repo.getTypeDefinition('cmis:document') >>> docType.getTypeId() 'cmis:document'
-
id
¶ Returns the type ID for this object.
>>> docType = repo.getTypeDefinition('cmis:document') >>> docType.getTypeId() 'cmis:document'
-
includedInSupertypeQuery
¶ Getter for cmis:includedInSupertypeQuery
-
isControllableACL
()¶ Getter for cmis:controllableACL
-
isControllablePolicy
()¶ Getter for cmis:controllablePolicy
-
isCreatable
()¶ Getter for cmis:creatable
-
isFileable
()¶ Getter for cmis:fileable
-
isFulltextIndexed
()¶ Getter for cmis:fulltextIndexed
-
isIncludedInSupertypeQuery
()¶ Getter for cmis:includedInSupertypeQuery
-
isQueryable
()¶ Getter for cmis:queryable
-
localName
¶ Getter for cmis:localName
-
localNamespace
¶ Getter for cmis:localNamespace
-
properties
¶ Returns a list of
Property
objects representing each property defined for this type.>>> objType = repo.getTypeDefinition('cmis:relationship') >>> for prop in objType.properties: ... print 'Id:%s' % prop.id ... print 'Cardinality:%s' % prop.cardinality ... print 'Description:%s' % prop.description ... print 'Display name:%s' % prop.displayName ... print 'Local name:%s' % prop.localName ... print 'Local namespace:%s' % prop.localNamespace ... print 'Property type:%s' % prop.propertyType ... print 'Query name:%s' % prop.queryName ... print 'Updatability:%s' % prop.updatability ... print 'Inherited:%s' % prop.inherited ... print 'Orderable:%s' % prop.orderable ... print 'Queryable:%s' % prop.queryable ... print 'Required:%s' % prop.required ... print 'Open choice:%s' % prop.openChoice
-
queryName
¶ Getter for cmis:queryName
-
queryable
¶ Getter for cmis:queryable
-
reload
(**kwargs)¶ This method will reload the object’s data from the CMIS service.
-
-
class
cmislib.domain.
Policy
¶ An arbirary object that can ‘applied’ to objects that the repository identifies as being ‘controllable’.
-
class
cmislib.domain.
Property
¶ This class represents an attribute or property definition of an object type.
-
cardinality
¶ Getter for cmis:cardinality
-
description
¶ Getter for cmis:description
-
displayName
¶ Getter for cmis:displayName
-
getCardinality
()¶ Getter for cmis:cardinality
-
getDescription
()¶ Getter for cmis:description
-
getDisplayName
()¶ Getter for cmis:displayName
-
getId
()¶ Getter for cmis:id
-
getLocalName
()¶ Getter for cmis:localName
-
getLocalNamespace
()¶ Getter for cmis:localNamespace
-
getPropertyType
()¶ Getter for cmis:propertyType
-
getQueryName
()¶ Getter for cmis:queryName
-
getUpdatability
()¶ Getter for cmis:updatability
-
id
¶ Getter for cmis:id
-
inherited
¶ Getter for cmis:inherited
-
isInherited
()¶ Getter for cmis:inherited
-
isOpenChoice
()¶ Getter for cmis:openChoice
-
isOrderable
()¶ Getter for cmis:orderable
-
isQueryable
()¶ Getter for cmis:queryable
-
isRequired
()¶ Getter for cmis:required
-
localName
¶ Getter for cmis:localName
-
localNamespace
¶ Getter for cmis:localNamespace
-
openChoice
¶ Getter for cmis:openChoice
-
orderable
¶ Getter for cmis:orderable
-
propertyType
¶ Getter for cmis:propertyType
-
queryName
¶ Getter for cmis:queryName
-
queryable
¶ Getter for cmis:queryable
-
required
¶ Getter for cmis:required
-
updatability
¶ Getter for cmis:updatability
-
-
class
cmislib.domain.
Relationship
¶ Defines a relationship object between two
CmisObjects
objects-
getSource
()¶ Returns an instance of the appropriate child-type of
CmisObject
for the source side of the relationship.
-
getTarget
()¶ Returns an instance of the appropriate child-type of
CmisObject
for the target side of the relationship.
-
source
¶ Returns an instance of the appropriate child-type of
CmisObject
for the source side of the relationship.
-
target
¶ Returns an instance of the appropriate child-type of
CmisObject
for the target side of the relationship.
-
-
class
cmislib.domain.
Rendition
¶ This class represents a Rendition.
-
getHeight
()¶ Getter for the renditions’s height
-
getHref
()¶ Getter for the renditions’s href
-
getKind
()¶ Getter for the renditions’s kind
-
getLength
()¶ Getter for the renditions’s length
-
getMimeType
()¶ Getter for the rendition’s mime type
-
getRenditionDocumentId
()¶ Getter for the renditions’s width
-
getStreamId
()¶ Getter for the rendition’s stream ID
-
getTitle
()¶ Getter for the renditions’s title
-
getWidth
()¶ Getter for the renditions’s width
-
height
¶ Getter for the renditions’s height
-
href
¶ Getter for the renditions’s href
-
kind
¶ Getter for the renditions’s kind
-
length
¶ Getter for the renditions’s length
-
mimeType
¶ Getter for the rendition’s mime type
-
renditionDocumentId
¶ Getter for the renditions’s width
-
streamId
¶ Getter for the rendition’s stream ID
-
title
¶ Getter for the renditions’s title
-
width
¶ Getter for the renditions’s width
-
-
class
cmislib.domain.
Repository
(cmisClient, xmlDoc=None)¶ Represents a CMIS repository. Will lazily populate itself by calling the repository CMIS service URL.
You must pass in an instance of a CmisClient when creating an instance of this class.
-
capabilities
¶ Returns a dict of repository capabilities.
>>> caps = repo.getCapabilities() >>> for k,v in caps.items(): ... print "%s:%s" % (k,v) ... PWCUpdatable:True VersionSpecificFiling:False Join:None ContentStreamUpdatability:anytime AllVersionsSearchable:False Renditions:None Multifiling:True GetFolderTree:True GetDescendants:True ACL:None PWCSearchable:True Query:bothcombined Unfiling:False Changes:None
-
createDocument
(name, properties={}, parentFolder=None, contentFile=None, contentType=None, contentEncoding=None)¶ Creates a new
Document
object. If the repository supports unfiled objects, you do not have to pass in a parentFolder
otherwise it is required.To create a document with an associated contentFile, pass in a File object. The method will attempt to guess the appropriate content type and encoding based on the file. To specify it yourself, pass them in via the contentType and contentEncoding arguments.
>>> f = open('sample-a.pdf', 'rb') >>> doc = folder.createDocument('sample-a.pdf', contentFile=f) <cmislib.atompub.binding.AtomPubDocument object at 0x105be5e10> >>> f.close() >>> doc.getTitle() u'sample-a.pdf'
- The following optional arguments are not currently supported:
- versioningState
- policies
- addACEs
- removeACEs
-
createDocumentFromSource
(sourceId, properties={}, parentFolder=None)¶ This is not yet implemented.
- The following optional arguments are not yet supported:
- versioningState
- policies
- addACEs
- removeACEs
-
createDocumentFromString
(name, properties={}, parentFolder=None, contentString=None, contentType=None, contentEncoding=None)¶ Creates a new document setting the content to the string provided. If the repository supports unfiled objects, you do not have to pass in a parent
Folder
otherwise it is required.This method is essentially a convenience method that wraps your string with a StringIO and then calls createDocument.
>>> repo.createDocumentFromString('testdoc5', parentFolder=testFolder, contentString='Hello, World!', contentType='text/plain') <cmislib.atompub.binding.AtomPubDocument object at 0x101352ed0>
-
createFolder
(parentFolder, name, properties={})¶ Creates a new
Folder
object in the specified parentFolder.>>> root = repo.getRootFolder() >>> folder = repo.createFolder(root, 'someFolder2') >>> folder.getTitle() u'someFolder2' >>> folder.getObjectId() u'workspace://SpacesStore/2224a63c-350b-438c-be72-8f425e79ce1f'
- The following optional arguments are not yet supported:
- policies
- addACEs
- removeACEs
-
createPolicy
(properties)¶ This has not yet been implemented.
- The following optional arguments are not currently supported:
- folderId
- policies
- addACEs
- removeACEs
-
createRelationship
(sourceObj, targetObj, relType)¶ Creates a relationship of the specific type between a source object and a target object and returns the new
Relationship
object.- The following optional arguments are not currently supported:
- policies
- addACEs
- removeACEs
-
getCapabilities
()¶ Returns a dict of repository capabilities.
>>> caps = repo.getCapabilities() >>> for k,v in caps.items(): ... print "%s:%s" % (k,v) ... PWCUpdatable:True VersionSpecificFiling:False Join:None ContentStreamUpdatability:anytime AllVersionsSearchable:False Renditions:None Multifiling:True GetFolderTree:True GetDescendants:True ACL:None PWCSearchable:True Query:bothcombined Unfiling:False Changes:None
-
getCheckedOutDocs
(**kwargs)¶ Returns a ResultSet of
CmisObject
objects that are currently checked out.>>> rs = repo.getCheckedOutDocs() >>> len(rs.getResults()) 2 >>> for doc in repo.getCheckedOutDocs().getResults(): ... doc.getTitle() ... u'sample-a (Working Copy).pdf' u'sample-b (Working Copy).pdf'
- These optional arguments are supported:
- folderId
- maxItems
- skipCount
- orderBy
- filter
- includeRelationships
- renditionFilter
- includeAllowableActions
-
getCollection
(collectionType, **kwargs)¶ Returns a list of objects returned for the specified collection.
If the query collection is requested, an exception will be raised. That collection isn’t meant to be retrieved.
If the types collection is specified, the method returns the result of getTypeDefinitions and ignores any optional params passed in.
>>> from cmislib.atompub.atompub_binding import TYPES_COLL >>> types = repo.getCollection(TYPES_COLL) >>> len(types) 4 >>> types[0].getTypeId() u'cmis:folder'
Otherwise, the collection URL is invoked, and a
ResultSet
is returned.>>> from cmislib.atompub.atompub_binding import CHECKED_OUT_COLL >>> resultSet = repo.getCollection(CHECKED_OUT_COLL) >>> len(resultSet.getResults()) 1
-
getContentChanges
(**kwargs)¶ Returns a
ResultSet
containingChangeEntry
objects.>>> for changeEntry in rs: ... changeEntry.objectId ... changeEntry.id ... changeEntry.changeType ... changeEntry.changeTime ... 'workspace://SpacesStore/0e2dc775-16b7-4634-9e54-2417a196829b' u'urn:uuid:0e2dc775-16b7-4634-9e54-2417a196829b' u'created' datetime.datetime(2010, 2, 11, 12, 55, 14) 'workspace://SpacesStore/bd768f9f-99a7-4033-828d-5b13f96c6923' u'urn:uuid:bd768f9f-99a7-4033-828d-5b13f96c6923' u'updated' datetime.datetime(2010, 2, 11, 12, 55, 13) 'workspace://SpacesStore/572c2cac-6b26-4cd8-91ad-b2931fe5b3fb' u'urn:uuid:572c2cac-6b26-4cd8-91ad-b2931fe5b3fb' u'updated'
- The following optional arguments are supported:
- changeLogToken
- includeProperties
- includePolicyIDs
- includeACL
- maxItems
You can get the latest change log token by inspecting the repository info via
Repository.getRepositoryInfo()
.>>> repo.info['latestChangeLogToken'] u'2692' >>> rs = repo.getContentChanges(changeLogToken='2692') >>> len(rs) 1 >>> rs[0].id u'urn:uuid:8e88f694-93ef-44c5-9f70-f12fff824be9' >>> rs[0].changeType u'updated' >>> rs[0].changeTime datetime.datetime(2010, 2, 16, 20, 6, 37)
-
getFolder
(folderId)¶ Returns a
Folder
object for a specified folderId>>> someFolder = repo.getFolder('workspace://SpacesStore/aa1ecedf-9551-49c5-831a-0502bb43f348') >>> someFolder.getObjectId() u'workspace://SpacesStore/aa1ecedf-9551-49c5-831a-0502bb43f348'
-
getLink
(rel)¶ Returns the HREF attribute of an Atom link element for the specified rel.
-
getObject
(objectId, **kwargs)¶ Returns an object given the specified object ID.
>>> doc = repo.getObject('workspace://SpacesStore/f0c8b90f-bec0-4405-8b9c-2ab570589808') >>> doc.getTitle() u'sample-b.pdf'
- The following optional arguments are supported:
- returnVersion
- filter
- includeRelationships
- includePolicyIds
- renditionFilter
- includeACL
- includeAllowableActions
-
getObjectByPath
(path, **kwargs)¶ Returns an object given the path to the object.
>>> doc = repo.getObjectByPath('/jeff test/sample-b.pdf') >>> doc.getTitle() u'sample-b.pdf'
- The following optional arguments are not currently supported:
- filter
- includeAllowableActions
-
getPermissionDefinitions
()¶ Returns a dictionary of permission definitions for this repository. The key is the permission string or technical name of the permission and the value is the permission description.
>>> for permDef in repo.permissionDefinitions: ... print permDef ... cmis:all {http://www.alfresco.org/model/system/1.0}base.LinkChildren {http://www.alfresco.org/model/content/1.0}folder.Consumer {http://www.alfresco.org/model/security/1.0}All.All {http://www.alfresco.org/model/system/1.0}base.CreateAssociations {http://www.alfresco.org/model/system/1.0}base.FullControl {http://www.alfresco.org/model/system/1.0}base.AddChildren {http://www.alfresco.org/model/system/1.0}base.ReadAssociations {http://www.alfresco.org/model/content/1.0}folder.Editor {http://www.alfresco.org/model/content/1.0}cmobject.Editor {http://www.alfresco.org/model/system/1.0}base.DeleteAssociations cmis:read cmis:write
-
getPermissionMap
()¶ Returns a dictionary representing the permission mapping table where each key is a permission key string and each value is a list of one or more permissions the principal must have to perform the operation.
>>> for (k,v) in repo.permissionMap.items(): ... print 'To do this: %s, you must have these perms:' % k ... for perm in v: ... print perm ... To do this: canCreateFolder.Folder, you must have these perms: cmis:all {http://www.alfresco.org/model/system/1.0}base.CreateChildren To do this: canAddToFolder.Folder, you must have these perms: cmis:all {http://www.alfresco.org/model/system/1.0}base.CreateChildren To do this: canDelete.Object, you must have these perms: cmis:all {http://www.alfresco.org/model/system/1.0}base.DeleteNode To do this: canCheckin.Document, you must have these perms: cmis:all {http://www.alfresco.org/model/content/1.0}lockable.CheckIn
-
getPropagation
()¶ - Returns the value of the cmis:propagation element. Valid values are:
- objectonly: indicates that the repository is able to apply ACEs without changing the ACLs of other objects
- propagate: indicates that the repository is able to apply ACEs to a given object and propagate this change to all inheriting objects
>>> repo.propagation u'propagate'
-
getRepositoryId
()¶ Returns this repository’s unique identifier
>>> repo = client.getDefaultRepository() >>> repo.getRepositoryId() u'83beb297-a6fa-4ac5-844b-98c871c0eea9'
-
getRepositoryInfo
()¶ Returns a dict of repository information.
>>> repo = client.getDefaultRepository()>>> repo.getRepositoryName() u'Main Repository' >>> info = repo.getRepositoryInfo() >>> for k,v in info.items(): ... print "%s:%s" % (k,v) ... cmisSpecificationTitle:Version 1.0 Committee Draft 04 cmisVersionSupported:1.0 repositoryDescription:None productVersion:3.2.0 (r2 2440) rootFolderId:workspace://SpacesStore/aa1ecedf-9551-49c5-831a-0502bb43f348 repositoryId:83beb297-a6fa-4ac5-844b-98c871c0eea9 repositoryName:Main Repository vendorName:Alfresco productName:Alfresco Repository (Community)
-
getRepositoryName
()¶ Returns this repository’s name
>>> repo = client.getDefaultRepository() >>> repo.getRepositoryName() u'Main Repository'
-
getRootFolder
()¶ Returns the root folder of the repository
>>> root = repo.getRootFolder() >>> root.getObjectId() u'workspace://SpacesStore/aa1ecedf-9551-49c5-831a-0502bb43f348'
-
getSupportedPermissions
()¶ Returns the value of the cmis:supportedPermissions element. Valid values are:
- basic: indicates that the CMIS Basic permissions are supported
- repository: indicates that repository specific permissions are supported
- both: indicates that both CMIS basic permissions and repository specific permissions are supported
>>> repo.supportedPermissions u'both'
-
getTypeChildren
(typeId=None)¶ Returns a list of
ObjectType
objects corresponding to the child types of the type specified by the typeId.If no typeId is provided, the result will be the same as calling self.getTypeDefinitions
- These optional arguments are current unsupported:
- includePropertyDefinitions
- maxItems
- skipCount
>>> baseTypes = repo.getTypeChildren() >>> for baseType in baseTypes: ... print baseType.getTypeId() ... cmis:folder cmis:relationship cmis:document cmis:policy
-
getTypeDefinition
(typeId)¶ Returns an
ObjectType
object for the specified object type id.>>> folderType = repo.getTypeDefinition('cmis:folder')
-
getTypeDefinitions
(**kwargs)¶ Returns a list of
ObjectType
objects representing the base types in the repository.>>> baseTypes = repo.getTypeDefinitions() >>> for baseType in baseTypes: ... print baseType.getTypeId() ... cmis:folder cmis:relationship cmis:document cmis:policy
-
getTypeDescendants
(typeId=None, **kwargs)¶ Returns a list of
ObjectType
objects corresponding to the descendant types of the type specified by the typeId.If no typeId is provided, the repository’s “typesdescendants” URL will be called to determine the list of descendant types.
>>> allTypes = repo.getTypeDescendants() >>> for aType in allTypes: ... print aType.getTypeId() ... cmis:folder F:cm:systemfolder F:act:savedactionfolder F:app:configurations F:fm:forums F:wcm:avmfolder F:wcm:avmplainfolder F:wca:webfolder F:wcm:avmlayeredfolder F:st:site F:app:glossary F:fm:topic
- These optional arguments are supported:
- depth
- includePropertyDefinitions
>>> types = repo.getTypeDescendants('cmis:folder') >>> len(types) 17 >>> types = repo.getTypeDescendants('cmis:folder', depth=1) >>> len(types) 12 >>> types = repo.getTypeDescendants('cmis:folder', depth=2) >>> len(types) 17
-
getUnfiledDocs
(**kwargs)¶ Returns a ResultSet of
CmisObject
objects that are currently unfiled.>>> rs = repo.getUnfiledDocs() >>> len(rs.getResults()) 2 >>> for doc in repo.getUnfiledDocs().getResults(): ... doc.getTitle() ... u'sample-a.pdf' u'sample-b.pdf'
- These optional arguments are supported:
- folderId
- maxItems
- skipCount
- orderBy
- filter
- includeRelationships
- renditionFilter
- includeAllowableActions
-
id
¶ Returns this repository’s unique identifier
>>> repo = client.getDefaultRepository() >>> repo.getRepositoryId() u'83beb297-a6fa-4ac5-844b-98c871c0eea9'
-
info
¶ Returns a dict of repository information.
>>> repo = client.getDefaultRepository()>>> repo.getRepositoryName() u'Main Repository' >>> info = repo.getRepositoryInfo() >>> for k,v in info.items(): ... print "%s:%s" % (k,v) ... cmisSpecificationTitle:Version 1.0 Committee Draft 04 cmisVersionSupported:1.0 repositoryDescription:None productVersion:3.2.0 (r2 2440) rootFolderId:workspace://SpacesStore/aa1ecedf-9551-49c5-831a-0502bb43f348 repositoryId:83beb297-a6fa-4ac5-844b-98c871c0eea9 repositoryName:Main Repository vendorName:Alfresco productName:Alfresco Repository (Community)
-
name
¶ Returns this repository’s name
>>> repo = client.getDefaultRepository() >>> repo.getRepositoryName() u'Main Repository'
-
permissionDefinitions
¶ Returns a dictionary of permission definitions for this repository. The key is the permission string or technical name of the permission and the value is the permission description.
>>> for permDef in repo.permissionDefinitions: ... print permDef ... cmis:all {http://www.alfresco.org/model/system/1.0}base.LinkChildren {http://www.alfresco.org/model/content/1.0}folder.Consumer {http://www.alfresco.org/model/security/1.0}All.All {http://www.alfresco.org/model/system/1.0}base.CreateAssociations {http://www.alfresco.org/model/system/1.0}base.FullControl {http://www.alfresco.org/model/system/1.0}base.AddChildren {http://www.alfresco.org/model/system/1.0}base.ReadAssociations {http://www.alfresco.org/model/content/1.0}folder.Editor {http://www.alfresco.org/model/content/1.0}cmobject.Editor {http://www.alfresco.org/model/system/1.0}base.DeleteAssociations cmis:read cmis:write
-
permissionMap
¶ Returns a dictionary representing the permission mapping table where each key is a permission key string and each value is a list of one or more permissions the principal must have to perform the operation.
>>> for (k,v) in repo.permissionMap.items(): ... print 'To do this: %s, you must have these perms:' % k ... for perm in v: ... print perm ... To do this: canCreateFolder.Folder, you must have these perms: cmis:all {http://www.alfresco.org/model/system/1.0}base.CreateChildren To do this: canAddToFolder.Folder, you must have these perms: cmis:all {http://www.alfresco.org/model/system/1.0}base.CreateChildren To do this: canDelete.Object, you must have these perms: cmis:all {http://www.alfresco.org/model/system/1.0}base.DeleteNode To do this: canCheckin.Document, you must have these perms: cmis:all {http://www.alfresco.org/model/content/1.0}lockable.CheckIn
-
propagation
¶ - Returns the value of the cmis:propagation element. Valid values are:
- objectonly: indicates that the repository is able to apply ACEs without changing the ACLs of other objects
- propagate: indicates that the repository is able to apply ACEs to a given object and propagate this change to all inheriting objects
>>> repo.propagation u'propagate'
-
query
(statement, **kwargs)¶ Returns a list of
CmisObject
objects based on the CMIS Query Language passed in as the statement. The actual objects returned will be instances of the appropriate child class based on the object’s base type ID.In order for the results to be properly instantiated as objects, make sure you include ‘cmis:objectId’ as one of the fields in your select statement, or just use “SELECT *”.
If you want the search results to automatically be instantiated with the appropriate sub-class of
CmisObject
you must either include cmis:baseTypeId as one of the fields in your select statement or just use “SELECT *”.>>> q = "select * from cmis:document where cmis:name like '%test%'" >>> resultSet = repo.query(q) >>> len(resultSet.getResults()) 1 >>> resultSet.hasNext() False
- The following optional arguments are supported:
- searchAllVersions
- includeRelationships
- renditionFilter
- includeAllowableActions
- maxItems
- skipCount
>>> q = 'select * from cmis:document' >>> rs = repo.query(q) >>> len(rs.getResults()) 148 >>> rs = repo.query(q, maxItems='5') >>> len(rs.getResults()) 5 >>> rs.hasNext() True
-
reload
()¶ This method will re-fetch the repository’s XML data from the CMIS repository.
-
rootFolder
¶ Returns the root folder of the repository
>>> root = repo.getRootFolder() >>> root.getObjectId() u'workspace://SpacesStore/aa1ecedf-9551-49c5-831a-0502bb43f348'
-
supportedPermissions
¶ Returns the value of the cmis:supportedPermissions element. Valid values are:
- basic: indicates that the CMIS Basic permissions are supported
- repository: indicates that repository specific permissions are supported
- both: indicates that both CMIS basic permissions and repository specific permissions are supported
>>> repo.supportedPermissions u'both'
-
-
class
cmislib.domain.
ResultSet
¶ Represents a paged result set. In CMIS, this is most often an Atom feed.
-
getFirst
()¶ Returns the first page of results as a dictionary of
CmisObject
objects or its appropriate sub-type. This only works when the server returns a “first” link. Not all of them do.>>> resultSet.hasFirst() True >>> results = resultSet.getFirst() >>> for result in results: ... result ... <cmislib.atompub.binding.AtomPubDocument object at 0x10480bc90>
-
getLast
()¶ Returns the last page of results as a dictionary of
CmisObject
objects or its appropriate sub-type. This only works when the server is returning a “last” link. Not all of them do.>>> resultSet.hasLast() True >>> results = resultSet.getLast() >>> for result in results: ... result ... <cmislib.atompub.binding.AtomPubDocument object at 0x10480bc90>
-
getNext
()¶ Returns the next page of results as a dictionary of
CmisObject
objects or its appropriate sub-type.>>> resultSet.hasNext() True >>> results = resultSet.getNext() >>> for result in results: ... result ... <cmislib.atompub.binding.AtomPubDocument object at 0x10480bc90>
-
getPrev
()¶ Returns the prev page of results as a dictionary of
CmisObject
objects or its appropriate sub-type. This only works when the server returns a “prev” link. Not all of them do.>>> resultSet.hasPrev() True >>> results = resultSet.getPrev() >>> for result in results: ... result ... <cmislib.atompub.binding.AtomPubDocument object at 0x10480bc90>
-
getResults
()¶ Returns the results that were fetched and cached by the get*Page call.
>>> resultSet = repo.getCheckedOutDocs() >>> resultSet.hasNext() False >>> for result in resultSet.getResults(): ... result ... <cmislib.atompub.binding.AtomPubDocument object at 0x104851810>
-
hasFirst
()¶ Returns True if this page contains a first link. Not all CMIS providers implement first links consistently.
>>> resultSet.hasFirst() True
-
hasLast
()¶ Returns True if this page contains a last link. Not all CMIS providers implement last links consistently.
>>> resultSet.hasLast() True
-
hasNext
()¶ Returns True if this page contains a next link.
>>> resultSet.hasNext() True
-
hasObject
(objectId)¶ Returns True if the specified objectId is found in the list of results, otherwise returns False.
-
hasPrev
()¶ Returns True if this page contains a prev link. Not all CMIS providers implement prev links consistently.
>>> resultSet.hasPrev() True
-
reload
()¶ Re-invokes the self link for the current set of results.
>>> resultSet.reload()
-
The cmislib.net
Module¶
The cmislib.net
Module contains the classes used by cmislib.model.CmisClient
to communicate with the CMIS repository. The most important of which is cmislib.net.RESTService
.
Module that takes care of network communications for cmislib. It does not know anything about CMIS or do anything special with regard to the response it receives.
-
class
cmislib.net.
RESTService
¶ Generic service for interacting with an HTTP end point. Sets headers such as the USER_AGENT and builds the basic auth handler.
-
delete
(url, username=None, password=None, **kwargs)¶ Makes a delete request to the URL specified.
-
get
(url, username=None, password=None, **kwargs)¶ Makes a get request to the URL specified.
-
post
(url, payload, contentType, username=None, password=None, **kwargs)¶ Makes a POST request to the URL specified and posts the payload that gets passed in. The content type header gets set to the specified content type.
-
put
(url, payload, contentType, username=None, password=None, **kwargs)¶ Makes a PUT request to the URL specified and includes the payload that gets passed in. The content type header gets set to the specified content type.
-
The tests
Module¶
The tests
Module contains unit tests for all classes and methods in cmislib.model
. See Tests for more information on running tests.