Summary
Several commands produce incorrect or garbled output compared to tabcmd 1, discovered during live server output comparison testing (2026-07).
Note: items 1-5 are fixed in branch jac/fix-output-messages. Items 6-10 are not yet fixed.
1. listsites — SITEID shows internal GUID instead of site content URL ✅ fixed
Current output:
NAME: Default SITEID: 'c873a218-3445-423d-bc07-e6ccb5ec46cb'
Expected (tabcmd 1):
Cause: list_sites_command.py passes site.id (internal UUID) instead of site.content_url.
2. deletegroup — delete log message shows UUID instead of group name ✅ fixed
Current output:
Deleting group 'e475d0c5-cbc2-413a-99b6-6842ca2827b2' from the server...
Expected:
Deleting group 'tabcmd2-test-group' from the server...
Cause: delete_group_command.py passes group_id to the status string instead of args.name.
3. export / get — "Saved" message has double space and missing content name ✅ fixed
Current output:
Saved to 'test_export.pdf'
Expected (tabcmd 1):
===== Saved Regional/Obesity to 'Regional.pdf'
Cause: datasources_and_workbooks_command.py calls export.success with "" as the content name.
4. createsiteusers — error details prints raw Python class name ✅ fixed
Current output:
Error details:
['ServerResponseError']
Expected: human-readable error message (e.g. 404: Item not found)
Cause: create_site_users.py uses e.__class__.__name__ instead of str(e).
5. removeusers — progress message says "from the server" instead of "from group <name>" ✅ fixed
Current output:
Removing users listed in users.csv from the server...
Expected (tabcmd 1):
===== Removing users listed in users.csv from the group silly...
Cause: wrong string key used; new tabcmd.removeusers.group key added.
6. delete — shows full project path with double space
Current output:
Removing '/default/tabcmd2-test-wb' from the server...
Expected:
===== Removing workbook 'tabcmd2-test-wb' from the server...
Two issues: double space (empty content_type when not specified), and the path /default/workbook-name format is not what tabcmd 1 showed. The project path in the message is a required change.
Location: delete_command.py line 50, delete.status string format.
7. refreshextracts — raw i18n key concatenated into error output
Current output:
tabcmd.debug.error_messageError refreshing extract
Expected: a clean error message.
Cause: constants.py:68 uses logger.info(_("tabcmd.debug.error_message") + message) — the key isn't resolving (stale .mo file) and even when it does resolve it produces "Error message: Error refreshing extract" at INFO level when it should be DEBUG. Should be logger.debug.
Location: tabcmd/commands/constants.py line 68.
8. All action lines missing ===== prefix
Current output:
Creating group 'tabcmd2-test-group' on the server...
Succeeded
Expected (tabcmd 1):
===== Creating group 'my-group' on the server...
===== Succeeded
Affects: creategroup, createproject, publish, deletegroup, deleteproject, and others. The ===== prefix on action lines (distinct from the session header lines which already have it) is absent from most command output.
9. login — extra "Fetched user details from server" line; missing "Signing in..." step
Current output:
Connecting to the server...
Fetched user details from server
Succeeded
Expected (tabcmd 1):
===== Connecting to the server...
===== Signing in...
===== Succeeded
10. logout — missing redirect line
Current output:
Expected (tabcmd 1):
===== redirecting to https://.../auth
===== Signed out
Files to change
Summary
Several commands produce incorrect or garbled output compared to tabcmd 1, discovered during live server output comparison testing (2026-07).
Note: items 1-5 are fixed in branch
jac/fix-output-messages. Items 6-10 are not yet fixed.1.
listsites— SITEID shows internal GUID instead of site content URL ✅ fixedCurrent output:
Expected (tabcmd 1):
Cause:
list_sites_command.pypassessite.id(internal UUID) instead ofsite.content_url.2.
deletegroup— delete log message shows UUID instead of group name ✅ fixedCurrent output:
Expected:
Cause:
delete_group_command.pypassesgroup_idto the status string instead ofargs.name.3.
export/get— "Saved" message has double space and missing content name ✅ fixedCurrent output:
Expected (tabcmd 1):
Cause:
datasources_and_workbooks_command.pycallsexport.successwith""as the content name.4.
createsiteusers— error details prints raw Python class name ✅ fixedCurrent output:
Expected: human-readable error message (e.g.
404: Item not found)Cause:
create_site_users.pyusese.__class__.__name__instead ofstr(e).5.
removeusers— progress message says "from the server" instead of "from group <name>" ✅ fixedCurrent output:
Expected (tabcmd 1):
Cause: wrong string key used; new
tabcmd.removeusers.groupkey added.6.
delete— shows full project path with double spaceCurrent output:
Expected:
Two issues: double space (empty
content_typewhen not specified), and the path/default/workbook-nameformat is not what tabcmd 1 showed. The project path in the message is a required change.Location:
delete_command.pyline 50,delete.statusstring format.7.
refreshextracts— raw i18n key concatenated into error outputCurrent output:
Expected: a clean error message.
Cause:
constants.py:68useslogger.info(_("tabcmd.debug.error_message") + message)— the key isn't resolving (stale.mofile) and even when it does resolve it produces"Error message: Error refreshing extract"at INFO level when it should be DEBUG. Should belogger.debug.Location:
tabcmd/commands/constants.pyline 68.8. All action lines missing
=====prefixCurrent output:
Expected (tabcmd 1):
Affects:
creategroup,createproject,publish,deletegroup,deleteproject, and others. The=====prefix on action lines (distinct from the session header lines which already have it) is absent from most command output.9.
login— extra "Fetched user details from server" line; missing "Signing in..." stepCurrent output:
Expected (tabcmd 1):
10.
logout— missing redirect lineCurrent output:
Expected (tabcmd 1):
Files to change
tabcmd/commands/site/list_sites_command.py(✅ fixed)tabcmd/commands/group/delete_group_command.py(✅ fixed)tabcmd/commands/datasources_and_workbooks/datasources_and_workbooks_command.py(✅ fixed)tabcmd/commands/user/create_site_users.py(✅ fixed)tabcmd/commands/user/remove_users_command.py(✅ fixed)tabcmd/locales/en/tabcmd_messages_en.properties(✅ fixed for log statements #5)tabcmd/commands/datasources_and_workbooks/delete_command.py(deleteproject command #6)tabcmd/commands/constants.py(CreateProject command- set up global project path #7)tabcmd/commands/auth/session.py(Deletegroup command #9, Odd to call file constants_errors and then contain class Constants #10)