def driver(cls, uri, *, auth=None, **config): """Create a driver. :param uri: the connection URI for the driver, see :ref:`uri-ref` for available URIs. :param auth: the authentication details, see :ref:`auth-ref` for available authentication details. :param config: driver configuration key-word arguments, see :ref:`driver-configuration-ref` for available key-word arguments. :return: :ref:`neo4j-driver-ref` or :ref:`bolt-driver-ref` """ from neo4j.api import ( parse_neo4j_uri, parse_routing_context, DRIVER_BOLT, DRIVER_NEO4j, SECURITY_TYPE_NOT_SECURE, SECURITY_TYPE_SELF_SIGNED_CERTIFICATE, SECURITY_TYPE_SECURE, URI_SCHEME_BOLT, URI_SCHEME_NEO4J, URI_SCHEME_BOLT_SELF_SIGNED_CERTIFICATE, URI_SCHEME_BOLT_SECURE, URI_SCHEME_NEO4J_SELF_SIGNED_CERTIFICATE, URI_SCHEME_NEO4J_SECURE, ) driver_type, security_type, parsed = parse_neo4j_uri(uri) if "trust" in config.keys(): if config.get("trust") not in [ TRUST_ALL_CERTIFICATES, TRUST_SYSTEM_CA_SIGNED_CERTIFICATES ]: from neo4j.exceptions import ConfigurationError raise ConfigurationError( "The config setting `trust` values are {!r}".format([ TRUST_ALL_CERTIFICATES, TRUST_SYSTEM_CA_SIGNED_CERTIFICATES, ])) if security_type in [ SECURITY_TYPE_SELF_SIGNED_CERTIFICATE, SECURITY_TYPE_SECURE ] and ("encrypted" in config.keys() or "trust" in config.keys()): from neo4j.exceptions import ConfigurationError raise ConfigurationError( "The config settings 'encrypted' and 'trust' can only be used with the URI schemes {!r}. Use the other URI schemes {!r} for setting encryption settings." .format([ URI_SCHEME_BOLT, URI_SCHEME_NEO4J, ], [ URI_SCHEME_BOLT_SELF_SIGNED_CERTIFICATE, URI_SCHEME_BOLT_SECURE, URI_SCHEME_NEO4J_SELF_SIGNED_CERTIFICATE, URI_SCHEME_NEO4J_SECURE, ])) if security_type == SECURITY_TYPE_SECURE: config["encrypted"] = True elif security_type == SECURITY_TYPE_SELF_SIGNED_CERTIFICATE: config["encrypted"] = True config["trust"] = TRUST_ALL_CERTIFICATES if driver_type == DRIVER_BOLT: return cls.bolt_driver(parsed.netloc, auth=auth, **config) elif driver_type == DRIVER_NEO4j: routing_context = parse_routing_context(parsed.query) return cls.neo4j_driver(parsed.netloc, auth=auth, routing_context=routing_context, **config)
def driver(cls, uri, *, auth=None, **config): """ Create a Neo4j driver that uses socket I/O and thread-based concurrency. :param uri: ``bolt://host[:port]`` **Settings:** BoltDriver with no encryption. ``bolt+ssc://host[:port]`` **Settings:** BoltDriver with encryption (accepts self signed certificates). ``bolt+s://host[:port]`` **Settings:** BoltDriver with encryption (accepts only certificates signed by an certificate authority), full certificate checks. ``neo4j://host[:port][?routing_context]`` **Settings:** Neo4jDriver with no encryption. ``neo4j+ssc://host[:port][?routing_context]`` **Settings:** Neo4jDriver with encryption (accepts self signed certificates). ``neo4j+s://host[:port][?routing_context]`` **Settings:** Neo4jDriver with encryption (accepts only certificates signed by an certificate authority), full certificate checks. :param auth: :param config: connection configuration settings """ from neo4j.api import ( parse_neo4j_uri, parse_routing_context, DRIVER_BOLT, DRIVER_NEO4j, SECURITY_TYPE_NOT_SECURE, SECURITY_TYPE_SELF_SIGNED_CERTIFICATE, SECURITY_TYPE_SECURE, URI_SCHEME_BOLT, URI_SCHEME_NEO4J, URI_SCHEME_BOLT_SELF_SIGNED_CERTIFICATE, URI_SCHEME_BOLT_SECURE, URI_SCHEME_NEO4J_SELF_SIGNED_CERTIFICATE, URI_SCHEME_NEO4J_SECURE, ) driver_type, security_type, parsed = parse_neo4j_uri(uri) if "trust" in config.keys(): if config.get("trust") not in [ TRUST_ALL_CERTIFICATES, TRUST_SYSTEM_CA_SIGNED_CERTIFICATES ]: from neo4j.exceptions import ConfigurationError raise ConfigurationError( "The config setting `trust` values are {!r}".format([ TRUST_ALL_CERTIFICATES, TRUST_SYSTEM_CA_SIGNED_CERTIFICATES, ])) if security_type in [ SECURITY_TYPE_SELF_SIGNED_CERTIFICATE, SECURITY_TYPE_SECURE ] and ("encrypted" in config.keys() or "trust" in config.keys()): from neo4j.exceptions import ConfigurationError raise ConfigurationError( "The config settings 'encrypted' and 'trust' can only be used with the URI schemes {!r}. Use the other URI schemes {!r} for setting encryption settings." .format([ URI_SCHEME_BOLT, URI_SCHEME_NEO4J, ], [ URI_SCHEME_BOLT_SELF_SIGNED_CERTIFICATE, URI_SCHEME_BOLT_SECURE, URI_SCHEME_NEO4J_SELF_SIGNED_CERTIFICATE, URI_SCHEME_NEO4J_SECURE, ])) if security_type == SECURITY_TYPE_SECURE: config["encrypted"] = True elif security_type == SECURITY_TYPE_SELF_SIGNED_CERTIFICATE: config["encrypted"] = True config["trust"] = TRUST_ALL_CERTIFICATES if driver_type == DRIVER_BOLT: return cls.bolt_driver(parsed.netloc, auth=auth, **config) elif driver_type == DRIVER_NEO4j: routing_context = parse_routing_context(parsed.query) return cls.neo4j_driver(parsed.netloc, auth=auth, routing_context=routing_context, **config)