lanscape 1.3.5a1__py3-none-any.whl → 1.3.5a2__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.
@@ -1,10 +1,21 @@
1
- # Only used to import csv data - not during runtime
1
+ """
2
+ CSV to JSON converter for MAC address vendor mappings.
3
+ Processes vendor MAC address prefix data from CSV format to a simplified JSON lookup table
4
+ for use in the LANscape application. Only used during development, not at runtime.
5
+ """
2
6
 
3
7
  import csv
4
8
  import json
5
9
 
6
10
 
7
11
  def main():
12
+ """
13
+ Main function to convert CSV MAC vendor data to a JSON mapping.
14
+
15
+ Reads MAC vendor information from a CSV file, processes it to extract
16
+ MAC address prefixes and vendor names, and writes the resulting mapping
17
+ to a JSON file for efficient lookup.
18
+ """
8
19
  ans = {}
9
20
  with open('mac-vendors-export.csv', 'r', encoding='utf-8') as f:
10
21
  data = csv.reader(f)
@@ -15,7 +26,7 @@ def main():
15
26
  ans[service['Mac Prefix']] = service['Vendor Name']
16
27
  except BaseException:
17
28
  pass
18
- with open('mac_db.json', 'w') as f:
29
+ with open('mac_db.json', 'w', encoding='utf-8') as f:
19
30
  json.dump(ans, f, indent=2)
20
31
 
21
32
 
@@ -1,12 +1,22 @@
1
- # Only used to import csv data - not during runtime
1
+ """
2
+ CSV to JSON converter for port service mappings.
3
+ Converts IANA service-names-port-numbers CSV file to a simplified JSON format
4
+ for use in the LANscape application. Only used during development, not at runtime.
5
+ """
2
6
 
3
7
  import csv
4
8
  import json
5
9
 
6
10
 
7
11
  def main():
12
+ """
13
+ Main function to convert CSV port data to a JSON mapping.
14
+
15
+ Reads port information from a CSV file, processes it to extract port numbers
16
+ and service names, and writes the resulting mapping to a JSON file.
17
+ """
8
18
  ans = {}
9
- with open('service-names-port-numbers.csv', 'r') as f:
19
+ with open('service-names-port-numbers.csv', 'r', encoding='utf-8') as f:
10
20
  data = csv.reader(f)
11
21
  services = csv_to_dict(data)
12
22
  for service in services:
@@ -15,7 +25,7 @@ def main():
15
25
  ans[service['Port Number']] = service['Service Name']
16
26
  except BaseException:
17
27
  pass
18
- with open('valid_ports.json', 'w') as f:
28
+ with open('valid_ports.json', 'w', encoding='utf-8') as f:
19
29
  json.dump(ans, f, indent=2)
20
30
 
21
31
 
lanscape/ui/app.py CHANGED
@@ -1,12 +1,17 @@
1
-
1
+ """
2
+ Flask application for LANscape web UI that provides device discovery and network monitoring.
3
+ Handles initialization, routing, error handling, and web server management.
4
+ """
2
5
  import traceback
3
6
  import threading
4
7
  import logging
5
8
  from flask import Flask, render_template
6
- from lanscape.ui.blueprints.web import web_bp, routes # pylint: ignore=unused-import
7
- from lanscape.ui.blueprints.api import api_bp, tools, port, scan # pylint: ignore=unused-import
9
+ from lanscape.ui.blueprints.web import web_bp, routes # pylint: disable=unused-import
10
+ from lanscape.ui.blueprints.api import api_bp, tools, port, scan # pylint: disable=unused-import
8
11
  from lanscape.libraries.runtime_args import RuntimeArgs, parse_args
9
- from lanscape.libraries.version_manager import is_update_available, get_installed_version, lookup_latest_version
12
+ from lanscape.libraries.version_manager import (
13
+ is_update_available, get_installed_version, lookup_latest_version
14
+ )
10
15
  from lanscape.libraries.app_scope import is_local_run
11
16
  from lanscape.libraries.net_tools import is_arp_supported
12
17
  from lanscape.ui.shutdown_handler import FlaskShutdownHandler
@@ -27,6 +32,16 @@ app.register_blueprint(web_bp)
27
32
 
28
33
 
29
34
  def is_substring_in_values(results: dict, substring: str) -> bool:
35
+ """
36
+ Check if a substring exists in any value of a dictionary.
37
+
38
+ Args:
39
+ results: Dictionary to search through values
40
+ substring: String to search for
41
+
42
+ Returns:
43
+ Boolean indicating if substring was found in any value
44
+ """
30
45
  return any(substring.lower() in str(v).lower() for v in results.values()) if substring else True
31
46
 
32
47
 
@@ -73,9 +88,12 @@ shutdown_handler.register_endpoints()
73
88
 
74
89
 
75
90
  @app.errorhandler(500)
76
- def internal_error(e):
91
+ def internal_error(_):
77
92
  """
78
- handle internal errors nicely
93
+ Handle internal errors by showing a formatted error page with traceback.
94
+
95
+ Returns:
96
+ Rendered error template with traceback information
79
97
  """
80
98
  tb = traceback.format_exc()
81
99
  return render_template('error.html',
@@ -1,5 +1,8 @@
1
- from lanscape.libraries.subnet_scan import ScanManager
1
+ """Source for all things blueprint related in LANscape UI"""
2
2
  import logging
3
+
4
+ from lanscape.libraries.subnet_scan import ScanManager
5
+
3
6
  # defining here so blueprints can access the same
4
7
  # manager instance
5
8
  scan_manager = ScanManager()
@@ -1,3 +1,5 @@
1
+ """API blueprint def for lanscape"""
2
+
1
3
  from flask import Blueprint
2
4
 
3
5
  api_bp = Blueprint('api', __name__)
@@ -1,3 +1,7 @@
1
+ """
2
+ API endpoints for port list management in the LANscape application.
3
+ Provides CRUD operations for managing port lists used in network scans.
4
+ """
1
5
  from flask import request, jsonify
2
6
  from lanscape.ui.blueprints.api import api_bp
3
7
  from lanscape.libraries.port_manager import PortManager
@@ -8,26 +12,68 @@ from lanscape.libraries.port_manager import PortManager
8
12
 
9
13
  @api_bp.route('/api/port/list', methods=['GET'])
10
14
  def get_port_lists():
15
+ """
16
+ Get all available port lists.
17
+
18
+ Returns:
19
+ JSON array of port list names
20
+ """
11
21
  return jsonify(PortManager().get_port_lists())
12
22
 
13
23
 
14
24
  @api_bp.route('/api/port/list/<port_list>', methods=['GET'])
15
25
  def get_port_list(port_list):
26
+ """
27
+ Get a specific port list by name.
28
+
29
+ Args:
30
+ port_list: Name of the port list to retrieve
31
+
32
+ Returns:
33
+ JSON object mapping port numbers to service names
34
+ """
16
35
  return jsonify(PortManager().get_port_list(port_list))
17
36
 
18
37
 
19
38
  @api_bp.route('/api/port/list/<port_list>', methods=['POST'])
20
39
  def create_port_list(port_list):
40
+ """
41
+ Create a new port list.
42
+
43
+ Args:
44
+ port_list: Name for the new port list
45
+
46
+ Returns:
47
+ JSON response indicating success or failure
48
+ """
21
49
  data = request.get_json()
22
50
  return jsonify(PortManager().create_port_list(port_list, data))
23
51
 
24
52
 
25
53
  @api_bp.route('/api/port/list/<port_list>', methods=['PUT'])
26
54
  def update_port_list(port_list):
55
+ """
56
+ Update an existing port list.
57
+
58
+ Args:
59
+ port_list: Name of the port list to update
60
+
61
+ Returns:
62
+ JSON response indicating success or failure
63
+ """
27
64
  data = request.get_json()
28
65
  return jsonify(PortManager().update_port_list(port_list, data))
29
66
 
30
67
 
31
68
  @api_bp.route('/api/port/list/<port_list>', methods=['DELETE'])
32
69
  def delete_port_list(port_list):
70
+ """
71
+ Delete a port list.
72
+
73
+ Args:
74
+ port_list: Name of the port list to delete
75
+
76
+ Returns:
77
+ JSON response indicating success or failure
78
+ """
33
79
  return jsonify(PortManager().delete_port_list(port_list))
@@ -1,11 +1,17 @@
1
- from lanscape.ui.blueprints.api import api_bp
2
- from lanscape.libraries.subnet_scan import ScanConfig
3
- from lanscape.ui.blueprints import scan_manager
1
+ """
2
+ API endpoints for network scanning functionality in the LANscape application.
3
+ Provides routes for initiating, monitoring, and retrieving network scan results.
4
+ """
4
5
 
5
- from flask import request, jsonify
6
6
  import json
7
7
  import traceback
8
8
 
9
+ from flask import request, jsonify
10
+
11
+ from lanscape.ui.blueprints.api import api_bp
12
+ from lanscape.libraries.subnet_scan import ScanConfig
13
+ from lanscape.ui.blueprints import scan_manager
14
+
9
15
  # Subnet Scanner API
10
16
  ############################################
11
17
 
@@ -13,6 +19,14 @@ import traceback
13
19
  @api_bp.route('/api/scan', methods=['POST'])
14
20
  @api_bp.route('/api/scan/threaded', methods=['POST'])
15
21
  def scan_subnet_threaded():
22
+ """
23
+ Start a new network scan in a separate thread.
24
+
25
+ Accepts scan configuration as JSON in the request body.
26
+
27
+ Returns:
28
+ JSON response with scan status and ID
29
+ """
16
30
  try:
17
31
  config = get_scan_config()
18
32
  scan = scan_manager.new_scan(config)
@@ -24,6 +38,14 @@ def scan_subnet_threaded():
24
38
 
25
39
  @api_bp.route('/api/scan/async', methods=['POST'])
26
40
  def scan_subnet_async():
41
+ """
42
+ Start a scan and wait for it to complete before returning.
43
+
44
+ Accepts scan configuration as JSON in the request body.
45
+
46
+ Returns:
47
+ JSON response with scan status and ID after completion
48
+ """
27
49
  config = get_scan_config()
28
50
  scan = scan_manager.new_scan(config)
29
51
  scan_manager.wait_until_complete(scan.uid)
@@ -33,6 +55,15 @@ def scan_subnet_async():
33
55
 
34
56
  @api_bp.route('/api/scan/<scan_id>', methods=['GET'])
35
57
  def get_scan(scan_id):
58
+ """
59
+ Retrieve the full results of a completed scan.
60
+
61
+ Args:
62
+ scan_id: Unique identifier for the scan
63
+
64
+ Returns:
65
+ JSON representation of scan results
66
+ """
36
67
  scan = scan_manager.get_scan(scan_id)
37
68
  # cast to str and back to handle custom JSON serialization
38
69
  return jsonify(json.loads(scan.results.export(str)))
@@ -40,6 +71,15 @@ def get_scan(scan_id):
40
71
 
41
72
  @api_bp.route('/api/scan/<scan_id>/summary', methods=['GET'])
42
73
  def get_scan_summary(scan_id):
74
+ """
75
+ Retrieve a summary of the scan results.
76
+
77
+ Args:
78
+ scan_id: Unique identifier for the scan
79
+
80
+ Returns:
81
+ JSON representation of scan summary
82
+ """
43
83
  scan = scan_manager.get_scan(scan_id)
44
84
  if not scan:
45
85
  return jsonify({'error': 'scan not found'}), 404
@@ -58,6 +98,15 @@ def get_scan_summary(scan_id):
58
98
 
59
99
  @api_bp.route('/api/scan/<scan_id>/terminate', methods=['GET'])
60
100
  def terminate_scan(scan_id):
101
+ """Terminate a running scan.
102
+
103
+ Args:
104
+ scan_id (str): Unique identifier for the scan
105
+
106
+ Returns:
107
+ JSON response indicating success or failure
108
+ """
109
+
61
110
  scan = scan_manager.get_scan(scan_id)
62
111
  scan.terminate()
63
112
  return jsonify({'success': True})
@@ -65,7 +114,10 @@ def terminate_scan(scan_id):
65
114
 
66
115
  def get_scan_config():
67
116
  """
68
- pulls config from the request body
117
+ Extract and parse scan configuration from the request body.
118
+
119
+ Returns:
120
+ ScanConfig object constructed from the request JSON data
69
121
  """
70
122
  data = request.get_json()
71
123
  return ScanConfig.from_dict(data)
@@ -13,6 +13,7 @@ from lanscape.libraries.scan_config import DEFAULT_CONFIGS
13
13
 
14
14
  @api_bp.route('/api/tools/subnet/test')
15
15
  def test_subnet():
16
+ """check validity of a subnet"""
16
17
  subnet = request.args.get('subnet')
17
18
  if not subnet:
18
19
  return jsonify({'valid': False, 'msg': 'Subnet cannot be blank', 'count': -1})
@@ -1,3 +1,7 @@
1
+ """
2
+ Blueprint for web-related routes and views.
3
+ """
4
+
1
5
  from flask import Blueprint
2
6
 
3
7
  web_bp = Blueprint('web', __name__)
@@ -1,3 +1,7 @@
1
+ """
2
+ Web blueprint routes for the LANscape application.
3
+ Handles UI views including the main dashboard, scan results, error display, and exports.
4
+ """
1
5
  from flask import render_template, request, redirect
2
6
  from lanscape.ui.blueprints.web import web_bp
3
7
  from lanscape.libraries.net_tools import (
@@ -12,6 +16,12 @@ from lanscape.ui.blueprints import scan_manager, log
12
16
 
13
17
  @web_bp.route('/', methods=['GET'])
14
18
  def index():
19
+ """
20
+ Render the main application interface.
21
+
22
+ Displays the primary network subnet selection interface and existing scan results.
23
+ If a scan_id is provided, it loads the configuration from that scan.
24
+ """
15
25
  subnets = get_all_network_subnets()
16
26
  subnet = smart_select_primary_subnet(subnets)
17
27
 
@@ -35,16 +45,35 @@ def index():
35
45
  @web_bp.route('/scan/<scan_id>', methods=['GET'])
36
46
  @web_bp.route('/scan/<scan_id>/<section>', methods=['GET'])
37
47
  def render_scan(scan_id, section='all'):
48
+ """
49
+ Render a specific scan result.
50
+
51
+ Args:
52
+ scan_id: Unique identifier for the scan
53
+ section: Section of the scan results to display (default: 'all')
54
+
55
+ Returns:
56
+ Rendered scan template or redirect to home if scan not found
57
+ """
38
58
  if scanner := scan_manager.get_scan(scan_id):
39
59
  data = scanner.results.export()
40
- filter = request.args.get('filter')
41
- return render_template('scan.html', data=data, section=section, filter=filter)
60
+ filter_text = request.args.get('filter')
61
+ return render_template('scan.html', data=data, section=section, filter=filter_text)
42
62
  log.debug(f'Redirecting, scan {scan_id} doesnt exist in memory')
43
63
  return redirect('/')
44
64
 
45
65
 
46
66
  @web_bp.route('/errors/<scan_id>')
47
67
  def view_errors(scan_id):
68
+ """
69
+ Display errors that occurred during a scan.
70
+
71
+ Args:
72
+ scan_id: Unique identifier for the scan
73
+
74
+ Returns:
75
+ Rendered error template or redirect to home if scan not found
76
+ """
48
77
  if scanner := scan_manager.get_scan(scan_id):
49
78
  data = scanner.results.export()
50
79
  return render_template('scan/scan-error.html', data=data)
@@ -54,6 +83,15 @@ def view_errors(scan_id):
54
83
 
55
84
  @web_bp.route('/export/<scan_id>')
56
85
  def export_scan(scan_id):
86
+ """
87
+ Provide an exportable view of scan results.
88
+
89
+ Args:
90
+ scan_id: Unique identifier for the scan
91
+
92
+ Returns:
93
+ Rendered export template or redirect to home if scan not found
94
+ """
57
95
  if scanner := scan_manager.get_scan(scan_id):
58
96
  export_json = scanner.results.export(str)
59
97
  return render_template(
@@ -67,9 +105,21 @@ def export_scan(scan_id):
67
105
 
68
106
  @web_bp.route('/shutdown-ui')
69
107
  def shutdown_ui():
108
+ """
109
+ Display the shutdown confirmation page.
110
+
111
+ Returns:
112
+ Rendered shutdown template
113
+ """
70
114
  return render_template('shutdown.html')
71
115
 
72
116
 
73
117
  @web_bp.route('/info')
74
118
  def app_info():
119
+ """
120
+ Display application information and version details.
121
+
122
+ Returns:
123
+ Rendered info template
124
+ """
75
125
  return render_template('info.html')
lanscape/ui/main.py CHANGED
@@ -1,4 +1,4 @@
1
-
1
+ """Main entry point for the LANscape application when running as a module."""
2
2
  import socket
3
3
 
4
4
 
@@ -1,3 +1,5 @@
1
+ """Logic for handling shutdown requests in a Flask application."""
2
+
1
3
  import logging
2
4
  import os
3
5
  from flask import request
@@ -40,12 +42,14 @@ class FlaskShutdownHandler:
40
42
  if args.persistent:
41
43
  log.info('Detected browser close, not exiting flask.')
42
44
  return "Ignored"
43
- log.info('Web browser closed, terminating flask. (disable with --persistent)')
45
+ log.info(
46
+ 'Web browser closed, terminating flask. (disable with --persistent)')
44
47
  elif req_type == 'core':
45
48
  log.info('Core requested exit, terminating flask.')
46
49
  else:
47
50
  log.info('Received external exit request. Terminating flask.')
48
51
  self._exiting = True
52
+ return "Done"
49
53
 
50
54
  def exit_if_requested(self):
51
55
  """Exits the application if a shutdown request has been made."""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lanscape
3
- Version: 1.3.5a1
3
+ Version: 1.3.5a2
4
4
  Summary: A python based local network scanner
5
5
  Author-email: Michael Dennis <michael@dipduo.com>
6
6
  License-Expression: MIT
@@ -1,39 +1,39 @@
1
1
  lanscape/__init__.py,sha256=tjBtwEQhJA4njI8gsKddyuWcLBXaPwtpSPM0Wd6qrLg,227
2
2
  lanscape/__main__.py,sha256=PuY42yuCLAwHrOREJ6u2DgVyGX5hZKRQeoE9pajkNfM,170
3
3
  lanscape/libraries/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- lanscape/libraries/app_scope.py,sha256=VvZPtIGWmtDFahliL1rOVYAIvFXoykyh-ZEUqylPjhc,2553
5
- lanscape/libraries/decorators.py,sha256=P4GyH25bqs5HIr6OncdrptQpb2l0Yx8Ogfau_gD1mII,5064
6
- lanscape/libraries/errors.py,sha256=EzJA5_rh9xzu5HEfwyxIyHZBEBFkekx2dwwOjprfw-g,940
7
- lanscape/libraries/ip_parser.py,sha256=sPTm1UQtCixtM8dq45ThGgCjiZQQcueI7OwkHLKYBIU,2151
8
- lanscape/libraries/logger.py,sha256=axADqgQhoDmdCOV3l4zTd9F6XaTgJf_XDg8I4jHGRoo,1436
9
- lanscape/libraries/mac_lookup.py,sha256=VSZbsJ0UzwKptYLpGLi8MHUyFEaQntkayshnQuZKtSs,3390
10
- lanscape/libraries/net_tools.py,sha256=lUHHwybha4AExr5cjmagJK0zy5UdYVF2nZdnLybw8Y0,18030
11
- lanscape/libraries/port_manager.py,sha256=9nYGJmR1wliWx2ZuXJ4y_79up-dS8F2kKHJKf-rL758,2025
4
+ lanscape/libraries/app_scope.py,sha256=EqYQRQcbjOPPcIOhFkIepcz2cKHmoUHxWj2JSoRJmzk,2542
5
+ lanscape/libraries/decorators.py,sha256=YyHPUd_oTfO2dLPwbQ0P38ZI7VfjJihWXWv_fnaS-X4,5099
6
+ lanscape/libraries/errors.py,sha256=QTf42UzR9Zxj1t1mdwfLvZIp0c9a5EItELOdCR7kTmE,1322
7
+ lanscape/libraries/ip_parser.py,sha256=RgIEvHw_oQEcjUYOrvcpbfm4KThtH8L68WyhSOJNOfE,4201
8
+ lanscape/libraries/logger.py,sha256=nzo6J8UdlMdhRkOJEDOIHKztoE3Du8PQZad7ixvNgeM,2534
9
+ lanscape/libraries/mac_lookup.py,sha256=PxBSMe3wEVDtivCsh5NclSAguZz9rqdAS7QshBiuWvM,3519
10
+ lanscape/libraries/net_tools.py,sha256=E37ad6cjxHMrquW3GsRAExfdzP0TpzUXqDBkUA4xKlU,19185
11
+ lanscape/libraries/port_manager.py,sha256=3_ROOb6JEiB0NByZVtADuGcldFkgZwn1RKtvwgs9AIk,4479
12
12
  lanscape/libraries/runtime_args.py,sha256=2vIqRrcWr-NHRSBlZGrxh1PdkPY0ytkPguu8KZqy2L8,2543
13
- lanscape/libraries/scan_config.py,sha256=fHsf5wX-aRDvLXIhqt1kAnfB-WB7w5VApGhlKrkE1eE,3785
14
- lanscape/libraries/service_scan.py,sha256=1pBf0A5HqzpcsR5vs2ifS6Opk35GKocNpgs-dJ4nXuA,1870
15
- lanscape/libraries/subnet_scan.py,sha256=H2vlycSfyrLgRdcLgs83MCtyXO_V2OShQnd3DR-E68g,11737
16
- lanscape/libraries/version_manager.py,sha256=yh-VtxwBzK_-dOMv-MpN6gKU8k9TkLkmIpSyqWYuj_M,1700
17
- lanscape/libraries/web_browser.py,sha256=ATJ1bqVtwg9-xHzqcJbbwU1Y7DBoncUaV7NOMmS2kFg,6386
18
- lanscape/resources/mac_addresses/convert_csv.py,sha256=QqeTjgH8KIyokSMoRJmKOHmz5xEHnEGdnEYJ9Fzl7h8,710
13
+ lanscape/libraries/scan_config.py,sha256=M412bEeSkRcAfbz9ub609BOGZknllt7orDO6Z_lZ7yY,6685
14
+ lanscape/libraries/service_scan.py,sha256=ZF4LL2gSI0T5oYEMjc8pCVtJkV1KIk4xP-AeEAkSdLc,1944
15
+ lanscape/libraries/subnet_scan.py,sha256=sDpv-XqP5uXIoxL1BESclfzlbXnrbGBhZ9M1yDhvGlQ,14275
16
+ lanscape/libraries/version_manager.py,sha256=fIAv6bVHb_VCOrqT8Do53trxwEgR2mnZV82v3YGxJ14,2944
17
+ lanscape/libraries/web_browser.py,sha256=23MuGIrBYdGhw6ejj6OWxwReeKIlWhtWukc1dKV_3_0,6736
18
+ lanscape/resources/mac_addresses/convert_csv.py,sha256=hvlyLs0XmuuhBuvXBNRGP1cKJzYVRSf8VfUJ1VqROms,1189
19
19
  lanscape/resources/mac_addresses/mac_db.json,sha256=Lng2yJerwO7vjefzxzgtE203hry1lIsCadHL1A5Rptg,2136137
20
- lanscape/resources/ports/convert_csv.py,sha256=Z1TzYcvycSWCE1jU48dFmmFzxD1kJ2-H_8OCqr6ZYes,709
20
+ lanscape/resources/ports/convert_csv.py,sha256=MMLDa-5pGMsn4A2_k45jHsRYffrRY_0Z2D1ziiikeQA,1143
21
21
  lanscape/resources/ports/full.json,sha256=O8XBW52QvEVSGMQDbXe4-c4qq6XAecw6KJW4m2HkTLo,1441444
22
22
  lanscape/resources/ports/large.json,sha256=CzlCcIGCBW1QAgjz4NDerCYA8HcYf6lNxehh7F928y0,138410
23
23
  lanscape/resources/ports/medium.json,sha256=T5Rc7wa47MtroHxuZrHSftOqRWbQzhZULJdE1vpsTvU,3518
24
24
  lanscape/resources/ports/small.json,sha256=F_lo_5xHwHBfOVfVgxP7ejblR3R62SNtC1Mm33brhYc,376
25
25
  lanscape/resources/services/definitions.jsonc,sha256=4k7XnqIpWr1xuF7EUMgZf7y6aVDxOL_if7GGsT-JEuY,8387
26
26
  lanscape/ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
27
- lanscape/ui/app.py,sha256=2FZHQWSkcQzHfQD1Z323oRHx42gAayJwXlSZAOw7_Xs,3197
28
- lanscape/ui/main.py,sha256=_3lK3OEF62de4HNpdanxgESQZ6JdQF2n2UPNvRgNdAg,4482
29
- lanscape/ui/shutdown_handler.py,sha256=cQyGVr_AY60zEbTk9EbEr5xGbpdpY_LUou2aIn8f7Uc,1603
30
- lanscape/ui/blueprints/__init__.py,sha256=iSffZhWqNd5gxz9HC5dH_Vs3jXnZWmLQXnV7KSdQ-gg,207
31
- lanscape/ui/blueprints/api/__init__.py,sha256=QMYG0IybloD3yrQtznf2iffgBhbwqPmhaez17T9SfSw,65
32
- lanscape/ui/blueprints/api/port.py,sha256=Ccym3K3ZfguviEWOH9tcBtKt-May31hOiWOrjC28W-E,1028
33
- lanscape/ui/blueprints/api/scan.py,sha256=ZwBsSuxZq_6tMdVMpETVHUSBC2DloJvQp48xm7Qq6hk,2119
34
- lanscape/ui/blueprints/api/tools.py,sha256=9yDVPrHP8D8AxSvTSNuozdPkY5ZsJHpZqURug2VdR4c,1633
35
- lanscape/ui/blueprints/web/__init__.py,sha256=txshnITQLj-tGZW7Yp-cmg76PtSSQp_UF8VuZuwoMBw,65
36
- lanscape/ui/blueprints/web/routes.py,sha256=6fg1cCtYAD1PBZU_XRlzO6yIG70u-hShJLVMhZY9Dvg,2285
27
+ lanscape/ui/app.py,sha256=bL3K3NkGV1RY67kGHEQIWUl-Jm_MVN4WsIlsRQuK-SU,3760
28
+ lanscape/ui/main.py,sha256=5pZa_vmBLX6TLaTWfFpobwv7MkFJcghl-TWBvOURX0o,4559
29
+ lanscape/ui/shutdown_handler.py,sha256=eJC9A0MDMgLv_KQnJlUy3Kz2xCGDAf5opVdd8nBtABE,1710
30
+ lanscape/ui/blueprints/__init__.py,sha256=WLnPfPE06684wArgKDDLfsW-1hKFlLe75AR7uLAPlKc,270
31
+ lanscape/ui/blueprints/api/__init__.py,sha256=5Z4Y7B36O-bNFenpomfuNhPuJ9dW_MC0TPUU3pCFVfA,103
32
+ lanscape/ui/blueprints/api/port.py,sha256=8FuNcjF56wmgjoCZeaYrIakTGdshAmDjUmkjXHbaZ8I,1981
33
+ lanscape/ui/blueprints/api/scan.py,sha256=lbwV5AciMGP-S2J_EaXcPOHeHywImzQ_bm2ZSJg-H5U,3331
34
+ lanscape/ui/blueprints/api/tools.py,sha256=Dm5eAlWajr670H3O6note5hS_BZ888IGp2Rsdu2kXmY,1670
35
+ lanscape/ui/blueprints/web/__init__.py,sha256=NvgnjP0X4LwqVhSEyh5RUzoG45N44kHK1MEFlfvBxTg,118
36
+ lanscape/ui/blueprints/web/routes.py,sha256=883puFTHePUEgwS4a2-Co6-gdLwr5NbOx0goUck7054,3571
37
37
  lanscape/ui/static/lanscape.webmanifest,sha256=07CqA-PQsO35KJD8R96sI3Pxix6UuBjijPDCuy9vM3s,446
38
38
  lanscape/ui/static/css/style.css,sha256=f5AcXpFMOdvM-EHV-khpLG-v0TvnS3sRr0tCyphiw-k,17472
39
39
  lanscape/ui/static/img/ico/android-chrome-192x192.png,sha256=JmFT6KBCCuoyxMV-mLNtF9_QJbVBvfWPUizKN700fi8,18255
@@ -66,8 +66,8 @@ lanscape/ui/templates/scan/ip-table-row.html,sha256=RANDsfW4xBATdtiLrxUlRouFSjgw
66
66
  lanscape/ui/templates/scan/ip-table.html,sha256=CP7AG8WHOgy3AyYCIN0wA2wO6n0H1X0F9IOncQtpPvE,914
67
67
  lanscape/ui/templates/scan/overview.html,sha256=xWj9jWDPg2KcPLvS8fnSins23_UXjKCdb2NJwNG2U2Q,1176
68
68
  lanscape/ui/templates/scan/scan-error.html,sha256=wmAYQ13IJHUoO8fAGNDjMvNml7tu4rsIU3Vav71ETlA,999
69
- lanscape-1.3.5a1.dist-info/licenses/LICENSE,sha256=VLoE0IrNTIc09dFm7hMN0qzk4T3q8V0NaPcFQqMemDs,1070
70
- lanscape-1.3.5a1.dist-info/METADATA,sha256=oHSG52DOrrUi8m5rFAXgXMr2fslnaMebDA6Reg_8zxg,2569
71
- lanscape-1.3.5a1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
72
- lanscape-1.3.5a1.dist-info/top_level.txt,sha256=E9D4sjPz_6H7c85Ycy_pOS2xuv1Wm-ilKhxEprln2ps,9
73
- lanscape-1.3.5a1.dist-info/RECORD,,
69
+ lanscape-1.3.5a2.dist-info/licenses/LICENSE,sha256=VLoE0IrNTIc09dFm7hMN0qzk4T3q8V0NaPcFQqMemDs,1070
70
+ lanscape-1.3.5a2.dist-info/METADATA,sha256=zLd_wdWcjsxCkkWgAVwHMDKthmUmHL72nTZozX2WlNQ,2569
71
+ lanscape-1.3.5a2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
72
+ lanscape-1.3.5a2.dist-info/top_level.txt,sha256=E9D4sjPz_6H7c85Ycy_pOS2xuv1Wm-ilKhxEprln2ps,9
73
+ lanscape-1.3.5a2.dist-info/RECORD,,