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()
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)
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()
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)
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)
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
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()
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))
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))