def ensure_local_plotly_files(): """Ensure that filesystem is setup/filled out in a valid way. If the config or credential files aren't filled out, then write them to the disk. """ if ensure_writable_plotly_dir(): for fn in [CREDENTIALS_FILE, CONFIG_FILE]: utils.ensure_file_exists(fn) contents = utils.load_json_dict(fn) contents_orig = contents.copy() for key, val in list(FILE_CONTENT[fn].items()): # TODO: removed type checking below, may want to revisit if key not in contents: contents[key] = val contents_keys = list(contents.keys()) for key in contents_keys: if key not in FILE_CONTENT[fn]: del contents[key] # save only if contents has changed. # This is to avoid .credentials or .config file to be overwritten randomly, # which we constantly keep experiencing # (sync issues? the file might be locked for writing by other process in file._permissions) if contents_orig.keys() != contents.keys(): utils.save_json_dict(fn, contents) else: warnings.warn("Looks like you don't have 'read-write' permission to " "your 'home' ('~') directory or to our '~/.plotly' " "directory. That means plotly's python api can't setup " "local configuration files. No problem though! You'll " "just have to sign-in using 'plotly.plotly.sign_in()'. " "For help with that: 'help(plotly.plotly.sign_in)'." "\nQuestions? Visit https://support.plot.ly")
def set_credentials_file(username=None, api_key=None, stream_ids=None, proxy_username=None, proxy_password=None): """Set the keyword-value pairs in `~/.plotly_credentials`. :param (str) username: The username you'd use to sign in to Plotly :param (str) api_key: The api key associated with above username :param (list) stream_ids: Stream tokens for above credentials :param (str) proxy_username: The un associated with with your Proxy :param (str) proxy_password: The pw associated with your Proxy un """ if not ensure_writable_plotly_dir(): raise _plotly_utils.exceptions.PlotlyError("You don't have proper file permissions " "to run this function.") ensure_local_plotly_files() # make sure what's there is OK credentials = get_credentials_file() if isinstance(username, six.string_types): credentials['username'] = username if isinstance(api_key, six.string_types): credentials['api_key'] = api_key if isinstance(proxy_username, six.string_types): credentials['proxy_username'] = proxy_username if isinstance(proxy_password, six.string_types): credentials['proxy_password'] = proxy_password if isinstance(stream_ids, (list, tuple)): credentials['stream_ids'] = stream_ids utils.save_json_dict(CREDENTIALS_FILE, credentials) ensure_local_plotly_files() # make sure what we just put there is OK
def set_credentials_file( username=None, api_key=None, stream_ids=None, proxy_username=None, proxy_password=None, ): """Set the keyword-value pairs in `~/.plotly_credentials`. :param (str) username: The username you'd use to sign in to Plotly :param (str) api_key: The api key associated with above username :param (list) stream_ids: Stream tokens for above credentials :param (str) proxy_username: The un associated with with your Proxy :param (str) proxy_password: The pw associated with your Proxy un """ if not ensure_writable_plotly_dir(): raise _plotly_utils.exceptions.PlotlyError( "You don't have proper file permissions " "to run this function.") ensure_local_plotly_files() # make sure what's there is OK credentials = get_credentials_file() if isinstance(username, six.string_types): credentials["username"] = username if isinstance(api_key, six.string_types): credentials["api_key"] = api_key if isinstance(proxy_username, six.string_types): credentials["proxy_username"] = proxy_username if isinstance(proxy_password, six.string_types): credentials["proxy_password"] = proxy_password if isinstance(stream_ids, (list, tuple)): credentials["stream_ids"] = stream_ids utils.save_json_dict(CREDENTIALS_FILE, credentials) ensure_local_plotly_files() # make sure what we just put there is OK
def set_config_file(plotly_domain=None, plotly_streaming_domain=None, plotly_api_domain=None, plotly_ssl_verification=None, plotly_proxy_authorization=None, world_readable=None, sharing=None, auto_open=None): """Set the keyword-value pairs in `~/.plotly/.config`. :param (str) plotly_domain: ex - https://plot.ly :param (str) plotly_streaming_domain: ex - stream.plot.ly :param (str) plotly_api_domain: ex - https://api.plot.ly :param (bool) plotly_ssl_verification: True = verify, False = don't verify :param (bool) plotly_proxy_authorization: True = use plotly proxy auth creds :param (bool) world_readable: True = public, False = private """ if not ensure_writable_plotly_dir(): raise _plotly_utils.exceptions.PlotlyError("You don't have proper file permissions " "to run this function.") ensure_local_plotly_files() # make sure what's there is OK utils.validate_world_readable_and_sharing_settings({ 'sharing': sharing, 'world_readable': world_readable}) settings = get_config_file() if isinstance(plotly_domain, six.string_types): settings['plotly_domain'] = plotly_domain elif plotly_domain is not None: raise TypeError('plotly_domain should be a string') if isinstance(plotly_streaming_domain, six.string_types): settings['plotly_streaming_domain'] = plotly_streaming_domain elif plotly_streaming_domain is not None: raise TypeError('plotly_streaming_domain should be a string') if isinstance(plotly_api_domain, six.string_types): settings['plotly_api_domain'] = plotly_api_domain elif plotly_api_domain is not None: raise TypeError('plotly_api_domain should be a string') if isinstance(plotly_ssl_verification, (six.string_types, bool)): settings['plotly_ssl_verification'] = plotly_ssl_verification elif plotly_ssl_verification is not None: raise TypeError('plotly_ssl_verification should be a boolean') if isinstance(plotly_proxy_authorization, (six.string_types, bool)): settings['plotly_proxy_authorization'] = plotly_proxy_authorization elif plotly_proxy_authorization is not None: raise TypeError('plotly_proxy_authorization should be a boolean') if isinstance(auto_open, bool): settings['auto_open'] = auto_open elif auto_open is not None: raise TypeError('auto_open should be a boolean') # validate plotly_domain and plotly_api_domain utils.validate_plotly_domains( {'plotly_domain': plotly_domain, 'plotly_api_domain': plotly_api_domain} ) if isinstance(world_readable, bool): settings['world_readable'] = world_readable settings.pop('sharing') elif world_readable is not None: raise TypeError('Input should be a boolean') if isinstance(sharing, six.string_types): settings['sharing'] = sharing elif sharing is not None: raise TypeError('sharing should be a string') utils.set_sharing_and_world_readable(settings) utils.save_json_dict(CONFIG_FILE, settings) ensure_local_plotly_files() # make sure what we just put there is OK
def reset_credentials_file(): ensure_local_plotly_files() # make sure what's there is OK utils.save_json_dict(CREDENTIALS_FILE, {}) ensure_local_plotly_files() # put the defaults back
def set_config_file( plotly_domain=None, plotly_streaming_domain=None, plotly_api_domain=None, plotly_ssl_verification=None, plotly_proxy_authorization=None, world_readable=None, sharing=None, auto_open=None, ): """Set the keyword-value pairs in `~/.plotly/.config`. :param (str) plotly_domain: ex - https://plot.ly :param (str) plotly_streaming_domain: ex - stream.plot.ly :param (str) plotly_api_domain: ex - https://api.plot.ly :param (bool) plotly_ssl_verification: True = verify, False = don't verify :param (bool) plotly_proxy_authorization: True = use plotly proxy auth creds :param (bool) world_readable: True = public, False = private """ if not ensure_writable_plotly_dir(): raise _plotly_utils.exceptions.PlotlyError( "You don't have proper file permissions " "to run this function.") ensure_local_plotly_files() # make sure what's there is OK utils.validate_world_readable_and_sharing_settings({ "sharing": sharing, "world_readable": world_readable }) settings = get_config_file() if isinstance(plotly_domain, six.string_types): settings["plotly_domain"] = plotly_domain elif plotly_domain is not None: raise TypeError("plotly_domain should be a string") if isinstance(plotly_streaming_domain, six.string_types): settings["plotly_streaming_domain"] = plotly_streaming_domain elif plotly_streaming_domain is not None: raise TypeError("plotly_streaming_domain should be a string") if isinstance(plotly_api_domain, six.string_types): settings["plotly_api_domain"] = plotly_api_domain elif plotly_api_domain is not None: raise TypeError("plotly_api_domain should be a string") if isinstance(plotly_ssl_verification, (six.string_types, bool)): settings["plotly_ssl_verification"] = plotly_ssl_verification elif plotly_ssl_verification is not None: raise TypeError("plotly_ssl_verification should be a boolean") if isinstance(plotly_proxy_authorization, (six.string_types, bool)): settings["plotly_proxy_authorization"] = plotly_proxy_authorization elif plotly_proxy_authorization is not None: raise TypeError("plotly_proxy_authorization should be a boolean") if isinstance(auto_open, bool): settings["auto_open"] = auto_open elif auto_open is not None: raise TypeError("auto_open should be a boolean") # validate plotly_domain and plotly_api_domain utils.validate_plotly_domains({ "plotly_domain": plotly_domain, "plotly_api_domain": plotly_api_domain }) if isinstance(world_readable, bool): settings["world_readable"] = world_readable settings.pop("sharing") elif world_readable is not None: raise TypeError("Input should be a boolean") if isinstance(sharing, six.string_types): settings["sharing"] = sharing elif sharing is not None: raise TypeError("sharing should be a string") utils.set_sharing_and_world_readable(settings) utils.save_json_dict(CONFIG_FILE, settings) ensure_local_plotly_files() # make sure what we just put there is OK
def restore_files(self): if self._credentials and ensure_writable_plotly_dir(): utils.save_json_dict(files.CREDENTIALS_FILE, self._credentials) if self._config and ensure_writable_plotly_dir(): utils.save_json_dict(files.CONFIG_FILE, self._config)