예제 #1
0
 def _apply_base_uri(self, uri):
     assert uri
     parsed = urlsplit(uri)
     if parsed.scheme is None:
         self.__secure = None
         self.__verify = None
         self.__scheme = None
     else:
         self.__scheme = parsed.scheme
         if self.__scheme in [
                 "bolt+s", "bolt+ssc", "https", "http+s", "http+ssc"
         ]:
             self.__secure = True
         elif self.__scheme in ["bolt", "http"]:
             self.__secure = False
         else:
             raise ValueError("Unsupported scheme %r "
                              "(for routing, use routing=True)" %
                              self.__scheme)
         if self.__scheme in ["bolt+ssc", "http+ssc"]:
             self.__verify = False
         else:
             self.__verify = True
     self.__user = parsed.username or None
     self.__password = parsed.password or None
     netloc = parsed.netloc
     if "@" in netloc:
         self.__address = Address.parse(netloc.partition("@")[-1])
     else:
         self.__address = Address.parse(netloc)
예제 #2
0
 def begin(self, graph_name, readonly=False,
           # after=None, metadata=None, timeout=None
           ):
     if graph_name and not self.supports_multi():
         raise TypeError("Neo4j {} does not support "
                         "named graphs".format(self.neo4j_version))
     if readonly:
         raise TypeError("Readonly transactions are not supported over HTTP")
     # if after:
     #     raise TypeError("Bookmarks are not supported over HTTP")
     # if metadata:
     #     raise TypeError("Transaction metadata is not supported over HTTP")
     # if timeout:
     #     raise TypeError("Transaction timeouts are not supported over HTTP")
     try:
         r = self._post(HTTPTransaction.begin_uri(graph_name))
     except ConnectionError as error:
         raise_from(TransactionError("Transaction failed to begin"), error)
     except HTTPError as error:
         raise_from(TransactionError("Transaction failed to begin"), error)
     else:
         if r.status != 201:
             raise TransactionError("Transaction failed to begin "
                                    "due to HTTP status %r" % r.status)
         rs = HTTPResponse.from_json(r.status, r.data.decode("utf-8"))
         location_path = urlsplit(r.headers["Location"]).path
         tx = HTTPTransaction(graph_name, location_path.rpartition("/")[-1])
         self.release()
         rs.audit(tx)
         return tx
예제 #3
0
파일: http.py 프로젝트: aniket121/asconcept
 def sync(self):
     ref = self.ref
     # Some of the transactional URIs do not support empty statement
     # lists in versions earlier than 2.3. Which doesn't really matter
     # as it's a waste sending anything anyway.
     if ref in (self.autocommit_ref, self.begin_ref,
                self.transaction_ref) and not self._statements:
         return 0
     count = 0
     try:
         response = self.post(ref, {"statements": self._statements},
                              expected=(OK, CREATED))
         if response.status == 201:
             location_path = urlsplit(response.headers["Location"]).path
             self.transaction_ref = "".join(
                 location_path.rpartition("transaction")[1:])
             self.commit_ref = "%s/commit" % self.transaction_ref
             self.ref = self.transaction_ref
         content = json_loads(response.data.decode("utf-8"))
         errors = content["errors"]
         if errors:
             from py2neo.graph import GraphError
             raise GraphError.hydrate(errors[0])
         for i, result_loader in enumerate(self._result_loaders):
             try:
                 count += result_loader.load(content["results"][i])
             except IndexError:
                 result_loader.fail()
         return count
     finally:
         self._statements[:] = ()
         self._result_loaders[:] = ()
예제 #4
0
 def begin(self,
           graph_name,
           readonly=False,
           after=None,
           metadata=None,
           timeout=None):
     if graph_name and not self.supports_multi():
         raise TypeError("Neo4j {} does not support "
                         "named graphs".format(self.neo4j_version))
     if readonly:
         raise TypeError(
             "Readonly transactions are not supported over HTTP")
     if after:
         raise TypeError("Bookmarks are not supported over HTTP")
     if metadata:
         raise TypeError("Transaction metadata is not supported over HTTP")
     if timeout:
         raise TypeError("Transaction timeouts are not supported over HTTP")
     r = self._post(HTTPTransaction.begin_uri(graph_name))
     if r.status != 201:
         raise RuntimeError(
             "Can't begin a new transaction")  # TODO: better error
     rs = HTTPResponse.from_json(r.data.decode("utf-8"))
     location_path = urlsplit(r.headers["Location"]).path
     tx = HTTPTransaction(graph_name, location_path.rpartition("/")[-1])
     self._transactions.add(tx)
     self.release()
     rs.audit(tx)
     return tx
예제 #5
0
 def __init__(self, uri=None, **parts):
     parsed = urlsplit(uri or "")
     self.secure = parts.get("secure", False)
     self.scheme = parts.get(
         "scheme") or parsed.scheme or self.default_scheme(self.secure)
     if self.scheme == "https":
         self.secure = True
     self.host = (parts.get("%s_host" % self.scheme) or parts.get("host")
                  or parsed.hostname or self.default_host())
     self.port = (parts.get("%s_port" % self.scheme) or parts.get("port")
                  or parsed.port or self.default_port(self.scheme))
예제 #6
0
파일: __init__.py 프로젝트: motey/py2neo
 def _apply_uri(self, uri):
     settings = {}
     parsed = urlsplit(uri)
     if parsed.scheme is not None:
         self._apply_scheme(parsed.scheme)
     if "@" in parsed.netloc:
         settings["address"] = parsed.netloc.partition("@")[-1]
     else:
         settings["address"] = parsed.netloc
     if parsed.username:
         settings["user"] = parsed.username
     if parsed.password:
         settings["password"] = parsed.password
     self._apply_settings(**settings)
예제 #7
0
파일: http.py 프로젝트: aniket121/asconcept
 def __init__(self, uri):
     self.uri = uri
     parts = urlsplit(uri)
     scheme = parts.scheme
     host = parts.hostname
     port = parts.port
     if scheme == "http":
         from urllib3 import HTTPConnectionPool
         self._http = HTTPConnectionPool("%s:%d" % (host, port))
     elif scheme == "https":
         from urllib3 import HTTPSConnectionPool
         self._http = HTTPSConnectionPool("%s:%d" % (host, port))
     else:
         raise ValueError("Unsupported scheme %r" % scheme)
     self.path = parts.path
     self._headers = get_http_headers(scheme, host, port)
예제 #8
0
 def _apply_base_uri(self, uri):
     assert uri
     parsed = urlsplit(uri)
     if parsed.scheme is not None:
         self.__scheme = parsed.scheme
         if self.__scheme in [
                 "bolt+s", "bolt+ssc", "https", "http+s", "http+ssc"
         ]:
             self.__secure = True
         elif self.__scheme in ["bolt", "http"]:
             self.__secure = False
         if self.__scheme in ["bolt+ssc", "http+ssc"]:
             self.__verify = False
         else:
             self.__verify = True
     self.__user = parsed.username or None
     self.__password = parsed.password or None
     netloc = parsed.netloc
     if "@" in netloc:
         self.__address = Address.parse(netloc.partition("@")[-1])
     else:
         self.__address = Address.parse(netloc)
예제 #9
0
파일: http.py 프로젝트: motey/py2neo
 def begin(self, graph_name, readonly=False,
           # after=None, metadata=None, timeout=None
           ):
     if graph_name and not self.supports_multi():
         raise TypeError("Neo4j {} does not support "
                         "named graphs".format(self.neo4j_version))
     try:
         # if readonly:
         #     log.warning("Readonly transactions are not supported over HTTP")
         # if after:
         #     raise TypeError("Bookmarks are not supported over HTTP")
         # if metadata:
         #     raise TypeError("Transaction metadata is not supported over HTTP")
         # if timeout:
         #     raise TypeError("Transaction timeouts are not supported over HTTP")
         r = self._post(HTTPTransactionRef.begin_uri(graph_name))
         rs = HTTPResponse.from_json(r.status, r.data.decode("utf-8"))
         location_path = urlsplit(r.headers["Location"]).path
         tx = HTTPTransactionRef(graph_name, location_path.rpartition("/")[-1])
         rs.audit(tx)
         return tx
     finally:
         self.release()
예제 #10
0
 def apply_uri(u):
     parsed = urlsplit(u)
     if parsed.username:
         apply_auth(parsed.username + ":" + parsed.password)