def join_workspace(self, context, host, name, owner, possible_dirs=None): utils.reload_settings() # legacy urls in emacs... if owner and owner[:2] == "r/": owner = owner[2:] if not utils.can_auth(): success = yield self.create_or_link_account, context, host, False if not success: return utils.reload_settings() possible_dirs = possible_dirs or [] for d in possible_dirs: info = utils.read_floo_file(d) if not info: continue try: parsed_url = utils.parse_url(info["url"]) except Exception: parsed_url = None if ( parsed_url and parsed_url["host"] == host and parsed_url["workspace"] == name and parsed_url["owner"] == owner ): self.remote_connect(context, host, owner, name, d) return try: d = utils.get_persistent_data()["workspaces"][owner][name]["path"] except Exception: d = "" if d and os.path.isdir(d): self.remote_connect(context, host, owner, name, d) return d = d or os.path.join(G.SHARE_DIR or G.BASE_DIR, owner, name) join_action = utils.JOIN_ACTION.PROMPT while True: d = yield self.user_dir, context, "Save workspace files to: ", d if not d: return d = os.path.realpath(os.path.expanduser(d)) if not os.path.isdir(d): y_or_n = yield self.user_y_or_n, context, "%s is not a directory. Create it? " % d, "Create Directory" if not y_or_n: return utils.mkdir(d) if not os.path.isdir(d): msg.error("Couldn't create directory", d) continue join_action = utils.JOIN_ACTION.DOWNLOAD if os.path.isdir(d): self.remote_connect(context, host, owner, name, d, join_action) return
def join_workspace(self, context, host, name, owner, possible_dirs=None): utils.reload_settings() # legacy urls in emacs... if owner and owner[:2] == "r/": owner = owner[2:] if not utils.can_auth(): success = yield self.create_or_link_account, context, host, False if not success: return utils.reload_settings() possible_dirs = possible_dirs or [] for d in possible_dirs: info = utils.read_floo_file(d) if not info: continue try: parsed_url = utils.parse_url(info['url']) except Exception: parsed_url = None if parsed_url and parsed_url['host'] == host and parsed_url[ 'workspace'] == name and parsed_url['owner'] == owner: self.remote_connect(context, host, owner, name, d) return try: d = utils.get_persistent_data()['workspaces'][owner][name]['path'] except Exception: d = '' if d and os.path.isdir(d): self.remote_connect(context, host, owner, name, d) return # TODO: make per-host settings fully general host_share_dir = G.AUTH.get(host, {}).get('share_dir') d = d or os.path.join(host_share_dir or G.SHARE_DIR or G.BASE_DIR, owner, name) join_action = utils.JOIN_ACTION.PROMPT while True: d = yield self.user_dir, context, 'Save workspace files to: ', d if not d: return d = os.path.realpath(os.path.expanduser(d)) if not os.path.isdir(d): y_or_n = yield self.user_y_or_n, context, '%s is not a directory. Create it? ' % d, "Create Directory" if not y_or_n: return utils.mkdir(d) if not os.path.isdir(d): msg.error("Couldn't create directory", d) continue join_action = utils.JOIN_ACTION.DOWNLOAD if os.path.isdir(d): self.remote_connect(context, host, owner, name, d, join_action) return
def join_workspace(self, context, host, name, owner, possible_dirs=None): utils.reload_settings() # legacy urls in emacs... if owner and owner[:2] == "r/": owner = owner[2:] if not utils.can_auth(): success = yield self.create_or_link_account, context, host, False if not success: return utils.reload_settings() possible_dirs = possible_dirs or [] for d in possible_dirs: info = utils.read_floo_file(d) if not info: continue try: parsed_url = utils.parse_url(info['url']) except Exception: parsed_url = None if parsed_url and parsed_url['host'] == host and parsed_url['workspace'] == name and parsed_url['owner'] == owner: self.remote_connect(context, host, owner, name, d) return try: d = utils.get_persistent_data()['workspaces'][owner][name]['path'] except Exception: d = '' if d and os.path.isdir(d): self.remote_connect(context, host, owner, name, d) return # TODO: make per-host settings fully general host_share_dir = G.AUTH.get(host, {}).get('share_dir') d = d or os.path.join(host_share_dir or G.SHARE_DIR or G.BASE_DIR, owner, name) join_action = utils.JOIN_ACTION.PROMPT while True: d = yield self.user_dir, context, 'Save workspace files to: ', d if not d: return d = os.path.realpath(os.path.expanduser(d)) if not os.path.isdir(d): y_or_n = yield self.user_y_or_n, context, '%s is not a directory. Create it? ' % d, "Create Directory" if not y_or_n: return utils.mkdir(d) if not os.path.isdir(d): msg.error("Couldn't create directory", d) continue join_action = utils.JOIN_ACTION.DOWNLOAD if os.path.isdir(d): self.remote_connect(context, host, owner, name, d, join_action) return
def share_dir(self, context, dir_to_share, api_args): utils.reload_settings() if not utils.can_auth(): success = yield self.create_or_link_account, context, G.DEFAULT_HOST, False if not success: return utils.reload_settings() dir_to_share = os.path.expanduser(dir_to_share) dir_to_share = os.path.realpath(dir_to_share) dir_to_share = utils.unfuck_path(dir_to_share) if os.path.isfile(dir_to_share): dir_to_share = os.path.dirname(dir_to_share) workspace_name = os.path.basename(dir_to_share) msg.debug('', workspace_name, dir_to_share) if os.path.isfile(dir_to_share): dir_to_share = os.path.dirname(dir_to_share) try: utils.mkdir(dir_to_share) except Exception: msg.error("The directory", dir_to_share, "doesn't exist and I can't create it.") return info = utils.read_floo_file(dir_to_share) def prejoin(workspace_url): try: return self.prejoin_workspace(workspace_url, dir_to_share, api_args) except ValueError: pass workspace_url = info.get('url') if workspace_url: parsed_url = prejoin(workspace_url) if parsed_url: self.remote_connect(context, parsed_url['host'], parsed_url['owner'], parsed_url['workspace'], dir_to_share) return parsed_url = utils.get_workspace_by_path(dir_to_share, prejoin) if parsed_url: self.remote_connect(context, parsed_url['host'], parsed_url['owner'], parsed_url['workspace'], dir_to_share) return host = yield self._get_host, context if not host: return try: r = api.get_orgs_can_admin(host) except IOError as e: editor.error_message('Error getting org list: %s' % str_e(e)) return choices = [G.AUTH[host]['username']] if r.code >= 400: editor.error_message('Error getting org list: %s' % r.body) elif r.body: choices += [org['name'] for org in r.body] if len(choices) == 1: owner = choices[0] else: little = ['Create workspace owned by %s' % s for s in choices] ( owner, index ) = yield self.user_select, context, 'Create workspace owned by', choices, little if not owner: return self.create_workspace(context, host, owner, workspace_name, api_args, dir_to_share)
def share_dir(self, context, dir_to_share, api_args): utils.reload_settings() if not utils.can_auth(): success = yield self.create_or_link_account, context, G.DEFAULT_HOST, False if not success: return utils.reload_settings() dir_to_share = os.path.expanduser(dir_to_share) dir_to_share = os.path.realpath(dir_to_share) dir_to_share = utils.unfuck_path(dir_to_share) if os.path.isfile(dir_to_share): dir_to_share = os.path.dirname(dir_to_share) workspace_name = os.path.basename(dir_to_share) msg.debug('', workspace_name, dir_to_share) if os.path.isfile(dir_to_share): dir_to_share = os.path.dirname(dir_to_share) try: utils.mkdir(dir_to_share) except Exception: msg.error("The directory", dir_to_share, "doesn't exist and I can't create it.") return info = utils.read_floo_file(dir_to_share) def prejoin(workspace_url): try: return self.prejoin_workspace(workspace_url, dir_to_share, api_args) except ValueError: pass workspace_url = info.get('url') if workspace_url: parsed_url = prejoin(workspace_url) if parsed_url: self.remote_connect(context, parsed_url['host'], parsed_url['owner'], parsed_url['workspace'], dir_to_share) return parsed_url = utils.get_workspace_by_path(dir_to_share, prejoin) if parsed_url: self.remote_connect(context, parsed_url['host'], parsed_url['owner'], parsed_url['workspace'], dir_to_share) return host = yield self._get_host, context if not host: return try: r = api.get_orgs_can_admin(host) except IOError as e: editor.error_message('Error getting org list: %s' % str_e(e)) return choices = [G.AUTH[host]['username']] if r.code >= 400: editor.error_message('Error getting org list: %s' % r.body) elif r.body: choices += [org['name'] for org in r.body] if len(choices) == 1: owner = choices[0] else: little = ['Create workspace owned by %s' % s for s in choices] (owner, index) = yield self.user_select, context, 'Create workspace owned by', choices, little if not owner: return self.create_workspace(context, host, owner, workspace_name, api_args, dir_to_share)