lanscape 1.3.0b1__py3-none-any.whl → 1.3.1a1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -347,17 +347,24 @@ def get_all_network_subnets():
347
347
 
348
348
  return subnets
349
349
 
350
- def smart_select_primary_subnet(subnets: List[dict]=get_all_network_subnets()) -> str:
350
+ def smart_select_primary_subnet(subnets: List[dict] | None = None) -> str:
351
351
  """
352
- Finds the largest subnet within max ip range
353
- not perfect, but works better than subnets[0]
352
+ Finds the largest subnet within max ip range. If no subnets are
353
+ available, returns an empty string instead of raising ``KeyError``.
354
354
  """
355
+ subnets = subnets or get_all_network_subnets()
356
+
357
+ if not subnets:
358
+ return ""
359
+
355
360
  selected = {}
356
361
  for subnet in subnets:
357
- if selected.get('address_cnt',0) < subnet['address_cnt'] < MAX_IPS_ALLOWED:
362
+ if selected.get("address_cnt", 0) < subnet["address_cnt"] < MAX_IPS_ALLOWED:
358
363
  selected = subnet
359
- if not selected and len(subnets):
364
+
365
+ if not selected:
360
366
  selected = subnets[0]
361
- return selected['subnet']
367
+
368
+ return selected.get("subnet", "")
362
369
 
363
370
 
@@ -29,6 +29,13 @@ def open_webapp(url: str) -> bool:
29
29
  """
30
30
  start = time.time()
31
31
  try:
32
+ if sys.platform.startswith("darwin"):
33
+ # macOS does not support chrome-style app mode via the generic
34
+ # method. Fallback to the system "open" command which will use the
35
+ # default browser.
36
+ subprocess.run(["open", url], check=True)
37
+ return True
38
+
32
39
  exe = get_default_browser_executable()
33
40
  if not exe:
34
41
  raise RuntimeError('Unable to find browser binary')
@@ -117,8 +124,12 @@ def get_default_browser_executable() -> Optional[str]:
117
124
  # strip arguments like “%u”, “--flag”, etc.
118
125
  exec_cmd = exec_cmd.split()[0]
119
126
  exec_cmd = exec_cmd.split("%")[0]
120
- return exec_cmd
127
+ return exec_cmd
121
128
  return None
122
129
 
130
+ elif sys.platform.startswith("darwin"):
131
+ # macOS will use the system 'open' command to launch the default browser
132
+ return "/usr/bin/open"
133
+
123
134
  else:
124
135
  raise NotImplementedError(f"Unsupported platform: {sys.platform!r}")
lanscape/ui/app.py CHANGED
@@ -71,7 +71,7 @@ def exit_app():
71
71
  if args.persistent:
72
72
  log.info('Dectected browser close, not exiting flask.')
73
73
  return "Ignored"
74
- log.info('Web browser closed, terminating flask.')
74
+ log.info('Web browser closed, terminating flask. (disable with --peristent)')
75
75
  elif req_type == 'core':
76
76
  log.info('Core requested exit, terminating flask.')
77
77
  else:
@@ -100,7 +100,7 @@ def internal_error(e):
100
100
  ## Webserver creation functions
101
101
  ################################
102
102
 
103
- def start_webserver_dameon(args: RuntimeArgs) -> threading.Thread:
103
+ def start_webserver_daemon(args: RuntimeArgs) -> threading.Thread:
104
104
  proc = threading.Thread(target=start_webserver, args=(args,))
105
105
  proc.daemon = True # Kill thread when main thread exits
106
106
  proc.start()
lanscape/ui/main.py CHANGED
@@ -12,7 +12,7 @@ args = parse_args()
12
12
  configure_logging(args.loglevel, args.logfile, args.flask_logging)
13
13
 
14
14
  from ..libraries.version_manager import get_installed_version, is_update_available
15
- from .app import start_webserver_dameon, start_webserver
15
+ from .app import start_webserver_daemon, start_webserver
16
16
  import socket
17
17
 
18
18
 
@@ -100,13 +100,13 @@ def start_webserver_ui(args: RuntimeArgs):
100
100
  ).start()
101
101
  start_webserver(args)
102
102
  else:
103
- flask_thread = start_webserver_dameon(args)
103
+ flask_thread = start_webserver_daemon(args)
104
104
  app_closed = open_browser(uri)
105
105
 
106
106
  # depending on env, open_browser may or
107
107
  # may not be coupled with the closure of UI
108
108
  # (if in browser tab, it's uncoupled)
109
- if not app_closed:
109
+ if not app_closed or args.persistent:
110
110
  # not doing a direct join so i can still
111
111
  # terminate the app with ctrl+c
112
112
  while flask_thread.is_alive():
@@ -34,7 +34,7 @@
34
34
  discover more about your network as well. Enjoy!
35
35
  </p>
36
36
  <a href="https://github.com/mdennis281/" target="_blank">
37
- <button class="btn btn-primary m-2">Github</button>
37
+ <button class="btn btn-primary m-2">GitHub</button>
38
38
  </a>
39
39
  <a href="https://github.com/mdennis281/LANscape" target="_blank">
40
40
  <button class="btn btn-secondary m-2">Project Repo</button>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lanscape
3
- Version: 1.3.0b1
3
+ Version: 1.3.1a1
4
4
  Summary: A python based local network scanner
5
5
  Author-email: Michael Dennis <michael@dipduo.com>
6
6
  Project-URL: Homepage, https://github.com/mdennis281/py-lanscape
@@ -6,13 +6,13 @@ lanscape/libraries/errors.py,sha256=DaercNEZD_tUuXF7KsNk3SD6AqAwT-S7fvzpEybVn08,
6
6
  lanscape/libraries/ip_parser.py,sha256=ElXz3LU5CUYWqKOHEyrj5Y4Iv6OBtoSlbCcxhCsibfQ,2226
7
7
  lanscape/libraries/logger.py,sha256=doD8KKb4TNWDwVXc1VR7NK4UdharrAoRHl8vZnSAupI,1407
8
8
  lanscape/libraries/mac_lookup.py,sha256=-dRV0ygtjjh3JkgL3GTi_5-w7pcZ1oj4XVH4chjsmRs,2121
9
- lanscape/libraries/net_tools.py,sha256=GOK2zUdbk8bQ4gHLDZ0e73bZHvnbK7VADce_pTbbw2Q,11736
9
+ lanscape/libraries/net_tools.py,sha256=JU4mnQptO3-WGGlGR4lCRvOM8qpoCIvw6CuApiTQ-t4,11855
10
10
  lanscape/libraries/port_manager.py,sha256=fNext3FNfGnGYRZK9RhTEwQ2K0e0YmmMlhK4zVAvoCw,1977
11
11
  lanscape/libraries/runtime_args.py,sha256=ICX_JkOmqDQdewZNfRxJb9jMggDw1XqF5CxM9zXZE_Q,1947
12
12
  lanscape/libraries/service_scan.py,sha256=jLU84ZoJnqSQbE30Zly2lm2zHrCGutNXjla1sEvp1hE,1949
13
13
  lanscape/libraries/subnet_scan.py,sha256=0LW_xdoL-PRp59rJr6r6pSL3LiXEO_SJnjdrgEF_pO8,13120
14
14
  lanscape/libraries/version_manager.py,sha256=v-IsZ7sYIsNRiraIRckGZthlyL0iTuscR6jF_o9LBK8,1720
15
- lanscape/libraries/web_browser.py,sha256=ZRtQ0L0rjTYQZTxNEMqmwShOfZNK-6IqWvs1GdcCw5M,4338
15
+ lanscape/libraries/web_browser.py,sha256=jtF__C2rTXhlZsp98l2l5Qa-V2nUA8egu-Ldvo5k8lQ,4800
16
16
  lanscape/resources/mac_addresses/convert_csv.py,sha256=w3Heed5z2mHYDEZNBep3_hNg4dbrp_N6J54MGxnrq4s,721
17
17
  lanscape/resources/mac_addresses/mac_db.json,sha256=ygtFSwNwJzDlg6hmAujdgCyzUjxt9Di75J8SO4xYIs8,2187804
18
18
  lanscape/resources/ports/convert_csv.py,sha256=mWe8zucWVfnlNEx_ZzH5Vc3tJJbdi-Ih4nm2yKNrRN0,720
@@ -26,8 +26,8 @@ lanscape/tests/_helpers.py,sha256=wXJfUwzL3Fq4XBsC3dValCbXsf0U8FisuM_yo1de4QQ,37
26
26
  lanscape/tests/test_api.py,sha256=sjcjt3b1ZwvQiALOSfXoQxTlN1Z1_TRPC0EEy-bRIgE,7313
27
27
  lanscape/tests/test_env.py,sha256=ivFhCcemJ9vbe0_KtUkbqDY4r9nsDB8rVLUVjV-sNj8,673
28
28
  lanscape/tests/test_library.py,sha256=OPcTsUoR5IureSNDbePxid2BG98mfNNIJmCIY0BVz3w,1553
29
- lanscape/ui/app.py,sha256=fcifRJtaRWxe2gZHPVAB4GQmyaIV7tFhK0_GClIt6Qs,3567
30
- lanscape/ui/main.py,sha256=uNiMeupLRzZ3mzNd05KF_caAEzgFb_jv74-xuBlwQkI,4008
29
+ lanscape/ui/app.py,sha256=jMr72omFHOJJWxb9vwfpC7Lg-YIpw-4sZFAbWHnx_D4,3594
30
+ lanscape/ui/main.py,sha256=KObgvdOlIhx4VQgcaNLcLrnkFXmOhfVpUyI8tZDQmJo,4027
31
31
  lanscape/ui/blueprints/__init__.py,sha256=agvgPOSVbrxddaw6EY64ZZr1CQi1Qzwcs1t0lZMv5oY,206
32
32
  lanscape/ui/blueprints/api/__init__.py,sha256=t0QOq3vHFWmlZm_3YFPQbQzCn1a_a5cmRchtIxwy4eY,103
33
33
  lanscape/ui/blueprints/api/port.py,sha256=2UA38umzXE8pMitx1E-_wJHyL1dYYbtM6Kg5zVtfj6A,1019
@@ -54,7 +54,7 @@ lanscape/ui/static/js/subnet-info.js,sha256=aytt0LkBx4FVq36TxiMEw3aM7XQLHg_ng1U2
54
54
  lanscape/ui/static/js/subnet-selector.js,sha256=OG01pDaSOPLq3Ial0aO0CqPcob9tPZA1MZKGmQG0W7Q,366
55
55
  lanscape/ui/templates/base.html,sha256=P5xnMlvDXYkYSXdSZUWaRfhsszNuZPP7A56hemBrAFs,1498
56
56
  lanscape/ui/templates/error.html,sha256=zXFO0zPIfQORWq1ZMiSZ8G7FjfhVVr-aaYC0HeBl4Rs,1068
57
- lanscape/ui/templates/info.html,sha256=uRvR5Y0lDmSq2k-_ibcEcab2Ipzo8Qt6ZNK04h5Bfh8,2457
57
+ lanscape/ui/templates/info.html,sha256=K2ckljQujyXBaf0VmKO7IMm2S_wmN0sHD4vWA8Y4gJA,2457
58
58
  lanscape/ui/templates/main.html,sha256=M12xJSN6Ga565vIPhdCiqcr1tYgDrqzuQTeuXtk-8yo,3759
59
59
  lanscape/ui/templates/scan.html,sha256=Fz1Q4CzRq5qpKgszTAQLhaLVV0A6gBraT33mNDmpYRE,390
60
60
  lanscape/ui/templates/shutdown.html,sha256=v0cGT5CJWi-V8b5sUN3l-QIDNUmHTvKGi2gDlhmRlrs,724
@@ -65,8 +65,8 @@ lanscape/ui/templates/scan/ip-table-row.html,sha256=ptY24rxJRaA4PEEQRDncaq6Q0ql5
65
65
  lanscape/ui/templates/scan/ip-table.html,sha256=ds__UP9JiTKf5IxCmTMzw--eN_yg1Pvn3Nj1KvQxeZg,940
66
66
  lanscape/ui/templates/scan/overview.html,sha256=FsX-jSFhGKwCxZGKE8AMKk328UuawN6O9RNTzYvIOts,1205
67
67
  lanscape/ui/templates/scan/scan-error.html,sha256=Q4eZM5ThrxnFaWOSTUpK8hA2ksHwhxOBTaVUCLALhyA,1032
68
- lanscape-1.3.0b1.dist-info/licenses/LICENSE,sha256=cCO-NbS01Ilwc6djHjZ7LIgPFRkRmWdr0fH2ysXKioA,1090
69
- lanscape-1.3.0b1.dist-info/METADATA,sha256=6Je873VqtOapiau6tCbOyrCpLodk5t1z8x0WuYjcjrc,2567
70
- lanscape-1.3.0b1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
71
- lanscape-1.3.0b1.dist-info/top_level.txt,sha256=E9D4sjPz_6H7c85Ycy_pOS2xuv1Wm-ilKhxEprln2ps,9
72
- lanscape-1.3.0b1.dist-info/RECORD,,
68
+ lanscape-1.3.1a1.dist-info/licenses/LICENSE,sha256=cCO-NbS01Ilwc6djHjZ7LIgPFRkRmWdr0fH2ysXKioA,1090
69
+ lanscape-1.3.1a1.dist-info/METADATA,sha256=EnT4ZtH3JI88rf2QLLpUs9h8Uc1d-pOK0XB_8vK064g,2567
70
+ lanscape-1.3.1a1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
71
+ lanscape-1.3.1a1.dist-info/top_level.txt,sha256=E9D4sjPz_6H7c85Ycy_pOS2xuv1Wm-ilKhxEprln2ps,9
72
+ lanscape-1.3.1a1.dist-info/RECORD,,