Compare commits

...

47 Commits

Author SHA1 Message Date
grossmj
b35ce7303d Release v2.2.49 2024-08-06 12:55:15 +02:00
grossmj
47432568e6 Upgrade development packages 2024-08-03 12:32:43 +02:00
grossmj
42ea34ca6c Upgrade jsonschema and sentry-sdk packages 2024-08-03 11:57:15 +02:00
grossmj
9f3598d36d Upgrade to PyQt5 v5.15.11 2024-08-03 11:55:40 +02:00
grossmj
8df248a1e6 Add shortcuts info dialog 2024-07-27 16:23:23 +02:00
grossmj
7196aeb3cf Merge branch 'master' into 2.2 2024-07-27 15:46:14 +02:00
Jeremy Grossmann
38657f4112 Merge pull request #3612 from braza2004/master
Control menu Shortcut Keys
2024-07-27 15:43:53 +02:00
Bilal
84017fa0f1 modified Control menu shortcuts further 2024-07-24 07:05:38 +00:00
Bilal
3aa5a5369f modified Control menu shortcuts 2024-07-24 07:02:14 +00:00
athaarnaqvi
0ed791b946 Added Key Shortcuts 2024-07-23 16:59:55 +05:00
Jeremy Grossmann
133732b7ae Merge pull request #3608 from braza2004/FitInViewKeyShortcut
Fit In View Shortcut Key
2024-07-22 23:27:11 +02:00
grossmj
2ed48def9f Add Fit In View Shortcut in Ui file instead 2024-07-22 23:25:05 +02:00
grossmj
279a91d402 Fix tests. Fixes #3605 2024-07-22 18:58:32 +02:00
Bilal_Raza
4906678d13 feature/FitInViewShortcut 2024-07-22 16:53:58 +05:00
grossmj
a5ff9318f0 Development on 2.2.49.dev1 2024-07-13 16:32:13 +02:00
Jeremy Grossmann
faa802d59c Merge pull request #3597 from GNS3/release/v2.2.48.1
Release v2.2.48.1
2024-07-13 14:43:39 +02:00
grossmj
01b5b8bfa8 Release v2.2.48.1 2024-07-12 18:26:17 +02:00
grossmj
b22c5c8442 Development on 2.2.49.dev1 2024-07-09 00:32:45 +02:00
Jeremy Grossmann
141e7d8307 Merge pull request #3592 from GNS3/2.2
Release v2.2.48
2024-07-09 00:31:15 +02:00
grossmj
1e80354e4e Release v2.2.48 2024-07-08 18:44:09 +02:00
grossmj
d340b1f50a Use "experimental features" to allow bypassing hostname validation. Ref #3524 2024-07-08 14:19:42 +02:00
grossmj
d7bb195610 Update appliance_v8.json. Ref https://github.com/GNS3/gns3-registry/pull/897 2024-07-07 17:47:24 +02:00
Jeremy Grossmann
d963dd4746 Merge pull request #3591 from GNS3/feature/keep-compute-ids
Option to keep the compute IDs unchanged when exporting a project
2024-07-06 17:12:42 +02:00
grossmj
60addccd95 Option to keep the compute IDs unchanged when exporting a project 2024-07-06 17:08:16 +02:00
grossmj
80b654ba53 Upgrade sentry-sdk and psutil packages 2024-07-03 18:52:49 +02:00
grossmj
b67a8c87a7 Switch to PyQt5 5.15.10 for macOS build 2024-06-10 17:20:52 +02:00
grossmj
53ece94a08 Development on 2.2.48.dev1 2024-05-23 12:19:15 +07:00
Jeremy Grossmann
a6c7e0be59 Merge pull request #3586 from GNS3/update-ga-workflows
Update GitHub Action workflows
2024-05-17 12:21:05 +07:00
grossmj
fcea25dcbb Update GitHub Action workflows 2024-05-17 12:14:47 +07:00
Jeremy Grossmann
f29c065164 Merge pull request #3585 from GNS3/release/v2.2.47
Release v2.2.47
2024-05-15 17:27:30 +07:00
grossmj
c6b5494ce6 Use system Python 2024-05-15 17:19:54 +07:00
grossmj
02b14f6aea Call pip as a Python module 2024-05-15 17:12:42 +07:00
grossmj
e2cc378aee Use ubuntu:latest for running tests inside Docker container 2024-05-15 17:10:04 +07:00
grossmj
812aedebe3 Release v2.2.47 2024-05-15 12:14:48 +07:00
grossmj
2f0d2063cf Remove maximum size for capture dialog. Ref #3576 2024-05-10 12:58:35 +07:00
Jeremy Grossmann
ce0515f0ae Merge pull request #3582 from GNS3/drop-python3.7
Drop Python 3.7
2024-05-09 19:09:14 +07:00
grossmj
bc10c69a2d Change sentry-sdk version 2024-05-09 19:03:08 +07:00
grossmj
3707758388 Upgrade aiohttp, sentry-sdk and truststore 2024-05-09 18:58:38 +07:00
grossmj
8aaefac91b Upgrade jsonschema and aiohttp 2024-05-09 18:37:41 +07:00
grossmj
19157ab49d Drop Python 3.7 2024-05-09 18:23:59 +07:00
grossmj
38b98cd883 Remove dev requirements for Python 3.6 2024-05-09 18:05:08 +07:00
Jeremy Grossmann
e9419924c5 Merge pull request #3580 from GNS3/feature/nat-symbols
NAT symbols
2024-04-22 19:00:15 +07:00
grossmj
cf3c5c09fa Add NAT symbols 2024-04-22 18:51:29 +07:00
grossmj
9e89cf5ad5 Only show log message if event has "message" 2024-03-07 17:18:30 +01:00
grossmj
131ef09b55 Development on 2.2.47.dev1 2024-03-05 01:07:17 +08:00
grossmj
2df18ee04e Upgrade sentry-sdk to version 1.40.6 2024-03-05 00:45:26 +08:00
Jeremy Grossmann
854e1fded6 Merge pull request #3568 from GNS3/release/v2.2.46
Release v2.2.46
2024-02-26 17:50:19 +08:00
34 changed files with 615 additions and 322 deletions

View File

@@ -10,7 +10,7 @@ jobs:
name: Add issue to project
runs-on: ubuntu-latest
steps:
- uses: actions/add-to-project@v0.4.0
- uses: actions/add-to-project@v1.0.1
with:
project-url: https://github.com/orgs/GNS3/projects/3
github-token: ${{ secrets.ADD_NEW_ISSUES_TO_PROJECT }}

View File

@@ -15,62 +15,79 @@ on:
push:
branches: [ "master" ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ "master" ]
schedule:
- cron: '27 6 * * 2'
- cron: '17 22 * * 6'
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
name: Analyze (${{ matrix.language }})
# Runner size impacts CodeQL analysis time. To learn more, please see:
# - https://gh.io/recommended-hardware-resources-for-running-codeql
# - https://gh.io/supported-runners-and-hardware-resources
# - https://gh.io/using-larger-runners (GitHub.com only)
# Consider using larger runners or machines with greater resources for possible analysis time improvements.
runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
timeout-minutes: ${{ (matrix.language == 'swift' && 120) || 360 }}
permissions:
# required for all workflows
security-events: write
# required to fetch internal or private CodeQL packs
packages: read
# only required for workflows in private repositories
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
language: [ 'python' ]
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
# Use only 'java' to analyze code written in Java, Kotlin or both
# Use only 'javascript' to analyze code written in JavaScript, TypeScript or both
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
include:
- language: python
build-mode: none
# CodeQL supports the following values keywords for 'language': 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'swift'
# Use `c-cpp` to analyze code written in C, C++ or both
# Use 'java-kotlin' to analyze code written in Java, Kotlin or both
# Use 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both
# To learn more about changing the languages that are analyzed or customizing the build mode for your analysis,
# see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning.
# If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how
# your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages
steps:
- name: Checkout repository
uses: actions/checkout@v3
uses: actions/checkout@v4
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
build-mode: ${{ matrix.build-mode }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality
# Autobuild attempts to build any compiled languages (C/C++, C#, Go, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v2
# If the analyze step fails for one of the languages you are analyzing with
# "We were unable to automatically build your code", modify the matrix above
# to set the build mode to "manual" for that language. Then modify this step
# to build your code.
# Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
# If the Autobuild fails above, remove it and uncomment the following three lines.
# modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.
# - run: |
# echo "Run, Build Application using script"
# ./location_of_script_within_repo/buildscript.sh
- if: matrix.build-mode == 'manual'
shell: bash
run: |
echo 'If you are using a "manual" build mode for one or more of the' \
'languages you are analyzing, replace this with the commands to build' \
'your code, for example:'
echo ' make bootstrap'
echo ' make release'
exit 1
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
uses: github/codeql-action/analyze@v3
with:
category: "/language:${{matrix.language}}"

View File

@@ -12,7 +12,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Build and run Docker image
run: |
docker build -t gns3-gui-test .

View File

@@ -1,5 +1,35 @@
# Change Log
## 2.2.49 06/08/2024
* Upgrade jsonschema and sentry-sdk packages
* Upgrade to PyQt5 v5.15.11
* Add shortcuts info dialog
* Added Key Shortcuts
## 2.2.48.1 12/07/2024
* No changes
## 2.2.48 08/07/2024
* Use "experimental features" to allow bypassing hostname validation. Ref #3524
* Update appliance_v8.json. Ref https://github.com/GNS3/gns3-registry/pull/897
* Option to keep the compute IDs unchanged when exporting a project
* Upgrade sentry-sdk and psutil packages
* Switch to PyQt5 5.15.10 for macOS build
## 2.2.47 15/05/2024
* Remove maximum size for capture dialog. Ref #3576
* Change sentry-sdk version
* Upgrade aiohttp, sentry-sdk and truststore
* Upgrade jsonschema and aiohttp
* Drop Python 3.7
* Remove dev requirements for Python 3.6
* Add NAT symbols
* Only show log message if event has "message"
## 2.2.46 26/02/2024
* Add GNS3 console command "env" to show what environment variables are used. Ref https://github.com/GNS3/gns3-server/issues/2306

View File

@@ -1,16 +1,16 @@
# Run tests inside a container
FROM ubuntu:18.04
FROM ubuntu:latest
MAINTAINER GNS3 Team
RUN apt-get update
RUN apt-get install -y --force-yes python3.6 python3-pyqt5 python3-pip python3-pyqt5.qtsvg python3-pyqt5.qtwebsockets python3.6-dev xvfb
RUN apt-get install -y --force-yes python3 python3-pyqt5 python3-pip python3-pyqt5.qtsvg python3-pyqt5.qtwebsockets python3-dev xvfb
RUN apt-get clean
ADD dev-requirements.txt /dev-requirements.txt
ADD requirements.txt /requirements.txt
RUN pip3 install --no-cache-dir -r /dev-requirements.txt
RUN python3 -m pip install --break-system-packages --no-cache-dir -r /dev-requirements.txt
ADD . /src
WORKDIR /src
CMD xvfb-run python3.6 -m pytest -vv
CMD xvfb-run python3 -m pytest -vv

View File

@@ -1,6 +1,4 @@
-rrequirements.txt
pytest==7.2.0; python_version >= '3.7'
pytest==7.0.1; python_version < '3.7' # v7.0.1 is the last version to support Python 3.6
flake8==5.0.4
pytest-timeout==2.1.0
pytest==8.3.2
pytest-timeout==2.3.1

View File

@@ -489,11 +489,11 @@ class Controller(QtCore.QObject):
project = Topology.instance().project()
if project and project.id() == result["event"]["project_id"]:
project.projectUpdatedCallback(result["event"])
elif result["action"] == "log.error":
log.error(result["event"]["message"])
elif result["action"] == "log.warning":
log.warning(result["event"]["message"])
elif result["action"] == "log.info":
log.info(result["event"]["message"], extra={"show": True})
elif result["action"] == "log.error" and result["event"].get("message"):
log.error(result["event"].get("message"))
elif result["action"] == "log.warning" and result["event"].get("message"):
log.warning(result["event"].get("message"))
elif result["action"] == "log.info" and result["event"].get("message"):
log.info(result["event"].get("message"), extra={"show": True})
elif result["action"] == "ping":
pass

View File

@@ -50,7 +50,7 @@ class CrashReport:
Report crash to a third party service
"""
DSN = "https://3dec04c8d64949b41e70d86b398871ee@o19455.ingest.sentry.io/38506"
DSN = "https://4cbe2abf0323ef3136a900d624b12567@o19455.ingest.us.sentry.io/38506"
_instance = None
def __init__(self):

View File

@@ -126,20 +126,18 @@ class ExportProjectWizard(QtWidgets.QWizard, Ui_ExportProjectWizard):
"""
if result:
include_images = include_snapshots = reset_mac_addresses = keep_compute_ids = "no"
if self.uiIncludeImagesCheckBox.isChecked():
include_images = "yes"
else:
include_images = "no"
if self.uiIncludeSnapshotsCheckBox.isChecked():
include_snapshots = "yes"
else:
include_snapshots = "no"
if self.uiResetMacAddressesCheckBox.isChecked():
reset_mac_addresses = "yes"
else:
reset_mac_addresses = "no"
if self.uiKeepComputeIdsCheckBox.isChecked():
keep_compute_ids = "yes"
compression = self.uiCompressionComboBox.currentData()
export_worker = ExportProjectWorker(self._project, self._path, include_images, include_snapshots, reset_mac_addresses, compression)
export_worker = ExportProjectWorker(self._project, self._path, include_images, include_snapshots, reset_mac_addresses, keep_compute_ids, compression)
progress_dialog = ProgressDialog(export_worker, "Exporting project", "Exporting portable project files...", "Cancel", parent=self, create_thread=False)
progress_dialog.show()
progress_dialog.exec_()

View File

@@ -1032,7 +1032,7 @@ class GraphicsView(QtWidgets.QGraphicsView):
if not new_hostname.strip():
QtWidgets.QMessageBox.critical(self, "Change hostname", "Hostname cannot be blank")
continue
if hasattr(item.node(), "validateHostname"):
if hasattr(item.node(), "validateHostname") and not LocalConfig.instance().experimental():
if not item.node().validateHostname(new_hostname):
QtWidgets.QMessageBox.critical(self, "Change hostname", "Invalid name detected for this node: {}".format(new_hostname))
continue

View File

@@ -184,9 +184,9 @@ def main():
# catch exceptions to write them in a file
sys.excepthook = exceptionHook
# we only support Python 3 version >= 3.7
if sys.version_info < (3, 7):
raise SystemExit("Python 3.7 or higher is required")
# we only support Python 3 version >= 3.8
if sys.version_info < (3, 8):
raise SystemExit("Python 3.8 or higher is required")
if parse_version(QtCore.QT_VERSION_STR) < parse_version("5.5.0"):
raise SystemExit("Requirement is PyQt5 version 5.5.0 or higher, got version {}".format(QtCore.QT_VERSION_STR))

View File

@@ -268,6 +268,7 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
self.uiExportDebugInformationAction.triggered.connect(self._exportDebugInformationSlot)
self.uiDoctorAction.triggered.connect(self._doctorSlot)
self.uiAcademyAction.triggered.connect(self._academyActionSlot)
self.uiShortcutsAction.triggered.connect(self._shortcutsActionSlot)
# browsers tool bar connections
self.uiBrowseRoutersAction.triggered.connect(self._browseRoutersActionSlot)
@@ -979,6 +980,15 @@ class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
# start and connect to the local server if needed
LocalServer.instance().localServerAutoStartIfRequired()
def _shortcutsActionSlot(self):
shortcuts_text = ""
for action in self.findChildren(QtWidgets.QAction):
shortcut = action.shortcut().toString()
if shortcut:
shortcuts_text += f"{action.toolTip()}: {shortcut}\n"
QtWidgets.QMessageBox.information(self, "Shortcuts", shortcuts_text)
def _aboutQtActionSlot(self):
"""
Slot to display the Qt About dialog.

View File

@@ -73,7 +73,7 @@ class Nat(Node):
:returns: symbol path (or resource).
"""
return ":/symbols/cloud.svg"
return ":/symbols/nat.svg"
@staticmethod
def categories():

View File

@@ -24,6 +24,7 @@ import re
from gns3.qt import QtCore, QtGui, QtWidgets
from gns3.local_server import LocalServer
from gns3.local_config import LocalConfig
from gns3.dialogs.node_properties_dialog import ConfigurationError
from gns3.dialogs.symbol_selection_dialog import SymbolSelectionDialog
from gns3.controller import Controller
@@ -488,7 +489,7 @@ class IOSRouterConfigurationPage(QtWidgets.QWidget, Ui_iosRouterConfigPageWidget
name = self.uiNameLineEdit.text()
if not name:
QtWidgets.QMessageBox.critical(self, "Name", "IOS router name cannot be empty!")
elif node and not node.validateHostname(name):
elif node and not node.validateHostname(name) and not LocalConfig.instance().experimental():
QtWidgets.QMessageBox.critical(self, "Name", "Invalid name detected for IOS router: {}".format(name))
else:
settings["name"] = name

View File

@@ -23,6 +23,7 @@ import os
from gns3.qt import QtWidgets
from gns3.local_server import LocalServer
from gns3.local_config import LocalConfig
from gns3.dialogs.node_properties_dialog import ConfigurationError
from gns3.dialogs.symbol_selection_dialog import SymbolSelectionDialog
from gns3.node import Node
@@ -245,7 +246,7 @@ class iouDeviceConfigurationPage(QtWidgets.QWidget, Ui_iouDeviceConfigPageWidget
name = self.uiNameLineEdit.text()
if not name:
QtWidgets.QMessageBox.critical(self, "Name", "IOU device name cannot be empty!")
elif node and not node.validateHostname(name):
elif node and not node.validateHostname(name) and not LocalConfig.instance().experimental():
QtWidgets.QMessageBox.critical(self, "Name", "Invalid name detected for IOU device: {}".format(name))
else:
settings["name"] = name

View File

@@ -721,11 +721,11 @@ class Project(QtCore.QObject):
self.projectUpdatedCallback(result["event"])
elif result["action"] == "snapshot.restored":
Topology.instance().restoreSnapshot(result["event"]["project_id"])
elif result["action"] == "log.error":
log.error(result["event"]["message"])
elif result["action"] == "log.warning":
log.warning(result["event"]["message"])
elif result["action"] == "log.info":
log.info(result["event"]["message"], extra={"show": True})
elif result["action"] == "log.error" and result["event"].get("message"):
log.error(result["event"].get("message"))
elif result["action"] == "log.warning" and result["event"].get("message"):
log.warning(result["event"].get("message"))
elif result["action"] == "log.info" and result["event"].get("message"):
log.info(result["event"].get("message"), extra={"show": True})
elif result["action"] == "ping":
pass

View File

@@ -7,6 +7,7 @@
"enum": [
"router",
"multilayer_switch",
"switch",
"firewall",
"guest"
]
@@ -720,174 +721,174 @@
"template_properties"
]
}
}
},
"images": {
"type": "array",
"title": "Images for this appliance",
"items": {
"type": "object",
"title": "An image file",
"properties": {
"filename": {
"type": "string",
"title": "Filename"
},
"images": {
"type": "array",
"title": "Images for this appliance",
"items": {
"type": "object",
"title": "An image file",
"properties": {
"filename": {
"type": "string",
"title": "Filename"
},
"version": {
"type": "string",
"title": "Version of the image file"
},
"md5sum": {
"type": "string",
"title": "MD5 cheksum of the image file",
"pattern": "^[a-f0-9]{32}$"
},
"checksum": {
"type": "string",
"title": "checksum of the image file"
},
"checksum_type": {
"title": "checksum type of the image file",
"enum": [
"md5"
]
},
"filesize": {
"type": "integer",
"title": "File size in bytes of the image file"
},
"download_url": {
"type": "string",
"format": "uri",
"title": "Download URL where you can download the image file from a browser"
},
"direct_download_url": {
"type": "string",
"format": "uri",
"title": "Optional. Non authenticated URL to the image file where you can download the image directly"
},
"compression": {
"enum": [
"bzip2",
"gzip",
"lzma",
"xz",
"rar",
"zip",
"7z"
],
"title": "Optional, compression type of direct download URL image."
},
"compression_target": {
"type": "string",
"title": "Optional, file name of the image file inside the compressed file."
}
},
"version": {
"type": "string",
"title": "Version of the image file"
},
"md5sum": {
"type": "string",
"title": "MD5 cheksum of the image file",
"pattern": "^[a-f0-9]{32}$"
},
"checksum": {
"type": "string",
"title": "checksum of the image file"
},
"checksum_type": {
"title": "checksum type of the image file",
"enum": [
"md5"
]
},
"filesize": {
"type": "integer",
"title": "File size in bytes of the image file"
},
"download_url": {
"type": "string",
"format": "uri",
"title": "Download URL where you can download the image file from a browser"
},
"direct_download_url": {
"type": "string",
"format": "uri",
"title": "Optional. Non authenticated URL to the image file where you can download the image directly"
},
"compression": {
"enum": [
"bzip2",
"gzip",
"lzma",
"xz",
"rar",
"zip",
"7z"
],
"title": "Optional, compression type of direct download URL image."
},
"compression_target": {
"type": "string",
"title": "Optional, file name of the image file inside the compressed file."
}
},
"anyOf": [
{
"required": [
"filename",
"version",
"md5sum",
"filesize"
]
},
{
"required": [
"filename",
"version",
"checksum",
"filesize"
]
}
]
}
},
"versions": {
"type": "array",
"title": "Versions of the appliance",
"items": {
"type": "object",
"title": "A version of the appliance",
"properties": {
"name": {
"type": "string",
"title": "Name of the version"
},
"settings": {
"type": "string",
"title": "Template settings to use to run the version"
},
"category": {
"$ref": "#/definitions/categories",
"title": "Category of the version"
},
"installation_instructions": {
"type": "string",
"title": "Optional installation instructions for the version"
},
"usage": {
"type": "string",
"title": "Optional instructions about using the version"
},
"default_username": {
"type": "string",
"title": "Default username for the version"
},
"default_password": {
"type": "string",
"title": "Default password for the version"
},
"symbol": {
"type": "string",
"title": "An optional symbol for the version"
},
"images": {
"type": "object",
"title": "Images used for this version",
"properties": {
"kernel_image": {
"type": "string",
"title": "Kernel image (Qemu only)"
},
"initrd": {
"type": "string",
"title": "Initrd disk image (Qemu only)"
},
"image": {
"type": "string",
"title": "OS image (IOU and Dynamips only)"
},
"bios_image": {
"type": "string",
"title": "Bios image (Qemu only)"
},
"hda_disk_image": {
"type": "string",
"title": "Hda disk image (Qemu only)"
},
"hdb_disk_image": {
"type": "string",
"title": "Hdc disk image (Qemu only)"
},
"hdc_disk_image": {
"type": "string",
"title": "Hdd disk image (Qemu only)"
},
"hdd_disk_image": {
"type": "string",
"title": "Hdd disk image (Qemu only)"
},
"cdrom_image": {
"type": "string",
"title": "cdrom image (Qemu only)"
"anyOf": [
{
"required": [
"filename",
"version",
"md5sum",
"filesize"
]
},
{
"required": [
"filename",
"version",
"checksum",
"filesize"
]
}
]
}
},
"versions": {
"type": "array",
"title": "Versions of the appliance",
"items": {
"type": "object",
"title": "A version of the appliance",
"properties": {
"name": {
"type": "string",
"title": "Name of the version"
},
"settings": {
"type": "string",
"title": "Template settings to use to run the version"
},
"category": {
"$ref": "#/definitions/categories",
"title": "Category of the version"
},
"installation_instructions": {
"type": "string",
"title": "Optional installation instructions for the version"
},
"usage": {
"type": "string",
"title": "Optional instructions about using the version"
},
"default_username": {
"type": "string",
"title": "Default username for the version"
},
"default_password": {
"type": "string",
"title": "Default password for the version"
},
"symbol": {
"type": "string",
"title": "An optional symbol for the version"
},
"images": {
"type": "object",
"title": "Images used for this version",
"properties": {
"kernel_image": {
"type": "string",
"title": "Kernel image (Qemu only)"
},
"initrd": {
"type": "string",
"title": "Initrd disk image (Qemu only)"
},
"image": {
"type": "string",
"title": "OS image (IOU and Dynamips only)"
},
"bios_image": {
"type": "string",
"title": "Bios image (Qemu only)"
},
"hda_disk_image": {
"type": "string",
"title": "Hda disk image (Qemu only)"
},
"hdb_disk_image": {
"type": "string",
"title": "Hdc disk image (Qemu only)"
},
"hdc_disk_image": {
"type": "string",
"title": "Hdd disk image (Qemu only)"
},
"hdd_disk_image": {
"type": "string",
"title": "Hdd disk image (Qemu only)"
},
"cdrom_image": {
"type": "string",
"title": "cdrom image (Qemu only)"
}
}
}
}
},
"required": [
"name"
]
},
"required": [
"name"
]
}
}
},
"required": [

View File

@@ -287,7 +287,6 @@ GENERAL_SETTINGS = {
"check_for_update": True,
"overlay_notifications": True,
"experimental_features": False,
"stats_visitor_id": str(uuid.uuid4()), # An anonymous id for stats
"last_check_for_update": 0,
"telnet_console_command": DEFAULT_TELNET_CONSOLE_COMMAND,
"vnc_console_command": DEFAULT_VNC_CONSOLE_COMMAND,

View File

@@ -9,16 +9,10 @@
<rect>
<x>0</x>
<y>0</y>
<width>500</width>
<height>147</height>
<width>460</width>
<height>142</height>
</rect>
</property>
<property name="maximumSize">
<size>
<width>500</width>
<height>147</height>
</size>
</property>
<property name="windowTitle">
<string>Packet capture</string>
</property>

View File

@@ -2,19 +2,20 @@
# Form implementation generated from reading ui file '/home/grossmj/PycharmProjects/gns3-gui/gns3/ui/capture_dialog.ui'
#
# Created: Mon May 30 21:49:29 2016
# by: PyQt5 UI code generator 5.2.1
# Created by: PyQt5 UI code generator 5.15.6
#
# WARNING! All changes made in this file will be lost!
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_CaptureDialog(object):
def setupUi(self, CaptureDialog):
CaptureDialog.setObjectName("CaptureDialog")
CaptureDialog.setWindowModality(QtCore.Qt.WindowModal)
CaptureDialog.resize(500, 147)
CaptureDialog.setMaximumSize(QtCore.QSize(500, 147))
CaptureDialog.resize(460, 142)
CaptureDialog.setModal(False)
self.gridLayout = QtWidgets.QGridLayout(CaptureDialog)
self.gridLayout.setObjectName("gridLayout")
@@ -73,5 +74,4 @@ class Ui_CaptureDialog(object):
self.uiLinkTypeLabel.setText(_translate("CaptureDialog", "Link type:"))
self.uiFileNameLabel.setText(_translate("CaptureDialog", "File name:"))
self.uiStartCommandCheckBox.setText(_translate("CaptureDialog", "Start the capture visualization program"))
from . import resources_rc

View File

@@ -9,8 +9,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>900</width>
<height>600</height>
<width>602</width>
<height>367</height>
</rect>
</property>
<property name="windowTitle">
@@ -27,19 +27,6 @@
<string>Please select the location, whether to include base images or not and the compression type.</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QLabel" name="uiPathLabel">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Path:</string>
</property>
</widget>
</item>
<item row="0" column="1" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
@@ -54,6 +41,26 @@
</item>
</layout>
</item>
<item row="5" column="0" colspan="2">
<widget class="QCheckBox" name="uiResetMacAddressesCheckBox">
<property name="text">
<string>&amp;Reset MAC addresses</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="uiPathLabel">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Path:</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="uiCompressionLabel">
<property name="text">
@@ -61,6 +68,19 @@
</property>
</widget>
</item>
<item row="7" column="2">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>247</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="1" colspan="2">
<widget class="QComboBox" name="uiCompressionComboBox"/>
</item>
@@ -78,23 +98,10 @@
</property>
</widget>
</item>
<item row="6" column="2">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>247</height>
</size>
</property>
</spacer>
</item>
<item row="5" column="0" colspan="2">
<widget class="QCheckBox" name="uiResetMacAddressesCheckBox">
<item row="6" column="0" colspan="3">
<widget class="QCheckBox" name="uiKeepComputeIdsCheckBox">
<property name="text">
<string>&amp;Reset MAC addresses</string>
<string>&amp;Keep the original compute IDs</string>
</property>
</widget>
</item>

View File

@@ -2,9 +2,10 @@
# Form implementation generated from reading ui file '/home/grossmj/PycharmProjects/gns3-gui/gns3/ui/export_project_wizard.ui'
#
# Created by: PyQt5 UI code generator 5.13.2
# Created by: PyQt5 UI code generator 5.15.6
#
# WARNING! All changes made in this file will be lost!
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
@@ -14,20 +15,12 @@ class Ui_ExportProjectWizard(object):
def setupUi(self, ExportProjectWizard):
ExportProjectWizard.setObjectName("ExportProjectWizard")
ExportProjectWizard.setWindowModality(QtCore.Qt.ApplicationModal)
ExportProjectWizard.resize(900, 600)
ExportProjectWizard.resize(602, 367)
ExportProjectWizard.setOptions(QtWidgets.QWizard.HaveHelpButton)
self.uiExportOptionsWizardPage = QtWidgets.QWizardPage()
self.uiExportOptionsWizardPage.setObjectName("uiExportOptionsWizardPage")
self.gridLayout = QtWidgets.QGridLayout(self.uiExportOptionsWizardPage)
self.gridLayout.setObjectName("gridLayout")
self.uiPathLabel = QtWidgets.QLabel(self.uiExportOptionsWizardPage)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.uiPathLabel.sizePolicy().hasHeightForWidth())
self.uiPathLabel.setSizePolicy(sizePolicy)
self.uiPathLabel.setObjectName("uiPathLabel")
self.gridLayout.addWidget(self.uiPathLabel, 0, 0, 1, 1)
self.horizontalLayout_3 = QtWidgets.QHBoxLayout()
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
self.uiPathLineEdit = QtWidgets.QLineEdit(self.uiExportOptionsWizardPage)
@@ -37,9 +30,22 @@ class Ui_ExportProjectWizard(object):
self.uiPathBrowserToolButton.setObjectName("uiPathBrowserToolButton")
self.horizontalLayout_3.addWidget(self.uiPathBrowserToolButton)
self.gridLayout.addLayout(self.horizontalLayout_3, 0, 1, 1, 2)
self.uiResetMacAddressesCheckBox = QtWidgets.QCheckBox(self.uiExportOptionsWizardPage)
self.uiResetMacAddressesCheckBox.setObjectName("uiResetMacAddressesCheckBox")
self.gridLayout.addWidget(self.uiResetMacAddressesCheckBox, 5, 0, 1, 2)
self.uiPathLabel = QtWidgets.QLabel(self.uiExportOptionsWizardPage)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.uiPathLabel.sizePolicy().hasHeightForWidth())
self.uiPathLabel.setSizePolicy(sizePolicy)
self.uiPathLabel.setObjectName("uiPathLabel")
self.gridLayout.addWidget(self.uiPathLabel, 0, 0, 1, 1)
self.uiCompressionLabel = QtWidgets.QLabel(self.uiExportOptionsWizardPage)
self.uiCompressionLabel.setObjectName("uiCompressionLabel")
self.gridLayout.addWidget(self.uiCompressionLabel, 1, 0, 1, 1)
spacerItem = QtWidgets.QSpacerItem(20, 247, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout.addItem(spacerItem, 7, 2, 1, 1)
self.uiCompressionComboBox = QtWidgets.QComboBox(self.uiExportOptionsWizardPage)
self.uiCompressionComboBox.setObjectName("uiCompressionComboBox")
self.gridLayout.addWidget(self.uiCompressionComboBox, 1, 1, 1, 2)
@@ -49,11 +55,9 @@ class Ui_ExportProjectWizard(object):
self.uiIncludeSnapshotsCheckBox = QtWidgets.QCheckBox(self.uiExportOptionsWizardPage)
self.uiIncludeSnapshotsCheckBox.setObjectName("uiIncludeSnapshotsCheckBox")
self.gridLayout.addWidget(self.uiIncludeSnapshotsCheckBox, 4, 0, 1, 2)
spacerItem = QtWidgets.QSpacerItem(20, 247, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
self.gridLayout.addItem(spacerItem, 6, 2, 1, 1)
self.uiResetMacAddressesCheckBox = QtWidgets.QCheckBox(self.uiExportOptionsWizardPage)
self.uiResetMacAddressesCheckBox.setObjectName("uiResetMacAddressesCheckBox")
self.gridLayout.addWidget(self.uiResetMacAddressesCheckBox, 5, 0, 1, 2)
self.uiKeepComputeIdsCheckBox = QtWidgets.QCheckBox(self.uiExportOptionsWizardPage)
self.uiKeepComputeIdsCheckBox.setObjectName("uiKeepComputeIdsCheckBox")
self.gridLayout.addWidget(self.uiKeepComputeIdsCheckBox, 6, 0, 1, 3)
ExportProjectWizard.addPage(self.uiExportOptionsWizardPage)
self.uiProjectReadmeWizardPage = QtWidgets.QWizardPage()
self.uiProjectReadmeWizardPage.setObjectName("uiProjectReadmeWizardPage")
@@ -72,12 +76,13 @@ class Ui_ExportProjectWizard(object):
ExportProjectWizard.setWindowTitle(_translate("ExportProjectWizard", "Export project"))
self.uiExportOptionsWizardPage.setTitle(_translate("ExportProjectWizard", "Export project"))
self.uiExportOptionsWizardPage.setSubTitle(_translate("ExportProjectWizard", "Please select the location, whether to include base images or not and the compression type."))
self.uiPathLabel.setText(_translate("ExportProjectWizard", "Path:"))
self.uiPathBrowserToolButton.setText(_translate("ExportProjectWizard", "Browse..."))
self.uiResetMacAddressesCheckBox.setText(_translate("ExportProjectWizard", "&Reset MAC addresses"))
self.uiPathLabel.setText(_translate("ExportProjectWizard", "Path:"))
self.uiCompressionLabel.setText(_translate("ExportProjectWizard", "Compression:"))
self.uiIncludeImagesCheckBox.setText(_translate("ExportProjectWizard", "&Include base images"))
self.uiIncludeSnapshotsCheckBox.setText(_translate("ExportProjectWizard", "&Include snapshots"))
self.uiResetMacAddressesCheckBox.setText(_translate("ExportProjectWizard", "&Reset MAC addresses"))
self.uiKeepComputeIdsCheckBox.setText(_translate("ExportProjectWizard", "&Keep the original compute IDs"))
self.uiProjectReadmeWizardPage.setTitle(_translate("ExportProjectWizard", "Readme file"))
self.uiProjectReadmeWizardPage.setSubTitle(_translate("ExportProjectWizard", "Write a summary of the project."))
self.uiReadmeTextEdit.setHtml(_translate("ExportProjectWizard", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"

View File

@@ -1012,7 +1012,7 @@
<item>
<widget class="QCheckBox" name="uiExperimentalFeaturesCheckBox">
<property name="text">
<string>Enable experimental features (dangerous, restart required)</string>
<string>Enable experimental features</string>
</property>
</widget>
</item>

View File

@@ -598,7 +598,7 @@ class Ui_GeneralPreferencesPageWidget(object):
self.uiCheckForUpdateCheckBox.setText(_translate("GeneralPreferencesPageWidget", "Automatically check for update"))
self.uiCrashReportCheckBox.setText(_translate("GeneralPreferencesPageWidget", "Send anonymous crash reports"))
self.uiOverlayNotificationsCheckBox.setText(_translate("GeneralPreferencesPageWidget", "Display error, warning and info in an overlay popup"))
self.uiExperimentalFeaturesCheckBox.setText(_translate("GeneralPreferencesPageWidget", "Enable experimental features (dangerous, restart required)"))
self.uiExperimentalFeaturesCheckBox.setText(_translate("GeneralPreferencesPageWidget", "Enable experimental features"))
self.uiHdpiCheckBox.setText(_translate("GeneralPreferencesPageWidget", "Enable HDPI mode (this may crash on Linux, restart required)"))
self.uiMultiProfilesCheckBox.setText(_translate("GeneralPreferencesPageWidget", "Request for profile settings at application startup"))
self.uiDirectFileUpload.setToolTip(_translate("GeneralPreferencesPageWidget", "Experimental, requires computes visibility from GUI network"))

View File

@@ -112,6 +112,7 @@ background-none;
<addaction name="uiAcademyAction"/>
<addaction name="uiDoctorAction"/>
<addaction name="uiExportDebugInformationAction"/>
<addaction name="uiShortcutsAction"/>
<addaction name="uiAboutQtAction"/>
<addaction name="uiAboutAction"/>
</widget>
@@ -644,6 +645,9 @@ background-none;
<property name="statusTip">
<string>Start/Resume all devices</string>
</property>
<property name="shortcut">
<string>Ctrl+B</string>
</property>
</action>
<action name="uiStopAllAction">
<property name="enabled">
@@ -663,6 +667,9 @@ background-none;
<property name="statusTip">
<string>Stop all devices</string>
</property>
<property name="shortcut">
<string>Ctrl+E</string>
</property>
</action>
<action name="uiConsoleAllAction">
<property name="enabled">
@@ -797,6 +804,9 @@ background-none;
<property name="statusTip">
<string>Suspend all devices</string>
</property>
<property name="shortcut">
<string>Ctrl+J</string>
</property>
</action>
<action name="uiAddNoteAction">
<property name="checkable">
@@ -1147,6 +1157,9 @@ background-none;
<property name="text">
<string>Fit in view</string>
</property>
<property name="shortcut">
<string>Ctrl+1</string>
</property>
</action>
<action name="uiActionFullscreen">
<property name="text">
@@ -1306,6 +1319,11 @@ background-none;
<string>Reset GUI state</string>
</property>
</action>
<action name="uiShortcutsAction">
<property name="text">
<string>&amp;Shortcuts</string>
</property>
</action>
</widget>
<customwidgets>
<customwidget>

View File

@@ -2,7 +2,7 @@
# Form implementation generated from reading ui file '/home/grossmj/PycharmProjects/gns3-gui/gns3/ui/main_window.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
# Created by: PyQt5 UI code generator 5.15.10
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
@@ -455,6 +455,8 @@ class Ui_MainWindow(object):
self.uiResetConsoleAllAction.setObjectName("uiResetConsoleAllAction")
self.uiResetGUIStateAction = QtWidgets.QAction(MainWindow)
self.uiResetGUIStateAction.setObjectName("uiResetGUIStateAction")
self.uiShortcutsAction = QtWidgets.QAction(MainWindow)
self.uiShortcutsAction.setObjectName("uiShortcutsAction")
self.uiEditMenu.addAction(self.uiSelectAllAction)
self.uiEditMenu.addAction(self.uiSelectNoneAction)
self.uiEditMenu.addSeparator()
@@ -479,6 +481,7 @@ class Ui_MainWindow(object):
self.uiHelpMenu.addAction(self.uiAcademyAction)
self.uiHelpMenu.addAction(self.uiDoctorAction)
self.uiHelpMenu.addAction(self.uiExportDebugInformationAction)
self.uiHelpMenu.addAction(self.uiShortcutsAction)
self.uiHelpMenu.addAction(self.uiAboutQtAction)
self.uiHelpMenu.addAction(self.uiAboutAction)
self.uiViewMenu.addAction(self.uiActionFullscreen)
@@ -604,9 +607,11 @@ class Ui_MainWindow(object):
self.uiStartAllAction.setText(_translate("MainWindow", "Start/Resume all nodes"))
self.uiStartAllAction.setToolTip(_translate("MainWindow", "Start/Resume all nodes"))
self.uiStartAllAction.setStatusTip(_translate("MainWindow", "Start/Resume all devices"))
self.uiStartAllAction.setShortcut(_translate("MainWindow", "Ctrl+B"))
self.uiStopAllAction.setText(_translate("MainWindow", "Stop all nodes"))
self.uiStopAllAction.setToolTip(_translate("MainWindow", "Stop all nodes"))
self.uiStopAllAction.setStatusTip(_translate("MainWindow", "Stop all devices"))
self.uiStopAllAction.setShortcut(_translate("MainWindow", "Ctrl+E"))
self.uiConsoleAllAction.setText(_translate("MainWindow", "Console connect to all nodes"))
self.uiConsoleAllAction.setToolTip(_translate("MainWindow", "Console connect to all nodes"))
self.uiConsoleAllAction.setStatusTip(_translate("MainWindow", "Console to all devices"))
@@ -635,6 +640,7 @@ class Ui_MainWindow(object):
self.uiSuspendAllAction.setText(_translate("MainWindow", "Suspend all nodes"))
self.uiSuspendAllAction.setToolTip(_translate("MainWindow", "Suspend all nodes"))
self.uiSuspendAllAction.setStatusTip(_translate("MainWindow", "Suspend all devices"))
self.uiSuspendAllAction.setShortcut(_translate("MainWindow", "Ctrl+J"))
self.uiAddNoteAction.setText(_translate("MainWindow", "Add note"))
self.uiAddNoteAction.setToolTip(_translate("MainWindow", "Add a note"))
self.uiAddNoteAction.setStatusTip(_translate("MainWindow", "Add a note"))
@@ -702,6 +708,7 @@ class Ui_MainWindow(object):
self.uiAddLinkAction.setToolTip(_translate("MainWindow", "Add a link"))
self.uiAddLinkAction.setStatusTip(_translate("MainWindow", "Add a link"))
self.uiFitInViewAction.setText(_translate("MainWindow", "Fit in view"))
self.uiFitInViewAction.setShortcut(_translate("MainWindow", "Ctrl+1"))
self.uiActionFullscreen.setText(_translate("MainWindow", "Fullscreen"))
self.uiActionFullscreen.setShortcut(_translate("MainWindow", "Ctrl+F"))
self.uiSetupWizard.setText(_translate("MainWindow", "&Setup Wizard"))
@@ -724,6 +731,7 @@ class Ui_MainWindow(object):
self.uiResetDocksAction.setText(_translate("MainWindow", "Reset docks"))
self.uiResetConsoleAllAction.setText(_translate("MainWindow", "Reset all console connections"))
self.uiResetGUIStateAction.setText(_translate("MainWindow", "Reset GUI state"))
self.uiShortcutsAction.setText(_translate("MainWindow", "&Shortcuts"))
from ..compute_summary_view import ComputeSummaryView
from ..console_view import ConsoleView
from ..graphics_view import GraphicsView

View File

@@ -28,21 +28,24 @@ class ExportProjectWorker(QtCore.QObject):
finished = QtCore.pyqtSignal()
updated = QtCore.pyqtSignal(int)
def __init__(self, project, path, include_images, include_snapshots, reset_mac_addresses, compression):
def __init__(self, project, path, include_images, include_snapshots, reset_mac_addresses, keep_compute_ids, compression):
super().__init__()
self._project = project
self._path = path
self._include_images = include_images
self._include_snapshots = include_snapshots
self._reset_mac_addresses = reset_mac_addresses
self._path = path
self._keep_compute_ids = keep_compute_ids
self._compression = compression
def run(self):
if self._project:
self._project.get("/export?include_images={}&include_snapshots={}&reset_mac_addresses={}&compression={}".format(self._include_images, self._include_snapshots, self._reset_mac_addresses, self._compression),
self._exportReceived,
downloadProgressCallback=self._downloadFileProgress,
timeout=None)
self._project.get(
"/export?include_images={}&include_snapshots={}&reset_mac_addresses={}&keep_compute_ids={}&compression={}".format(self._include_images, self._include_snapshots, self._reset_mac_addresses, self._keep_compute_ids, self._compression),
self._exportReceived,
downloadProgressCallback=self._downloadFileProgress,
timeout=None
)
def _exportReceived(self, content, error=False, server=None, context={}, **kwargs):
if error:

View File

@@ -23,8 +23,8 @@
# or negative for a release candidate or beta (after the base version
# number has been incremented)
__version__ = "2.2.46"
__version_info__ = (2, 2, 46, 0)
__version__ = "2.2.49"
__version_info__ = (2, 2, 49, 0)
if "dev" in __version__:
try:

View File

@@ -1,5 +1,3 @@
-rrequirements.txt
PyQt5-Qt5==5.15.2
PyQt5-sip==12.12.2
PyQt5==5.15.9
PyQt5==5.15.11

View File

@@ -1,7 +1,6 @@
jsonschema>=4.17.3,<4.18; python_version >= '3.7' # v4.17.3 is the last version to support Python 3.7
sentry-sdk==1.39.2,<1.40
psutil==5.9.8
jsonschema>=4.23,<4.24
sentry-sdk==2.12,<2.13
psutil==6.0.0
distro>=1.9.0
truststore>=0.8.0; python_version >= '3.10'
truststore>=0.9.1; python_version >= '3.10'
importlib-resources>=1.3; python_version < '3.9'
setuptools>=60.8.1

207
resources/symbols/nat.svg Normal file
View File

@@ -0,0 +1,207 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
version="1.1"
width="4.5009999cm"
height="2.0009999cm"
viewBox="0.2 0.149 4.7 2.151"
id="svg2"
sodipodi:docname="nat.svg"
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<sodipodi:namedview
id="namedview30"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:document-units="cm"
showgrid="false"
inkscape:lockguides="true"
inkscape:zoom="5.7444245"
inkscape:cx="75.725602"
inkscape:cy="42.040765"
inkscape:window-width="1658"
inkscape:window-height="1016"
inkscape:window-x="70"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:current-layer="svg2" />
<metadata
id="metadata57">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
<dc:creator>
<cc:Agent>
<dc:title>Jeremy Grossmann</dc:title>
</cc:Agent>
</dc:creator>
<dc:publisher>
<cc:Agent>
<dc:title>GNS-3</dc:title>
</cc:Agent>
</dc:publisher>
<dc:description>Created for the GNS-3 project (www.gns3.net)</dc:description>
<cc:license
rdf:resource="http://creativecommons.org/licenses/GPL/2.0/" />
</cc:Work>
<cc:License
rdf:about="http://creativecommons.org/licenses/GPL/2.0/">
<cc:permits
rdf:resource="http://web.resource.org/cc/Reproduction" />
<cc:permits
rdf:resource="http://web.resource.org/cc/Distribution" />
<cc:requires
rdf:resource="http://web.resource.org/cc/Notice" />
<cc:permits
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
<cc:requires
rdf:resource="http://web.resource.org/cc/ShareAlike" />
<cc:requires
rdf:resource="http://web.resource.org/cc/SourceCode" />
</cc:License>
</rdf:RDF>
</metadata>
<defs
id="defs55" />
<path
d="m 3.7599791,0.61531938 -10e-4,-0.021 -0.003,-0.021 -0.007,-0.02 -0.009,-0.02 -0.011,-0.021 -0.013,-0.02 -0.017,-0.02 -0.018,-0.019 -0.021,-0.019 -0.023,-0.019 -0.024,-0.017 -0.028,-0.017 -0.03,-0.017 -0.031,-0.017 -0.033,-0.015 -0.035,-0.015 -0.037,-0.014 -0.038,-0.013 -0.04,-0.012 -0.041,-0.011 -0.043,-0.011 -0.045,-0.01 -0.044,-0.008 -0.046,-0.008 -0.048,-0.007 -0.047,-0.006 -0.048,-0.004 -0.049,-0.004 -0.05,-0.003 -0.049,-0.001 -0.049,-0.001 0,0 -0.05,0.001 -0.049,0.001 -0.05,0.003 -0.048,0.004 -0.049,0.004 -0.047,0.006 -0.047,0.007 -0.046,0.008 -0.045,0.008 -0.043,0.01 -0.043,0.011 -0.042,0.011 -0.04,0.012 -0.039,0.013 -0.036,0.014 -0.035,0.015 -0.033,0.015 -0.032,0.017 -0.029,0.017 -0.027,0.017 -0.026,0.017 -0.023,0.019 -0.02,0.019 -0.019,0.019 -0.016,0.02 -0.014,0.02 -0.01,0.021 -0.009,0.02 -0.006,0.02 -0.005,0.021 -0.001,0.021 0,0 0.001,0.02 0.005,0.022 0.006,0.02 0.009,0.021 0.01,0.02 0.014,0.019 0.016,0.02 0.019,0.02 0.02,0.019 0.023,0.018 0.026,0.018 0.027,0.017 0.029,0.017 0.032,0.016 0.033,0.016 0.035,0.014 0.036,0.014 0.039,0.013 0.04,0.013 0.042,0.011 0.043,0.01 0.043,0.011 0.045,0.008 0.046,0.007 0.047,0.007 0.047,0.006 0.049,0.005 0.048,0.003 0.05,0.003 0.049,10e-4 0.05,0.001 0,0 0.049,-0.001 0.049,-10e-4 0.05,-0.003 0.049,-0.003 0.048,-0.005 0.047,-0.006 0.048,-0.007 0.046,-0.007 0.044,-0.008 0.045,-0.011 0.043,-0.01 0.041,-0.011 0.04,-0.013 0.038,-0.013 0.037,-0.014 0.035,-0.014 0.033,-0.016 0.031,-0.016 0.03,-0.017 0.028,-0.017 0.024,-0.018 0.023,-0.018 0.021,-0.019 0.018,-0.02 0.017,-0.02 0.013,-0.019 0.011,-0.02 0.009,-0.021 0.007,-0.02 0.003,-0.022 10e-4,-0.02"
id="path4"
style="fill:#ffffff;stroke:none" />
<path
d="m 2.2259791,0.83031938 -10e-4,-0.021 -0.003,-0.02 -0.004,-0.021 -0.007,-0.02 -0.009,-0.021 -0.01,-0.02 -0.012,-0.02 -0.015,-0.018 -0.015,-0.019 -0.018,-0.019 -0.019,-0.018 -0.021,-0.017 -0.022,-0.017 -0.024,-0.016 -0.026,-0.015 -0.026,-0.015 -0.029,-0.014 -0.029,-0.013 -0.031,-0.013 -0.032,-0.011 -0.032,-0.011 -0.034,-0.009 -0.035,-0.009 -0.035,-0.008 -0.036,-0.006 -0.036,-0.006 -0.037,-0.005 -0.038,-0.004 -0.037,-0.002 -0.039,-0.002 -0.038,0 0,0 -0.037,0 -0.038,0.002 -0.038,0.002 -0.038,0.004 -0.037,0.005 -0.036,0.006 -0.036,0.006 -0.035,0.008 -0.035,0.009 -0.033,0.009 -0.033,0.011 -0.032,0.011 -0.03,0.013 -0.03,0.013 -0.028,0.014 -0.027,0.015 -0.025,0.015 -0.024,0.016 -0.023,0.017 -0.021,0.017 -0.018,0.018 -0.019,0.019 -0.015,0.019 -0.015,0.018 -0.012,0.02 -0.011,0.02 -0.008,0.021 -0.007,0.02 -0.005,0.021 -0.002,0.02 -0.001,0.021 0,0 0.001,0.021 0.002,0.021 0.005,0.02 0.007,0.021 0.008,0.02 0.011,0.02 0.012,0.02 0.015,0.019 0.015,0.019 0.019,0.018 0.018,0.018 0.021,0.018 0.023,0.016 0.024,0.016 0.025,0.016 0.027,0.014 0.028,0.015 0.03,0.012 0.03,0.013 0.032,0.012 0.033,0.01 0.033,0.01 0.035,0.008 0.035,0.008 0.036,0.007 0.036,0.005 0.037,0.005 0.038,0.004 0.038,0.002 0.038,0.002 0.037,0 0,0 0.038,0 0.039,-0.002 0.037,-0.002 0.038,-0.004 0.037,-0.005 0.036,-0.005 0.036,-0.007 0.035,-0.008 0.035,-0.008 0.034,-0.01 0.032,-0.01 0.032,-0.012 0.031,-0.013 0.029,-0.012 0.029,-0.015 0.026,-0.014 0.026,-0.016 0.024,-0.016 0.022,-0.016 0.021,-0.018 0.019,-0.018 0.018,-0.018 0.015,-0.019 0.015,-0.019 0.012,-0.02 0.01,-0.02 0.009,-0.02 0.007,-0.021 0.004,-0.02 0.003,-0.021 10e-4,-0.021"
id="path6"
style="fill:#ffffff;stroke:none" />
<path
d="m 1.2809791,1.2493194 -10e-4,-0.017 -0.001,-0.017 -0.004,-0.017 -0.005,-0.017 -0.005,-0.016 -0.007,-0.016 -0.009,-0.016 -0.009,-0.017 -0.011,-0.015 -0.012,-0.015 -0.012,-0.014 -0.014,-0.015 -0.015,-0.014 -0.017,-0.012 -0.017,-0.013 -0.018,-0.012 -0.019,-0.011 -0.02,-0.011 -0.02,-0.01 -0.022,-0.01 -0.022,-0.008 -0.023,-0.008 -0.023,-0.007 -0.024,-0.006 -0.024,-0.006 -0.025,-0.004 -0.024,-0.005 -0.026,-0.002 -0.025,-0.002 -0.025,-0.002 -0.026,0 0,0 -0.026,0 -0.026,0.002 -0.025,0.002 -0.025,0.002 -0.024,0.005 -0.026,0.004 -0.024,0.006 -0.023,0.006 -0.023,0.007 -0.023,0.008 -0.022,0.008 -0.022,0.01 -0.021,0.01 -0.019,0.011 -0.019,0.011 -0.018,0.012 -0.017,0.013 -0.017,0.012 -0.015,0.014 -0.014,0.015 -0.013,0.014 -0.011,0.015 -0.011,0.015 -0.01,0.017 -0.008,0.016 -0.007,0.016 -0.006,0.016 -0.004,0.017 -0.004,0.017 -0.002,0.017 0,0.017 0,0 0,0.016 0.002,0.018 0.004,0.016 0.004,0.017 0.006,0.017 0.007,0.016 0.008,0.016 0.01,0.015 0.011,0.016 0.011,0.015 0.013,0.015 0.014,0.014 0.015,0.014 0.017,0.013 0.017,0.012 0.018,0.012 0.019,0.012 0.019,0.01 0.021,0.01 0.022,0.01 0.022,0.008 0.023,0.008 0.023,0.007 0.023,0.007 0.024,0.005 0.026,0.005 0.024,0.004 0.025,0.003 0.025,10e-4 0.026,0.002 0.026,0.001 0,0 0.026,-0.001 0.025,-0.002 0.025,-10e-4 0.026,-0.003 0.024,-0.004 0.025,-0.005 0.024,-0.005 0.024,-0.007 0.023,-0.007 0.023,-0.008 0.022,-0.008 0.022,-0.01 0.02,-0.01 0.02,-0.01 0.019,-0.012 0.018,-0.012 0.017,-0.012 0.017,-0.013 0.015,-0.014 0.014,-0.014 0.012,-0.015 0.012,-0.015 0.011,-0.016 0.009,-0.015 0.009,-0.016 0.007,-0.016 0.005,-0.017 0.005,-0.017 0.004,-0.016 0.001,-0.018 10e-4,-0.016"
id="path8"
style="fill:#ffffff;stroke:none" />
<path
d="m 2.0969791,1.5713194 -0.002,-0.018 -0.003,-0.018 -0.004,-0.019 -0.007,-0.018 -0.009,-0.017 -0.01,-0.018 -0.013,-0.017 -0.015,-0.018 -0.016,-0.016 -0.017,-0.016 -0.019,-0.016 -0.021,-0.016 -0.024,-0.015 -0.024,-0.014 -0.026,-0.013 -0.027,-0.013 -0.028,-0.012 -0.031,-0.012 -0.03,-0.011 -0.032,-0.01 -0.034,-0.009 -0.035,-0.009 -0.034,-0.008 -0.036,-0.007 -0.036,-0.005 -0.038,-0.006 -0.037,-0.004 -0.038,-0.003 -0.038,-0.002 -0.039,-0.002 -0.038,0 0,0 -0.038,0 -0.039,0.002 -0.039,0.002 -0.038,0.003 -0.037,0.004 -0.037,0.006 -0.037,0.005 -0.035,0.007 -0.035,0.008 -0.034,0.009 -0.034,0.009 -0.032,0.01 -0.031,0.011 -0.03,0.012 -0.029,0.012 -0.027,0.013 -0.026,0.013 -0.024,0.014 -0.023,0.015 -0.021,0.016 -0.019,0.016 -0.018,0.016 -0.017,0.016 -0.014,0.018 -0.012,0.017 -0.01,0.018 -0.01,0.017 -0.006,0.018 -0.005,0.019 -0.003,0.018 -0.001,0.018 0,0 0.001,0.019 0.003,0.018 0.005,0.018 0.006,0.018 0.01,0.019 0.01,0.017 0.012,0.017 0.014,0.018 0.017,0.016 0.018,0.016 0.019,0.016 0.021,0.015 0.023,0.015 0.024,0.015 0.026,0.014 0.027,0.012 0.029,0.013 0.03,0.011 0.031,0.011 0.032,0.01 0.034,0.01 0.034,0.008 0.035,0.008 0.035,0.006 0.037,0.007 0.037,0.004 0.037,0.005 0.038,0.003 0.039,0.003 0.039,10e-4 0.038,0 0,0 0.038,0 0.039,-10e-4 0.038,-0.003 0.038,-0.003 0.037,-0.005 0.038,-0.004 0.036,-0.007 0.036,-0.006 0.034,-0.008 0.035,-0.008 0.034,-0.01 0.032,-0.01 0.03,-0.011 0.031,-0.011 0.028,-0.013 0.027,-0.012 0.026,-0.014 0.024,-0.015 0.024,-0.015 0.021,-0.015 0.019,-0.016 0.017,-0.016 0.016,-0.016 0.015,-0.018 0.013,-0.017 0.01,-0.017 0.009,-0.019 0.007,-0.018 0.004,-0.018 0.003,-0.018 0.002,-0.019"
id="path10"
style="fill:#ffffff;stroke:none" />
<path
d="m 3.9229791,1.7583194 -0.002,-0.021 -0.004,-0.022 -0.007,-0.022 -0.011,-0.021 -0.012,-0.021 -0.016,-0.021 -0.019,-0.021 -0.021,-0.02 -0.024,-0.02 -0.027,-0.02 -0.029,-0.018 -0.032,-0.019 -0.033,-0.017 -0.037,-0.017 -0.039,-0.016 -0.04,-0.016 -0.043,-0.014 -0.045,-0.014 -0.046,-0.013 -0.048,-0.012 -0.05,-0.01 -0.051,-0.011 -0.052,-0.009 -0.054,-0.008 -0.054,-0.007 -0.056,-0.006 -0.055,-0.005 -0.057,-0.004 -0.057,-0.002 -0.058,-0.002 -0.057,0 0,0 -0.057,0 -0.058,0.002 -0.057,0.002 -0.057,0.004 -0.056,0.005 -0.055,0.006 -0.054,0.007 -0.054,0.008 -0.052,0.009 -0.051,0.011 -0.05,0.01 -0.048,0.012 -0.047,0.013 -0.044,0.014 -0.043,0.014 -0.04,0.016 -0.039,0.016 -0.037,0.017 -0.034,0.017 -0.031,0.019 -0.029,0.018 -0.027,0.02 -0.024,0.02 -0.021,0.02 -0.018,0.021 -0.017,0.021 -0.012,0.021 -0.011,0.021 -0.007,0.022 -0.005,0.022 -10e-4,0.021 0,0 10e-4,0.023 0.005,0.021 0.007,0.022 0.011,0.021 0.012,0.022 0.017,0.02 0.018,0.021 0.021,0.02 0.024,0.02 0.027,0.02 0.029,0.018 0.031,0.018 0.034,0.018 0.037,0.017 0.039,0.016 0.04,0.016 0.043,0.015 0.044,0.013 0.047,0.013 0.048,0.012 0.05,0.011 0.051,0.01 0.052,0.009 0.054,0.009 0.054,0.007 0.055,0.005 0.056,0.005 0.057,0.004 0.057,0.003 0.058,0.002 0.057,0 0,0 0.057,0 0.058,-0.002 0.057,-0.003 0.057,-0.004 0.055,-0.005 0.056,-0.005 0.054,-0.007 0.054,-0.009 0.052,-0.009 0.051,-0.01 0.05,-0.011 0.048,-0.012 0.046,-0.013 0.045,-0.013 0.043,-0.015 0.04,-0.016 0.039,-0.016 0.037,-0.017 0.033,-0.018 0.032,-0.018 0.029,-0.018 0.027,-0.02 0.024,-0.02 0.021,-0.02 0.019,-0.021 0.016,-0.02 0.012,-0.022 0.011,-0.021 0.007,-0.022 0.004,-0.021 0.002,-0.023"
id="path12"
style="fill:#ffffff;stroke:none" />
<path
d="m 4.5529791,0.76631938 0,-0.016 -0.003,-0.016 -0.004,-0.017 -0.008,-0.016 -0.007,-0.016 -0.011,-0.016 -0.012,-0.015 -0.013,-0.015 -0.016,-0.015 -0.017,-0.015 -0.019,-0.013 -0.02,-0.014 -0.022,-0.013 -0.023,-0.013 -0.025,-0.012 -0.026,-0.011 -0.027,-0.012 -0.029,-0.01 -0.03,-0.01 -0.031,-0.009 -0.031,-0.008 -0.033,-0.008 -0.034,-0.007 -0.034,-0.006 -0.035,-0.005 -0.035,-0.005 -0.036,-0.003 -0.037,-0.003 -0.036,-0.002 -0.037,-0.001 -0.037,0 0,0 -0.037,0 -0.036,0.001 -0.038,0.002 -0.035,0.003 -0.036,0.003 -0.036,0.005 -0.034,0.005 -0.035,0.006 -0.034,0.007 -0.032,0.008 -0.032,0.008 -0.031,0.009 -0.03,0.01 -0.028,0.01 -0.028,0.012 -0.026,0.011 -0.025,0.012 -0.023,0.013 -0.022,0.013 -0.02,0.014 -0.019,0.013 -0.016,0.015 -0.016,0.015 -0.014,0.015 -0.012,0.015 -0.01,0.016 -0.009,0.016 -0.006,0.016 -0.005,0.017 -0.002,0.016 -10e-4,0.016 0,0 10e-4,0.016 0.002,0.016 0.005,0.017 0.006,0.016 0.009,0.016 0.01,0.016 0.012,0.016 0.014,0.014 0.016,0.016 0.016,0.014 0.019,0.014 0.02,0.013 0.022,0.014 0.023,0.013 0.025,0.012 0.026,0.011 0.028,0.011 0.028,0.011 0.03,0.009 0.031,0.009 0.032,0.009 0.032,0.007 0.034,0.007 0.035,0.006 0.034,0.006 0.036,0.004 0.036,0.003 0.035,0.003 0.038,0.003 0.036,0 0.037,10e-4 0,0 0.037,-10e-4 0.037,0 0.036,-0.003 0.037,-0.003 0.036,-0.003 0.035,-0.004 0.035,-0.006 0.034,-0.006 0.034,-0.007 0.033,-0.007 0.031,-0.009 0.031,-0.009 0.03,-0.009 0.029,-0.011 0.027,-0.011 0.026,-0.011 0.025,-0.012 0.023,-0.013 0.022,-0.014 0.02,-0.013 0.019,-0.014 0.017,-0.014 0.016,-0.016 0.013,-0.014 0.012,-0.016 0.011,-0.016 0.007,-0.016 0.008,-0.016 0.004,-0.017 0.003,-0.016 0,-0.016"
id="path14"
style="fill:#ffffff;stroke:none" />
<path
d="m 4.7599791,1.1813194 -10e-4,-0.016 -0.002,-0.016 -0.005,-0.017 -0.007,-0.016 -0.008,-0.016 -0.01,-0.016 -0.012,-0.016 -0.013,-0.014 -0.015,-0.015 -0.018,-0.015 -0.019,-0.014 -0.019,-0.013 -0.022,-0.013 -0.023,-0.014 -0.024,-0.011 -0.027,-0.012 -0.027,-0.011 -0.028,-0.01 -0.03,-0.01 -0.03,-0.009 -0.032,-0.008 -0.033,-0.008 -0.033,-0.007 -0.033,-0.005 -0.035,-0.006 -0.035,-0.004 -0.036,-0.004 -0.036,-0.003 -0.036,-0.002 -0.037,-0.001 -0.036,-0.001 0,0 -0.038,0.001 -0.036,0.001 -0.036,0.002 -0.036,0.003 -0.036,0.004 -0.035,0.004 -0.035,0.006 -0.033,0.005 -0.034,0.007 -0.032,0.008 -0.032,0.008 -0.03,0.009 -0.03,0.01 -0.028,0.01 -0.027,0.011 -0.027,0.012 -0.024,0.011 -0.022,0.014 -0.022,0.013 -0.021,0.013 -0.018,0.014 -0.018,0.015 -0.015,0.015 -0.013,0.014 -0.012,0.016 -0.01,0.016 -0.008,0.016 -0.007,0.016 -0.005,0.017 -0.002,0.016 -10e-4,0.016 0,0 10e-4,0.016 0.002,0.016 0.005,0.016 0.007,0.016 0.008,0.017 0.01,0.016 0.012,0.015 0.013,0.015 0.015,0.015 0.018,0.015 0.018,0.013 0.021,0.014 0.022,0.013 0.022,0.013 0.024,0.012 0.027,0.011 0.027,0.012 0.028,0.01 0.03,0.01 0.03,0.009 0.032,0.008 0.032,0.007 0.034,0.007 0.033,0.006 0.035,0.005 0.035,0.005 0.036,0.004 0.036,0.003 0.036,0.002 0.036,0.001 0.038,0 0,0 0.036,0 0.037,-0.001 0.036,-0.002 0.036,-0.003 0.036,-0.004 0.035,-0.005 0.035,-0.005 0.033,-0.006 0.033,-0.007 0.033,-0.007 0.032,-0.008 0.03,-0.009 0.03,-0.01 0.028,-0.01 0.027,-0.012 0.027,-0.011 0.024,-0.012 0.023,-0.013 0.022,-0.013 0.019,-0.014 0.019,-0.013 0.018,-0.015 0.015,-0.015 0.013,-0.015 0.012,-0.015 0.01,-0.016 0.008,-0.017 0.007,-0.016 0.005,-0.016 0.002,-0.016 10e-4,-0.016"
id="path16"
style="fill:#ffffff;stroke:none" />
<path
d="m 4.6189791,1.5243194 -10e-4,-0.027 -0.002,-0.027 -0.005,-0.026 -0.006,-0.027 -0.009,-0.026 -0.01,-0.026 -0.012,-0.025 -0.014,-0.025 -0.014,-0.025 -0.017,-0.023 -0.018,-0.024 -0.021,-0.022 -0.021,-0.022 -0.023,-0.02 -0.024,-0.021 -0.027,-0.018 -0.027,-0.018 -0.027,-0.018 -0.029,-0.015 -0.031,-0.015 -0.032,-0.013 -0.031,-0.013 -0.033,-0.011 -0.034,-0.01 -0.035,-0.009 -0.035,-0.007 -0.036,-0.006 -0.035,-0.005 -0.036,-0.003 -0.036,-0.002 -0.036,-0.001 0,0 -0.037,0.001 -0.036,0.002 -0.036,0.003 -0.036,0.005 -0.035,0.006 -0.035,0.007 -0.035,0.009 -0.034,0.01 -0.033,0.011 -0.032,0.013 -0.031,0.013 -0.031,0.015 -0.029,0.015 -0.028,0.018 -0.027,0.018 -0.026,0.018 -0.024,0.021 -0.023,0.02 -0.022,0.022 -0.019,0.022 -0.019,0.024 -0.017,0.023 -0.015,0.025 -0.014,0.025 -0.011,0.025 -0.01,0.026 -0.008,0.026 -0.007,0.027 -0.005,0.026 -0.002,0.027 -10e-4,0.027 0,0 10e-4,0.027 0.002,0.027 0.005,0.026 0.007,0.026 0.008,0.026 0.01,0.026 0.011,0.026 0.014,0.025 0.015,0.024 0.017,0.024 0.019,0.023 0.019,0.022 0.022,0.022 0.023,0.021 0.024,0.02 0.026,0.019 0.027,0.018 0.028,0.017 0.029,0.016 0.031,0.015 0.031,0.013 0.032,0.013 0.033,0.011 0.034,0.01 0.035,0.008 0.035,0.008 0.035,0.006 0.036,0.005 0.036,0.003 0.036,0.002 0.037,10e-4 0,0 0.036,-10e-4 0.036,-0.002 0.036,-0.003 0.035,-0.005 0.036,-0.006 0.035,-0.008 0.035,-0.008 0.034,-0.01 0.033,-0.011 0.031,-0.013 0.032,-0.013 0.031,-0.015 0.029,-0.016 0.027,-0.017 0.027,-0.018 0.027,-0.019 0.024,-0.02 0.023,-0.021 0.021,-0.022 0.021,-0.022 0.018,-0.023 0.017,-0.024 0.014,-0.024 0.014,-0.025 0.012,-0.026 0.01,-0.026 0.009,-0.026 0.006,-0.026 0.005,-0.026 0.002,-0.027 10e-4,-0.027"
id="path18"
style="fill:#ffffff;stroke:none" />
<path
d="m 2.7919791,0.61131938 0.965,-0.091 -0.013,-0.021 -0.014,-0.019 -0.017,-0.02 -0.019,-0.02 -0.022,-0.019 -0.024,-0.018 -0.026,-0.018 -0.028,-0.017 -0.031,-0.017 -0.032,-0.016 -0.034,-0.015 -0.036,-0.014 -0.038,-0.014 -0.039,-0.013 -0.042,-0.012 -0.042,-0.011 -0.043,-0.011 -0.045,-0.009 -0.046,-0.009 -0.047,-0.007 -0.048,-0.007 -0.048,-0.005 -0.049,-0.004 -0.049,-0.004 -0.049,-0.002 -0.051,-0.001 -0.05,0 -0.05,0 -0.049,0.003 -0.05,0.002 -0.049,0.004 -0.049,0.006 -0.047,0.006 -0.048,0.007 -0.046,0.008 -0.045,0.009 -0.044,0.01 -0.043,0.011 -0.041,0.012 -0.04,0.013 -0.038,0.013 -0.036,0.014 -0.036,0.016 -0.032,0.015 -0.032,0.017 -0.029,0.017 -0.026,0.018 -0.024,0.018 -0.024,0.019 -0.02,0.018 -0.018,0.02 -0.015,0.02 -0.012,0.021 -0.011,0.02 0.971,0.077"
id="path22"
style="fill:#ffffff;stroke:none" />
<path
d="m 3.7569791,0.51931938 -0.013,-0.021 -0.014,-0.019 -0.017,-0.02 -0.02,-0.019 -0.022,-0.019 -0.024,-0.018 -0.026,-0.018 -0.029,-0.018 -0.03,-0.016 -0.032,-0.016 -0.035,-0.016 -0.035,-0.014 -0.038,-0.014 -0.04,-0.012 -0.04,-0.013 -0.042,-0.011 -0.044,-0.01 -0.045,-0.01 -0.046,-0.008 -0.046,-0.008 -0.048,-0.006 -0.048,-0.005 -0.049,-0.004 -0.05,-0.004 -0.05,-0.002 -0.049,-0.001 -0.051,0 -0.049,0 -0.049,0.003 -0.051,0.002 -0.048,0.004 -0.049,0.006 -0.047,0.006 -0.048,0.007 -0.046,0.008 -0.045,0.009 -0.043,0.01 -0.043,0.011 -0.042,0.012 -0.039,0.013 -0.038,0.013 -0.036,0.014 -0.036,0.015 -0.033,0.015 -0.031,0.017 -0.028,0.018 -0.028,0.017 -0.024,0.018 -0.022,0.019 -0.021,0.019 -0.018,0.019 -0.016,0.02 -0.012,0.021 -0.011,0.02"
id="path24"
style="fill:none;stroke:#6c8f93;stroke-width:0.06067566;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" />
<path
d="m 1.4819791,0.82631938 0.486,-0.317 -0.029,-0.013 -0.032,-0.012 -0.032,-0.012 -0.033,-0.01 -0.034,-0.01 -0.035,-0.008 -0.036,-0.008 -0.036,-0.006 -0.037,-0.006 -0.037,-0.005 -0.038,-0.003 -0.038,-0.003 -0.039,-0.001 -0.038,0 -0.038,0 -0.038,0.002 -0.038,0.003 -0.038,0.004 -0.037,0.005 -0.036,0.006 -0.037,0.007 -0.035,0.008 -0.034,0.009 -0.034,0.009 -0.033,0.011 -0.031,0.013 -0.031,0.012 -0.029,0.013 -0.028,0.015 -0.027,0.015 -0.026,0.015 -0.024,0.016 -0.022,0.018 -0.021,0.017 -0.018,0.018 -0.018,0.02 -0.016,0.018 -0.014,0.02 -0.012,0.02 -0.01,0.02 -0.008,0.02 -0.006,0.022 -0.005,0.02 -0.003,0.021 0,0.021 0.001,0.021 0.003,0.021 0.005,0.021 0.74600003,-0.067"
id="path26"
style="fill:#ffffff;stroke:none" />
<path
d="m 1.9659791,0.50831938 -0.03,-0.014 -0.031,-0.011 -0.033,-0.012 -0.033,-0.01 -0.035,-0.01 -0.034,-0.008 -0.036,-0.008 -0.036,-0.006 -0.037,-0.005 -0.037,-0.005 -0.038,-0.004 -0.038,-0.002 -0.039,-0.001 -0.038,0 -0.038,0 -0.038,0.003 -0.038,0.002 -0.038,0.004 -0.037,0.005 -0.036,0.007 -0.036,0.006 -0.035,0.009 -0.034,0.008 -0.034,0.011 -0.033,0.011 -0.032,0.011 -0.03,0.013 -0.029,0.013 -0.028,0.015 -0.027,0.015 -0.025,0.015 -0.024,0.016 -0.022,0.018 -0.02,0.017 -0.02,0.019 -0.017,0.018 -0.016,0.019 -0.013,0.02 -0.012,0.02 -0.01,0.02 -0.008,0.021 -0.006,0.02 -0.005,0.021 -0.003,0.02 0,0.022 0.002,0.021 0.002,0.02 0.006,0.021"
id="path28"
style="fill:none;stroke:#6c8f93;stroke-width:0.06067566;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" />
<path
d="m 1.3459791,1.5683194 -0.78100003,-0.012 0,0.019 0.001,0.019 0.003,0.019 0.006,0.018 0.008,0.019 0.009,0.018 0.012,0.018 0.014,0.018 0.015,0.017 0.017,0.017 0.019,0.017 0.02,0.016 0.023,0.015 0.023,0.015 0.026,0.015 0.027,0.014 0.027,0.012 0.03,0.013 0.031,0.012 0.032,0.01 0.034,0.011 0.033,0.009 0.035,0.008 0.036,0.008 0.037,0.007 0.038,0.006 0.037,0.005 0.039,0.004 0.039,0.003 0.039,0.003 0.04,10e-4 0.039,0 0.039,-10e-4 0.039,-0.002 0.039,-0.002 0.039,-0.003 0.039,-0.005 0.037,-0.006 0.037,-0.005 0.037,-0.008 0.035,-0.008 0.035,-0.009 0.033,-0.009 0.033,-0.01 0.033,-0.011 0.03,-0.013 -0.513,-0.282"
id="path30"
style="fill:#ffffff;stroke:none" />
<path
d="m 0.56497907,1.5563194 -0.001,0.019 0.002,0.019 0.003,0.018 0.006,0.019 0.008,0.018 0.01,0.019 0.011,0.018 0.014,0.018 0.015,0.017 0.017,0.017 0.018,0.016 0.02,0.016 0.023,0.016 0.024,0.015 0.024,0.014 0.026,0.014 0.029,0.013 0.029,0.013 0.032,0.011 0.032,0.011 0.032,0.01 0.034,0.009 0.035,0.009 0.037,0.008 0.036,0.006 0.037,0.007 0.038,0.005 0.038,0.004 0.039,0.003 0.039,0.002 0.039,0.002 0.04,0 0.039,0 0.039,-0.003 0.039,-0.002 0.038,-0.003 0.038,-0.005 0.038,-0.004 0.038,-0.007 0.036,-0.007 0.036,-0.008 0.034,-0.009 0.034,-0.009 0.034,-0.01 0.031,-0.011 0.03,-0.012"
id="path32"
style="fill:none;stroke:#6c8f93;stroke-width:0.06067566;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" />
<path
d="m 3.8359791,0.75931938 0.689,0.104 0.011,-0.016 0.01,-0.015 0.007,-0.016 0.006,-0.016 0.003,-0.016 0.002,-0.017 0,-0.016 -0.002,-0.017 -0.003,-0.016 -0.006,-0.016 -0.007,-0.016 -0.01,-0.016 -0.01,-0.016 -0.013,-0.015 -0.015,-0.015 -0.016,-0.015 -0.018,-0.014 -0.02,-0.014 -0.022,-0.014 -0.021,-0.012 -0.025,-0.013 -0.025,-0.012 -0.027,-0.011 -0.029,-0.011 -0.028,-0.01 -0.03,-0.009 -0.032,-0.009 -0.032,-0.008 -0.034,-0.007 -0.033,-0.006 -0.036,-0.006 -0.034,-0.005 -0.037,-0.004 -0.036,-0.003 -0.037,-0.003 -0.037,-0.001 -0.036,-0.001 -0.037,0 -0.037,0.001 -0.037,0.002 -0.036,0.002 -0.036,0.003 -0.036,0.004 -0.036,0.005 0.238,0.306"
id="path34"
style="fill:#ffffff;stroke:none" />
<path
d="m 4.4569791,0.92331938 0.067,-0.059 0.011,-0.016 0.009,-0.015 0.009,-0.016 0.005,-0.017 0.004,-0.016 0.002,-0.016 0.001,-0.016 -0.003,-0.017 -0.003,-0.016 -0.006,-0.017 -0.007,-0.015 -0.009,-0.016 -0.011,-0.016 -0.012,-0.015 -0.016,-0.015 -0.016,-0.015 -0.017,-0.014 -0.02,-0.014 -0.021,-0.014 -0.023,-0.013 -0.023,-0.012 -0.026,-0.012 -0.027,-0.011 -0.028,-0.011 -0.029,-0.011 -0.03,-0.009 -0.032,-0.008 -0.031,-0.008 -0.033,-0.008 -0.034,-0.006 -0.035,-0.006 -0.035,-0.005 -0.036,-0.004 -0.036,-0.003 -0.037,-0.002 -0.037,-0.002 -0.037,-0.001 -0.037,0 -0.037,0.001 -0.037,0.002 -0.036,0.002 -0.036,0.003 -0.036,0.004 -0.035,0.005"
id="path36"
style="fill:none;stroke:#6c8f93;stroke-width:0.06067566;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" />
<path
d="m 3.9329791,1.1853194 0.775,0.132 0.016,-0.017 0.013,-0.017 0.012,-0.018 0.008,-0.018 0.008,-0.018 0.004,-0.019 10e-4,-0.018 0,-0.018 -0.003,-0.019 -0.004,-0.019 -0.008,-0.018 -0.009,-0.018 -0.012,-0.017 -0.014,-0.018 -0.016,-0.017 -0.018,-0.017 -0.02,-0.016 -0.023,-0.016 -0.024,-0.015 -0.686,0.20100002"
id="path38"
style="fill:#ffffff;stroke:none" />
<path
d="m 4.6121701,1.38473 0.098479,-0.059128 0.014482,-0.018039 0.013517,-0.018039 0.01062,-0.018039 0.00869,-0.018039 0.00772,-0.018039 0.00386,-0.018039 0.00193,-0.019041 0,-0.018039 -0.00386,-0.020044 -0.00386,-0.018039 -0.00676,-0.018039 -0.00965,-0.018039 -0.011586,-0.018039 -0.013517,-0.018039 -0.015448,-0.017037 -0.018344,-0.017037 -0.021241,-0.016035 -0.020275,-0.016035 -0.024137,-0.0160349 -0.1544773,-0.0591286"
id="path40"
style="fill:none;stroke:#6c8f93;stroke-width:0.0596842;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" />
<path
d="m 3.9009791,1.5363194 -0.245,0.503 0.036,0.008 0.036,0.007 0.037,0.006 0.038,0.004 0.038,0.003 0.037,0.002 0.037,0 0.038,-0.002 0.037,-0.002 0.038,-0.004 0.036,-0.005 0.038,-0.007 0.035,-0.008 0.036,-0.009 0.034,-0.011 0.034,-0.012 0.033,-0.013 0.032,-0.014 0.031,-0.016 0.03,-0.016 0.028,-0.018 0.027,-0.019 0.027,-0.02 0.025,-0.02 0.022,-0.022 0.022,-0.021 0.02,-0.024 0.018,-0.024 0.016,-0.024 0.015,-0.025 0.014,-0.026 0.01,-0.025 0.01,-0.027 0.008,-0.027 0.006,-0.026 0.003,-0.028 0.002,-0.027 0,-0.027 -0.002,-0.027 -0.004,-0.027 -0.006,-0.026 -0.008,-0.028 -0.009,-0.025 -0.71,0.149"
id="path42"
style="fill:#ffffff;stroke:none" />
<path
d="m 3.6589791,2.0403194 0.036,0.008 0.036,0.007 0.037,0.006 0.037,0.004 0.037,0.002 0.038,0.002 0.038,10e-4 0.037,-0.003 0.038,-0.002 0.037,-0.004 0.037,-0.005 0.036,-0.007 0.036,-0.009 0.036,-0.009 0.034,-0.011 0.033,-0.011 0.034,-0.014 0.032,-0.014 0.031,-0.015 0.029,-0.018 0.029,-0.017 0.027,-0.019 0.026,-0.019 0.025,-0.021 0.023,-0.022 0.021,-0.022 0.019,-0.024 0.019,-0.023 0.016,-0.024 0.015,-0.025 0.014,-0.026 0.011,-0.026 0.008,-0.026 0.008,-0.027 0.006,-0.027 0.003,-0.027 0.002,-0.027 0,-0.027 -0.002,-0.027 -0.005,-0.027 -0.005,-0.028 -0.008,-0.026 -0.01,-0.026"
id="path44"
style="fill:none;stroke:#6c8f93;stroke-width:0.06067566;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" />
<path
d="m 0.80297907,1.2493194 -0.037,-0.34200002 -0.028,0.002 -0.026,0.002 -0.027,0.004 -0.026,0.004 -0.026,0.005 -0.026,0.006 -0.024,0.007 -0.025,0.008 -0.024,0.008 -0.023,0.009 -0.022,0.01 -0.021,0.01 -0.021,0.012 -0.02,0.012 -0.019,0.013 -0.017,0.013 -0.017,0.014 -0.015,0.014 -0.015,0.015 -0.013,0.015 -0.011,0.016 -0.011,0.016 -0.01,0.016 -0.008,0.017 -0.006,0.017 -0.006,0.016 -0.004,0.018 -0.003,0.018 -0.001,0.017 0,0.017 0.001,0.018 0.003,0.017 0.004,0.017 0.006,0.017 0.007,0.017 0.008,0.017 0.009,0.016 0.011,0.016 0.012,0.016 0.013,0.015 0.016,0.015 0.015,0.014 0.017,0.014 0.018,0.013 0.018,0.013 0.02,0.011 0.021,0.011 0.021,0.012 0.022,0.009 0.024,0.009 0.023,0.009 0.243,-0.305"
id="path46"
style="fill:#ffffff;stroke:none" />
<path
d="m 0.76697907,0.90731938 -0.027,0.002 -0.027,0.002 -0.026,0.003 -0.026,0.005 -0.025,0.004 -0.026,0.006 -0.025,0.007 -0.023,0.007 -0.023,0.009 -0.023,0.009 -0.023,0.009 -0.021,0.01 -0.02,0.011 -0.02,0.012 -0.018,0.012 -0.018,0.013 -0.017,0.013 -0.016,0.015 -0.015,0.014 -0.012,0.014 -0.012,0.016 -0.012,0.015 -0.009,0.016 -0.009,0.016 -0.007,0.017 -0.006,0.017 -0.005,0.017 -0.003,0.017 -0.002,0.017 0,0.017 0,0.017 0.003,0.017 0.003,0.018 0.004,0.016 0.007,0.017 0.006,0.016 0.009,0.017 0.009,0.016 0.012,0.015 0.012,0.016 0.014,0.014 0.014,0.014 0.016,0.015 0.016,0.013 0.018,0.013 0.019,0.012 0.019,0.011 0.021,0.012 0.021,0.01 0.022,0.009 0.023,0.009 0.024,0.009"
id="path48"
style="fill:none;stroke:#6c8f93;stroke-width:0.06067566;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" />
<path
d="m 2.7759791,1.7874896 -1.109,0.040159 0.008,0.020594 0.009,0.019565 0.013,0.020594 0.015,0.020595 0.018,0.019565 0.021,0.018535 0.023,0.018535 0.025,0.018535 0.029,0.018535 0.031,0.017505 0.032,0.015446 0.036,0.016475 0.037,0.015446 0.039,0.015446 0.042,0.013386 0.043,0.013386 0.045,0.011327 0.047,0.012357 0.048,0.010297 0.049,0.00927 0.051,0.00927 0.052,0.00824 0.053,0.00618 0.053,0.00618 0.055,0.00515 0.055,0.00412 0.056,0.00206 0.055,0.00206 0.057,0.00103 0.055,0 0.057,-0.00103 0.055,-0.00309 0.055,-0.00309 0.055,-0.00515 0.054,-0.00515 0.053,-0.00618 0.052,-0.00721 0.052,-0.00824 0.05,-0.010297 0.049,-0.00927 0.047,-0.011327 0.046,-0.011327 0.044,-0.013386 0.042,-0.014416 0.04,-0.013386 0.039,-0.015446 0.036,-0.015446 0.034,-0.016476 0.031,-0.016476 0.03,-0.017505 0.027,-0.019565 0.025,-0.017505 0.022,-0.019565 0.018,-0.018535 -1.056,-0.1307748"
id="path50"
style="fill:#ffffff;stroke:none" />
<path
d="m 1.6669791,1.8393194 0.008,0.019 0.01,0.02 0.012,0.02 0.016,0.019 0.017,0.019 0.021,0.018 0.023,0.018 0.025,0.019 0.03,0.017 0.03,0.017 0.032,0.015 0.036,0.016 0.037,0.015 0.039,0.015 0.042,0.013 0.044,0.013 0.043,0.011 0.048,0.012 0.047,0.01 0.049,0.009 0.051,0.009 0.052,0.008 0.053,0.006 0.053,0.005 0.055,0.006 0.054,0.003 0.056,0.003 0.056,0.002 0.056,10e-4 0.056,0 0.056,-10e-4 0.055,-0.003 0.055,-0.003 0.055,-0.005 0.054,-0.005 0.054,-0.006 0.051,-0.007 0.052,-0.008 0.05,-0.009 0.048,-0.01 0.048,-0.011 0.046,-0.011 0.043,-0.013 0.043,-0.012 0.04,-0.015 0.039,-0.014 0.036,-0.016 0.034,-0.015 0.032,-0.017 0.029,-0.016 0.027,-0.018 0.024,-0.018 0.022,-0.019 0.02,-0.018"
id="path52"
style="fill:none;stroke:#6c8f93;stroke-width:0.06067566;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" />
<rect
width="2.7800133"
height="0.61515152"
rx="0"
ry="0.28983101"
x="1.2692652"
y="0.80605406"
transform="matrix(0.999604,0.02812984,-0.02812984,0.999604,0,0)"
id="rect1892"
style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none" />
<path
d="m 2.5029776,1.9073766 0.023,-0.00895 0.020913,-0.00976 0.022119,-0.011947 0.021191,-0.0142 0.021284,-0.015682 0.02031,-0.017195 0.020402,-0.018676 0.020541,-0.020897 0.018455,-0.021702 0.018546,-0.023184 0.018685,-0.025405 0.016552,-0.02547 0.016691,-0.027691 0.014651,-0.029236 0.015717,-0.029204 0.013676,-0.03075 0.012702,-0.032263 0.012748,-0.033004 0.010665,-0.033809 0.010665,-0.033809 0.00863,-0.035354 0.00756,-0.035386 0.00653,-0.036158 0.00658,-0.0369 0.00445,-0.036963 0.00333,-0.036256 0.00236,-0.037768 0.00226,-0.036288 -9.319e-4,-0.036384 2.273e-4,-0.037833 -0.00205,-0.035676 -0.00413,-0.03648 L 2.883076,0.9720976 2.877836,0.9363258 2.871426,0.902003 2.863906,0.8683889 2.855226,0.8362236 2.845476,0.8040261 2.834621,0.7725371 2.82256,0.7432375 2.810453,0.7146786 2.797187,0.6875686 2.782854,0.6604265 2.768383,0.635506 2.751686,0.6120024 2.733784,0.590685 2.716948,0.569403 2.69886,0.5510511 2.679613,0.5341483 2.660319,0.517986 2.640887,0.5040454 2.620296,0.4915538 2.598453,0.4819918 2.577631,0.4732028"
id="path24-7"
style="fill:none;stroke:#6c8f93;stroke-width:0.107496;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none" />
<path
id="path2057-3"
d="M 1.5298421,1.2403194 H 2.3548856 V 1.303797 L 2.577141,1.1602384 2.3548856,1.0313279 v 0.064457 H 1.5298421 v 0.1445348"
style="fill:#6c8f93;fill-opacity:1;stroke:none;stroke-width:5.35746e-05;stroke-opacity:0.994961" />
<path
id="path2057-3-9"
d="M 3.1225773,1.2403194 H 3.9476208 V 1.303797 L 4.1698762,1.1602384 3.9476208,1.0313279 v 0.064457 H 3.1225773 v 0.1445348"
style="fill:#6c8f93;fill-opacity:1;stroke:none;stroke-width:5.35746e-05;stroke-opacity:0.994961" />
<path
id="path2057-3-5"
d="m 1.5278616,0.86827348 h 0.8319275 v 0.063478 L 2.5838989,0.78819244 2.3597891,0.65928186 v 0.064457 H 1.5278616 v 0.14453482"
style="fill:#6c8f93;fill-opacity:1;stroke:none;stroke-width:5.37977e-05;stroke-opacity:0.994961" />
<path
id="path2057-3-6"
d="m 1.527029,1.6225499 h 0.8217599 v 0.063478 L 2.5701597,1.5424689 2.3487889,1.4135585 v 0.064457 H 1.5270291 v 0.1445347"
style="fill:#6c8f93;fill-opacity:1;stroke:none;stroke-width:5.34679e-05;stroke-opacity:0.994961" />
</svg>

After

Width:  |  Height:  |  Size: 30 KiB

View File

@@ -19,9 +19,9 @@ import sys
from setuptools import setup, find_packages
from setuptools.command.test import test as TestCommand
# we only support Python 3 version >= 3.7
if len(sys.argv) >= 2 and sys.argv[1] == "install" and sys.version_info < (3, 7):
raise SystemExit("Python 3.7 or higher is required")
# we only support Python 3 version >= 3.8
if len(sys.argv) >= 2 and sys.argv[1] == "install" and sys.version_info < (3, 8):
raise SystemExit("Python 3.8 or higher is required")
class PyTest(TestCommand):
@@ -79,7 +79,7 @@ setup(
include_package_data=True,
package_data={"gns3": ["configs/*.txt", "schemas/*.json"]},
platforms="any",
python_requires='>=3.7',
python_requires='>=3.8',
setup_requires=["setuptools>=17.1"],
classifiers=[
"Development Status :: 5 - Production/Stable",
@@ -92,8 +92,7 @@ setup(
"Operating System :: MacOS :: MacOS X",
"Operating System :: Microsoft :: Windows",
"Programming Language :: Python",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3 :: Only",
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",

View File

@@ -65,8 +65,8 @@
{
"filename": "empty100G.qcow2",
"version": "100G",
"checksum": "d08fdec95fffbda3f04e9a00db49295df73ae4a507396e442ba9e4ad5c14ce5a",
"checksum_type": "sha256",
"checksum": "1e6409a4523ada212dea2ebc50e50a65",
"checksum_type": "md5",
"filesize": 198656,
"download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/",
"direct_download_url": "https://sourceforge.net/projects/gns-3/files/Empty%20Qemu%20disk/empty100G.qcow2/download"

View File

@@ -1,4 +1,4 @@
-rrequirements.txt
PyQt5==5.15.10 # pyup: ignore
PyQt5==5.15.11 # pyup: ignore
pywin32==306 # pyup: ignore