summaryrefslogtreecommitdiffstats
path: root/aioeapi/aio_portcheck.py
diff options
context:
space:
mode:
Diffstat (limited to 'aioeapi/aio_portcheck.py')
-rw-r--r--aioeapi/aio_portcheck.py56
1 files changed, 56 insertions, 0 deletions
diff --git a/aioeapi/aio_portcheck.py b/aioeapi/aio_portcheck.py
new file mode 100644
index 0000000..e82875d
--- /dev/null
+++ b/aioeapi/aio_portcheck.py
@@ -0,0 +1,56 @@
+# -----------------------------------------------------------------------------
+# System Imports
+# -----------------------------------------------------------------------------
+
+from typing import Optional
+import socket
+import asyncio
+
+# -----------------------------------------------------------------------------
+# Public Imports
+# -----------------------------------------------------------------------------
+
+
+from httpx import URL
+
+# -----------------------------------------------------------------------------
+# Exports
+# -----------------------------------------------------------------------------
+
+__all__ = ["port_check_url"]
+
+# -----------------------------------------------------------------------------
+#
+# CODE BEGINS
+#
+# -----------------------------------------------------------------------------
+
+
+async def port_check_url(url: URL, timeout: Optional[int] = 5) -> bool:
+ """
+ This function attempts to open the port designated by the URL given the
+ timeout in seconds. If the port is avaialble then return True; False
+ otherwise.
+
+ Parameters
+ ----------
+ url:
+ The URL that provides the target system
+
+ timeout: optional, default is 5 seonds
+ Time to await for the port to open in seconds
+ """
+ port = url.port or socket.getservbyname(url.scheme)
+
+ try:
+ wr: asyncio.StreamWriter
+ _, wr = await asyncio.wait_for(
+ asyncio.open_connection(host=url.host, port=port), timeout=timeout
+ )
+
+ # MUST close if opened!
+ wr.close()
+ return True
+
+ except Exception: # noqa
+ return False