rda-python-miscs 2.0.10__tar.gz → 2.0.12__tar.gz
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.
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/PKG-INFO +1 -1
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/pyproject.toml +1 -1
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs/pg_rst.py +113 -12
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs.egg-info/PKG-INFO +1 -1
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/LICENSE +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/MANIFEST.in +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/README.md +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/setup.cfg +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs/__init__.py +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs/bash_qsub.py +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs/bashqsub.py +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs/bashqsub.usg +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs/gdex_ls.py +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs/gdexls.py +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs/gdexls.usg +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs/gdexls_standalone.py +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs/pg_docs.py +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs/pg_wget.py +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs/pgwget.py +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs/rda_cp.py +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs/rda_kill.py +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs/rda_mod.py +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs/rda_own.py +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs/rda_ps.py +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs/rda_sub.py +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs/rda_zip.py +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs/rdacp.py +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs/rdacp.usg +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs/rdakill.py +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs/rdakill.usg +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs/rdals.py +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs/rdals.usg +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs/rdamod.py +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs/rdamod.usg +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs/rdaown.py +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs/rdaown.usg +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs/rdaps.py +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs/rdaps.usg +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs/rdasub.py +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs/rdasub.usg +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs/rdazip.py +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs/rdazip.usg +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs/rst_templates/index.rst.temp +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs/rst_templates/section.rst.temp +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs/tcsh_qsub.py +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs/tcshqsub.py +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs/tcshqsub.usg +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs.egg-info/SOURCES.txt +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs.egg-info/dependency_links.txt +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs.egg-info/entry_points.txt +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs.egg-info/requires.txt +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs.egg-info/top_level.txt +0 -0
- {rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/tests/test_miscs.py +0 -0
|
@@ -18,6 +18,7 @@ import re
|
|
|
18
18
|
import inspect
|
|
19
19
|
import argparse
|
|
20
20
|
import importlib
|
|
21
|
+
import importlib.util
|
|
21
22
|
from os import path as op
|
|
22
23
|
from rda_python_common.pg_file import PgFile
|
|
23
24
|
from rda_python_common.pg_util import PgUtil
|
|
@@ -53,6 +54,9 @@ class PgRST(PgFile, PgUtil):
|
|
|
53
54
|
'msarch' : 1,
|
|
54
55
|
'dsupdt' : 1,
|
|
55
56
|
'dsrqst' : 1,
|
|
57
|
+
'viewrqstusage' : 1,
|
|
58
|
+
'dscheck' : 1,
|
|
59
|
+
'viewcheckusage' : 1,
|
|
56
60
|
'gatherxml' : 1,
|
|
57
61
|
'pgconvert' : 1,
|
|
58
62
|
'publish_filelist' : 1,
|
|
@@ -1161,6 +1165,62 @@ class PgRST(PgFile, PgUtil):
|
|
|
1161
1165
|
|
|
1162
1166
|
return opts, alias, origin
|
|
1163
1167
|
|
|
1168
|
+
def load_opts_alias_from_pyfile(self, pyfile):
|
|
1169
|
+
"""Load OPTS and ALIAS from a Python file given by path.
|
|
1170
|
+
|
|
1171
|
+
Uses ``importlib.util.spec_from_file_location`` to import the file
|
|
1172
|
+
without requiring it to be on ``sys.path``. Resolution order mirrors
|
|
1173
|
+
:meth:`load_opts_alias`: class attributes first, then module-level.
|
|
1174
|
+
|
|
1175
|
+
Args:
|
|
1176
|
+
pyfile (str): Absolute or relative path to the Python source file.
|
|
1177
|
+
|
|
1178
|
+
Returns:
|
|
1179
|
+
tuple[dict, dict]: ``(OPTS, ALIAS)`` where ALIAS defaults to ``{}``
|
|
1180
|
+
when not found.
|
|
1181
|
+
|
|
1182
|
+
Raises:
|
|
1183
|
+
SystemExit: via :func:`PgLOG.pglog` (``LGWNEX``) if the file
|
|
1184
|
+
cannot be loaded or ``OPTS`` cannot be found.
|
|
1185
|
+
"""
|
|
1186
|
+
pyfile = op.abspath(pyfile)
|
|
1187
|
+
modname = op.splitext(op.basename(pyfile))[0]
|
|
1188
|
+
try:
|
|
1189
|
+
spec = importlib.util.spec_from_file_location(modname, pyfile)
|
|
1190
|
+
mod = importlib.util.module_from_spec(spec)
|
|
1191
|
+
spec.loader.exec_module(mod)
|
|
1192
|
+
except Exception as exc:
|
|
1193
|
+
self.pglog(
|
|
1194
|
+
"Cannot load module from '{}': {}".format(pyfile, exc),
|
|
1195
|
+
self.LGWNEX,
|
|
1196
|
+
)
|
|
1197
|
+
|
|
1198
|
+
cls = next(
|
|
1199
|
+
(obj for _, obj in inspect.getmembers(mod, inspect.isclass)
|
|
1200
|
+
if obj.__module__ == modname),
|
|
1201
|
+
None,
|
|
1202
|
+
)
|
|
1203
|
+
|
|
1204
|
+
if cls is not None:
|
|
1205
|
+
obj = cls()
|
|
1206
|
+
opts = getattr(obj, 'OPTS', None)
|
|
1207
|
+
alias = getattr(obj, 'ALIAS', None)
|
|
1208
|
+
else:
|
|
1209
|
+
opts = getattr(mod, 'OPTS', None)
|
|
1210
|
+
alias = getattr(mod, 'ALIAS', None)
|
|
1211
|
+
|
|
1212
|
+
if opts is None:
|
|
1213
|
+
self.pglog(
|
|
1214
|
+
"File '{}' does not define OPTS (checked class and "
|
|
1215
|
+
"module level)".format(pyfile),
|
|
1216
|
+
self.LGWNEX,
|
|
1217
|
+
)
|
|
1218
|
+
|
|
1219
|
+
if alias is None:
|
|
1220
|
+
alias = {}
|
|
1221
|
+
|
|
1222
|
+
return opts, alias
|
|
1223
|
+
|
|
1164
1224
|
|
|
1165
1225
|
# ---------------------------------------------------------------------------
|
|
1166
1226
|
# Command-line entry point
|
|
@@ -1171,40 +1231,81 @@ def main():
|
|
|
1171
1231
|
parser = argparse.ArgumentParser(
|
|
1172
1232
|
description=(
|
|
1173
1233
|
"Convert a .usg help document to reStructuredText (.rst) using RST templates. "
|
|
1174
|
-
"OPTS and ALIAS are loaded from rda_python_<docname>/<docname>.py
|
|
1175
|
-
"
|
|
1176
|
-
"
|
|
1177
|
-
"attributes."
|
|
1234
|
+
"OPTS and ALIAS are loaded from rda_python_<docname>/<docname>.py "
|
|
1235
|
+
"(or from --pyfile if given): "
|
|
1236
|
+
"the module is searched first for a class that carries both as class "
|
|
1237
|
+
"attributes, then for module-level OPTS/ALIAS variables."
|
|
1178
1238
|
),
|
|
1179
1239
|
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
1180
1240
|
)
|
|
1181
1241
|
parser.add_argument(
|
|
1182
1242
|
'docname',
|
|
1243
|
+
nargs='?',
|
|
1244
|
+
default=None,
|
|
1183
1245
|
help=(
|
|
1184
1246
|
"Short document name, e.g. 'dsarch' or 'dsupdt'. "
|
|
1185
|
-
"
|
|
1186
|
-
"
|
|
1187
|
-
"level or as class attributes."
|
|
1247
|
+
"Required unless --usgfile is given, in which case the name is "
|
|
1248
|
+
"derived from the .usg filename by removing the extension."
|
|
1188
1249
|
),
|
|
1189
1250
|
)
|
|
1190
1251
|
parser.add_argument(
|
|
1191
|
-
'--
|
|
1252
|
+
'-u', '--usgfile',
|
|
1253
|
+
default=None,
|
|
1254
|
+
metavar='FILE',
|
|
1255
|
+
help=(
|
|
1256
|
+
"Path to the .usg source document. When given, docname is derived "
|
|
1257
|
+
"from the filename by removing the .usg extension, and ORIGIN is set "
|
|
1258
|
+
"to the directory containing the file."
|
|
1259
|
+
),
|
|
1260
|
+
)
|
|
1261
|
+
parser.add_argument(
|
|
1262
|
+
'-p', '--pyfile',
|
|
1263
|
+
default=None,
|
|
1264
|
+
metavar='FILE',
|
|
1265
|
+
help=(
|
|
1266
|
+
"Path to a Python file that defines OPTS (and optionally ALIAS) "
|
|
1267
|
+
"either at module level or as class attributes. When given, the "
|
|
1268
|
+
"module-import convention (rda_python_<docname>/<docname>.py) is "
|
|
1269
|
+
"bypassed."
|
|
1270
|
+
),
|
|
1271
|
+
)
|
|
1272
|
+
parser.add_argument(
|
|
1273
|
+
'-d', '--docdir',
|
|
1192
1274
|
default=None,
|
|
1193
1275
|
metavar='DIR',
|
|
1194
1276
|
help=(
|
|
1195
1277
|
"Root directory under which the per-document RST output directory "
|
|
1196
1278
|
"is created (default: current working directory). "
|
|
1197
|
-
"The final output lands in <docdir
|
|
1279
|
+
"The final output lands in <docdir>/."
|
|
1198
1280
|
),
|
|
1199
1281
|
)
|
|
1200
1282
|
args = parser.parse_args()
|
|
1201
1283
|
|
|
1202
1284
|
pg = PgRST()
|
|
1203
|
-
|
|
1204
|
-
|
|
1285
|
+
|
|
1286
|
+
# Resolve docname: explicit arg takes priority, then derive from --usgfile.
|
|
1287
|
+
if args.docname:
|
|
1288
|
+
docname = args.docname
|
|
1289
|
+
elif args.usgfile:
|
|
1290
|
+
docname = op.splitext(op.basename(args.usgfile))[0]
|
|
1291
|
+
else:
|
|
1292
|
+
parser.error("docname is required when --usgfile is not given")
|
|
1293
|
+
|
|
1294
|
+
# Set ORIGIN from --usgfile directory when provided.
|
|
1295
|
+
if args.usgfile:
|
|
1296
|
+
pg.DOCS['ORIGIN'] = op.dirname(op.abspath(args.usgfile)) or os.getcwd()
|
|
1297
|
+
|
|
1298
|
+
# Load OPTS/ALIAS: from --pyfile path or via module-import convention.
|
|
1299
|
+
if args.pyfile:
|
|
1300
|
+
opts, alias = pg.load_opts_alias_from_pyfile(args.pyfile)
|
|
1301
|
+
else:
|
|
1302
|
+
opts, alias, origin = pg.load_opts_alias(docname)
|
|
1303
|
+
if not args.usgfile:
|
|
1304
|
+
pg.DOCS['ORIGIN'] = origin
|
|
1305
|
+
|
|
1205
1306
|
if args.docdir is not None:
|
|
1206
1307
|
pg.DOCS['DOCDIR'] = args.docdir
|
|
1207
|
-
pg.process_docs(
|
|
1308
|
+
pg.process_docs(docname, opts, alias)
|
|
1208
1309
|
|
|
1209
1310
|
if __name__ == "__main__":
|
|
1210
1311
|
main()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs/gdexls_standalone.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
{rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs.egg-info/entry_points.txt
RENAMED
|
File without changes
|
{rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs.egg-info/requires.txt
RENAMED
|
File without changes
|
{rda_python_miscs-2.0.10 → rda_python_miscs-2.0.12}/src/rda_python_miscs.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|