Commit a22c466d91e61d9104eae5088b9b557e7f00638b
1 parent
80af188087
Exists in
master
add update server, fix upd bags
Showing 30 changed files with 162 additions and 36 deletions Side-by-side Diff
- __pycache__/app.cpython-310.pyc
- __pycache__/routes.cpython-310.pyc
- app.py
- components/k2test/README.md
- components/k2test/__pycache__/__init__.cpython-310.pyc
- components/k2test/history.txt
- components/k2test/k2test/__pycache__/__init__.cpython-310.pyc
- components/k2test/k2test/__pycache__/views.cpython-310.pyc
- components/k2test/k2test/languages/en/LC_MESSAGES/messages.mo
- components/k2test/k2test/languages/en/LC_MESSAGES/messages.po
- components/k2test/k2test/languages/uk/LC_MESSAGES/messages.mo
- components/k2test/k2test/languages/uk/LC_MESSAGES/messages.po
- components/k2test/k2test/templates/new2.html
- components/k2test/k2test/views.py
- components/k2test/reguirments-components.txt
- components/k2test/requirements.txt
- components/k2test/setup.py
- db/database.db
- k2/__pycache__/k2admmenu.cpython-310.pyc
- k2/__pycache__/k2cfg.cpython-310.pyc
- k2/__pycache__/k2obj.cpython-310.pyc
- k2/__pycache__/k2rout.cpython-310.pyc
- k2/k2admmenu.py
- k2/k2cfg.py
- k2/k2obj.py
- k2/k2rout.py
- languages/babel_translation_directories.yml
- routes.py
- static/css/style.css
- templates/dashboard-add.html
__pycache__/app.cpython-310.pyc
No preview for this file type
__pycache__/routes.cpython-310.pyc
No preview for this file type
app.py
components/k2test/README.md
components/k2test/__pycache__/__init__.cpython-310.pyc
No preview for this file type
components/k2test/history.txt
components/k2test/k2test/__pycache__/__init__.cpython-310.pyc
No preview for this file type
components/k2test/k2test/__pycache__/views.cpython-310.pyc
No preview for this file type
components/k2test/k2test/languages/en/LC_MESSAGES/messages.mo
No preview for this file type
components/k2test/k2test/languages/en/LC_MESSAGES/messages.po
components/k2test/k2test/languages/uk/LC_MESSAGES/messages.mo
No preview for this file type
components/k2test/k2test/languages/uk/LC_MESSAGES/messages.po
components/k2test/k2test/templates/new2.html
components/k2test/k2test/views.py
| 1 | +from flask import render_template, redirect, request, jsonify | |
| 2 | +from flask_babel import gettext | |
| 3 | +from flask_login import login_user, current_user, logout_user, login_required | |
| 4 | +from flask import current_app as k2 | |
| 5 | +from flask import Blueprint, json | |
| 6 | +from flask_sqlalchemy import SQLAlchemy | |
| 7 | + | |
| 8 | + | |
| 9 | +#bliueprint | |
| 10 | +k2test = Blueprint('k2test', __name__, template_folder='templates', static_folder='static') | |
| 11 | + | |
| 12 | +#component routes | |
| 13 | +@k2test.route('/new') | |
| 14 | +def new_component(): | |
| 15 | + db = k2.extensions['sqlalchemy'].db | |
| 16 | + connection = db.engine.connect() | |
| 17 | + query = db.text("SELECT email, login FROM k2users") | |
| 18 | + result = connection.execute(query).fetchall() | |
| 19 | + rows = [dict(email=row.email, login=row.login) for row in result] | |
| 20 | + # Перетворення результату на JSON | |
| 21 | + json_result = json.dumps(rows) | |
| 22 | + return json_result | |
| 23 | + | |
| 24 | +@k2test.route('/new2') | |
| 25 | +def new_component2(): | |
| 26 | + return render_template('new2.html') | |
| 27 | + | |
| 28 | +@k2test.route('/new3') | |
| 29 | +def new_component3(): | |
| 30 | + return jsonify({'data': 'page new3'}) | |
| 31 | + | |
| 32 | +@k2test.route('/new4') | |
| 33 | +def new_component4(): | |
| 34 | + return jsonify({'data': 'page new4'}) | |
| 35 | + | |
| 36 | +# menu items for admin | |
| 37 | +@k2test.route('/menu-admin-items') | |
| 38 | +def menu_items(): | |
| 39 | + data = [ | |
| 40 | + { | |
| 41 | + 'title': f"{gettext('title_menu_items')}", | |
| 42 | + 'icon': {'icon': 'mdi-chart-timeline-variant'}, | |
| 43 | + 'children': [ | |
| 44 | + {'title': 'Тест 3', 'to': 'k2test-new3'}, | |
| 45 | + {'title': 'Тест 3', 'to': 'k2test-new4'}, | |
| 46 | + ], | |
| 47 | + } | |
| 48 | + | |
| 49 | + ] | |
| 50 | + return data |
components/k2test/reguirments-components.txt
| 1 | +grid==1.0.1 |
components/k2test/requirements.txt
| 1 | +Flask-Login==0.6.2 |
components/k2test/setup.py
| 1 | +from setuptools import setup, find_packages | |
| 2 | + | |
| 3 | +setup( | |
| 4 | + name='k2test', | |
| 5 | + version='1.0.0.8', | |
| 6 | + description='Description of my project version 1.0.0.8', | |
| 7 | + author='k2 cloud', | |
| 8 | + author_email='rs@corp2.net', | |
| 9 | + keywords="k2test, k2", | |
| 10 | + python_requires=">=3.7, <=3.11.2", | |
| 11 | + packages=['k2test'], | |
| 12 | + package_data={ # Optional | |
| 13 | + }, | |
| 14 | + install_requires=[""], | |
| 15 | +) |
db/database.db
No preview for this file type
k2/__pycache__/k2admmenu.cpython-310.pyc
No preview for this file type
k2/__pycache__/k2cfg.cpython-310.pyc
No preview for this file type
k2/__pycache__/k2obj.cpython-310.pyc
No preview for this file type
k2/__pycache__/k2rout.cpython-310.pyc
No preview for this file type
k2/k2admmenu.py
| ... | ... | @@ -42,8 +42,12 @@ |
| 42 | 42 | WHERE prava.roleid = '{roleid}' |
| 43 | 43 | """ |
| 44 | 44 | result = db.session.execute(db.text(menu_query)).fetchall() |
| 45 | - menu_items = [item[0].decode('utf-8') for item in result] | |
| 46 | - return menu_items | |
| 45 | + if k2.platform == 'Linux': | |
| 46 | + menu_items = [item[0] for item in result] | |
| 47 | + return menu_items | |
| 48 | + elif k2.platform == 'Windows': | |
| 49 | + menu_items = [item[0].decode('utf-8')for item in result] | |
| 50 | + return menu_items | |
| 47 | 51 | |
| 48 | 52 | class K2admin_Menus_Prava(db.Model): |
| 49 | 53 | __tablename__ = 'k2admin_menus_prava' |
k2/k2cfg.py
| ... | ... | @@ -9,13 +9,13 @@ |
| 9 | 9 | import sys |
| 10 | 10 | from flask import session, request |
| 11 | 11 | from flask_login import LoginManager |
| 12 | +import platform | |
| 12 | 13 | |
| 13 | - | |
| 14 | 14 | class k2(k2obj): |
| 15 | 15 | version = '2.5.1.27' |
| 16 | 16 | db = SQLAlchemy() |
| 17 | 17 | domain = 'http://127.0.0.1:5000/' |
| 18 | - update_domain = 'http://127.0.0.1:8000/' #'http://185.174.172.137/' | |
| 18 | + update_domain = 'http://192.168.20.229/' #'http://185.174.172.137/' | |
| 19 | 19 | venv_bin_path = os.path.join(os.path.dirname(sys.prefix), 'venv/Scripts') #for windows |
| 20 | 20 | #venv_bin_path = os.path.join(os.path.dirname(sys.prefix), 'venv/bin') #for linux |
| 21 | 21 | json_sort_keys = False |
| ... | ... | @@ -87,4 +87,9 @@ |
| 87 | 87 | def init_lm(self, app): |
| 88 | 88 | # Initialize LoginManager |
| 89 | 89 | self.login_manager.init_app(app) |
| 90 | + @classmethod | |
| 91 | + def get_platform(cls): | |
| 92 | + operating_system = platform.system() | |
| 93 | + cls.platform = operating_system | |
| 94 | + return cls.platform |
k2/k2obj.py
k2/k2rout.py
| ... | ... | @@ -17,6 +17,7 @@ |
| 17 | 17 | from sqlalchemy import text |
| 18 | 18 | from flask_jwt_extended import get_jwt_identity, jwt_required |
| 19 | 19 | from flask_login import login_user, current_user, logout_user, login_required |
| 20 | +import platform | |
| 20 | 21 | |
| 21 | 22 | |
| 22 | 23 | # initialize db |
| ... | ... | @@ -83,7 +84,7 @@ |
| 83 | 84 | components = Component.query.all() |
| 84 | 85 | components_names = [component.name for component in components] |
| 85 | 86 | if 'k2site' in components_names: |
| 86 | - return redirect(url_for('k2site.new_component2')) #змінити на ендпоінт головної k2site | |
| 87 | + return redirect(url_for('components.component_add_dasb')) #змінити на ендпоінт головної k2site | |
| 87 | 88 | else: |
| 88 | 89 | return redirect('/dashboard') |
| 89 | 90 | |
| ... | ... | @@ -115,7 +116,7 @@ |
| 115 | 116 | components_names = [] |
| 116 | 117 | components_names = [component.name for component in components] |
| 117 | 118 | if 'k2site' in components_names: |
| 118 | - return redirect(url_for('components.component_list_dasb')) # змінити на ендпоінт головної k2site | |
| 119 | + return redirect(url_for('components.home')) | |
| 119 | 120 | else: |
| 120 | 121 | # Компоненти доступні для встановлення |
| 121 | 122 | # GET-запит до API |
| ... | ... | @@ -277,7 +278,7 @@ |
| 277 | 278 | if component_name == 'k2grid_base': |
| 278 | 279 | code = f'''from components.{selected_component['name']}.{selected_component['name']}.views import {selected_component['name']}\napp.register_blueprint({selected_component['name']}, url_prefix='/')''' |
| 279 | 280 | elif component_name == 'k2site': |
| 280 | - code = f'''from components.{selected_component['name']}.{selected_component['name']}.views import {selected_component['name']}\napp.register_blueprint({selected_component['name']}, url_prefix='/{selected_component['name']}')\nlogin_manager = k2().init_lm(app)''' | |
| 281 | + code = f'''login_manager = k2().init_lm(app)\nfrom components.{selected_component['name']}.{selected_component['name']}.views import {selected_component['name']}\napp.register_blueprint({selected_component['name']}, url_prefix='/{selected_component['name']}')''' | |
| 281 | 282 | else: |
| 282 | 283 | code = f'''from components.{selected_component['name']}.{selected_component['name']}.views import {selected_component['name']}\napp.register_blueprint({selected_component['name']}, url_prefix='/{selected_component['name']}')''' |
| 283 | 284 | |
| 284 | 285 | |
| 285 | 286 | |
| 286 | 287 | |
| ... | ... | @@ -322,29 +323,29 @@ |
| 322 | 323 | |
| 323 | 324 | @components_bp.route('/install-requirments/<string:selected_component_name>', methods=['GET']) |
| 324 | 325 | def install_requirments(selected_component_name): |
| 325 | - # menu items | |
| 326 | - get_admin_menu() | |
| 327 | 326 | |
| 327 | + try: | |
| 328 | + if k2.platform == 'Windows': | |
| 329 | + # install requirements for windows | |
| 330 | + venv_bin_path = os.path.join(os.path.dirname(sys.prefix), 'venv/Scripts') | |
| 331 | + requirements_file = os.path.join('components', selected_component_name, "requirements.txt") | |
| 332 | + if os.path.isfile(requirements_file): | |
| 333 | + pip_command = f"{venv_bin_path}/python -m pip install -r {requirements_file}" | |
| 334 | + subprocess.run(pip_command, shell=True, check=True) | |
| 335 | + elif k2.platform == 'Linux': | |
| 336 | + #install requirements for linux | |
| 337 | + venv_bin_path = os.path.join(os.path.dirname(sys.prefix), 'venv/bin') | |
| 338 | + requirements_file = os.path.join('components', selected_component_name, "requirements.txt") | |
| 339 | + if os.path.isfile(requirements_file): | |
| 340 | + pip_command = f"{venv_bin_path}/python3 -m pip install -r {requirements_file}" | |
| 341 | + subprocess.run(pip_command, shell=True, check=True) | |
| 328 | 342 | |
| 329 | - ## install requirements for windows | |
| 330 | - #venv_bin_path = os.path.join(os.path.dirname(sys.prefix), 'venv/Scripts') | |
| 331 | - #requirements_file = os.path.join('components', selected_component_name, "requirements.txt") | |
| 332 | - #if os.path.isfile(requirements_file): | |
| 333 | - # pip_command = f"{venv_bin_path}/python -m pip install -r {requirements_file}" | |
| 334 | - # subprocess.run(pip_command, shell=True, check=True) | |
| 343 | + return f'''Requirements installed successfully | |
| 344 | + \n \n please wait installing requirments components... | |
| 345 | + <meta http-equiv="refresh" content="1;url=/install-requirments-components" />''' | |
| 346 | + except Exception as e: | |
| 347 | + return f'Error installing requirmets: {str(e)}' | |
| 335 | 348 | |
| 336 | - #install requirements for linux | |
| 337 | - venv_bin_path = os.path.join(os.path.dirname(sys.prefix), 'venv/bin') | |
| 338 | - requirements_file = os.path.join('components', selected_component_name, "requirements.txt") | |
| 339 | - if os.path.isfile(requirements_file): | |
| 340 | - pip_command = f"{venv_bin_path}/python3 -m pip install -r {requirements_file}" | |
| 341 | - subprocess.run(pip_command, shell=True, check=True) | |
| 342 | - | |
| 343 | - return f'''Requirements installed successfully | |
| 344 | - \n \n please wait installing requirments components... | |
| 345 | - <meta http-equiv="refresh" content="1;url=/install-requirments-components" />''' | |
| 346 | - | |
| 347 | - | |
| 348 | 349 | @components_bp.route('/install-requirments-components') |
| 349 | 350 | def install_requirements_components(): |
| 350 | 351 | # Откриття файлу requirements_components.txt |
| ... | ... | @@ -386,7 +387,7 @@ |
| 386 | 387 | |
| 387 | 388 | component.installed = False |
| 388 | 389 | db.session.commit() |
| 389 | - response = requests.get(f"{k2.domain}/k2site/new_component2") | |
| 390 | + | |
| 390 | 391 | return 'Component successfully turn off <meta http-equiv="refresh" content="1;url=/dashboard" />' |
| 391 | 392 | |
| 392 | 393 | |
| ... | ... | @@ -407,7 +408,7 @@ |
| 407 | 408 | # Оновлюємо статус компоненти |
| 408 | 409 | component.installed = True |
| 409 | 410 | db.session.commit() |
| 410 | - response = requests.get(f"{k2.domain}/k2site/new_component2") | |
| 411 | + | |
| 411 | 412 | return 'Dependencies added successfully <meta http-equiv="refresh" content="1;url=/dashboard" />' |
| 412 | 413 | |
| 413 | 414 | |
| ... | ... | @@ -435,7 +436,7 @@ |
| 435 | 436 | except Exception as e: |
| 436 | 437 | # Повертаємо повідомлення про помилку видалення |
| 437 | 438 | return 'Error removing component: ' + str(e) |
| 438 | - response = requests.get(f"{k2.domain}/k2site/new_component2") | |
| 439 | + | |
| 439 | 440 | |
| 440 | 441 | |
| 441 | 442 | # @components_bp.route('/component/add') |
| ... | ... | @@ -515,7 +516,6 @@ |
| 515 | 516 | filter_menu = [] |
| 516 | 517 | response = requests.get(f"{k2.domain}api/add-to-menu") |
| 517 | 518 | menu_items_list = K2admin_menus.get_menu_items_by_roles(role_id) |
| 518 | - #print(menu_items_list) | |
| 519 | 519 | for item in response.json(): |
| 520 | 520 | filtered_children = [] |
| 521 | 521 | for im in item['children']: |
| 522 | 522 | |
| ... | ... | @@ -587,9 +587,10 @@ |
| 587 | 587 | filtered_components = component_server |
| 588 | 588 | components = Component.query.all() |
| 589 | 589 | components_names = [component.name for component in components] |
| 590 | + components_version = [{component.name: component.version} for component in components] | |
| 590 | 591 | |
| 591 | 592 | return render_template('dashboard-add.html', |
| 592 | - component_server=filtered_components, search_query=search_query, components_names=components_names ) | |
| 593 | + component_server=filtered_components, search_query=search_query, components_names=components_names, components_version=components_version ) | |
| 593 | 594 | |
| 594 | 595 | |
| 595 | 596 |
languages/babel_translation_directories.yml
| 1 | -babel_translation_directories: languages;components/k2site/k2site/languages;components/k2adm/k2adm/languages;components/k2test/k2test/languages;components/k2grid_base/k2grid_base/languages | |
| 1 | +babel_translation_directories: languages;components/k2site/k2site/languages;components/k2test/k2test/languages |
routes.py
static/css/style.css
templates/dashboard-add.html
| ... | ... | @@ -51,6 +51,14 @@ |
| 51 | 51 | <h2>{{ component.name|title }}</h2> |
| 52 | 52 | <p>{{ component.description }}</p> |
| 53 | 53 | <p>version {{ component.latest_version }}</p> |
| 54 | + {% for component_upd_ver in components_version %} | |
| 55 | + {% for key, value in component_upd_ver.items() %} | |
| 56 | + {% if key == component.name and value < component.latest_version %} | |
| 57 | + <p class="update_avaible"> Update avaible</p> | |
| 58 | + {% endif %} | |
| 59 | + {% endfor %} | |
| 60 | + {% endfor %} | |
| 61 | + | |
| 54 | 62 | {% if component.name in components_names %} |
| 55 | 63 | <button type="button" class="btn btn-success">Installed</button> |
| 56 | 64 | {% else %} |
| ... | ... | @@ -68,7 +76,6 @@ |
| 68 | 76 | </div> |
| 69 | 77 | |
| 70 | 78 | {% endblock %} |
| 71 | - | |
| 72 | 79 | |
| 73 | 80 | </div> |