q2rad 0.1.220__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/q2appselector.py CHANGED
@@ -467,7 +467,7 @@ class Q2AppSelect(Q2Form):
467
467
  self.close()
468
468
  AppManager.import_json_app(json.load(response_app))
469
469
  self.q2_app.open_selected_app()
470
- self.q2_app.migrate_db_data()
470
+ # self.q2_app.migrate_db_data()
471
471
  AppManager.import_json_data(json.load(response_data))
472
472
  else:
473
473
  q2Mess(_("Can't to load Demo App"))
q2rad/q2extensions.py CHANGED
@@ -25,6 +25,8 @@ from q2rad.q2appmanager import AppManager
25
25
  from q2terminal.q2terminal import Q2Terminal
26
26
  import gettext
27
27
  import json
28
+ from q2rad.q2raddb import read_url
29
+ from q2gui.q2model import Q2Model
28
30
 
29
31
 
30
32
  _ = gettext.gettext
@@ -56,6 +58,14 @@ class Q2Extensions(Q2Form):
56
58
  self.add_action("Import|from JSON file", self.import_json, eof_disabled=True)
57
59
  self.add_action("Import|from q2Market", self.import_q2market, eof_disabled=True)
58
60
 
61
+ def before_form_show(self):
62
+ if self.crud_mode == "NEW":
63
+ if q2AskYN("Would you like to download one from q2market?") == 2:
64
+ q2market = Q2MarketExt().run()
65
+ if q2market.heap._return:
66
+ self.s.prefix = q2market.heap._return
67
+ self.s.checkupdates = "*"
68
+
59
69
  def info(self):
60
70
  pass
61
71
 
@@ -150,6 +160,38 @@ class Q2Extensions(Q2Form):
150
160
  def import_q2market(self):
151
161
  q2market_url = self.r.q2market_url if self.r.q2market_url else self.q2_app.q2market_url
152
162
  if q2market_url:
153
- 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()
154
165
  else:
155
166
  q2Mess("No App URL!")
167
+
168
+
169
+ class Q2MarketExt(Q2Form):
170
+ def __init__(self, title=""):
171
+ super().__init__("q2Market")
172
+ self.no_view_action = True
173
+ self.heap._return = None
174
+
175
+ def on_init(self):
176
+ self.add_control("ext_title", _("Name"), datatype="char", datalen=100)
177
+ self.add_control("ext_version", _("Version"), datatype="char", datalen=100)
178
+ self.add_control("ext_description", _("Description"), control="text", datatype="char", datalen=100)
179
+ self.add_control("ext_url", _("Path"), datatype="char", datalen=100)
180
+
181
+ q2market_catalogue_url = f"{self.q2_app.q2market_url}/q2market.json"
182
+ data = json.loads(read_url(q2market_catalogue_url).decode("utf-8"))
183
+ rez = []
184
+ for x in data:
185
+ if "ext_title" in data[x]:
186
+ rec = data[x]
187
+ rec["ext_url"] = x
188
+ rez.append(rec)
189
+ model = Q2Model()
190
+ model.set_records(rez)
191
+ self.set_model(model)
192
+ self.add_action_view()
193
+ self.add_action("Select", self.select_row, tag="select", eof_disabled=1)
194
+
195
+ def select_row(self):
196
+ self.heap._return = self.r.ext_title
197
+ self.close()
q2rad/q2forms.py CHANGED
@@ -288,7 +288,7 @@ class Q2Forms(Q2Form, Q2_save_and_run):
288
288
  super().after_crud_save()
289
289
  if self.crud_mode != "EDIT":
290
290
  if self.s.form_table:
291
- ai = "*" if q2ask("Set AUTOINCREMENT for primary key?") else ""
291
+ ai = "*" if q2ask("Set AUTOINCREMENT for primary key?") == 2 else ""
292
292
  self.db.insert(
293
293
  "lines",
294
294
  {
q2rad/q2lines.py CHANGED
@@ -125,7 +125,8 @@ class Q2Lines(Q2Form, Q2_save_and_run):
125
125
  if self.add_control("/h"):
126
126
  self.add_control("stretch", _("Stretch factor"), datatype="int")
127
127
  self.add_control("alignment", _("Alignment"), datatype="int", datalen=3)
128
- self.add_control("tag", _("Tag"), datatype="char", datalen=100)
128
+ self.add_control("tag", _("Tag"), datatype="char", datalen=100, stretch=99)
129
+ self.add_control("/s")
129
130
  self.add_control("/")
130
131
  if self.add_control("/h", _("Control type")):
131
132
  self.add_control(
@@ -299,7 +300,7 @@ class Q2Lines(Q2Form, Q2_save_and_run):
299
300
  record = self.get_current_record()
300
301
  record["table"] = self.db.get("forms", f"name = '{self.prev_form.r.name}'", "form_table")
301
302
  if not q2app.q2_app.db_data.alter_column(record):
302
- q2mess(self.db_data.migrate_error_list)
303
+ q2mess(self.q2_app.db_data.migrate_error_list)
303
304
 
304
305
  def copy_to(self):
305
306
  rows = self.get_grid_selected_rows()
q2rad/q2modules.py CHANGED
@@ -104,7 +104,7 @@ class Q2Modules(Q2Form, Q2_save_and_run):
104
104
  != 2
105
105
  ):
106
106
  return False
107
- self.s.last_line = self.w.script.current_line()+1
107
+ self.s.last_line = self.w.script.current_line() + 1
108
108
  # return super().before_crud_save()
109
109
 
110
110
  def before_form_show(self):
@@ -118,8 +118,12 @@ class Q2Modules(Q2Form, Q2_save_and_run):
118
118
  self.w.script.set_focus()
119
119
 
120
120
  def script_runner(self):
121
- self.q2_app.code_runner(self.r.script)()
121
+ # self.q2_app.code_runner(self.r.script)()
122
+ from q2rad.q2rad import run_module
123
+ run_module(script=self.r.script)
122
124
 
123
125
  def editor_just_run(self):
124
- self.q2_app.code_runner(self.s.script)()
126
+ # self.q2_app.code_runner(self.s.script)()
127
+ from q2rad.q2rad import run_module
128
+ run_module(script=self.s.script)
125
129
  self.w.script.set_focus()
q2rad/q2rad.py CHANGED
@@ -139,6 +139,7 @@ def run_module(module_name=None, _globals={}, _locals={}, script="", import_only
139
139
  else:
140
140
  __name__ = "__main__"
141
141
 
142
+ _globals.update(globals())
142
143
  _globals.update(
143
144
  {
144
145
  "RETURN": None,
@@ -149,7 +150,6 @@ def run_module(module_name=None, _globals={}, _locals={}, script="", import_only
149
150
  "__name__": __name__,
150
151
  }
151
152
  )
152
- _globals.update(globals())
153
153
  try:
154
154
  if _locals:
155
155
  exec(code["code"], _globals, _locals)
@@ -322,22 +322,26 @@ class Q2RadApp(Q2App):
322
322
  self.set_title("Open Application")
323
323
  Q2AppSelect().run(autoload_enabled)
324
324
  if self.selected_application != {}:
325
- self.open_selected_app(True)
326
- self.check_app_update()
327
- self.check_ext_update()
325
+ self.open_selected_app(True, migrate_db_data=False)
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()
331
331
  self.subwindow_count_changed()
332
332
 
333
- def open_selected_app(self, go_to_q2market=False):
333
+ def open_selected_app(self, go_to_q2market=False, migrate_db_data=True):
334
334
  wait = Q2WaitShow(5, "Loading app> ")
335
335
  wait.step("Prepare")
336
336
  self.clear_app_info()
337
337
  wait.step("Migrate logic DB")
338
338
  self.migrate_db_logic(self.db_logic)
339
- wait.step("Migrate data DB")
340
- self.migrate_db_data()
339
+ if migrate_db_data:
340
+ wait.step("Migrate data DB")
341
+ self.migrate_db_data()
342
+ else:
343
+ wait.step("Create menus")
344
+ self.create_menu()
341
345
  wait.step("looking for updates")
342
346
  self.process_events()
343
347
  wait.step("Done!")
@@ -554,9 +558,11 @@ class Q2RadApp(Q2App):
554
558
  if self.dev_mode:
555
559
  self.add_menu("Dev|Forms", self.run_forms)
556
560
  self.add_menu("Dev|Modules", self.run_modules)
557
- self.add_menu("Dev|Querys", self.run_queries)
561
+ self.add_menu("Dev|Queres", self.run_queries)
558
562
  self.add_menu("Dev|Reports", self.run_reports)
559
563
  self.add_menu("Dev|Packages", self.run_packages)
564
+ self.add_menu("Dev|-")
565
+ self.add_menu("Dev|Finder", self.run_finder)
560
566
  if not self.frozen:
561
567
  self.add_menu("Dev|-")
562
568
  self.add_menu("Dev|Make binary", self.make_binary)
@@ -908,7 +914,7 @@ class Q2RadApp(Q2App):
908
914
  except Exception as e: # noqa F841
909
915
  self.show_statusbar_mess("An error occurred while checking for updates")
910
916
  return
911
- 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):
912
918
  if force_update:
913
919
  update_detected = f"You are about to rewrite current App <b>{self.app_title}</b>!"
914
920
  else:
@@ -924,20 +930,22 @@ class Q2RadApp(Q2App):
924
930
  ):
925
931
  data = json.load(open_url(self.app_url + ".json")) # noqa F405
926
932
  AppManager.import_json_app(data)
927
- self.open_selected_app()
933
+ # self.open_selected_app()
934
+ return True
928
935
 
929
- def check_ext_update(self, prefix="", force_update=False, ext_url=""):
936
+ def check_ext_update(self, prefix="", force_update=False, _ext_url=""):
930
937
  if self.frozen:
931
938
  return
932
939
  if prefix:
933
940
  cu = q2cursor(f"select * from extensions where prefix='{prefix}'")
934
941
  else:
935
942
  cu = q2cursor(f"select * from extensions where checkupdates<>'' order by seq")
943
+ updated = None
936
944
  for row in cu.records():
937
945
  _prefix = row["prefix"]
938
946
 
939
- if ext_url:
940
- ext_url = f"{ext_url}/{_prefix}"
947
+ if _ext_url:
948
+ ext_url = f"{_ext_url}/{_prefix}"
941
949
  elif self.app_url:
942
950
  ext_url = f"{os.path.dirname(self.app_url)}/{_prefix}"
943
951
  else:
@@ -949,8 +957,8 @@ class Q2RadApp(Q2App):
949
957
  market_version = read_url(ext_url + ".version").decode("utf-8") # noqa F405
950
958
  except Exception as e: # noqa F841
951
959
  self.show_statusbar_mess("An error occurred while checking for updates")
952
- return
953
- 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):
954
962
  if force_update:
955
963
  update_detected = (
956
964
  f"You are about to rewrite current Extension ({_prefix}) <b>{self.app_title}</b>!"
@@ -970,8 +978,10 @@ class Q2RadApp(Q2App):
970
978
  ):
971
979
  data = json.load(open_url(ext_url + ".json")) # noqa F405
972
980
  AppManager.import_json_app(data, prefix=_prefix)
973
- update("extensions", {"prefix":row["prefix"], "version":market_version})
974
- self.open_selected_app()
981
+ update("extensions", {"prefix": row["prefix"], "version": market_version})
982
+ updated = True
983
+ # self.open_selected_app()
984
+ return updated
975
985
 
976
986
  def update_app_packages(self):
977
987
  if self.frozen:
@@ -1111,6 +1121,71 @@ class Q2RadApp(Q2App):
1111
1121
  def run_extensions(self):
1112
1122
  Q2Extensions().run()
1113
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
+
1114
1189
  def make_binary(self):
1115
1190
  make_binary(self)
1116
1191
 
@@ -1195,12 +1270,12 @@ class Q2RadApp(Q2App):
1195
1270
  form.after_delete = self.code_runner(form_dic["after_delete"], form)
1196
1271
 
1197
1272
  # add controls
1198
- for x in cu.records():
1199
- x["valid"] = self.code_runner(x["valid"], form)
1200
- if x.get("_show"):
1201
- x["show"] = self.code_runner(x["_show"], form)
1202
- x["when"] = self.code_runner(x["_when"], form)
1203
- 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)
1204
1279
  run_module("_e_control", _locals=locals())
1205
1280
 
1206
1281
  # add datasource
@@ -1231,14 +1306,14 @@ class Q2RadApp(Q2App):
1231
1306
  ext_select = ""
1232
1307
  sql = f"select * from (select * from actions where name = '{name}' order by seq ) qq {ext_select}"
1233
1308
  cu = q2cursor(sql, self.db_logic)
1234
- for x in cu.records():
1235
- if x["action_mode"] == "1":
1309
+ for action in cu.records():
1310
+ if action["action_mode"] == "1":
1236
1311
  form.add_action("/crud")
1237
- elif x["action_mode"] == "3":
1312
+ elif action["action_mode"] == "3":
1238
1313
  form.add_action("-")
1239
1314
  else:
1240
- if x["child_form"] and x["child_where"]:
1241
- child_form_name = x["child_form"]
1315
+ if action["child_form"] and action["child_where"]:
1316
+ child_form_name = action["child_form"]
1242
1317
 
1243
1318
  def get_action_form(child_form_name):
1244
1319
  def worker():
@@ -1247,29 +1322,33 @@ class Q2RadApp(Q2App):
1247
1322
  return worker
1248
1323
 
1249
1324
  form.add_action(
1250
- x["action_text"],
1251
- 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,
1252
1327
  child_form=get_action_form(child_form_name),
1253
- child_where=x["child_where"],
1254
- hotkey=x["action_key"],
1255
- mess=x["action_mess"],
1256
- icon=x["action_icon"],
1257
- tag=x["tag"],
1258
- child_noshow=x["child_noshow"],
1259
- 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"],
1260
1335
  eof_disabled=1,
1261
1336
  )
1262
1337
  else:
1263
1338
  form.add_action(
1264
- x["action_text"],
1265
- self.code_runner(x["action_worker"], form=form) if x["action_worker"] else None,
1266
- hotkey=x["action_key"],
1267
- icon=x["action_icon"],
1268
- mess=x["action_mess"],
1269
- tag=x["tag"],
1270
- child_noshow=x["child_noshow"],
1271
- child_copy_mode=x["child_copy_mode"],
1272
- 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"],
1273
1352
  )
1274
1353
  run_module("_e_action", _locals=locals())
1275
1354
  return form
q2rad/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "0.1.220"
1
+ __version__ = "0.1.222"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: q2rad
3
- Version: 0.1.220
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
5
- q2rad/q2appselector.py,sha256=-QazsbpOxRlzuCZZ35QU-p9iiBrF16oDU-Os-5rPIRQ,18811
4
+ q2rad/q2appmanager.py,sha256=8btKbT_NGBlNxscINVQnpdkLZ032OuvnFeYbXda4Xnw,20616
5
+ q2rad/q2appselector.py,sha256=bjl4MDg9DoU1h6NZOQDElaIGURjVQwiHnsUwr3kp3nc,18813
6
6
  q2rad/q2constants.py,sha256=dQtN4OMvZw0FATDAFYjolI7eGMVUnNnbTl6qM-ggZ4I,3416
7
- q2rad/q2extensions.py,sha256=V54Xypcucl1-RarLWtH3GGxnAW1m4p3wrTYXFLBdqgk,5929
8
- q2rad/q2forms.py,sha256=36NriEUquuF97fkHpBBQyw1PDIrBQQlwxb21YVrmtng,11117
9
- q2rad/q2lines.py,sha256=KQslxn06vypKSFahCDAa7oFPoo_BhvABTKy5iDEOFbc,19133
7
+ q2rad/q2extensions.py,sha256=ZAY2gXKjun666PeYfnqGH0X17ZmTgaOMmjCvxAIltJI,7595
8
+ q2rad/q2forms.py,sha256=e9FrhXjvi9ZmrhRBmnmsHoPxDQJqsanLnsPjY6rjaQI,11122
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
- q2rad/q2modules.py,sha256=FetB84IxsuDzNYKTFM3BdvfH5GrWrFKoi6cV5uW1fKo,4360
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=qlHORwI_E0rGXT5Moz7ECid_zlRcnAXco4_CTtcWdvw,52142
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=Yg55j5Kpc4j7L2JTOD4XO90GgG_NmOIipe_KjVZ996s,23
21
- q2rad-0.1.220.dist-info/entry_points.txt,sha256=DmsJQE6f3wYuhdN2h6ARYxSe8_d03paeepfGpdVj5rs,42
22
- q2rad-0.1.220.dist-info/LICENSE,sha256=JRR3LlR18ghhYXT4G2cWgXmnxRvcuVcKlqncWWK4MRY,10347
23
- q2rad-0.1.220.dist-info/METADATA,sha256=4D6X3yn1DATbq926bwEaZW_m_qrHlDKPgY4GPDHmoGA,3369
24
- q2rad-0.1.220.dist-info/WHEEL,sha256=WGfLGfLX43Ei_YORXSnT54hxFygu34kMpcQdmgmEwCQ,88
25
- q2rad-0.1.220.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,,