q2rad 0.1.140__py3-none-any.whl → 0.1.142__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/q2actions.py CHANGED
@@ -143,18 +143,20 @@ class Q2Actions(Q2Form, Q2_save_and_run):
143
143
  self.prev_form.run_action("Run")
144
144
 
145
145
  def action_mode_valid(self):
146
- for x in self.widgets():
146
+ for x in [x for x in self.widgets()]:
147
147
  if x.startswith("_"):
148
148
  continue
149
149
  elif x.startswith("/"):
150
150
  continue
151
151
  elif not hasattr(self.widgets()[x], "set_disabled"):
152
152
  continue
153
- elif x in ("action_mode", "ordnum", "comment", "seq"):
153
+ elif x in ("action_mode", "ordnum", "comment", "seq", "name", "action_text", "crud_buttons"):
154
154
  continue
155
155
  else:
156
156
  self.widgets()[x].set_disabled(self.s.action_mode != "2")
157
- self.w.name.set_enabled(True)
157
+
158
+ # self.w.name.set_enabled(True)
159
+ # self.w.action_mode.set_enabled(True)
158
160
 
159
161
  def select_child_form(self):
160
162
  choice = choice_form()
@@ -180,4 +182,3 @@ class Q2Actions(Q2Form, Q2_save_and_run):
180
182
  self.action_mode_valid()
181
183
  if self.s.action_worker != "":
182
184
  self.w.tab.set_tab(_("Action Script"))
183
- # self.next_sequense()
q2rad/q2forms.py CHANGED
@@ -49,7 +49,6 @@ class Q2Forms(Q2Form, Q2_save_and_run):
49
49
  self.db = q2app.q2_app.db_logic
50
50
  cursor: Q2Cursor = self.db.table(table_name="forms", order="seq")
51
51
  model = Q2CursorModel(cursor)
52
- model.set_order("seq").refresh()
53
52
  self.set_model(model)
54
53
 
55
54
  self.add_action("/crud")
@@ -162,7 +161,7 @@ class Q2Forms(Q2Form, Q2_save_and_run):
162
161
  self.add_control("comment", gridlabel=_("Comments"), datatype="longtext")
163
162
 
164
163
  if self.add_control("/t", _("Build")):
165
- self.add_control("/vs")
164
+ self.add_control("/vs", tag="build")
166
165
  self.add_control("/v")
167
166
  self.add_control(
168
167
  "before_form_build",
@@ -243,6 +242,13 @@ class Q2Forms(Q2Form, Q2_save_and_run):
243
242
  nogrid="*",
244
243
  control="code",
245
244
  )
245
+ if self.add_control("/t", _("Refresh")):
246
+ self.add_control(
247
+ "form_refresh",
248
+ label=_(""),
249
+ nogrid="*",
250
+ control="code",
251
+ )
246
252
  if self.add_control("/t", _("After close")):
247
253
  self.add_control(
248
254
  "after_form_closed",
@@ -272,9 +278,6 @@ class Q2Forms(Q2Form, Q2_save_and_run):
272
278
  name = self.r.name
273
279
  self.q2_app.run_form(name)
274
280
 
275
- # def before_form_show(self):
276
- # self.next_sequense()
277
-
278
281
  def before_crud_save(self):
279
282
  if self.s.name == "":
280
283
  q2Mess(_("Give me some NAME!!!"))
q2rad/q2lines.py CHANGED
@@ -54,7 +54,7 @@ SQL_DATATYPES = (
54
54
  )
55
55
  HAS_DATADEC = ("dec", "numeric", "num")
56
56
  HAS_DATALEN = ("char", "varchar") + HAS_DATADEC
57
- WIDGETS = ("line", "text", "code", "button", "check", "radio", "combo", "list", "spin", "image")
57
+ WIDGETS = ("line", "text", "code", "button", "check", "radio", "combo", "list", "spin", "image", "widget")
58
58
  # "date;"
59
59
  # "frame;"
60
60
  # "grid;"
q2rad/q2modules.py CHANGED
@@ -94,7 +94,7 @@ class Q2Modules(Q2Form, Q2_save_and_run):
94
94
  Error explanation:
95
95
  <br>%s
96
96
  """
97
- % code["error"]
97
+ % (code["error"].replace("\n", "<br>").replace(" ", "&nbsp;"))
98
98
  )
99
99
  )
100
100
  != 2
q2rad/q2rad.py CHANGED
@@ -86,7 +86,9 @@ set_logging()
86
86
  _logger = logging.getLogger(__name__)
87
87
 
88
88
 
89
- def get_report(report_name):
89
+ def get_report(report_name=""):
90
+ if report_name == "":
91
+ return Q2RadReport()
90
92
  content = q2app.q2_app.db_logic.get("reports", f"name='{report_name}'", "content")
91
93
  if content:
92
94
  return Q2RadReport(content)
@@ -99,24 +101,19 @@ def run_form(form_name, order="", where=""):
99
101
  return q2app.q2_app.run_form(form_name, order=order, where=where)
100
102
 
101
103
 
102
- def run_module1(module_name):
103
- return q2app.q2_app.run_module(module_name)
104
-
105
-
106
104
  def run_module(module_name=None, globals=globals(), locals=locals(), script="", import_only=False):
107
105
  if module_name is not None:
108
106
  script = q2app.q2_app.db_logic.get("modules", f"name = '{module_name}'", "script")
109
107
  if not script:
110
108
  return
111
109
  code = q2app.q2_app.code_compiler(script)
112
-
113
110
  if code["code"] is False:
114
- trace = code["error"]
111
+ msg = code["error"]
115
112
  if threading.current_thread() is threading.main_thread():
116
- q2Mess(f"""Runtime error:<br><br>{trace}<br>""".replace("\n", "<br>").replace(" ", "&nbsp;"))
117
- else:
118
- print(f"""Runtime error:\n{trace}""")
119
- print("-" * 25)
113
+ q2Mess(f"{msg}".replace("\n", "<br>").replace(" ", "&nbsp;"))
114
+ print(f"{msg}")
115
+ print("-" * 25)
116
+ logging.error(msg)
120
117
  return
121
118
  else:
122
119
  if import_only:
@@ -142,26 +139,59 @@ def run_module(module_name=None, globals=globals(), locals=locals(), script="",
142
139
  except ReturnEvent:
143
140
  pass
144
141
  except Exception:
145
- trace = q2app.q2_app.code_error()
146
- vars = "<br>".join(
147
- [
148
- f"<b>{x}</b>:{str(locals[x])[:100]}"
149
- for x in locals
150
- if x not in ("RETURN", "ReturnEvent", "mem", "self", "q2_app")
151
- ]
152
- )
153
- if threading.current_thread() is threading.main_thread():
154
- q2Mess(
155
- f"""Runtime error:<br><br>{trace}<br><br>{vars}""".replace("\n", "<br>").replace(
156
- " ", "&nbsp;"
157
- )
158
- )
159
- else:
160
- print(f"""Runtime error:\n{trace}\n\n{vars}""")
161
- print("-" * 25)
142
+ explain_error()
162
143
  return locals["RETURN"]
163
144
 
164
145
 
146
+ def explain_error(tb=None, errtype=None):
147
+ error = {}
148
+ stack = []
149
+ if tb is None:
150
+ tb = sys.exc_info()[2]
151
+ errtype = sys.exc_info()[1]
152
+ while tb.tb_next:
153
+ stack.append([tb.tb_frame.f_lineno, tb.tb_frame.f_code.co_filename])
154
+ tb = tb.tb_next
155
+ line_no = tb.tb_frame.f_lineno
156
+ script = tb.tb_frame.f_code.co_filename[1:-1].split("\n")
157
+ errline = script[line_no - 1]
158
+ script[line_no - 1] = "******" + script[line_no - 1]
159
+
160
+ error["errtype"] = errtype
161
+ error["lineno"] = tb.tb_frame.f_lineno
162
+ error["errline"] = errline
163
+
164
+ error["script"] = "\n".join(script)
165
+ error["locals"] = dict(tb.tb_frame.f_locals)
166
+ stack.reverse()
167
+ error["stack"] = stack
168
+
169
+ msg = []
170
+ msg.append("Runtime error:")
171
+ msg.append(str(error["errtype"]))
172
+ msg.append(f"Line:{error['lineno']}:{errline}")
173
+ msg.append("Code:")
174
+ msg.append("-" * 25)
175
+ msg.append(error["script"])
176
+ msg.append("-" * 25)
177
+ msg.append("Local variables:")
178
+ for x in error["locals"]:
179
+ if x in ("RETURN", "ReturnEvent", "mem", "self", "q2_app", "form", "myapp", "__name__"):
180
+ continue
181
+ value = str(error["locals"][x])[:100]
182
+ msg.append(f"{x}:{value}")
183
+ msg.append("-" * 25)
184
+ msg = "\n".join(msg)
185
+
186
+ print("-" * 25)
187
+ print(f"{msg}")
188
+ print("-" * 25)
189
+ logging.error(msg)
190
+ if threading.current_thread() is threading.main_thread():
191
+ q2Mess(f"""{msg}""".replace("\n", "<br>").replace(" ", "&nbsp;").replace("\t", "&nbsp;" * 4))
192
+ return msg
193
+
194
+
165
195
  class Q2RadApp(Q2App):
166
196
  def __init__(self, title=""):
167
197
 
@@ -197,6 +227,11 @@ class Q2RadApp(Q2App):
197
227
 
198
228
  self.const = const
199
229
 
230
+ sys.excepthook = self.handle_error
231
+
232
+ def handle_error(self, exc_type, exc_value, exc_traceback):
233
+ explain_error(exc_traceback, exc_value)
234
+
200
235
  def clear_app_info(self):
201
236
  self.app_url = None
202
237
  self.app_title = ""
@@ -246,9 +281,9 @@ class Q2RadApp(Q2App):
246
281
  self.migrate_db_data()
247
282
  wait.step("looking for updates")
248
283
  self.process_events()
249
- self.update_app_packages()
250
284
  wait.step("Done!")
251
285
  wait.close()
286
+ self.update_app_packages()
252
287
 
253
288
  self.run_module("manifest")
254
289
  self.run_module("version")
@@ -471,20 +506,6 @@ class Q2RadApp(Q2App):
471
506
  about.append("<b>q2RAD</b>")
472
507
  about.append("Versions:")
473
508
  about.append(f"<b>Python</b>: {sys.version}<p>")
474
- # w = Q2WaitShow(len(q2_modules))
475
- # for package in q2_modules:
476
- # w.step()
477
- # latest_version, current_version = self.get_package_versions(package)
478
- # if latest_version:
479
- # if current_version != latest_version:
480
- # latest_version_text = f"({latest_version })"
481
- # else:
482
- # latest_version_text = ""
483
- # else:
484
- # latest_version_text = _(" (Can't load packacke info)")
485
-
486
- # about.append(f"<b>{package}</b>: {current_version}{latest_version_text}")
487
- # w.close()
488
509
 
489
510
  task = Q2Tasker("Checking packages version")
490
511
  for package in q2_modules:
@@ -551,17 +572,6 @@ class Q2RadApp(Q2App):
551
572
  if rez[x] is False:
552
573
  errors.append(x)
553
574
 
554
- # w = Q2WaitShow(len(icons))
555
- # errors = []
556
- # # q2Mess
557
- # for x in icons:
558
- # if x == "":
559
- # continue
560
- # w.step(x)
561
- # if self.asset_file_loader(x) is False:
562
- # errors.append(x)
563
- # w.close()
564
-
565
575
  if os.path.isfile("assets/q2gui.ico"):
566
576
  shutil.copyfile("assets/q2gui.ico", "assets/q2rad.ico")
567
577
 
@@ -876,6 +886,8 @@ class Q2RadApp(Q2App):
876
886
  form.cancel_button = form_dic["cancel_button"]
877
887
 
878
888
  form.valid = self.code_runner(form_dic["form_valid"], form)
889
+ form.form_refresh = self.code_runner(form_dic["form_refresh"], form)
890
+
879
891
  form.after_form_closed = self.code_runner(form_dic["after_form_closed"], form)
880
892
 
881
893
  form.before_form_build = self.code_runner(form_dic["before_form_build"], form)
@@ -952,36 +964,53 @@ class Q2RadApp(Q2App):
952
964
 
953
965
  return form
954
966
 
955
- def code_error(self):
956
- return traceback.format_exc()
957
-
958
967
  def code_compiler(self, script):
959
- if "return" in script or "?" in script:
960
- nsl = []
968
+ if "return" in script or "?" in script or "import" in script:
969
+ # modify script for
970
+ new_script_lines = []
961
971
  in_def = False
962
972
  for x in script.split("\n"):
973
+ # when in_def is True - do not modify return
963
974
  if re.findall(r"^def|^class", x):
964
975
  in_def = True
965
976
  elif not re.findall(r"^\s+", x):
966
977
  in_def = False
967
- # if in_def is False and re.match(r"^\s+return\W*.*", x):
978
+ # return
968
979
  if in_def is False and re.findall(r"^\s*return\W*.*|;\s*return\W*.*", x):
969
980
  if x.strip() == "return":
970
981
  x = x.replace("return", "raise ReturnEvent")
971
982
  else:
972
983
  x = x.replace("return", "RETURN = ") + "; raise ReturnEvent"
984
+ # print
973
985
  if re.findall(r"^\s*\?\W*.*", x):
986
+ # lets print it
974
987
  x = x.split("?")[0] + "print(" + "".join(x.split("?")[1:]) + ")"
975
- nsl.append(x)
976
- script = "\n".join(nsl)
988
+ # import
989
+ if re.findall(r"^\s*import\W*.*", x):
990
+ module = x.split("import")[1].strip()
991
+ if self.db_logic.get("modules", f"name='{module}'", "name"):
992
+ x = x.split("import")[0] + f"run_module('{module}', import_only=True)"
993
+
994
+ new_script_lines.append(x)
995
+ script = "\n".join(new_script_lines)
977
996
  try:
978
- code = compile(script, "'<worker>'", "exec")
997
+ code = compile(script, f"<{script}>", "exec")
979
998
  return {"code": code, "error": ""}
980
999
  except Exception:
981
- trace = self.code_error()
1000
+ error = sys.exc_info()[1]
1001
+ msg = []
1002
+ msg.append("Compile error:")
1003
+ msg.append(error.msg)
1004
+ msg.append(f"Line:{error.lineno}:{error.text}")
1005
+ msg.append("Code:")
1006
+ msg.append("-" * 25)
1007
+ msg.append(error.filename[1:-1])
1008
+ msg.append("-" * 25)
1009
+ msg = "\n".join(msg)
1010
+
982
1011
  return {
983
1012
  "code": False,
984
- "error": f"""Compile error:<br><br>{trace}""",
1013
+ "error": msg,
985
1014
  }
986
1015
 
987
1016
  def code_runner(self, script, form=None, __name__="__main__"):
q2rad/q2raddb.py CHANGED
@@ -80,6 +80,13 @@ class q2cursor(Q2Cursor):
80
80
  q2_db = q2app.q2_app.db_data
81
81
  super().__init__(q2_db, sql)
82
82
 
83
+ def q2form(self):
84
+ form = Q2Form(self.sql)
85
+ for x in self.record(0):
86
+ form.add_control(x, x, datalen=250)
87
+ form.set_model(Q2CursorModel(self))
88
+ return form
89
+
83
90
  def browse(self):
84
91
  if self.row_count() <= 0:
85
92
  q2Mess(
@@ -91,11 +98,7 @@ class q2cursor(Q2Cursor):
91
98
  """
92
99
  )
93
100
  else:
94
- form = Q2Form(self.sql)
95
- for x in self.record(0):
96
- form.add_control(x, x, datalen=250)
97
- form.set_model(Q2CursorModel(self))
98
- form.run()
101
+ self.q2form().run()
99
102
  return self
100
103
 
101
104
 
q2rad/q2reports.py CHANGED
@@ -20,7 +20,7 @@ if __name__ == "__main__":
20
20
 
21
21
  main()
22
22
 
23
- from q2gui.q2dialogs import q2AskYN
23
+ from q2gui.q2dialogs import q2AskYN, q2mess
24
24
  from q2gui.q2widget import Q2Widget
25
25
 
26
26
  from q2gui.q2app import Q2Actions
@@ -118,15 +118,22 @@ class Q2RadReport(Q2Report):
118
118
 
119
119
  def data_start(self):
120
120
  super().data_start()
121
- self.waitbar = Q2WaitShow(self.data_cursors[self.current_data_set_name].row_count())
121
+ print(self.data_sets)
122
+ if self.current_data_set_name in self.data_cursors:
123
+ self.waitbar = Q2WaitShow(self.data_cursors[self.current_data_set_name].row_count())
124
+ elif self.current_data_set_name in self.data_sets:
125
+ self.waitbar = Q2WaitShow(len(self.data_sets[self.current_data_set_name]))
122
126
 
123
127
  def data_step(self):
124
128
  super().data_step()
125
- self.waitbar.step()
129
+ if self.waitbar:
130
+ self.waitbar.step()
126
131
 
127
132
  def data_stop(self):
128
133
  super().data_stop()
129
- self.waitbar.close()
134
+ if self.waitbar:
135
+ self.waitbar.close()
136
+ self.waitbar = None
130
137
  self.last_focus_widget.set_focus()
131
138
  q2app.q2_app.process_events()
132
139
 
@@ -140,10 +147,10 @@ class Q2RadReport(Q2Report):
140
147
 
141
148
  def worker():
142
149
  def real_worker():
143
- q2WaitMax(len(self.report_content["queries"]))
144
- for x in self.report_content["queries"]:
150
+ q2WaitMax(len(self.report_content.get("queries", {})))
151
+ for x in self.report_content.get("queries", {}):
145
152
  q2WaitStep()
146
- sql = self.report_content["queries"][x]
153
+ sql = self.report_content.get("queries", {})[x]
147
154
  sql_params = re_find_param.findall(sql)
148
155
  for p in sql_params:
149
156
  value = self.params.get(p[1:], "")
q2rad/q2utils.py CHANGED
@@ -211,7 +211,7 @@ class auto_filter:
211
211
  f"""
212
212
  select *
213
213
  from lines
214
- where name = '{self.table}'
214
+ where name = '{self.table}'
215
215
  and migrate<>''
216
216
  and (label <>'' or gridlabel <> '')
217
217
  order by seq
q2rad/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "0.1.140"
1
+ __version__ = "0.1.142"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: q2rad
3
- Version: 0.1.140
3
+ Version: 0.1.142
4
4
  Summary: RAD - database, GUI, reports
5
5
  Author: Andrei Puchko
6
6
  Author-email: andrei.puchko@gmx.de
@@ -0,0 +1,23 @@
1
+ q2rad/__init__.py,sha256=sUmWCYp2n0GJN5uzzKpn9l9ZFlArwAuHGVPMYslda_8,181
2
+ q2rad/__main__.py,sha256=zP4JARM-FzFHM-vWLehx7c5N4v4m_F-TuMobCdFzr4Q,824
3
+ q2rad/q2actions.py,sha256=PkyoTySX3pN2ehR--zB6K8CoW_HU_B43sdcAySECFu8,6815
4
+ q2rad/q2appmanager.py,sha256=YDbDEK0YBVH5fjRV8KjUsNVku_lfKkLZzBVgVd90X4w,13516
5
+ q2rad/q2appselector.py,sha256=W6lz6Ddz9If-i01OOkxiJ2LvIZXcImDY8c-HPsWvFaM,12054
6
+ q2rad/q2constants.py,sha256=UDtFMZNxZvgtb2tGn-YWzJfnCklv1_sR2AojEIiKCG8,3531
7
+ q2rad/q2forms.py,sha256=lhCMii2cl51j2EEJJ6rQAfF0FWHeTL22zQkiBWql-v8,9816
8
+ q2rad/q2lines.py,sha256=eXJL7SdCAvey3oXKZeT_RS7aZ7ls4XlcSZ_6bWpsD0Y,11448
9
+ q2rad/q2market.py,sha256=pqo16gG6ic0vMgBllwdzdb_KX3SFCSG5wY1dqRv77qs,2768
10
+ q2rad/q2modules.py,sha256=9VT5DSIzibYOShsrh4EzCOD5360fYHPZrOF3jtvdPVg,3913
11
+ q2rad/q2packages.py,sha256=y3_eZyScxZqHH0saGpeelleG3WuNx8MfCbTPtRqzses,3460
12
+ q2rad/q2queries.py,sha256=09OsTt05VBY6Bcn2f7jvqUEWpQO2e248HmKUNuLtnr0,12065
13
+ q2rad/q2rad.py,sha256=KSQkXtr5NAIPFoNoGrTgmaiy58hfNsduxwuk2vcElh8,37864
14
+ q2rad/q2raddb.py,sha256=R0xu0KBqFKPsM6iJY87pTre5BLMmgZPo0tn9j8p53vk,4366
15
+ q2rad/q2reports.py,sha256=qhYFsg_4OeWLyvr3Hzr0mPLXz0qKFKrAeyEj6_S2_MU,80064
16
+ q2rad/q2stylesettings.py,sha256=J7eXvljWew-Kn-IWDT5v6j8v3gmKYfzvngscauhe4d4,2971
17
+ q2rad/q2utils.py,sha256=yHQxSkE0FIyKYPBmiaMjZF68YeGkKmg3ppVAFbq8C8g,9664
18
+ q2rad/version.py,sha256=SFKDnCPUeeZba9kiuOOKzza3q2B1Eedqdh218sd5hZw,23
19
+ q2rad-0.1.142.dist-info/entry_points.txt,sha256=DmsJQE6f3wYuhdN2h6ARYxSe8_d03paeepfGpdVj5rs,42
20
+ q2rad-0.1.142.dist-info/LICENSE,sha256=JRR3LlR18ghhYXT4G2cWgXmnxRvcuVcKlqncWWK4MRY,10347
21
+ q2rad-0.1.142.dist-info/METADATA,sha256=1oNqTB7FCtGAp-Dx9gqlVMRbWBIhy7q1eqaGbfxJsK0,3388
22
+ q2rad-0.1.142.dist-info/WHEEL,sha256=WGfLGfLX43Ei_YORXSnT54hxFygu34kMpcQdmgmEwCQ,88
23
+ q2rad-0.1.142.dist-info/RECORD,,
@@ -1,23 +0,0 @@
1
- q2rad/__init__.py,sha256=sUmWCYp2n0GJN5uzzKpn9l9ZFlArwAuHGVPMYslda_8,181
2
- q2rad/__main__.py,sha256=zP4JARM-FzFHM-vWLehx7c5N4v4m_F-TuMobCdFzr4Q,824
3
- q2rad/q2actions.py,sha256=X3Rrr1ejMQpi_HDvKkLzkKFFQ8YP8xA8YQjfXBh1Rmo,6743
4
- q2rad/q2appmanager.py,sha256=YDbDEK0YBVH5fjRV8KjUsNVku_lfKkLZzBVgVd90X4w,13516
5
- q2rad/q2appselector.py,sha256=W6lz6Ddz9If-i01OOkxiJ2LvIZXcImDY8c-HPsWvFaM,12054
6
- q2rad/q2constants.py,sha256=UDtFMZNxZvgtb2tGn-YWzJfnCklv1_sR2AojEIiKCG8,3531
7
- q2rad/q2forms.py,sha256=dQnOLVAr0KjysqRsH8KcD1mgkf9WQAPFDhU7j-O-COU,9693
8
- q2rad/q2lines.py,sha256=a5qFEv5Ts5RdZ2p9QjFWpU2Cj9Hx_Gi0_cEw4-VLMcY,11438
9
- q2rad/q2market.py,sha256=pqo16gG6ic0vMgBllwdzdb_KX3SFCSG5wY1dqRv77qs,2768
10
- q2rad/q2modules.py,sha256=1sm7ZNVj1nrn01r3UoaAiE1g6sBzWhxvINp-_YMsBCc,3866
11
- q2rad/q2packages.py,sha256=y3_eZyScxZqHH0saGpeelleG3WuNx8MfCbTPtRqzses,3460
12
- q2rad/q2queries.py,sha256=09OsTt05VBY6Bcn2f7jvqUEWpQO2e248HmKUNuLtnr0,12065
13
- q2rad/q2rad.py,sha256=tsFnQt8XXRcynOXnReVwx0z5K7fSHJFsFpbMvviTWsk,36964
14
- q2rad/q2raddb.py,sha256=ipn43U6CReHXQjXblweaU792zaX4ZPIDFRY4v_agqKU,4327
15
- q2rad/q2reports.py,sha256=j-jyLOgeGU8HUKcstoW8TURx3ntoLJed-2nrjEYk9IQ,79695
16
- q2rad/q2stylesettings.py,sha256=J7eXvljWew-Kn-IWDT5v6j8v3gmKYfzvngscauhe4d4,2971
17
- q2rad/q2utils.py,sha256=OY9Bc8B8CLwuY0hTPZR_3qaOy0YJPmiFAwSsKmqFAWo,9665
18
- q2rad/version.py,sha256=JHcsd54ujcSwDy3O0DC8THAKTEbAUZtcXBbyCa7gGFQ,23
19
- q2rad-0.1.140.dist-info/entry_points.txt,sha256=DmsJQE6f3wYuhdN2h6ARYxSe8_d03paeepfGpdVj5rs,42
20
- q2rad-0.1.140.dist-info/LICENSE,sha256=JRR3LlR18ghhYXT4G2cWgXmnxRvcuVcKlqncWWK4MRY,10347
21
- q2rad-0.1.140.dist-info/METADATA,sha256=RqoM0_ruW58dh9R2Y6-Ark8x-KWBVpYbSsSGdzasNMQ,3388
22
- q2rad-0.1.140.dist-info/WHEEL,sha256=WGfLGfLX43Ei_YORXSnT54hxFygu34kMpcQdmgmEwCQ,88
23
- q2rad-0.1.140.dist-info/RECORD,,