Ejemplo n.º 1
0
class Connection(object):
    '''
    A pyxnat connection to an XNAT server

    Parameters
    ----------
    uri: str
    user: str
    password: str
    '''
    def __init__(self, uri=None, user=None, password=None):
        if uri is not None:
            self._uri = uri
        elif 'XNAT_URI' in os.environ:
            self._uri = os.environ['XNAT_URI']
        else:
            raise ValueError('no URI specified')
        if user is not None:
            self._user = user
        elif 'XNAT_USER' in os.environ:
            self._user = os.environ['XNAT_USER']
        else:
            raise ValueError('no user specified')
        if password is not None:
            pass
        elif 'XNAT_PASSWORD' in os.environ:
            user = os.environ['XNAT_PASSWORD']
        else:
            raise ValueError('no password specified')
        self._pyxnat_interface = Interface(server=self._uri,
                                                 user=self._user,
                                                 password=password)
        self._pyxnat_interface._get_entry_point()
        self._projects = []
        self._accessible_projects = []
        return

    def is_connected(self):
        if self._pyxnat_interface:
            return True
        return False

    def close(self):
        uri = self._pyxnat_interface._get_entry_point() + '/JSESSION'
        self._pyxnat_interface._exec(uri, 'DELETE')
        self._pyxnat_interface = None
        return

    def set_projects(self):
        for project in self._pyxnat_interface.select.projects():
            #print project.id()
            #self._projects[project.id()] = Project(self, project.id())
            if self._user in project.users():
                self._accessible_projects.append(project.id())
                #self._projects[project.id()] = project.user_role(self._user)
            self._projects.append(project.id())

    @property
    def accessible_projects(self):
        if not self._accessible_projects:
            self.set_projects()
        return self._accessible_projects

    @property
    def projects(self):
        if not self._projects:
            self.set_projects()
        return self._projects

    @property
    def pyxnat_interface(self):
        return self._pyxnat_interface