воскресенье, 9 января 2022 г.

showme_azknums.py

Пример запуска:

showme_azknums.py 2.54.0.500_FB_21003_UFALEI_2022-01-04

Пример результата:

C:\apps\azk\f\2.54.0.500_FB_21003_UFALEI_2022-01-04

АЦК-Финансы: 2.54.0.500

Отчеты АЦК: 2.54.0.80

СОФИТ: 2.54.0.447

Модуль ЕИС: 12.0.0.1

Исходный код скрипта:

# 09.01.2022

# Утилита сообщает версии системной сборки АЦК-Финансы и ее подсистем - отчеты, СОФИТ, ЕИС - в указанной пользователем папке.

# Принцип утилиты строится на том, что в каждой сборке АЦК-Финансы есть определенные jar-файлы (символизирующие системную сборку и ее подсистемы), содержащие определенные properties-файлы, в которых есть переменные "version.major", "version.minor", "version.release", "version.build" с информацией о полном номере версии (патча).

import sys, os, zipfile, webbrowser

# Список проверяемых jar-файлов и properties-файлов:

check_list = [

# АЦК-Финансы:

 {"jar": "server/AzkServer.jar", "properties": "com/bssys/version.properties", "encoding": "windows-1251"}

,{"jar": "server/AzkRepKernel.jar", "properties": "com/bssys/azkserver/reports/repversion.properties", "encoding": "windows-1251"}

,{"jar": "server/AzkSofit.jar", "properties": "com/bssys/azkserver/sofit/sofitversion.properties", "encoding": "windows-1251"}

,{"jar": "server/eis.jar", "properties": "azk/eis/version.properties", "encoding": "windows-1251"}

# АЦК-Госзаказ:

,{"jar": "server/ordersrv.jar", "properties": "com/bssys/version.properties", "encoding": "unicode_escape"}

]

# Папка сборки АЦК, которую пользователь указал в командной строке при запуске утилиты:

azkdir = ''

if len(sys.argv) == 2: azkdir = sys.argv[1]

tmp_env_dir = os.environ['TEMP']

tmpdir = os.path.join(tmp_env_dir, 'showme_nums_temp')

outputfile = os.path.join(tmp_env_dir, 'showme_nums_output.txt')

outputfile_write = open(outputfile,'w')

ss_out = sys.stdout

sys.stdout = outputfile_write

if len(azkdir) > 0 and os.path.isdir(azkdir):

    print(os.path.abspath(azkdir))

    for jarfile in check_list:

        product_name = ''

        version_major = ''

        version_minor = ''

        version_release = ''

        version_build = ''

        # jarpath - полный путь к jar-файлу из check_list:

        jarpath = os.path.join(azkdir, jarfile["jar"])

        if os.path.isfile(jarpath) and zipfile.is_zipfile(jarpath):

            # Извлекаем properties-файлы из jar-файла:

            zipfile.ZipFile(jarpath).extract(jarfile["properties"], path=tmpdir)

            # print(tmpdir + check_list[jarfile])

            tmpjarfile = os.path.join(tmpdir, jarfile["properties"])

            tmpjarfile_read = open(tmpjarfile, mode="r", encoding=jarfile["encoding"])

            for tmpjarfile_line in tmpjarfile_read:

                # Убираем лишний символ переноса в конце строки jar-файла:

                tmpjarfile_line = tmpjarfile_line.replace('\n','')

                # Делим строку по символу "=":

                tmpjarfile_split = tmpjarfile_line.split('=')

                if tmpjarfile_split[0] == 'product.name':

                    product_name = tmpjarfile_split[1]

                if tmpjarfile_split[0] == 'version.major':

                    version_major = tmpjarfile_split[1]

                if tmpjarfile_split[0] == 'version.minor':

                    version_minor = tmpjarfile_split[1]

                if tmpjarfile_split[0] == 'version.release':

                    version_release = tmpjarfile_split[1]

                if tmpjarfile_split[0] == 'version.build':

                    version_build = tmpjarfile_split[1]

        if len(product_name) > 0:

            print(f'{product_name}: {version_major}.{version_minor}.{version_release}.{version_build}')

elif len(azkdir) > 0 and not os.path.isdir(azkdir):

    print(f"Указана несуществующая папка сборки АЦК: {azkdir}")

else:

    print(f"Утилиту \"{os.path.basename(__file__)}\" нужно запускать с указанием папки сборки АЦК, в формате:\n{os.path.basename(__file__)} <папка сборки АЦК>\n\nПример:\n{os.path.basename(__file__)} azkfin2.54.0.500_ORA_21001_AMUR")

outputfile_write.close()

sys.stdout = ss_out

#input("\nНажмите клавишу \"Enter\" для закрытия окна...")

#Открыть файл с результатом в ассоциированном приложении:

webbrowser.open(outputfile)

Комментариев нет:

Архив