class DatabaseWrapper(BaseDatabaseWrapper): vender = "cmis" operators = {} def __init__(self, *args, **kwargs): super(DatabaseWrapper, self).__init__(*args, **kwargs) self.charset = "utf-8" self.features = DatabaseFeatures(self) self.ops = DatabaseOperations(self) self.client = DatabaseClient(self) self.creation = DatabaseCreation(self) self.introspection = DatabaseIntrospection(self) self.validation = BaseDatabaseValidation(self) def close(self): if self.connection is not None: self.connection.close() self.connection = None def ensure_connection(self): if self.connection is None: self.cmis_client = CmisClient( self.settings_dict['HOST'], self.settings_dict['USER'], self.settings_dict['PASSWORD'], binding=self.cmis_binding() ) repo_name = self.settings_dict['NAME'] if repo_name == "default" or not repo_name: self.connection = self.cmis_client.defaultRepository else: self.connection = self.cmis_client.getRepository(repo_name) if django.conf.settings.DEBUG: print "Connected to Repository with ID %s" % self.connection.id def _commit(self): pass def _by_path(self, path): self.ensure_connection() return self.connection.getObjectByPath(path) def _cursor(self): self.ensure_connection() return DatabaseCursor(self.connection) def _query(self, query): self.ensure_connection() return self.connection.query(query) def _rollback(self): pass
class CMISRepo(object): implements(ICMISRepo) def __init__(self, url, user, password, repository_id=None, document_root='/'): self.client = CmisClient(url, user, password) if not repository_id: self.repo = self.client.getDefaultRepository() else: self.repo = self.client.getRepository(repository_id) self.docroot = self.repo.getObjectByPath(document_root) def docroot_path(self): paths = self.docroot.getPaths() if paths: return paths[0] return None
class AlfrescoRM(): def __init__(self, alfresco_repository_url, alfresco_cmis_rest_api_url, alfresco_admin_user, alfresco_admin_password): self.alfresco_repository_url = alfresco_repository_url self.alfresco_cmis_rest_api_url = alfresco_cmis_rest_api_url self.alfresco_admin_user = alfresco_admin_user self.alfresco_admin_password = alfresco_admin_password try: self.cmis_client = CmisClient(self.alfresco_cmis_rest_api_url, self.alfresco_admin_user, self.alfresco_admin_password) except: return HttpResponseBadRequest( '<h1>Failed to connect to Alfresco</h1>') def get_repository_url(self): return self.alfresco_repository_url def get_default_repository(self): default_repository = self.cmis_client.getRepository( self.cmis_client.defaultRepository.id) return default_repository def get_sites(self, repository): alfresco_sites = repository.query( "select * from cmis:folder where cmis:objectTypeId='F:st:site'") sites = [] for s in alfresco_sites: obj = repository.getObject(s.id) s = {} s['isSite'] = True for key, val in obj.properties.items(): if key == 'cmis:name' or key == 'cmis:title' or key == 'cmis:description' or key == 'cmis:path' or key == 'cmis:objectId' or key == 'cmis:objectTypeId' or key == 'cmis:parentId': s[key] = val document_library = repository.getObjectByPath(s['cmis:path'] + '/documentLibrary') children = document_library.getChildren() folders = [] for child in children: if child.properties['cmis:objectTypeId'] == 'cmis:folder': folder = { 'name': child.properties['cmis:name'], 'description': child.properties['cmis:description'], 'objectId': child.properties['cmis:objectId'], 'path': child.properties['cmis:path'], 'parent': child.properties['cmis:parentId'], 'url': self.alfresco_repository_url + '#filter=path|' + child.properties['cmis:path'] } folders.append(folder) s['folders'] = folders sites.append(s) return sites def get_folder_content(self, repository, object_id): object_id = object_id.replace('workspace://SpacesStore/', '') f = repository.getObject(object_id) content = {} content['isSite'] = False for key, val in f.properties.items(): if key == 'cmis:name' or key == 'cmis:title' or key == 'cmis:description' or key == 'cmis:path' or key == 'cmis:objectId' or key == 'cmis:objectTypeId' or key == 'cmis:parentId': content[key] = val folderChildren = f.getChildren() folders = [] for child in folderChildren: if child.properties['cmis:objectTypeId'] == 'cmis:folder': folder = { 'name': child.properties['cmis:name'], 'description': child.properties['cmis:description'], 'objectId': child.properties['cmis:objectId'], 'path': child.properties['cmis:path'], 'parent': child.properties['cmis:parentId'], 'url': self.alfresco_repository_url + '#filter=path|' + child.properties['cmis:path'] } folders.append(folder) content['folders'] = folders return content