Beispiel #1
0
    def setProject(self, project, name=None):
        """Sets the current pyosf.Project (which then sets OSF remote project)

        :params:

            - project can be a pysof.Project object or a filename to load

        If this loads successfully then the project root and OSF project ID
        will also be updated
        """
        if isinstance(project, pyosf.Project):
            self._setLocalProject(project)
            try:
                self._setOSFproject(project.osf)
            except pyosf.DeletedError:
                print("OSF Project <{}> no longer exists online".format(
                    project.project_id))
        elif isinstance(project, pyosf.remote.OSFProject):
            self._setOSFproject(project)
            projStr, localProj = projectCatalog.projFromId(project.id)
            if localProj is None:  # create a project for it
                projPath = "%s/%s.psyproj" % (projectsFolder, name)
                localProj = pyosf.Project(project_file=projPath,
                                          osf=project,
                                          autosave=False)
            self._setLocalProject(localProj)
        elif os.path.isfile(project):
            self.projFilePath = project
            project = pyosf.Project(project_file=project)
            # check this is the same project !
            if self.OSFproject and project.osf.id != self.OSFproject.id:
                raise IOError("The project file relates to a different"
                              "OSF project and cannot be used for this one")
            self.project = project  # do this after checking that it's valid
        self.update()
Beispiel #2
0
    def onSyncBtn(self, evt):
        self.project = pyosf.Project(project_file=self.projFilePath.GetValue(),
                                     root_path=self.localPath.GetValue(),
                                     osf=self.OSFproject)
        # create or reset progress indicators
        if self.syncStatus is None:
            self.syncStatus = SyncStatusPanel(parent=self, id=-1,
                                              project=self.project)
            self.mainSizer.Add(self.syncStatus,
                               flag=wx.ALIGN_CENTER | wx.EXPAND | wx.ALL,
                               border=5)
            self.mainSizer.Fit(self)
        else:
            self.syncStatus.reset()

        self.update(status="Checking for changes")
        wx.Yield()
        changes = self.project.get_changes()
        self.update(status="Applying changes")
        wx.Yield()  # give wx a moment to breath
        # start the threads up/downloading
        changes.apply(threaded=True)
        # to check the status we need the
        while True:
            progress = changes.progress
            if progress == 1:
                self.update("Sync complete")
                changes.finish_sync()
                self.project.save()
                # get rid of progress markers
                self.syncStatus.Destroy()
                self.syncStatus = None
                break
            else:
                self.syncStatus.setProgress(progress)
Beispiel #3
0
 def loadProjectFile(self, filepath):
     project = pyosf.Project(project_file=filepath)
     self.localPath.SetValue(project.root_path)
     if project.osf:
         self.setOSFproject(project.osf)
     self.project = project
     self.update()
Beispiel #4
0
 def updateProjectFields(self):
     if not self.project:
         self.project = pyosf.Project(osf=self.OSFproject)
     self.project.name = self.nameCtrl.GetValue()
     self.project.username = self.OSFproject.session.username
     self.project.project_id = self.OSFproject.id
     key = projectCatalog.addFile(self.project.project_file)
     projHistory.AddFileToHistory(key)
Beispiel #5
0
 def updateProjectFields(self):
     if not self.project:
         self.project = pyosf.Project(osf=self.OSFproject)
     name = self.nameCtrl.GetValue()
     if name != '':
         self.project.name = name
     else:
         self.project.name = self.OSFproject.id
     self.project.username = self.OSFproject.session.username
     self.project.project_id = self.OSFproject.id
     projPath = "%s/%s.psyproj" % (projectsFolder, self.project.name)
     self.project.project_file = projPath
     self.project.autosave = True
     self.project.save()
     key = projectCatalog.addFile(self.project.project_file)
     projHistory.AddFileToHistory(key)
Beispiel #6
0
 def addFile(self, filePath):
     """Try to add the file and return a dict key (or None if non-existent)
     """
     if not os.path.isfile(filePath):
         return None
     try:
         thisProj = pyosf.Project(project_file=filePath)  # load proj file
     except pyosf.OSFDeleted:
         return None
     if hasattr(thisProj, 'name'):
         key = "%s: %s" % (thisProj.project_id, thisProj.name)
     else:
         key = "%s: n/a" % (thisProj.project_id)
     if key not in self:
         self.__setitem__(key, thisProj)
     return key
Beispiel #7
0
 def setProjFile(self, projFile):
     """Set the path of the project file. If this loads successfully
     then the project root and OSF project ID will also be updated
     """
     if os.path.isfile(projFile):
         self.projFilePath.SetValue(projFile)
         project = pyosf.Project(project_file=projFile)
         # check this is the same project!
         if self.OSFproject and project.osf.id != self.OSFproject.id:
             raise IOError("The project file relates to a different"
                           "OSF project and cannot be used for this one")
         self.localPath.SetValue(project.root_path)
         if project.osf:
             self.setOSFproject(project.osf)
         self.project = project
     self.update()
Beispiel #8
0
    def __init__(self, osf_project_file="osfsync.proj"):
        """ If project file exists, use this & connect.
        """
        self.clear_connection_details()
        self.osf_project_file = path.realpath(osf_project_file)
        if path.isfile(osf_project_file):
            try:
                self._project = pyosf.Project(
                    project_file=self.osf_project_file)
            except pyosf.AuthError:
                self._project = None
        else:
            self._project = None

        if self._project is not None:
            print("Connected to OSF project '{0}'.".format(
                self._project.project_id))
Beispiel #9
0
    def connect(self):
        """connect with OSF project"""

        self.set_connection_details()

        try:
            session = pyosf.Session(username=self.osf_username)
        except pyosf.AuthError:
            print("Could not login to OSF. Auth token might be required.")
            self._project = None
            return False

        try:
            osf_proj = session.open_project(self.osf_project_id)
            self._project = pyosf.Project(project_file=self.osf_project_file,
                                          root_path=self.sync_folder,
                                          osf=osf_proj)
        except:
            print("Could not connect to OSF project '{0}'.".format(
                self.osf_project_id))
            self._project = None
            return False

        print("Connected to OSF project '{0}'.".format(self.osf_project_id))