lanscape 1.3.0b1__tar.gz → 1.3.1a1__tar.gz

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.
Files changed (78) hide show
  1. {lanscape-1.3.0b1/src/lanscape.egg-info → lanscape-1.3.1a1}/PKG-INFO +1 -1
  2. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/pyproject.toml +1 -1
  3. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/libraries/net_tools.py +13 -6
  4. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/libraries/web_browser.py +12 -1
  5. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/ui/app.py +2 -2
  6. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/ui/main.py +3 -3
  7. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/ui/templates/info.html +1 -1
  8. {lanscape-1.3.0b1 → lanscape-1.3.1a1/src/lanscape.egg-info}/PKG-INFO +1 -1
  9. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/LICENSE +0 -0
  10. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/MANIFEST.in +0 -0
  11. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/README.md +0 -0
  12. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/setup.cfg +0 -0
  13. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/__init__.py +0 -0
  14. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/__main__.py +0 -0
  15. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/libraries/app_scope.py +0 -0
  16. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/libraries/decorators.py +0 -0
  17. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/libraries/errors.py +0 -0
  18. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/libraries/ip_parser.py +0 -0
  19. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/libraries/logger.py +0 -0
  20. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/libraries/mac_lookup.py +0 -0
  21. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/libraries/port_manager.py +0 -0
  22. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/libraries/runtime_args.py +0 -0
  23. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/libraries/service_scan.py +0 -0
  24. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/libraries/subnet_scan.py +0 -0
  25. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/libraries/version_manager.py +0 -0
  26. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/resources/mac_addresses/convert_csv.py +0 -0
  27. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/resources/mac_addresses/mac_db.json +0 -0
  28. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/resources/ports/convert_csv.py +0 -0
  29. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/resources/ports/full.json +0 -0
  30. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/resources/ports/large.json +0 -0
  31. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/resources/ports/medium.json +0 -0
  32. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/resources/ports/small.json +0 -0
  33. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/resources/services/definitions.jsonc +0 -0
  34. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/tests/__init__.py +0 -0
  35. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/tests/_helpers.py +0 -0
  36. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/tests/test_api.py +0 -0
  37. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/tests/test_env.py +0 -0
  38. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/tests/test_library.py +0 -0
  39. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/ui/blueprints/__init__.py +0 -0
  40. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/ui/blueprints/api/__init__.py +0 -0
  41. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/ui/blueprints/api/port.py +0 -0
  42. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/ui/blueprints/api/scan.py +0 -0
  43. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/ui/blueprints/api/tools.py +0 -0
  44. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/ui/blueprints/web/__init__.py +0 -0
  45. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/ui/blueprints/web/routes.py +0 -0
  46. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/ui/static/css/style.css +0 -0
  47. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/ui/static/img/ico/android-chrome-192x192.png +0 -0
  48. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/ui/static/img/ico/android-chrome-512x512.png +0 -0
  49. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/ui/static/img/ico/apple-touch-icon.png +0 -0
  50. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/ui/static/img/ico/favicon-16x16.png +0 -0
  51. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/ui/static/img/ico/favicon-32x32.png +0 -0
  52. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/ui/static/img/ico/favicon.ico +0 -0
  53. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/ui/static/img/ico/site.webmanifest +0 -0
  54. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/ui/static/js/core.js +0 -0
  55. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/ui/static/js/layout-sizing.js +0 -0
  56. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/ui/static/js/main.js +0 -0
  57. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/ui/static/js/on-tab-close.js +0 -0
  58. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/ui/static/js/quietReload.js +0 -0
  59. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/ui/static/js/shutdown-server.js +0 -0
  60. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/ui/static/js/subnet-info.js +0 -0
  61. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/ui/static/js/subnet-selector.js +0 -0
  62. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/ui/static/lanscape.webmanifest +0 -0
  63. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/ui/templates/base.html +0 -0
  64. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/ui/templates/core/head.html +0 -0
  65. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/ui/templates/core/scripts.html +0 -0
  66. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/ui/templates/error.html +0 -0
  67. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/ui/templates/main.html +0 -0
  68. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/ui/templates/scan/export.html +0 -0
  69. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/ui/templates/scan/ip-table-row.html +0 -0
  70. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/ui/templates/scan/ip-table.html +0 -0
  71. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/ui/templates/scan/overview.html +0 -0
  72. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/ui/templates/scan/scan-error.html +0 -0
  73. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/ui/templates/scan.html +0 -0
  74. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape/ui/templates/shutdown.html +0 -0
  75. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape.egg-info/SOURCES.txt +0 -0
  76. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape.egg-info/dependency_links.txt +0 -0
  77. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape.egg-info/requires.txt +0 -0
  78. {lanscape-1.3.0b1 → lanscape-1.3.1a1}/src/lanscape.egg-info/top_level.txt +0 -0
@@ -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
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "lanscape"
3
- version = "1.3.0b1"
3
+ version = "1.3.1a1"
4
4
  authors = [
5
5
  { name="Michael Dennis", email="michael@dipduo.com" },
6
6
  ]
@@ -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}")
@@ -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()
@@ -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
File without changes
File without changes
File without changes
File without changes