potiuk commented on issue #30:
URL: 
https://github.com/apache/tooling-releases-client/issues/30#issuecomment-4919008094

   BTW piping to jq does not really work in a few cases - because the json 
output might be sent in "stderr" and it's sometimes mangled wiht non-json 
messages.
   
   Stdout does not work: 
   
   > atr vote start magpie 0.1.0 00011  \
   >   -m [email protected] --duration 72 \
   >   --subject "[VOTE] Release Apache Magpie 0.1.0 from 0.1.0-rc1" | jq
   > atr: error: Error message from the API:
   > 500 https://release-test.apache.org/api/vote/start
   > {"error":"greenlet_spawn has not been called; can't call await_only() 
here. Was IO attempted in an unexpected place? (Background on this error at: 
https://sqlalche.me/e/20/xd2s)","exception_type":"MissingGreenlet","request_id":"c40ad6d7-2abe-4feb-a18c-3368c06fd58e","traceback":"Traceback
 (most recent call last):\n  File 
\"/opt/atr/.venv/lib/python3.14/site-packages/quart/app.py\", line 1500, in 
full_dispatch_request\n    result = await 
self.dispatch_request(request_context)\n             
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File 
\"/opt/atr/.venv/lib/python3.14/site-packages/quart/app.py\", line 1597, in 
dispatch_request\n    return await 
self.ensure_async(handler)(**request_.view_args)  # type: 
ignore[return-value]\n           
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File 
\"/opt/atr/atr/blueprints/api.py\", line 250, in checked\n    return await 
inner(*args, **kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File 
\"/opt/atr/.venv/lib/python3.14/sit
 e-packages/quart_schema/validation.py\", line 171, in wrapper\n    return 
await current_app.ensure_async(func)(*args, data=model, **kwargs)\n           
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File 
\"/opt/atr/.venv/lib/python3.14/site-packages/quart_schema/validation.py\", 
line 210, in wrapper\n    result = await current_app.ensure_async(func)(*args, 
**kwargs)\n             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n 
 File \"/opt/atr/atr/blueprints/api.py\", line 96, in wrapper\n    result = 
await handler(**kwargs)\n             ^^^^^^^^^^^^^^^^^^^^^^^\n  File 
\"/opt/atr/atr/api/__init__.py\", line 1970, in vote_start\n    task = await 
warm.vote.start(\n           ^^^^^^^^^^^^^^^^^^^^^^\n    ...<15 lines>...\n    
)\n    ^\n  File \"/opt/atr/atr/storage/writers/vote.py\", line 412, in start\n 
   permitted_recipients = util.permitted_podling_first_round_recipients(\n      
  self.__asf_uid,\n    ...<2 lines>...\n        project=release.project,\n
     )\n  File \"/opt/atr/atr/util.py\", line 1168, in 
permitted_podling_first_round_recipients\n    recipients = 
permitted_voting_recipients(asf_uid, committee_key, project=project)\n  File 
\"/opt/atr/atr/util.py\", line 1190, in permitted_voting_recipients\n    
_add_policy_recipients(recipients, project, sql.RecipientAction.VOTE)\n    
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File 
\"/opt/atr/atr/util.py\", line 1710, in _add_policy_recipients\n    to, cc, bcc 
= project.policy_recipients(action)\n                  
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^\n  File \"/opt/atr/atr/models/sql.py\", line 
1135, in policy_recipients\n    policy = self.release_policy\n             
^^^^^^^^^^^^^^^^^^^\n  File 
\"/opt/atr/.venv/lib/python3.14/site-packages/sqlalchemy/orm/attributes.py\", 
line 569, in __get__\n    return self.impl.get(state, dict_)  # type: 
ignore[no-any-return]\n           ~~~~~~~~~~~~~^^^^^^^^^^^^^^\n  File 
\"/opt/atr/.venv/lib/python3.14/site-packages/
 sqlalchemy/orm/attributes.py\", line 1096, in get\n    value = 
self._fire_loader_callables(state, key, passive)\n  File 
\"/opt/atr/.venv/lib/python3.14/site-packages/sqlalchemy/orm/attributes.py\", 
line 1131, in _fire_loader_callables\n    return self.callable_(state, 
passive)\n           ~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^\n  File 
\"/opt/atr/.venv/lib/python3.14/site-packages/sqlalchemy/orm/strategies.py\", 
line 978, in _load_for_state\n    return self._emit_lazyload(\n           
~~~~~~~~~~~~~~~~~~~^\n        session,\n        ^^^^^^^^\n    ...<7 lines>...\n 
       execution_options,\n        ^^^^^^^^^^^^^^^^^^\n    )\n    ^\n  File 
\"/opt/atr/.venv/lib/python3.14/site-packages/sqlalchemy/orm/strategies.py\", 
line 1079, in _emit_lazyload\n    return loading.load_on_pk_identity(\n         
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~^\n        session,\n        ^^^^^^^^\n    ...<3 
lines>...\n        execution_options=execution_options,\n        
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n    )\n    ^\n  File 
 \"/opt/atr/.venv/lib/python3.14/site-packages/sqlalchemy/orm/loading.py\", 
line 695, in load_on_pk_identity\n    session.execute(\n    ~~~~~~~~~~~~~~~^\n  
      q,\n        ^^\n    ...<2 lines>...\n        
bind_arguments=bind_arguments,\n        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n    )\n 
   ^\n  File 
\"/opt/atr/.venv/lib/python3.14/site-packages/sqlalchemy/orm/session.py\", line 
2373, in execute\n    return self._execute_internal(\n           
~~~~~~~~~~~~~~~~~~~~~~^\n        statement,\n        ^^^^^^^^^^\n    ...<4 
lines>...\n        _add_event=_add_event,\n        ^^^^^^^^^^^^^^^^^^^^^^\n    
)\n    ^\n  File 
\"/opt/atr/.venv/lib/python3.14/site-packages/sqlalchemy/orm/session.py\", line 
2271, in _execute_internal\n    result: Result[Any] = 
compile_state_cls.orm_execute_statement(\n                          
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^\n        self,\n        ^^^^^\n    
...<4 lines>...\n        conn,\n        ^^^^^\n    )\n    ^\n  File 
\"/opt/atr/.venv/lib/python3.14/site
 -packages/sqlalchemy/orm/context.py\", line 306, in orm_execute_statement\n    
result = conn.execute(\n        statement, params or {}, 
execution_options=execution_options\n    )\n  File 
\"/opt/atr/.venv/lib/python3.14/site-packages/sqlalchemy/engine/base.py\", line 
1421, in execute\n    return meth(\n        self,\n        
distilled_parameters,\n        execution_options or NO_OPTIONS,\n    )\n  File 
\"/opt/atr/.venv/lib/python3.14/site-packages/sqlalchemy/sql/elements.py\", 
line 526, in _execute_on_connection\n    return 
connection._execute_clauseelement(\n           
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^\n        self, distilled_params, 
execution_options\n        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n    )\n   
 ^\n  File 
\"/opt/atr/.venv/lib/python3.14/site-packages/sqlalchemy/engine/base.py\", line 
1643, in _execute_clauseelement\n    ret = self._execute_context(\n        
dialect,\n    ...<8 lines>...\n        cache_hit=cache_hit,\n    )\n  File 
\"/opt/atr/.venv/lib/python3.14/
 site-packages/sqlalchemy/engine/base.py\", line 1848, in _execute_context\n    
return self._exec_single_context(\n           ~~~~~~~~~~~~~~~~~~~~~~~~~^\n      
  dialect, context, statement, parameters\n        
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n    )\n    ^\n  File 
\"/opt/atr/.venv/lib/python3.14/site-packages/sqlalchemy/engine/base.py\", line 
1988, in _exec_single_context\n    self._handle_dbapi_exception(\n    
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^\n        e, str_statement, effective_parameters, 
cursor, context\n        
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n    )\n    ^\n  File 
\"/opt/atr/.venv/lib/python3.14/site-packages/sqlalchemy/engine/base.py\", line 
2368, in _handle_dbapi_exception\n    raise 
exc_info[1].with_traceback(exc_info[2])\n  File 
\"/opt/atr/.venv/lib/python3.14/site-packages/sqlalchemy/engine/base.py\", line 
1969, in _exec_single_context\n    self.dialect.do_execute(\n    
~~~~~~~~~~~~~~~~~~~~~~~^\n        cursor, str_statement, effective_parameter
 s, context\n        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n    
)\n    ^\n  File 
\"/opt/atr/.venv/lib/python3.14/site-packages/sqlalchemy/engine/default.py\", 
line 952, in do_execute\n    cursor.execute(statement, parameters)\n    
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^\n  File 
\"/opt/atr/.venv/lib/python3.14/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py\",
 line 183, in execute\n    self._adapt_connection._handle_exception(error)\n    
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^\n  File 
\"/opt/atr/.venv/lib/python3.14/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py\",
 line 343, in _handle_exception\n    raise error\n  File 
\"/opt/atr/.venv/lib/python3.14/site-packages/sqlalchemy/dialects/sqlite/aiosqlite.py\",
 line 160, in execute\n    _cursor: AsyncIODBAPICursor = 
self.await_(self._connection.cursor())  # type: ignore[arg-type] # noqa: E501\n 
                                 ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File 
\"/opt/atr/.venv/lib/python3.14/
 site-packages/sqlalchemy/util/_concurrency_py3k.py\", line 123, in 
await_only\n    raise exc.MissingGreenlet(\n    ...<2 lines>...\n    
)\nsqlalchemy.exc.MissingGreenlet: greenlet_spawn has not been called; can't 
call await_only() here. Was IO attempted in an unexpected place? (Background on 
this error at: https://sqlalche.me/e/20/xd2s)\n"}
   
   Stderr is not parseable JSON:
   
   ```
   atr vote start magpie 0.1.0 00011  \
     -m [email protected] --duration 72 \
     --subject "[VOTE] Release Apache Magpie 0.1.0 from 0.1.0-rc1" 2>&1| jq
   jq: parse error: Invalid numeric literal at line 1, column 4
   ```
   
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to