q2rad 0.1.221__py3-none-any.whl → 0.1.222__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of q2rad might be problematic. Click here for more details.

q2rad/q2appmanager.py CHANGED
@@ -448,7 +448,8 @@ class AppManager(Q2Form):
448
448
  return rez
449
449
 
450
450
  def import_q2market(self):
451
- self.q2_app.check_app_update(force_update=True)
451
+ if self.q2_app.check_app_update(force_update=True):
452
+ self.q2_app.open_selected_app()
452
453
 
453
454
  def import_app(self, file=""):
454
455
  filetype = "JSON(*.json)"
q2rad/q2extensions.py CHANGED
@@ -160,7 +160,8 @@ class Q2Extensions(Q2Form):
160
160
  def import_q2market(self):
161
161
  q2market_url = self.r.q2market_url if self.r.q2market_url else self.q2_app.q2market_url
162
162
  if q2market_url:
163
- q2app.q2_app.check_ext_update(self.r.prefix, force_update=True)
163
+ if q2app.q2_app.check_ext_update(self.r.prefix, force_update=True):
164
+ q2app.q2_app.open_selected_app()
164
165
  else:
165
166
  q2Mess("No App URL!")
166
167
 
q2rad/q2lines.py CHANGED
@@ -300,7 +300,7 @@ class Q2Lines(Q2Form, Q2_save_and_run):
300
300
  record = self.get_current_record()
301
301
  record["table"] = self.db.get("forms", f"name = '{self.prev_form.r.name}'", "form_table")
302
302
  if not q2app.q2_app.db_data.alter_column(record):
303
- q2mess(self.db_data.migrate_error_list)
303
+ q2mess(self.q2_app.db_data.migrate_error_list)
304
304
 
305
305
  def copy_to(self):
306
306
  rows = self.get_grid_selected_rows()
q2rad/q2rad.py CHANGED
@@ -323,8 +323,8 @@ class Q2RadApp(Q2App):
323
323
  Q2AppSelect().run(autoload_enabled)
324
324
  if self.selected_application != {}:
325
325
  self.open_selected_app(True, migrate_db_data=False)
326
- self.check_app_update()
327
- self.check_ext_update()
326
+ if self.check_app_update() or self.check_ext_update():
327
+ self.open_selected_app()
328
328
  self.on_new_tab()
329
329
  else:
330
330
  self.close()
@@ -558,9 +558,11 @@ class Q2RadApp(Q2App):
558
558
  if self.dev_mode:
559
559
  self.add_menu("Dev|Forms", self.run_forms)
560
560
  self.add_menu("Dev|Modules", self.run_modules)
561
- self.add_menu("Dev|Querys", self.run_queries)
561
+ self.add_menu("Dev|Queres", self.run_queries)
562
562
  self.add_menu("Dev|Reports", self.run_reports)
563
563
  self.add_menu("Dev|Packages", self.run_packages)
564
+ self.add_menu("Dev|-")
565
+ self.add_menu("Dev|Finder", self.run_finder)
564
566
  if not self.frozen:
565
567
  self.add_menu("Dev|-")
566
568
  self.add_menu("Dev|Make binary", self.make_binary)
@@ -912,7 +914,7 @@ class Q2RadApp(Q2App):
912
914
  except Exception as e: # noqa F841
913
915
  self.show_statusbar_mess("An error occurred while checking for updates")
914
916
  return
915
- if force_update or market_version and market_version != self.app_version:
917
+ if force_update or (market_version and market_version > self.app_version):
916
918
  if force_update:
917
919
  update_detected = f"You are about to rewrite current App <b>{self.app_title}</b>!"
918
920
  else:
@@ -928,7 +930,8 @@ class Q2RadApp(Q2App):
928
930
  ):
929
931
  data = json.load(open_url(self.app_url + ".json")) # noqa F405
930
932
  AppManager.import_json_app(data)
931
- self.open_selected_app()
933
+ # self.open_selected_app()
934
+ return True
932
935
 
933
936
  def check_ext_update(self, prefix="", force_update=False, _ext_url=""):
934
937
  if self.frozen:
@@ -937,6 +940,7 @@ class Q2RadApp(Q2App):
937
940
  cu = q2cursor(f"select * from extensions where prefix='{prefix}'")
938
941
  else:
939
942
  cu = q2cursor(f"select * from extensions where checkupdates<>'' order by seq")
943
+ updated = None
940
944
  for row in cu.records():
941
945
  _prefix = row["prefix"]
942
946
 
@@ -953,8 +957,8 @@ class Q2RadApp(Q2App):
953
957
  market_version = read_url(ext_url + ".version").decode("utf-8") # noqa F405
954
958
  except Exception as e: # noqa F841
955
959
  self.show_statusbar_mess("An error occurred while checking for updates")
956
- return
957
- if force_update or market_version and market_version != ext_version:
960
+ continue
961
+ if force_update or (market_version and market_version > ext_version):
958
962
  if force_update:
959
963
  update_detected = (
960
964
  f"You are about to rewrite current Extension ({_prefix}) <b>{self.app_title}</b>!"
@@ -974,8 +978,10 @@ class Q2RadApp(Q2App):
974
978
  ):
975
979
  data = json.load(open_url(ext_url + ".json")) # noqa F405
976
980
  AppManager.import_json_app(data, prefix=_prefix)
977
- update("extensions", {"prefix":row["prefix"], "version":market_version})
978
- self.open_selected_app()
981
+ update("extensions", {"prefix": row["prefix"], "version": market_version})
982
+ updated = True
983
+ # self.open_selected_app()
984
+ return updated
979
985
 
980
986
  def update_app_packages(self):
981
987
  if self.frozen:
@@ -1115,6 +1121,71 @@ class Q2RadApp(Q2App):
1115
1121
  def run_extensions(self):
1116
1122
  Q2Extensions().run()
1117
1123
 
1124
+ def run_finder(self):
1125
+ class Q2Finder:
1126
+ def __init__(self, find_string):
1127
+ self.find_string = find_string
1128
+
1129
+ def get_columns_sql(self, table):
1130
+ return "select {{}} from {} where concat({}) like".format(
1131
+ table,
1132
+ ", ".join([f"`{x}`" for x in q2app.q2_app.db_logic.get_database_columns(table).keys()]),
1133
+ )
1134
+
1135
+ def show_lines(self, table="lines"):
1136
+ sql = self.get_columns_sql(table).format("id") + " '%{}%'".format(self.find_string)
1137
+ where = "id in ({})".format(
1138
+ ", ".join([x["id"] for x in q2cursor(sql, q2app.q2_app.db_logic).records()])
1139
+ )
1140
+ {"actions": Q2Actions, "lines": Q2Lines}[table]().run(where=where)
1141
+
1142
+ def show_other(self, table):
1143
+ sql = self.get_columns_sql(table).format("name") + " '%{}%'".format(self.find_string)
1144
+ where = "name in ({})".format(
1145
+ ", ".join(['"' + x["name"] + '"' for x in q2cursor(sql, q2app.q2_app.db_logic).records()])
1146
+ )
1147
+ {"forms": Q2Forms, "reports": Q2Reports, "modules": Q2Modules, "queries": Q2Queries}[
1148
+ table
1149
+ ]().run(where=where)
1150
+
1151
+ finder = Q2Form("Finder")
1152
+
1153
+ finder.add_control("find_string", "Find string", datalen=150)
1154
+ finder.add_control("/")
1155
+ finder.add_control("/h", "in")
1156
+ finder.add_control(
1157
+ "button",
1158
+ "Forms",
1159
+ control="button",
1160
+ valid=lambda: Q2Finder(finder.s.find_string).show_other("forms"),
1161
+ )
1162
+ finder.add_control(
1163
+ "button",
1164
+ "Lines",
1165
+ control="button",
1166
+ valid=lambda: Q2Finder(finder.s.find_string).show_lines("lines"),
1167
+ )
1168
+ finder.add_control(
1169
+ "button",
1170
+ "Actions",
1171
+ control="button",
1172
+ valid=lambda: Q2Finder(finder.s.find_string).show_lines("actions"),
1173
+ )
1174
+ finder.add_control(
1175
+ "button",
1176
+ "Modules",
1177
+ control="button",
1178
+ valid=lambda: Q2Finder(finder.s.find_string).show_other("modules"),
1179
+ )
1180
+ finder.add_control(
1181
+ "button",
1182
+ "Queries",
1183
+ control="button",
1184
+ valid=lambda: Q2Finder(finder.s.find_string).show_other("queries"),
1185
+ )
1186
+ finder.cancel_button = 1
1187
+ finder.run()
1188
+
1118
1189
  def make_binary(self):
1119
1190
  make_binary(self)
1120
1191
 
@@ -1199,12 +1270,12 @@ class Q2RadApp(Q2App):
1199
1270
  form.after_delete = self.code_runner(form_dic["after_delete"], form)
1200
1271
 
1201
1272
  # add controls
1202
- for x in cu.records():
1203
- x["valid"] = self.code_runner(x["valid"], form)
1204
- if x.get("_show"):
1205
- x["show"] = self.code_runner(x["_show"], form)
1206
- x["when"] = self.code_runner(x["_when"], form)
1207
- form.add_control(**x)
1273
+ for control in cu.records():
1274
+ control["valid"] = self.code_runner(control["valid"], form)
1275
+ if control.get("_show"):
1276
+ control["show"] = self.code_runner(control["_show"], form)
1277
+ control["when"] = self.code_runner(control["_when"], form)
1278
+ form.add_control(**control)
1208
1279
  run_module("_e_control", _locals=locals())
1209
1280
 
1210
1281
  # add datasource
@@ -1235,14 +1306,14 @@ class Q2RadApp(Q2App):
1235
1306
  ext_select = ""
1236
1307
  sql = f"select * from (select * from actions where name = '{name}' order by seq ) qq {ext_select}"
1237
1308
  cu = q2cursor(sql, self.db_logic)
1238
- for x in cu.records():
1239
- if x["action_mode"] == "1":
1309
+ for action in cu.records():
1310
+ if action["action_mode"] == "1":
1240
1311
  form.add_action("/crud")
1241
- elif x["action_mode"] == "3":
1312
+ elif action["action_mode"] == "3":
1242
1313
  form.add_action("-")
1243
1314
  else:
1244
- if x["child_form"] and x["child_where"]:
1245
- child_form_name = x["child_form"]
1315
+ if action["child_form"] and action["child_where"]:
1316
+ child_form_name = action["child_form"]
1246
1317
 
1247
1318
  def get_action_form(child_form_name):
1248
1319
  def worker():
@@ -1251,29 +1322,33 @@ class Q2RadApp(Q2App):
1251
1322
  return worker
1252
1323
 
1253
1324
  form.add_action(
1254
- x["action_text"],
1255
- self.code_runner(x["action_worker"]) if x["action_worker"] else None,
1325
+ action["action_text"],
1326
+ self.code_runner(action["action_worker"]) if action["action_worker"] else None,
1256
1327
  child_form=get_action_form(child_form_name),
1257
- child_where=x["child_where"],
1258
- hotkey=x["action_key"],
1259
- mess=x["action_mess"],
1260
- icon=x["action_icon"],
1261
- tag=x["tag"],
1262
- child_noshow=x["child_noshow"],
1263
- child_copy_mode=x["child_copy_mode"],
1328
+ child_where=action["child_where"],
1329
+ hotkey=action["action_key"],
1330
+ mess=action["action_mess"],
1331
+ icon=action["action_icon"],
1332
+ tag=action["tag"],
1333
+ child_noshow=action["child_noshow"],
1334
+ child_copy_mode=action["child_copy_mode"],
1264
1335
  eof_disabled=1,
1265
1336
  )
1266
1337
  else:
1267
1338
  form.add_action(
1268
- x["action_text"],
1269
- self.code_runner(x["action_worker"], form=form) if x["action_worker"] else None,
1270
- hotkey=x["action_key"],
1271
- icon=x["action_icon"],
1272
- mess=x["action_mess"],
1273
- tag=x["tag"],
1274
- child_noshow=x["child_noshow"],
1275
- child_copy_mode=x["child_copy_mode"],
1276
- eof_disabled=x["eof_disabled"],
1339
+ action["action_text"],
1340
+ (
1341
+ self.code_runner(action["action_worker"], form=form)
1342
+ if action["action_worker"]
1343
+ else None
1344
+ ),
1345
+ hotkey=action["action_key"],
1346
+ icon=action["action_icon"],
1347
+ mess=action["action_mess"],
1348
+ tag=action["tag"],
1349
+ child_noshow=action["child_noshow"],
1350
+ child_copy_mode=action["child_copy_mode"],
1351
+ eof_disabled=action["eof_disabled"],
1277
1352
  )
1278
1353
  run_module("_e_action", _locals=locals())
1279
1354
  return form
q2rad/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "0.1.221"
1
+ __version__ = "0.1.222"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: q2rad
3
- Version: 0.1.221
3
+ Version: 0.1.222
4
4
  Summary: RAD - database, GUI, reports
5
5
  Author: Andrei Puchko
6
6
  Author-email: andrei.puchko@gmx.de
@@ -1,25 +1,25 @@
1
1
  q2rad/__init__.py,sha256=Y0Up-UTXOmCYC9llNmTF10CpDDgF2kv10pyHT3-YwmQ,183
2
2
  q2rad/__main__.py,sha256=zP4JARM-FzFHM-vWLehx7c5N4v4m_F-TuMobCdFzr4Q,824
3
3
  q2rad/q2actions.py,sha256=eExRvOSyLhT_v1XCR-DmLEhQ9g_LRkrlyXnwDCjT0LM,8258
4
- q2rad/q2appmanager.py,sha256=4c1h5I_7f4S7Ef9nDnDQthRqPC-uyK8v8B8zmhdhtr0,20567
4
+ q2rad/q2appmanager.py,sha256=8btKbT_NGBlNxscINVQnpdkLZ032OuvnFeYbXda4Xnw,20616
5
5
  q2rad/q2appselector.py,sha256=bjl4MDg9DoU1h6NZOQDElaIGURjVQwiHnsUwr3kp3nc,18813
6
6
  q2rad/q2constants.py,sha256=dQtN4OMvZw0FATDAFYjolI7eGMVUnNnbTl6qM-ggZ4I,3416
7
- q2rad/q2extensions.py,sha256=iQz8_GlMCm8g9LOR3aP3YSBgi9rD5i1YkuNaxRiTn5g,7541
7
+ q2rad/q2extensions.py,sha256=ZAY2gXKjun666PeYfnqGH0X17ZmTgaOMmjCvxAIltJI,7595
8
8
  q2rad/q2forms.py,sha256=e9FrhXjvi9ZmrhRBmnmsHoPxDQJqsanLnsPjY6rjaQI,11122
9
- q2rad/q2lines.py,sha256=hGdEOdUmBdBpfJ4jHBrXR4gLRXCrgn0dlywsH8nbJ6Q,19185
9
+ q2rad/q2lines.py,sha256=hZMfbqsd_UTACrsR5_GxmDqWY7uKcF-P5kMUeoY0KG8,19192
10
10
  q2rad/q2make.py,sha256=wXoyBUwf2zaAl9JjWDCbjAteUElRq0O7ippyaMY9eug,6476
11
11
  q2rad/q2market.py,sha256=RNXTNv-fFUgbzBGhHPNXlzGjsAHAtz71BRbTErJarNo,2641
12
12
  q2rad/q2modules.py,sha256=SpDdXJPG6IcVz1u3xnLoynA2rmiODCNZTZJT8s5iTRI,4538
13
13
  q2rad/q2packages.py,sha256=y72L1RAw1OgtKGaL8lJ1KHIaers5I6kTZSiphwwrY0M,3808
14
14
  q2rad/q2queries.py,sha256=l9SJ_T5Y38p23xa505EPZocCEmFw_a2y4ck0_-AHVP0,13119
15
- q2rad/q2rad.py,sha256=5IfUu4VHhqVuygem5ZwWFdj1WL_1VyXSKLngaVtbxbo,52313
15
+ q2rad/q2rad.py,sha256=Mw3VZpK08JftJ9Ov5U8i2FdGhAYRlGGPeagmnQqTSlk,55424
16
16
  q2rad/q2raddb.py,sha256=tMX971d_awTwiWeYLkZGSfdrIs88oiNHBAs2cMFvSbU,4685
17
17
  q2rad/q2reports.py,sha256=1fewf1Zlz98raqTIWlRLIg-zTCYA2flGVqyIC120UEU,84802
18
18
  q2rad/q2stylesettings.py,sha256=rEJLyLzsffJEXnMbg9bPB3KHLjYfw-49QgrtcYOfGV0,4769
19
19
  q2rad/q2utils.py,sha256=Vb5K8Lbb7PzQGDiBEHFrPyDcytVnUSVXy9yIkvWM1Oc,19734
20
- q2rad/version.py,sha256=cAD9mqAwq0S1-BMh3hvd-bOW2U1IH16XAr4cwraQU60,23
21
- q2rad-0.1.221.dist-info/entry_points.txt,sha256=DmsJQE6f3wYuhdN2h6ARYxSe8_d03paeepfGpdVj5rs,42
22
- q2rad-0.1.221.dist-info/LICENSE,sha256=JRR3LlR18ghhYXT4G2cWgXmnxRvcuVcKlqncWWK4MRY,10347
23
- q2rad-0.1.221.dist-info/METADATA,sha256=_pCl1FLf9OSMdKqMC6eH-8wYEg1xpviYD4I-bfGrXso,3369
24
- q2rad-0.1.221.dist-info/WHEEL,sha256=WGfLGfLX43Ei_YORXSnT54hxFygu34kMpcQdmgmEwCQ,88
25
- q2rad-0.1.221.dist-info/RECORD,,
20
+ q2rad/version.py,sha256=NVwRTBgIeHjH6vZ080qRRs0_PMbU-1iWEOmyuOznMyA,23
21
+ q2rad-0.1.222.dist-info/entry_points.txt,sha256=DmsJQE6f3wYuhdN2h6ARYxSe8_d03paeepfGpdVj5rs,42
22
+ q2rad-0.1.222.dist-info/LICENSE,sha256=JRR3LlR18ghhYXT4G2cWgXmnxRvcuVcKlqncWWK4MRY,10347
23
+ q2rad-0.1.222.dist-info/METADATA,sha256=SGv212kqcX-QPThHnmml3mYlgYKX2sjQQ28RJqSMJkQ,3369
24
+ q2rad-0.1.222.dist-info/WHEEL,sha256=WGfLGfLX43Ei_YORXSnT54hxFygu34kMpcQdmgmEwCQ,88
25
+ q2rad-0.1.222.dist-info/RECORD,,