q2rad 0.1.219__py3-none-any.whl → 0.1.221__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 +28 -3
- q2rad/q2appselector.py +1 -1
- q2rad/q2extensions.py +64 -11
- q2rad/q2forms.py +1 -1
- q2rad/q2lines.py +2 -1
- q2rad/q2modules.py +7 -3
- q2rad/q2rad.py +19 -7
- q2rad/version.py +1 -1
- {q2rad-0.1.219.dist-info → q2rad-0.1.221.dist-info}/METADATA +1 -1
- {q2rad-0.1.219.dist-info → q2rad-0.1.221.dist-info}/RECORD +13 -13
- {q2rad-0.1.219.dist-info → q2rad-0.1.221.dist-info}/LICENSE +0 -0
- {q2rad-0.1.219.dist-info → q2rad-0.1.221.dist-info}/WHEEL +0 -0
- {q2rad-0.1.219.dist-info → q2rad-0.1.221.dist-info}/entry_points.txt +0 -0
q2rad/q2appmanager.py
CHANGED
|
@@ -173,10 +173,18 @@ class AppManager(Q2Form):
|
|
|
173
173
|
"load_app",
|
|
174
174
|
"From JSON file",
|
|
175
175
|
control="button",
|
|
176
|
+
mess="Excluding _ prefixes",
|
|
176
177
|
# datalen=10,
|
|
177
178
|
valid=self.import_app,
|
|
178
179
|
)
|
|
179
|
-
|
|
180
|
+
self.add_control(
|
|
181
|
+
"load_app_all",
|
|
182
|
+
"From JSON file *",
|
|
183
|
+
mess="Import all, including _ prefixes",
|
|
184
|
+
control="button",
|
|
185
|
+
# datalen=10,
|
|
186
|
+
valid=self.import_app_all,
|
|
187
|
+
)
|
|
180
188
|
if self.q2_app.app_url:
|
|
181
189
|
self.add_control(
|
|
182
190
|
"load_q2market_app",
|
|
@@ -455,6 +463,19 @@ class AppManager(Q2Form):
|
|
|
455
463
|
# self.q2_app.migrate_db_data()
|
|
456
464
|
self.q2_app.open_selected_app()
|
|
457
465
|
|
|
466
|
+
def import_app_all(self, file=""):
|
|
467
|
+
filetype = "JSON(*.json)"
|
|
468
|
+
if not file:
|
|
469
|
+
file, filetype = q2app.q2_app.get_open_file_dialoq("Import Application", filter=filetype)
|
|
470
|
+
|
|
471
|
+
if not file or not os.path.isfile(file):
|
|
472
|
+
return
|
|
473
|
+
|
|
474
|
+
data = json.load(open(file))
|
|
475
|
+
self.import_json_app(data, prefix="*")
|
|
476
|
+
# self.q2_app.migrate_db_data()
|
|
477
|
+
self.q2_app.open_selected_app()
|
|
478
|
+
|
|
458
479
|
@staticmethod
|
|
459
480
|
def import_json_app(data, db=None, prefix=""):
|
|
460
481
|
if db is None:
|
|
@@ -469,7 +490,9 @@ class AppManager(Q2Form):
|
|
|
469
490
|
continue
|
|
470
491
|
wait_row = Q2WaitShow(len(data[table]))
|
|
471
492
|
if table != "packages":
|
|
472
|
-
if prefix:
|
|
493
|
+
if prefix == "*":
|
|
494
|
+
db.cursor(f"delete from `{table}`")
|
|
495
|
+
elif prefix:
|
|
473
496
|
db.cursor(f'delete from `{table}` where substr(name,1,{len(prefix)}) = "{prefix}"')
|
|
474
497
|
else:
|
|
475
498
|
db.cursor(f'delete from `{table}` where substr(name,1,1) <> "_"')
|
|
@@ -484,7 +507,9 @@ class AppManager(Q2Form):
|
|
|
484
507
|
):
|
|
485
508
|
continue
|
|
486
509
|
else:
|
|
487
|
-
if prefix:
|
|
510
|
+
if prefix == "*":
|
|
511
|
+
pass
|
|
512
|
+
elif prefix:
|
|
488
513
|
if not row.get("name").startswith(prefix):
|
|
489
514
|
continue
|
|
490
515
|
else:
|
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
|
|
@@ -40,7 +42,9 @@ class Q2Extensions(Q2Form):
|
|
|
40
42
|
self.add_control("prefix", _("Name"), datatype="char", datalen=50, pk="*")
|
|
41
43
|
self.add_control("seq", _("Sequence number"), datatype="int")
|
|
42
44
|
self.add_control("version", _("Version"), datatype="char", datalen=16, readonly=True)
|
|
43
|
-
self.add_control("
|
|
45
|
+
self.add_control("q2market_path", _("q2market folder"), datatype="char", datalen=255)
|
|
46
|
+
self.add_control("q2market_url", _("q2market url"), datatype="char", datalen=255)
|
|
47
|
+
self.add_control("checkupdates", _("Check for updates"), control="check", datatype="char", datalen=1)
|
|
44
48
|
self.add_control("comment", _("Comment"), datatype="text")
|
|
45
49
|
|
|
46
50
|
cursor: Q2Cursor = self.q2_app.db_data.table(table_name="extensions")
|
|
@@ -49,11 +53,19 @@ class Q2Extensions(Q2Form):
|
|
|
49
53
|
self.set_model(model)
|
|
50
54
|
self.add_action("/crud")
|
|
51
55
|
self.add_action("Export|as JSON file", self.export_json, eof_disabled=True)
|
|
52
|
-
if os.path.isdir(self.q2_app.q2market_path):
|
|
53
|
-
|
|
56
|
+
# if os.path.isdir(self.q2_app.q2market_path):
|
|
57
|
+
self.add_action("Export|to q2Market", self.export_q2market, eof_disabled=True)
|
|
54
58
|
self.add_action("Import|from JSON file", self.import_json, eof_disabled=True)
|
|
55
59
|
self.add_action("Import|from q2Market", self.import_q2market, eof_disabled=True)
|
|
56
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
|
+
|
|
57
69
|
def info(self):
|
|
58
70
|
pass
|
|
59
71
|
|
|
@@ -96,42 +108,48 @@ class Q2Extensions(Q2Form):
|
|
|
96
108
|
|
|
97
109
|
def export_q2market(self):
|
|
98
110
|
prefix = self.r.prefix
|
|
99
|
-
if
|
|
111
|
+
q2market_path = self.r.q2market_path if self.r.q2market_path else self.q2_app.q2market_path
|
|
112
|
+
q2market_url = self.r.q2market_url if self.r.q2market_url else self.q2_app.q2market_url
|
|
113
|
+
if not os.path.isdir(q2market_path):
|
|
114
|
+
q2Mess("No q2market path!")
|
|
115
|
+
return
|
|
116
|
+
if not q2market_url:
|
|
100
117
|
q2Mess("No App URL!")
|
|
101
118
|
return
|
|
102
119
|
if (
|
|
103
120
|
q2AskYN(
|
|
104
121
|
f"<p>You are about to export Extension ({prefix}) "
|
|
105
|
-
f"<p>into folder {os.path.abspath(
|
|
122
|
+
f"<p>into folder {os.path.abspath(q2market_path)}"
|
|
123
|
+
f"<p>and upload into {os.path.abspath(q2market_url)}"
|
|
106
124
|
"<p>Are you sure?"
|
|
107
125
|
)
|
|
108
126
|
!= 2
|
|
109
127
|
):
|
|
110
128
|
return
|
|
111
129
|
|
|
112
|
-
q2market_file = f"{
|
|
130
|
+
q2market_file = f"{q2market_path}/q2market.json"
|
|
113
131
|
if os.path.isfile(q2market_file):
|
|
114
132
|
q2market = json.load(open(q2market_file))
|
|
115
133
|
else:
|
|
116
134
|
q2market = {}
|
|
117
135
|
|
|
118
136
|
version = datetime.now().strftime(r"%Y-%m-%d %H:%M:%S")
|
|
119
|
-
ext_url = f"{
|
|
137
|
+
ext_url = f"{q2market_url}/{prefix}"
|
|
120
138
|
q2market[ext_url] = {
|
|
121
139
|
"ext_title": prefix,
|
|
122
140
|
"ext_version": version,
|
|
123
141
|
"ext_description": self.r.comment,
|
|
124
142
|
}
|
|
125
143
|
json.dump(q2market, open(q2market_file, "w"), indent=2)
|
|
126
|
-
open(f"{
|
|
144
|
+
open(f"{q2market_path}/{prefix}.version", "w").write(version)
|
|
127
145
|
self.db.update("extensions", {"prefix": prefix, "version": version})
|
|
128
146
|
|
|
129
|
-
self.export_json(f"{
|
|
147
|
+
self.export_json(f"{q2market_path}/{prefix}.json")
|
|
130
148
|
|
|
131
149
|
trm = Q2Terminal(callback=print)
|
|
132
150
|
|
|
133
151
|
def worker():
|
|
134
|
-
trm.run(f"cd {
|
|
152
|
+
trm.run(f"cd {q2market_path}")
|
|
135
153
|
trm.run("git add -A")
|
|
136
154
|
trm.run(f"""git commit -a -m"{version}" """)
|
|
137
155
|
|
|
@@ -140,4 +158,39 @@ class Q2Extensions(Q2Form):
|
|
|
140
158
|
trm.close()
|
|
141
159
|
|
|
142
160
|
def import_q2market(self):
|
|
143
|
-
|
|
161
|
+
q2market_url = self.r.q2market_url if self.r.q2market_url else self.q2_app.q2market_url
|
|
162
|
+
if q2market_url:
|
|
163
|
+
q2app.q2_app.check_ext_update(self.r.prefix, force_update=True)
|
|
164
|
+
else:
|
|
165
|
+
q2Mess("No App URL!")
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
class Q2MarketExt(Q2Form):
|
|
169
|
+
def __init__(self, title=""):
|
|
170
|
+
super().__init__("q2Market")
|
|
171
|
+
self.no_view_action = True
|
|
172
|
+
self.heap._return = None
|
|
173
|
+
|
|
174
|
+
def on_init(self):
|
|
175
|
+
self.add_control("ext_title", _("Name"), datatype="char", datalen=100)
|
|
176
|
+
self.add_control("ext_version", _("Version"), datatype="char", datalen=100)
|
|
177
|
+
self.add_control("ext_description", _("Description"), control="text", datatype="char", datalen=100)
|
|
178
|
+
self.add_control("ext_url", _("Path"), datatype="char", datalen=100)
|
|
179
|
+
|
|
180
|
+
q2market_catalogue_url = f"{self.q2_app.q2market_url}/q2market.json"
|
|
181
|
+
data = json.loads(read_url(q2market_catalogue_url).decode("utf-8"))
|
|
182
|
+
rez = []
|
|
183
|
+
for x in data:
|
|
184
|
+
if "ext_title" in data[x]:
|
|
185
|
+
rec = data[x]
|
|
186
|
+
rec["ext_url"] = x
|
|
187
|
+
rez.append(rec)
|
|
188
|
+
model = Q2Model()
|
|
189
|
+
model.set_records(rez)
|
|
190
|
+
self.set_model(model)
|
|
191
|
+
self.add_action_view()
|
|
192
|
+
self.add_action("Select", self.select_row, tag="select", eof_disabled=1)
|
|
193
|
+
|
|
194
|
+
def select_row(self):
|
|
195
|
+
self.heap._return = self.r.ext_title
|
|
196
|
+
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(
|
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,7 +322,7 @@ 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)
|
|
325
|
+
self.open_selected_app(True, migrate_db_data=False)
|
|
326
326
|
self.check_app_update()
|
|
327
327
|
self.check_ext_update()
|
|
328
328
|
self.on_new_tab()
|
|
@@ -330,14 +330,18 @@ class Q2RadApp(Q2App):
|
|
|
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
|
-
|
|
340
|
-
|
|
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!")
|
|
@@ -926,7 +930,7 @@ class Q2RadApp(Q2App):
|
|
|
926
930
|
AppManager.import_json_app(data)
|
|
927
931
|
self.open_selected_app()
|
|
928
932
|
|
|
929
|
-
def check_ext_update(self, prefix="", force_update=False):
|
|
933
|
+
def check_ext_update(self, prefix="", force_update=False, _ext_url=""):
|
|
930
934
|
if self.frozen:
|
|
931
935
|
return
|
|
932
936
|
if prefix:
|
|
@@ -935,7 +939,14 @@ class Q2RadApp(Q2App):
|
|
|
935
939
|
cu = q2cursor(f"select * from extensions where checkupdates<>'' order by seq")
|
|
936
940
|
for row in cu.records():
|
|
937
941
|
_prefix = row["prefix"]
|
|
938
|
-
|
|
942
|
+
|
|
943
|
+
if _ext_url:
|
|
944
|
+
ext_url = f"{_ext_url}/{_prefix}"
|
|
945
|
+
elif self.app_url:
|
|
946
|
+
ext_url = f"{os.path.dirname(self.app_url)}/{_prefix}"
|
|
947
|
+
else:
|
|
948
|
+
ext_url = f"{self.q2market_url}/{_prefix}"
|
|
949
|
+
|
|
939
950
|
ext_version = row["version"]
|
|
940
951
|
if not os.path.isdir(self.q2market_path) or force_update:
|
|
941
952
|
try:
|
|
@@ -963,6 +974,7 @@ class Q2RadApp(Q2App):
|
|
|
963
974
|
):
|
|
964
975
|
data = json.load(open_url(ext_url + ".json")) # noqa F405
|
|
965
976
|
AppManager.import_json_app(data, prefix=_prefix)
|
|
977
|
+
update("extensions", {"prefix":row["prefix"], "version":market_version})
|
|
966
978
|
self.open_selected_app()
|
|
967
979
|
|
|
968
980
|
def update_app_packages(self):
|
q2rad/version.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "0.1.
|
|
1
|
+
__version__ = "0.1.221"
|
|
@@ -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=
|
|
5
|
-
q2rad/q2appselector.py,sha256
|
|
4
|
+
q2rad/q2appmanager.py,sha256=4c1h5I_7f4S7Ef9nDnDQthRqPC-uyK8v8B8zmhdhtr0,20567
|
|
5
|
+
q2rad/q2appselector.py,sha256=bjl4MDg9DoU1h6NZOQDElaIGURjVQwiHnsUwr3kp3nc,18813
|
|
6
6
|
q2rad/q2constants.py,sha256=dQtN4OMvZw0FATDAFYjolI7eGMVUnNnbTl6qM-ggZ4I,3416
|
|
7
|
-
q2rad/q2extensions.py,sha256=
|
|
8
|
-
q2rad/q2forms.py,sha256=
|
|
9
|
-
q2rad/q2lines.py,sha256=
|
|
7
|
+
q2rad/q2extensions.py,sha256=iQz8_GlMCm8g9LOR3aP3YSBgi9rD5i1YkuNaxRiTn5g,7541
|
|
8
|
+
q2rad/q2forms.py,sha256=e9FrhXjvi9ZmrhRBmnmsHoPxDQJqsanLnsPjY6rjaQI,11122
|
|
9
|
+
q2rad/q2lines.py,sha256=hGdEOdUmBdBpfJ4jHBrXR4gLRXCrgn0dlywsH8nbJ6Q,19185
|
|
10
10
|
q2rad/q2make.py,sha256=wXoyBUwf2zaAl9JjWDCbjAteUElRq0O7ippyaMY9eug,6476
|
|
11
11
|
q2rad/q2market.py,sha256=RNXTNv-fFUgbzBGhHPNXlzGjsAHAtz71BRbTErJarNo,2641
|
|
12
|
-
q2rad/q2modules.py,sha256=
|
|
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
|
|
15
|
+
q2rad/q2rad.py,sha256=5IfUu4VHhqVuygem5ZwWFdj1WL_1VyXSKLngaVtbxbo,52313
|
|
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=
|
|
21
|
-
q2rad-0.1.
|
|
22
|
-
q2rad-0.1.
|
|
23
|
-
q2rad-0.1.
|
|
24
|
-
q2rad-0.1.
|
|
25
|
-
q2rad-0.1.
|
|
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,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|