robotframework-robotlog2rqm 1.6.0__py3-none-any.whl → 1.7.0__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.
Binary file
RobotLog2RQM/rqmtool.py CHANGED
@@ -30,6 +30,7 @@ import argparse
30
30
  import os
31
31
  import csv
32
32
  import json
33
+ import base64
33
34
 
34
35
  from RobotLog2RQM.CRQM import CRQMClient
35
36
  from RobotLog2RQM.logger import Logger
@@ -78,12 +79,22 @@ Process provided argument(s) from command line.
78
79
  required=True,
79
80
  help="RQM username."
80
81
  )
81
- parser.add_argument(
82
+ # exclusive group to provide only --password, --password-enc or --password-file
83
+ group_password = parser.add_mutually_exclusive_group(required=True)
84
+ group_password.add_argument(
82
85
  "--password",
83
- required=True,
84
86
  help="RQM password."
85
87
  )
86
- # exclusive group to provdve only --testsuite or --testplan
88
+ group_password.add_argument(
89
+ "--password-enc",
90
+ help="RQM password as base64-encoded string."
91
+ )
92
+ group_password.add_argument(
93
+ "--password-file",
94
+ help="Path to a file containing the password. If the content starts with 'b64:', "
95
+ "the remainder is treated as base64-encoded."
96
+ )
97
+ # exclusive group to provide only --testsuite or --testplan
87
98
  group = parser.add_mutually_exclusive_group(required=True)
88
99
  group.add_argument(
89
100
  "--testplan",
@@ -126,6 +137,36 @@ Process provided argument(s) from command line.
126
137
  help="Base name for output files.")
127
138
  return parser.parse_args()
128
139
 
140
+ def __resolve_password(args):
141
+ """
142
+ Resolve password from --password-enc, --password-file, or --password.
143
+ Order of precedence: password-enc > password-file > password.
144
+ """
145
+ if args.password_enc:
146
+ try:
147
+ return base64.b64decode(args.password_enc).decode("utf-8")
148
+ except Exception as e:
149
+ raise ValueError(f"Failed to decode --password-enc: {e}")
150
+
151
+ if args.password_file:
152
+ if not os.path.isfile(args.password_file):
153
+ raise FileNotFoundError(f"Password file not found: {args.password_file}")
154
+ with open(args.password_file, "r", encoding="utf-8") as f:
155
+ content = f.read().strip()
156
+ # If file content starts with 'b64:', decode the remainder
157
+ if content.startswith("b64:"):
158
+ enc = content[4:]
159
+ try:
160
+ return base64.b64decode(enc).decode("utf-8")
161
+ except Exception as e:
162
+ raise ValueError(f"Failed to decode base64 in password file: {e}")
163
+ return content
164
+
165
+ if args.password:
166
+ return args.password
167
+
168
+ raise ValueError("No password provided. Use --password-enc, --password-file, or --password.")
169
+
129
170
  def __validate_arguments(arguments):
130
171
  """
131
172
  Validate and normalize command line arguments.
@@ -345,7 +386,14 @@ Main entry point for RQMTool CLI.
345
386
  __validate_arguments(args)
346
387
  Logger.config(dryrun=args.dryrun)
347
388
 
348
- RQMClient = CRQMClient(args.user, args.password, args.project, args.host)
389
+ # Resolve password securely (supports base64 and file-based)
390
+ try:
391
+ resolved_password = __resolve_password(args)
392
+ except Exception as reason:
393
+ Logger.log_error(f"Could not resolve password: '{str(reason)}'.")
394
+ return
395
+
396
+ RQMClient = CRQMClient(args.user, resolved_password, args.project, args.host)
349
397
  try:
350
398
  bSuccess = RQMClient.login()
351
399
  RQMClient.config(stream=args.stream, baseline=args.baseline)
RobotLog2RQM/version.py CHANGED
@@ -18,5 +18,5 @@
18
18
  #
19
19
  # Version and date of RobotLog2RQM
20
20
  #
21
- VERSION = "1.6.0"
22
- VERSION_DATE = "10.11.2025"
21
+ VERSION = "1.7.0"
22
+ VERSION_DATE = "07.01.2026"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: robotframework-robotlog2rqm
3
- Version: 1.6.0
3
+ Version: 1.7.0
4
4
  Summary: Imports robot result(s) to IBM Rational Quality Manager (RQM)
5
5
  Home-page: https://github.com/test-fullautomation/robotframework-robotlog2rqm
6
6
  Author: Tran Duy Ngoan
@@ -1,11 +1,11 @@
1
1
  RobotLog2RQM/CRQM.py,sha256=NxFbIKvTOepkdNmv0V9aQCaU2jSGhuHO707XTglMF_A,69357
2
- RobotLog2RQM/RobotLog2RQM.pdf,sha256=--VWUBLqZOtfQXy9O8N28MvOT7VMRPg9fSAQXl8coK0,358016
2
+ RobotLog2RQM/RobotLog2RQM.pdf,sha256=juRMokH0l5nlXxS4j3UYWOZSwzJ6e3PbvXGor1dDeoA,359822
3
3
  RobotLog2RQM/__init__.py,sha256=YKDTJjDsnQkr5X-gjjO8opwKUVKm6kc8sIUpURYMk48,596
4
4
  RobotLog2RQM/__main__.py,sha256=JabttEncy80antJWeGVmjoXyiF1DyXxkxdW4xLuHzT0,681
5
5
  RobotLog2RQM/logger.py,sha256=FnZZqssOcrF5yK6wxkgifScoQcFGrqrvzLvXWY3V-9A,4252
6
6
  RobotLog2RQM/robotlog2rqm.py,sha256=zX8ibJqeQTPwtRF6zX-qHtT1d6jj1EI90vpaUL77FEM,30161
7
- RobotLog2RQM/rqmtool.py,sha256=s-rTI1MBby0SfQIBP-WRx5_frdtQBss86I9i04MBuy4,10564
8
- RobotLog2RQM/version.py,sha256=3E-s2UEJ2s5J5UVh1TPTW-T21mrSzBfY_KjCv-v7VQk,916
7
+ RobotLog2RQM/rqmtool.py,sha256=Lz4KSP3cDhrurbqdI1KHtCB-5a8-_oZIGidkpMpy4Tg,12400
8
+ RobotLog2RQM/version.py,sha256=oVbL29-7ny1ggCEV0zCBPuQgsLryCuPzFd5UnzXAU5M,916
9
9
  RobotLog2RQM/RQM_templates/buildrecord.xml,sha256=uGot7pNOjPR8do0JsJi0Lz3OCU9NMhODRd428QgvHh4,1498
10
10
  RobotLog2RQM/RQM_templates/configuration.xml,sha256=NrFDv51fuGhgeMiZuRhQ5q_UJ0u_pWzdxisIF5AJs74,1378
11
11
  RobotLog2RQM/RQM_templates/executionresult.xml,sha256=WTp4qDk29peBc0ll6GHVXX_kF_YBsOVjy9vBzoz7_2k,2160
@@ -14,9 +14,9 @@ RobotLog2RQM/RQM_templates/suiteexecutionrecord.xml,sha256=9GAs2WqZMkFJSNEZULm9B
14
14
  RobotLog2RQM/RQM_templates/testcase.xml,sha256=zovFKj-37QHn2S8mMA_9RnAJ3zBmDJkJj31yelsnFFI,2167
15
15
  RobotLog2RQM/RQM_templates/testsuite.xml,sha256=r2ijEsyPoE7qzCtUxgIHDOEcqUveDN4SMf9HSE9b0ZU,1326
16
16
  RobotLog2RQM/RQM_templates/testsuitelog.xml,sha256=l-NlaCyk6Ben76PElXKOHfMlEvyQ-e9MOZ6-F9HvwDQ,1920
17
- robotframework_robotlog2rqm-1.6.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
18
- robotframework_robotlog2rqm-1.6.0.dist-info/METADATA,sha256=k834p4eH88hGgfxhwifUu7ms7TXY83tJCty1uIS8WCA,12028
19
- robotframework_robotlog2rqm-1.6.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
20
- robotframework_robotlog2rqm-1.6.0.dist-info/entry_points.txt,sha256=yLoNhxm2lfj3FxMx3Orct8db4qkPLII8u241GAH6BB0,111
21
- robotframework_robotlog2rqm-1.6.0.dist-info/top_level.txt,sha256=jb_Gt6W44FoOLtGfBe7RzqCLaquhihkEWvSI1zjXDHc,13
22
- robotframework_robotlog2rqm-1.6.0.dist-info/RECORD,,
17
+ robotframework_robotlog2rqm-1.7.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
18
+ robotframework_robotlog2rqm-1.7.0.dist-info/METADATA,sha256=zvP30zO-1p_yQhu3Hne9TOLGu8KU0Ucj-RmsdctwrsI,12028
19
+ robotframework_robotlog2rqm-1.7.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
20
+ robotframework_robotlog2rqm-1.7.0.dist-info/entry_points.txt,sha256=yLoNhxm2lfj3FxMx3Orct8db4qkPLII8u241GAH6BB0,111
21
+ robotframework_robotlog2rqm-1.7.0.dist-info/top_level.txt,sha256=jb_Gt6W44FoOLtGfBe7RzqCLaquhihkEWvSI1zjXDHc,13
22
+ robotframework_robotlog2rqm-1.7.0.dist-info/RECORD,,