Skip to content

Commit

Permalink
Merge pull request #56 from adator85/V5.X.X
Browse files Browse the repository at this point in the history
V5.x.x
  • Loading branch information
adator85 authored Oct 3, 2024
2 parents cea69c1 + f0c0a2d commit 979ba40
Show file tree
Hide file tree
Showing 4 changed files with 103 additions and 9 deletions.
9 changes: 8 additions & 1 deletion core/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,6 @@ def __set_current_defender_version(self) -> None:
with open(version_filename, 'r') as version_data:
current_version:dict[str, str] = json.load(version_data)

# self.DEFENDER_VERSION = current_version["version"]
self.Config.current_version = current_version['version']

return None
Expand Down Expand Up @@ -81,6 +80,14 @@ def __get_latest_defender_version(self) -> None:
self.logs.warning(f'Github not available to fetch latest version')

def check_for_new_version(self, online:bool) -> bool:
"""Check if there is a new version available
Args:
online (bool): True if you want to get the version from github (main branch)
Returns:
bool: True if there is a new version available
"""
try:
self.logs.debug(f'Checking for a new service version')

Expand Down
85 changes: 82 additions & 3 deletions core/installation.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import os
from sys import exit
import json
from sys import exit, prefix
from dataclasses import dataclass
from subprocess import check_call, run, CalledProcessError, PIPE
from subprocess import check_call, run, CalledProcessError, PIPE, check_output
from platform import python_version, python_version_tuple

class Install:
Expand All @@ -24,13 +25,22 @@ class CoreConfig:
venv_pip_executable: str
venv_python_executable: str

@dataclass
class Package:
name: str = None
version: str = None

DB_PACKAGES: list[Package] = []

def __init__(self) -> None:

self.set_configuration()

if self.skip_install:
return None

self.check_packages_version()

# Sinon tester les dependances python et les installer avec pip
if self.do_install():

Expand Down Expand Up @@ -75,7 +85,7 @@ def set_configuration(self):

if not os.path.exists(os.path.join(self.config.defender_install_folder, 'core', 'configuration.json')):
# If configuration file do not exist
exit("/!\\ Configuration file (configuration.json) doesn't exist /!\\")
exit("/!\\ Configuration file (core/configuration.json) doesn't exist /!\\")

# Exclude Windows OS from the installation
if os.name == 'nt':
Expand Down Expand Up @@ -123,6 +133,75 @@ def run_subprocess(self, command:list) -> None:
print(f"Try to install dependencies ...")
exit(5)

def get_packages_version_from_json(self) -> None:
"""This will create Package model with package names and required version
"""
try:

version_filename = f'.{os.sep}version.json'
with open(version_filename, 'r') as version_data:
package_info:dict[str, str] = json.load(version_data)

for name, version in package_info.items():
if name == 'version':
continue

self.DB_PACKAGES.append(
self.Package(name=name, version=version)
)

return None
except FileNotFoundError as fe:
print(f"File not found: {fe}")
except Exception as err:
print(f"General Error: {err}")

def check_packages_version(self) -> bool:

try:
newVersion = False
self.get_packages_version_from_json()

if not self.config.venv_folder in prefix:
print(f"You are probably running a new installation or you are not using your virtual env {self.config.venv_folder}")
return newVersion

print(f"> Checking for dependencies versions ==> WAIT")
for package in self.DB_PACKAGES:
newVersion = False
required_version = package.version
installed_version = None

output = check_output([self.config.venv_pip_executable, 'show', package.name])
for line in output.decode().splitlines():
if line.startswith('Version:'):
installed_version = line.split(':')[1].strip()
break

required_major, required_minor, required_patch = required_version.split('.')
installed_major, installed_minor, installed_patch = installed_version.split('.')

if required_major > installed_major:
print(f'> New version of {package.name} is available {installed_version} ==> {required_version}')
newVersion = True
elif required_major == installed_major and required_minor > installed_minor:
print(f'> New version of {package.name} is available {installed_version} ==> {required_version}')
newVersion = True
elif required_major == installed_major and required_minor == installed_minor and required_patch > installed_patch:
print(f'> New version of {package.name} is available {installed_version} ==> {required_version}')
newVersion = True

if newVersion:
self.run_subprocess([self.config.venv_pip_executable, 'install', '--upgrade', package.name])

print(f"> Dependencies versions ==> OK")
return newVersion

except CalledProcessError:
print(f"/!\\ Package {package.name} not installed /!\\")
except Exception as err:
print(f"General Error: {err}")

def check_python_version(self) -> bool:
"""Test si la version de python est autorisée ou non
Expand Down
10 changes: 6 additions & 4 deletions core/irc.py
Original file line number Diff line number Diff line change
Expand Up @@ -95,13 +95,15 @@ def __create_socket(self) -> None:
return None

except ssl.SSLEOFError as soe:
self.Base.logs.critical(f"SSLEOFError __create_socket: {soe} - {soc.fileno()}")
self.Base.logs.critical(f"SSLEOFError: {soe} - {soc.fileno()}")
except ssl.SSLError as se:
self.Base.logs.critical(f"SSLError __create_socket: {se} - {soc.fileno()}")
self.Base.logs.critical(f"SSLError: {se} - {soc.fileno()}")
except OSError as oe:
self.Base.logs.critical(f"OSError __create_socket: {oe} - {soc.fileno()}")
self.Base.logs.critical(f"OSError: {oe} - {soc.fileno()}")
if 'connection refused' in str(oe).lower():
sys.exit(oe)
except AttributeError as ae:
self.Base.logs.critical(f"AttributeError __create_socket: {ae} - {soc.fileno()}")
self.Base.logs.critical(f"AttributeError: {ae} - {soc.fileno()}")

def __ssl_context(self) -> ssl.SSLContext:
ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
Expand Down
8 changes: 7 additions & 1 deletion version.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
{
"version": "5.3.6"
"version": "5.3.7",

"requests": "2.32.3",
"psutil": "6.0.0",
"unrealircd_rpc_py": "1.0.4",
"sqlalchemy": "2.0.35",
"faker": "30.1.0"
}

0 comments on commit 979ba40

Please sign in to comment.