Mercurial > repos > tduigou > save_to_db
changeset 4:c7a7520afb4b draft
planemo upload for repository https://github.com/brsynth commit 6ae809b563b40bcdb6be2e74fe2a84ddad5484ae
| author | tduigou |
|---|---|
| date | Mon, 02 Jun 2025 09:48:14 +0000 |
| parents | eca0d710bbe9 |
| children | f934215bdb78 |
| files | output.html output.json save_to_db.py save_to_db.xml test-data/test-JSON_arg.json |
| diffstat | 5 files changed, 136 insertions(+), 51 deletions(-) [+] |
line wrap: on
line diff
--- a/output.html Fri May 23 08:51:50 2025 +0000 +++ b/output.html Mon Jun 02 09:48:14 2025 +0000 @@ -285,7 +285,7 @@ var md = window.markdownit({ html: true, }); - target.innerHTML = md.render(atob('IyMgVGVzdCBTdW1tYXJ5Cgo8ZGl2IGNsYXNzPSJwcm9ncmVzcyI+CiAgPGRpdiBjbGFzcz0icHJvZ3Jlc3MtYmFyIHByb2dyZXNzLWJhci1zdWNjZXNzIiBzdHlsZT0id2lkdGg6IDEwMC4wJSIgYXJpYS12YWx1ZW5vdz0iMSIgYXJpYS12YWx1ZW1pbj0iMCIgYXJpYS12YWx1ZW1heD0iMSIgZGF0YS10b2dnbGU9InRvb2x0aXAiIHRpdGxlPSIxIFBhc3NlZCI+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0icHJvZ3Jlc3MtYmFyIHByb2dyZXNzLWJhci13YXJuaW5nIiBzdHlsZT0id2lkdGg6IDAuMCUiIGFyaWEtdmFsdWVub3c9IjAiIGFyaWEtdmFsdWVtaW49IjAiIGFyaWEtdmFsdWVtYXg9IjEiIGRhdGEtdG9nZ2xlPSJ0b29sdGlwIiB0aXRsZT0iMCBTa2lwcGVkIj4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJwcm9ncmVzcy1iYXIgcHJvZ3Jlc3MtYmFyLWRhbmdlciIgc3R5bGU9IndpZHRoOiAwLjAlIiBhcmlhLXZhbHVlbm93PSIwIiBhcmlhLXZhbHVlbWluPSIwIiBhcmlhLXZhbHVlbWF4PSIxIiB0aXRsZT0iMCBGYWlsZWQgb3IgRXJyb3JlZCI+CiAgPC9kaXY+CjwvZGl2PgoKfCBUZXN0IFN0YXRlIHwgQ291bnQgfAp8IC0tLS0tLS0tLS0gfCAtLS0tLSB8CnwgVG90YWwgICAgICB8IDEgfAp8IFBhc3NlZCAgICAgfCAxIHwKfCBFcnJvciAgICAgIHwgMCB8CnwgRmFpbHVyZSAgICB8IDAgfAp8IFNraXBwZWQgICAgfCAwIHwKCgo8ZGV0YWlscyA+PHN1bW1hcnk+UGFzc2VkIFRlc3RzPC9zdW1tYXJ5PgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBzYXZlX3RvX2RiIChUZXN0ICMgMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBweXRob24gJy9ob21lL3JraGFsZWQvZ2FsYXh5dG9vbHMvdG9vbHMvc2F2ZV90b19kYi9zYXZlX3RvX2RiLnB5JyAtLWlucHV0ICcvdG1wL3RtcDRmYWZ1ZXFjL2ZpbGVzL2MvNC9lL2RhdGFzZXRfYzRlY2QyMTMtYzYyYS00OGZlLWJmZDQtZjJlYjFjMWM2NDM5LmRhdCwvdG1wL3RtcDRmYWZ1ZXFjL2ZpbGVzL2QvMi9kL2RhdGFzZXRfZDJkOWQ1OTItOWY2YS00ODhiLWI5MTEtZTJjMTIyZGM4OThmLmRhdCwvdG1wL3RtcDRmYWZ1ZXFjL2ZpbGVzLzMvNy9hL2RhdGFzZXRfMzdhNWJjYmItM2NmMS00NWFlLWE0MzktNTg4MjY4NDAyYzBiLmRhdCwvdG1wL3RtcDRmYWZ1ZXFjL2ZpbGVzLzkvZC9kL2RhdGFzZXRfOWRkOWI3M2UtZWIyYy00NjBhLWI2MTItODZjYzFmODZmOWI2LmRhdCwvdG1wL3RtcDRmYWZ1ZXFjL2ZpbGVzL2UvNy9lL2RhdGFzZXRfZTdlN2JkMjEtMzZkMy00ZTg0LTkxNzctMjQ1MWJmY2MwOWU3LmRhdCcgLS1zZXF1ZW5jZV9jb2x1bW4gJ3NlcXVlbmNlJyAtLWFubm90YXRpb25fY29sdW1uICdhbm5vdGF0aW9uJyAtLWRiX3VyaSAncG9zdGdyZXNxbDovL3Bvc3RncmVzOlJLMTdfX2F0X19sb2NhbGhvc3Q6NTQzMi90ZXN0X2ZyYWdtZW50c19kYicgLS10YWJsZSAnc2FtcGxlJyAtLWZyYWdtZW50X2NvbHVtbiAnZnJhZ21lbnQnIC0tb3V0cHV0ICcvdG1wL3RtcDRmYWZ1ZXFjL2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvNi9vdXRwdXRzL2RhdGFzZXRfZmRmMTE0ZTctNDMxNy00OTFkLThlMjktODVhY2NmMzcxZGI3LmRhdCcgLS1maWxlX25hbWVfbWFwcGluZyAnL3RtcC90bXA0ZmFmdWVxYy9maWxlcy9jLzQvZS9kYXRhc2V0X2M0ZWNkMjEzLWM2MmEtNDhmZS1iZmQ0LWYyZWIxYzFjNjQzOS5kYXQ6cDdfTDdBZS1XZWlzcy5nYiwvdG1wL3RtcDRmYWZ1ZXFjL2ZpbGVzL2QvMi9kL2RhdGFzZXRfZDJkOWQ1OTItOWY2YS00ODhiLWI5MTEtZTJjMTIyZGM4OThmLmRhdDpwNl9OdC1JZ0tMc2VxdWVuY2UuZ2IsL3RtcC90bXA0ZmFmdWVxYy9maWxlcy8zLzcvYS9kYXRhc2V0XzM3YTViY2JiLTNjZjEtNDVhZS1hNDM5LTU4ODI2ODQwMmMwYi5kYXQ6cDZfS296YWstQVRHLmdiLC90bXAvdG1wNGZhZnVlcWMvZmlsZXMvOS9kL2QvZGF0YXNldF85ZGQ5YjczZS1lYjJjLTQ2MGEtYjYxMi04NmNjMWY4NmY5YjYuZGF0OnA0X0t0LUw3QWUtV2Vpc3MuZ2IsL3RtcC90bXA0ZmFmdWVxYy9maWxlcy9lLzcvZS9kYXRhc2V0X2U3ZTdiZDIxLTM2ZDMtNGU4NC05MTc3LTI0NTFiZmNjMDllNy5kYXQ6SENfQW1wX2NjZEIuZ2InCiAgICAgIGBgYAogICAgKipFeGl0IENvZGU6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgMAogICAgICBgYGAKICAgICoqU3RhbmRhcmQgT3V0cHV0OioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIENvbnRhaW5lciAndGVzdF9mcmFnbWVudHNfZGInIGlzIGFscmVhZHkgcnVubmluZy4KICAgICAgQ29ubmVjdGVkIHRvIGRhdGFiYXNlLgogICAgICBQcm9jZXNzaW5nIGZpbGU6IGRhdGFzZXRfYzRlY2QyMTMtYzYyYS00OGZlLWJmZDQtZjJlYjFjMWM2NDM5LmRhdAogICAgICBQcm9jZXNzaW5nIGZpbGU6IGRhdGFzZXRfZDJkOWQ1OTItOWY2YS00ODhiLWI5MTEtZTJjMTIyZGM4OThmLmRhdAogICAgICBQcm9jZXNzaW5nIGZpbGU6IGRhdGFzZXRfMzdhNWJjYmItM2NmMS00NWFlLWE0MzktNTg4MjY4NDAyYzBiLmRhdAogICAgICBQcm9jZXNzaW5nIGZpbGU6IGRhdGFzZXRfOWRkOWI3M2UtZWIyYy00NjBhLWI2MTItODZjYzFmODZmOWI2LmRhdAogICAgICBQcm9jZXNzaW5nIGZpbGU6IGRhdGFzZXRfZTdlN2JkMjEtMzZkMy00ZTg0LTkxNzctMjQ1MWJmY2MwOWU3LmRhdAogICAgICBJbnNlcnRlZCA1IGZyYWdtZW50cy4KICAgICAgRnJhZ21lbnQgbmFtZXMgd3JpdHRlbiB0byAnL3RtcC90bXA0ZmFmdWVxYy9qb2Jfd29ya2luZ19kaXJlY3RvcnkvMDAwLzYvb3V0cHV0cy9kYXRhc2V0X2ZkZjExNGU3LTQzMTctNDkxZC04ZTI5LTg1YWNjZjM3MWRiNy5kYXQnLgoKICAgICAgYGBgCiAgICAqKlRyYWNlYmFjazoqKgoKICAgICogYGBgY29uc29sZQogICAgICAKICAgICAgYGBgCiAgICoqSm9iIFBhcmFtZXRlcnM6KioKCiAgICogICB8IEpvYiBwYXJhbWV0ZXIgfCBQYXJhbWV0ZXIgdmFsdWUgfAogICAgICAgfCAtLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tIHwKICAgICAgIHwgZ2VuYmFua1xfZmlsZXMgfCBgIHsidmFsdWVzIjogW3siaWQiOiAxLCAic3JjIjogImhkY2EifV19IGAgfAogICAgICAgfCB0YWJsZSB8IGAgInNhbXBsZSIgYCB8CiAgICAgICB8IHNlcXVlbmNlXF9jb2x1bW4gfCBgICJzZXF1ZW5jZSIgYCB8CiAgICAgICB8IGFubm90YXRpb25cX2NvbHVtbiB8IGAgImFubm90YXRpb24iIGAgfAogICAgICAgfCBmcmFnbWVudFxfY29sdW1uIHwgYCAiZnJhZ21lbnQiIGAgfAogICAgICAgfCBkYlxfdXJpIHwgYCAicG9zdGdyZXNxbDovL3Bvc3RncmVzOlJLMTdAbG9jYWxob3N0OjU0MzIvdGVzdF9mcmFnbWVudHNfZGIiIGAgfAogICAgICAgfCBjaHJvbUluZm8gfCBgICIvdG1wL3RtcDRmYWZ1ZXFjL2dhbGF4eS1kZXYvdG9vbC1kYXRhL3NoYXJlZC91Y3NjL2Nocm9tLz8ubGVuIiBgIHwKICAgICAgIHwgZGJrZXkgfCBgICI/IiBgIHwKICAgICAgIHwgXF9cX2lucHV0XF9leHQgfCBgICJpbnB1dCIgYCB8CgoKCiAgICA8L2Rpdj48L2RldGFpbHM+CgoKPC9kZXRhaWxzPgo=')); + target.innerHTML = md.render(atob('IyMgVGVzdCBTdW1tYXJ5Cgo8ZGl2IGNsYXNzPSJwcm9ncmVzcyI+CiAgPGRpdiBjbGFzcz0icHJvZ3Jlc3MtYmFyIHByb2dyZXNzLWJhci1zdWNjZXNzIiBzdHlsZT0id2lkdGg6IDEwMC4wJSIgYXJpYS12YWx1ZW5vdz0iMSIgYXJpYS12YWx1ZW1pbj0iMCIgYXJpYS12YWx1ZW1heD0iMSIgZGF0YS10b2dnbGU9InRvb2x0aXAiIHRpdGxlPSIxIFBhc3NlZCI+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0icHJvZ3Jlc3MtYmFyIHByb2dyZXNzLWJhci13YXJuaW5nIiBzdHlsZT0id2lkdGg6IDAuMCUiIGFyaWEtdmFsdWVub3c9IjAiIGFyaWEtdmFsdWVtaW49IjAiIGFyaWEtdmFsdWVtYXg9IjEiIGRhdGEtdG9nZ2xlPSJ0b29sdGlwIiB0aXRsZT0iMCBTa2lwcGVkIj4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJwcm9ncmVzcy1iYXIgcHJvZ3Jlc3MtYmFyLWRhbmdlciIgc3R5bGU9IndpZHRoOiAwLjAlIiBhcmlhLXZhbHVlbm93PSIwIiBhcmlhLXZhbHVlbWluPSIwIiBhcmlhLXZhbHVlbWF4PSIxIiB0aXRsZT0iMCBGYWlsZWQgb3IgRXJyb3JlZCI+CiAgPC9kaXY+CjwvZGl2PgoKfCBUZXN0IFN0YXRlIHwgQ291bnQgfAp8IC0tLS0tLS0tLS0gfCAtLS0tLSB8CnwgVG90YWwgICAgICB8IDEgfAp8IFBhc3NlZCAgICAgfCAxIHwKfCBFcnJvciAgICAgIHwgMCB8CnwgRmFpbHVyZSAgICB8IDAgfAp8IFNraXBwZWQgICAgfCAwIHwKCgo8ZGV0YWlscyA+PHN1bW1hcnk+UGFzc2VkIFRlc3RzPC9zdW1tYXJ5PgoKKiA8ZGV0YWlscyBjbGFzcz0icmNvcm5lcnMgbGlnaHQtZ3JlZW4iPjxzdW1tYXJ5IGNsYXNzPSJsaWdodC1ncmVlbiI+JiM5OTg5OyBzYXZlX3RvX2RiIChUZXN0ICMgMSk8L3N1bW1hcnk+PGRpdiBjbGFzcz0icGFkZGVkIj4KCiAgICAqKkNvbW1hbmQgTGluZToqKgoKICAgICogYGBgY29uc29sZQogICAgICBweXRob24gJy9ob21lL3JraGFsZWQvZ2FsYXh5dG9vbHMvdG9vbHMvc2F2ZV90b19kYi9zYXZlX3RvX2RiLnB5JyAtLWlucHV0ICcvdG1wL3RtcHhjdDl4NzB4L2ZpbGVzLzMvMC9mL2RhdGFzZXRfMzBmYzIwMTctNjYyMC00YTgwLWE2MGUtMGM3OTVjODlmMTA2LmRhdCwvdG1wL3RtcHhjdDl4NzB4L2ZpbGVzL2IvZi9iL2RhdGFzZXRfYmZiNTQzMjEtOGFkMC00ZTQyLWIzMDctZjMyZTQ3ZTA2MThhLmRhdCwvdG1wL3RtcHhjdDl4NzB4L2ZpbGVzLzEvZS81L2RhdGFzZXRfMWU1YTBkODAtZGM5ZS00MmQwLWIwZTEtYzJlNzhhZmYxOGQzLmRhdCwvdG1wL3RtcHhjdDl4NzB4L2ZpbGVzL2EvYi9hL2RhdGFzZXRfYWJhOGQ1YjQtYTRmMy00NDg3LTgwM2MtYmU1ZGVlMTQ0NWNkLmRhdCwvdG1wL3RtcHhjdDl4NzB4L2ZpbGVzLzcvYi83L2RhdGFzZXRfN2I3ZmI3MGYtZGEwYy00NWU3LWJhNGUtMGU4Y2I4ZDMxOTY4LmRhdCcgLS1zZXF1ZW5jZV9jb2x1bW4gJycgLS1hbm5vdGF0aW9uX2NvbHVtbiAnJyAtLWRiX3VyaSAnJyAtLXRhYmxlICcnIC0tZnJhZ21lbnRfY29sdW1uICcnIC0tb3V0cHV0ICcvdG1wL3RtcHhjdDl4NzB4L2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvNy9vdXRwdXRzL2RhdGFzZXRfNDFiODQ0YWItNWE4NS00NmNkLTgzNjctN2FkMWZiZWU3ZDNjLmRhdCcgLS1maWxlX25hbWVfbWFwcGluZyAnL3RtcC90bXB4Y3Q5eDcweC9maWxlcy8zLzAvZi9kYXRhc2V0XzMwZmMyMDE3LTY2MjAtNGE4MC1hNjBlLTBjNzk1Yzg5ZjEwNi5kYXQ6cDdfTDdBZS1XZWlzcy5nYiwvdG1wL3RtcHhjdDl4NzB4L2ZpbGVzL2IvZi9iL2RhdGFzZXRfYmZiNTQzMjEtOGFkMC00ZTQyLWIzMDctZjMyZTQ3ZTA2MThhLmRhdDpwNl9OdC1JZ0tMc2VxdWVuY2UuZ2IsL3RtcC90bXB4Y3Q5eDcweC9maWxlcy8xL2UvNS9kYXRhc2V0XzFlNWEwZDgwLWRjOWUtNDJkMC1iMGUxLWMyZTc4YWZmMThkMy5kYXQ6cDZfS296YWstQVRHLmdiLC90bXAvdG1weGN0OXg3MHgvZmlsZXMvYS9iL2EvZGF0YXNldF9hYmE4ZDViNC1hNGYzLTQ0ODctODAzYy1iZTVkZWUxNDQ1Y2QuZGF0OnA0X0t0LUw3QWUtV2Vpc3MuZ2IsL3RtcC90bXB4Y3Q5eDcweC9maWxlcy83L2IvNy9kYXRhc2V0XzdiN2ZiNzBmLWRhMGMtNDVlNy1iYTRlLTBlOGNiOGQzMTk2OC5kYXQ6SENfQW1wX2NjZEIuZ2InIC0tanNvbl9jb25mICcvdG1wL3RtcHhjdDl4NzB4L2ZpbGVzL2YvNC9mL2RhdGFzZXRfZjRmZDU5ZTgtZjhkNi00YmUyLThiMDAtOWUxMmNhODMxOWVmLmRhdCcKICAgICAgYGBgCiAgICAqKkV4aXQgQ29kZToqKgoKICAgICogYGBgY29uc29sZQogICAgICAwCiAgICAgIGBgYAogICAgKipTdGFuZGFyZCBPdXRwdXQ6KioKCiAgICAqIGBgYGNvbnNvbGUKICAgICAgQ29udGFpbmVyICd0ZXN0X2ZyYWdtZW50c19kYicgaXMgYWxyZWFkeSBydW5uaW5nLgogICAgICBDb25uZWN0ZWQgdG8gZGF0YWJhc2UuCiAgICAgIFByb2Nlc3NpbmcgZmlsZTogZGF0YXNldF8zMGZjMjAxNy02NjIwLTRhODAtYTYwZS0wYzc5NWM4OWYxMDYuZGF0CiAgICAgIFByb2Nlc3NpbmcgZmlsZTogZGF0YXNldF9iZmI1NDMyMS04YWQwLTRlNDItYjMwNy1mMzJlNDdlMDYxOGEuZGF0CiAgICAgIFByb2Nlc3NpbmcgZmlsZTogZGF0YXNldF8xZTVhMGQ4MC1kYzllLTQyZDAtYjBlMS1jMmU3OGFmZjE4ZDMuZGF0CiAgICAgIFByb2Nlc3NpbmcgZmlsZTogZGF0YXNldF9hYmE4ZDViNC1hNGYzLTQ0ODctODAzYy1iZTVkZWUxNDQ1Y2QuZGF0CiAgICAgIFByb2Nlc3NpbmcgZmlsZTogZGF0YXNldF83YjdmYjcwZi1kYTBjLTQ1ZTctYmE0ZS0wZThjYjhkMzE5NjguZGF0CiAgICAgIEluc2VydGVkIDUgZnJhZ21lbnRzLgogICAgICBGcmFnbWVudCBuYW1lcyB3cml0dGVuIHRvICcvdG1wL3RtcHhjdDl4NzB4L2pvYl93b3JraW5nX2RpcmVjdG9yeS8wMDAvNy9vdXRwdXRzL2RhdGFzZXRfNDFiODQ0YWItNWE4NS00NmNkLTgzNjctN2FkMWZiZWU3ZDNjLmRhdCcuCgogICAgICBgYGAKICAgICoqVHJhY2ViYWNrOioqCgogICAgKiBgYGBjb25zb2xlCiAgICAgIAogICAgICBgYGAKICAgKipKb2IgUGFyYW1ldGVyczoqKgoKICAgKiAgIHwgSm9iIHBhcmFtZXRlciB8IFBhcmFtZXRlciB2YWx1ZSB8CiAgICAgICB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0gfAogICAgICAgfCBnZW5iYW5rXF9maWxlcyB8IGAgeyJ2YWx1ZXMiOiBbeyJpZCI6IDEsICJzcmMiOiAiaGRjYSJ9XX0gYCB8CiAgICAgICB8IHRhYmxlIHwgYCBOb25lIGAgfAogICAgICAgfCBzZXF1ZW5jZVxfY29sdW1uIHwgYCBOb25lIGAgfAogICAgICAgfCBhbm5vdGF0aW9uXF9jb2x1bW4gfCBgIE5vbmUgYCB8CiAgICAgICB8IGZyYWdtZW50XF9jb2x1bW4gfCBgIE5vbmUgYCB8CiAgICAgICB8IGRiXF91cmkgfCBgIE5vbmUgYCB8CiAgICAgICB8IGFkdiB8IGAgeyJqc29uX2NvbmYiOiB7InZhbHVlcyI6IFt7ImlkIjogNiwgInNyYyI6ICJoZGEifV19fSBgIHwKICAgICAgIHwgY2hyb21JbmZvIHwgYCAiL3RtcC90bXB4Y3Q5eDcweC9nYWxheHktZGV2L3Rvb2wtZGF0YS9zaGFyZWQvdWNzYy9jaHJvbS8/LmxlbiIgYCB8CiAgICAgICB8IGRia2V5IHwgYCAiPyIgYCB8CiAgICAgICB8IFxfXF9pbnB1dFxfZXh0IHwgYCAiaW5wdXQiIGAgfAoKCgogICAgPC9kaXY+PC9kZXRhaWxzPgoKCjwvZGV0YWlscz4K')); </script> </body> </html> \ No newline at end of file
--- a/output.json Fri May 23 08:51:50 2025 +0000 +++ b/output.json Mon Jun 02 09:48:14 2025 +0000 @@ -9,53 +9,57 @@ { "data": { "inputs": { - "annotation_column": "annotation", - "db_uri": "postgresql://postgres:RK17@localhost:5432/test_fragments_db", - "fragment_column": "fragment", + "adv|json_conf": { + "id": "1895a93fdf3c72e9", + "src": "hda" + }, "genbank_files": { - "id": "aaa4852d508c750d", + "id": "c0d7a43ba58f94b5", "src": "hdca" - }, - "sequence_column": "sequence", - "table": "sample" + } }, "job": { - "command_line": "python '/home/rkhaled/galaxytools/tools/save_to_db/save_to_db.py' --input '/tmp/tmp4fafueqc/files/c/4/e/dataset_c4ecd213-c62a-48fe-bfd4-f2eb1c1c6439.dat,/tmp/tmp4fafueqc/files/d/2/d/dataset_d2d9d592-9f6a-488b-b911-e2c122dc898f.dat,/tmp/tmp4fafueqc/files/3/7/a/dataset_37a5bcbb-3cf1-45ae-a439-588268402c0b.dat,/tmp/tmp4fafueqc/files/9/d/d/dataset_9dd9b73e-eb2c-460a-b612-86cc1f86f9b6.dat,/tmp/tmp4fafueqc/files/e/7/e/dataset_e7e7bd21-36d3-4e84-9177-2451bfcc09e7.dat' --sequence_column 'sequence' --annotation_column 'annotation' --db_uri 'postgresql://postgres:RK17__at__localhost:5432/test_fragments_db' --table 'sample' --fragment_column 'fragment' --output '/tmp/tmp4fafueqc/job_working_directory/000/6/outputs/dataset_fdf114e7-4317-491d-8e29-85accf371db7.dat' --file_name_mapping '/tmp/tmp4fafueqc/files/c/4/e/dataset_c4ecd213-c62a-48fe-bfd4-f2eb1c1c6439.dat:p7_L7Ae-Weiss.gb,/tmp/tmp4fafueqc/files/d/2/d/dataset_d2d9d592-9f6a-488b-b911-e2c122dc898f.dat:p6_Nt-IgKLsequence.gb,/tmp/tmp4fafueqc/files/3/7/a/dataset_37a5bcbb-3cf1-45ae-a439-588268402c0b.dat:p6_Kozak-ATG.gb,/tmp/tmp4fafueqc/files/9/d/d/dataset_9dd9b73e-eb2c-460a-b612-86cc1f86f9b6.dat:p4_Kt-L7Ae-Weiss.gb,/tmp/tmp4fafueqc/files/e/7/e/dataset_e7e7bd21-36d3-4e84-9177-2451bfcc09e7.dat:HC_Amp_ccdB.gb'", + "command_line": "python '/home/rkhaled/galaxytools/tools/save_to_db/save_to_db.py' --input '/tmp/tmpxct9x70x/files/3/0/f/dataset_30fc2017-6620-4a80-a60e-0c795c89f106.dat,/tmp/tmpxct9x70x/files/b/f/b/dataset_bfb54321-8ad0-4e42-b307-f32e47e0618a.dat,/tmp/tmpxct9x70x/files/1/e/5/dataset_1e5a0d80-dc9e-42d0-b0e1-c2e78aff18d3.dat,/tmp/tmpxct9x70x/files/a/b/a/dataset_aba8d5b4-a4f3-4487-803c-be5dee1445cd.dat,/tmp/tmpxct9x70x/files/7/b/7/dataset_7b7fb70f-da0c-45e7-ba4e-0e8cb8d31968.dat' --sequence_column '' --annotation_column '' --db_uri '' --table '' --fragment_column '' --output '/tmp/tmpxct9x70x/job_working_directory/000/7/outputs/dataset_41b844ab-5a85-46cd-8367-7ad1fbee7d3c.dat' --file_name_mapping '/tmp/tmpxct9x70x/files/3/0/f/dataset_30fc2017-6620-4a80-a60e-0c795c89f106.dat:p7_L7Ae-Weiss.gb,/tmp/tmpxct9x70x/files/b/f/b/dataset_bfb54321-8ad0-4e42-b307-f32e47e0618a.dat:p6_Nt-IgKLsequence.gb,/tmp/tmpxct9x70x/files/1/e/5/dataset_1e5a0d80-dc9e-42d0-b0e1-c2e78aff18d3.dat:p6_Kozak-ATG.gb,/tmp/tmpxct9x70x/files/a/b/a/dataset_aba8d5b4-a4f3-4487-803c-be5dee1445cd.dat:p4_Kt-L7Ae-Weiss.gb,/tmp/tmpxct9x70x/files/7/b/7/dataset_7b7fb70f-da0c-45e7-ba4e-0e8cb8d31968.dat:HC_Amp_ccdB.gb' --json_conf '/tmp/tmpxct9x70x/files/f/4/f/dataset_f4fd59e8-f8d6-4be2-8b00-9e12ca8319ef.dat'", "command_version": "", "copied_from_job_id": null, - "create_time": "2025-05-23T08:51:13.261313", + "create_time": "2025-06-02T09:46:35.368351", "dependencies": [], "exit_code": 0, - "external_id": "53981", + "external_id": "129989", "galaxy_version": "24.2", "handler": null, - "history_id": "aaa4852d508c750d", - "id": "42220a2e87c70ae5", + "history_id": "c0d7a43ba58f94b5", + "id": "92e9df4c7abf24ab", "inputs": { + "adv|json_conf": { + "id": "1895a93fdf3c72e9", + "src": "hda", + "uuid": "f4fd59e8-f8d6-4be2-8b00-9e12ca8319ef" + }, "genbank_files1": { - "id": "aaa4852d508c750d", + "id": "c0d7a43ba58f94b5", "src": "hda", - "uuid": "c4ecd213-c62a-48fe-bfd4-f2eb1c1c6439" + "uuid": "30fc2017-6620-4a80-a60e-0c795c89f106" }, "genbank_files2": { - "id": "6139eb08ad8af00a", + "id": "1e3e46a5cbeec338", "src": "hda", - "uuid": "d2d9d592-9f6a-488b-b911-e2c122dc898f" + "uuid": "bfb54321-8ad0-4e42-b307-f32e47e0618a" }, "genbank_files3": { - "id": "cda565c89999ccf5", + "id": "81fab13a93a3da95", "src": "hda", - "uuid": "37a5bcbb-3cf1-45ae-a439-588268402c0b" + "uuid": "1e5a0d80-dc9e-42d0-b0e1-c2e78aff18d3" }, "genbank_files4": { - "id": "f072bab19666d9bc", + "id": "a9ff23755d49e4b6", "src": "hda", - "uuid": "9dd9b73e-eb2c-460a-b612-86cc1f86f9b6" + "uuid": "aba8d5b4-a4f3-4487-803c-be5dee1445cd" }, "genbank_files5": { - "id": "ede1fe394bce0b73", + "id": "2ca788c708559c16", "src": "hda", - "uuid": "e7e7bd21-36d3-4e84-9177-2451bfcc09e7" + "uuid": "7b7fb70f-da0c-45e7-ba4e-0e8cb8d31968" } }, "job_messages": [], @@ -67,35 +71,36 @@ "output_collections": {}, "outputs": { "output": { - "id": "42220a2e87c70ae5", + "id": "92e9df4c7abf24ab", "src": "hda", - "uuid": "fdf114e7-4317-491d-8e29-85accf371db7" + "uuid": "41b844ab-5a85-46cd-8367-7ad1fbee7d3c" } }, "params": { "__input_ext": "\"input\"", - "annotation_column": "\"annotation\"", - "chromInfo": "\"/tmp/tmp4fafueqc/galaxy-dev/tool-data/shared/ucsc/chrom/?.len\"", - "db_uri": "\"postgresql://postgres:RK17@localhost:5432/test_fragments_db\"", + "adv": "{\"json_conf\": {\"values\": [{\"id\": 6, \"src\": \"hda\"}]}}", + "annotation_column": null, + "chromInfo": "\"/tmp/tmpxct9x70x/galaxy-dev/tool-data/shared/ucsc/chrom/?.len\"", + "db_uri": null, "dbkey": "\"?\"", - "fragment_column": "\"fragment\"", + "fragment_column": null, "genbank_files": "{\"values\": [{\"id\": 1, \"src\": \"hdca\"}]}", - "sequence_column": "\"sequence\"", - "table": "\"sample\"" + "sequence_column": null, + "table": null }, "state": "ok", "stderr": "", - "stdout": "Container 'test_fragments_db' is already running.\nConnected to database.\nProcessing file: dataset_c4ecd213-c62a-48fe-bfd4-f2eb1c1c6439.dat\nProcessing file: dataset_d2d9d592-9f6a-488b-b911-e2c122dc898f.dat\nProcessing file: dataset_37a5bcbb-3cf1-45ae-a439-588268402c0b.dat\nProcessing file: dataset_9dd9b73e-eb2c-460a-b612-86cc1f86f9b6.dat\nProcessing file: dataset_e7e7bd21-36d3-4e84-9177-2451bfcc09e7.dat\nInserted 5 fragments.\nFragment names written to '/tmp/tmp4fafueqc/job_working_directory/000/6/outputs/dataset_fdf114e7-4317-491d-8e29-85accf371db7.dat'.\n", + "stdout": "Container 'test_fragments_db' is already running.\nConnected to database.\nProcessing file: dataset_30fc2017-6620-4a80-a60e-0c795c89f106.dat\nProcessing file: dataset_bfb54321-8ad0-4e42-b307-f32e47e0618a.dat\nProcessing file: dataset_1e5a0d80-dc9e-42d0-b0e1-c2e78aff18d3.dat\nProcessing file: dataset_aba8d5b4-a4f3-4487-803c-be5dee1445cd.dat\nProcessing file: dataset_7b7fb70f-da0c-45e7-ba4e-0e8cb8d31968.dat\nInserted 5 fragments.\nFragment names written to '/tmp/tmpxct9x70x/job_working_directory/000/7/outputs/dataset_41b844ab-5a85-46cd-8367-7ad1fbee7d3c.dat'.\n", "tool_id": "save_to_db", "tool_stderr": "", - "tool_stdout": "Container 'test_fragments_db' is already running.\nConnected to database.\nProcessing file: dataset_c4ecd213-c62a-48fe-bfd4-f2eb1c1c6439.dat\nProcessing file: dataset_d2d9d592-9f6a-488b-b911-e2c122dc898f.dat\nProcessing file: dataset_37a5bcbb-3cf1-45ae-a439-588268402c0b.dat\nProcessing file: dataset_9dd9b73e-eb2c-460a-b612-86cc1f86f9b6.dat\nProcessing file: dataset_e7e7bd21-36d3-4e84-9177-2451bfcc09e7.dat\nInserted 5 fragments.\nFragment names written to '/tmp/tmp4fafueqc/job_working_directory/000/6/outputs/dataset_fdf114e7-4317-491d-8e29-85accf371db7.dat'.\n", - "update_time": "2025-05-23T08:51:20.615309", + "tool_stdout": "Container 'test_fragments_db' is already running.\nConnected to database.\nProcessing file: dataset_30fc2017-6620-4a80-a60e-0c795c89f106.dat\nProcessing file: dataset_bfb54321-8ad0-4e42-b307-f32e47e0618a.dat\nProcessing file: dataset_1e5a0d80-dc9e-42d0-b0e1-c2e78aff18d3.dat\nProcessing file: dataset_aba8d5b4-a4f3-4487-803c-be5dee1445cd.dat\nProcessing file: dataset_7b7fb70f-da0c-45e7-ba4e-0e8cb8d31968.dat\nInserted 5 fragments.\nFragment names written to '/tmp/tmpxct9x70x/job_working_directory/000/7/outputs/dataset_41b844ab-5a85-46cd-8367-7ad1fbee7d3c.dat'.\n", + "update_time": "2025-06-02T09:46:41.929779", "user_email": "planemo@galaxyproject.org", - "user_id": "aaa4852d508c750d" + "user_id": "c0d7a43ba58f94b5" }, "status": "success", "test_index": 0, - "time_seconds": 28.753373384475708, + "time_seconds": 29.02011752128601, "tool_id": "save_to_db", "tool_version": "0.1.0+galaxy1" },
--- a/save_to_db.py Fri May 23 08:51:50 2025 +0000 +++ b/save_to_db.py Mon Jun 02 09:48:14 2025 +0000 @@ -5,11 +5,22 @@ import os import re import pandas as pd +import json from sqlalchemy import create_engine, inspect from sqlalchemy.sql import text from sqlalchemy.engine.url import make_url from sqlalchemy.exc import OperationalError +def resolve_parameters(user_params: dict, json_params: dict, keys: list): + resolved = {} + for key in keys: + # Prefer user parameter if it's provided (not None or empty string) + if key in user_params and user_params[key]: + resolved[key] = user_params[key] + else: + resolved[key] = json_params.get(f"JSON_{key}") + return resolved + def fix_db_uri(uri): """Replace __at__ with @ in the URI if needed.""" return uri.replace("__at__", "@") @@ -177,19 +188,53 @@ parser.add_argument("--fragment_column", required=True, help="Fragment column name in the database") parser.add_argument("--output", required=True, help="Text report") parser.add_argument("--file_name_mapping", required=True, help="real fragments names") + parser.add_argument("--json_conf", required=False, help="JSON config file with DB parameters") args = parser.parse_args() - # Start the Docker container (if not already running) + # Load JSON config if provided + json_config = {} + if args.json_conf != 'None' or '': + with open(args.json_conf, "r") as f: + json_config = json.load(f) + + # Prefer user input; fallback to JSON_ values if not provided + user_params = { + "table": args.table, + "sequence_column": args.sequence_column, + "annotation_column": args.annotation_column, + "fragment_column": args.fragment_column, + "db_uri": args.db_uri + } + + keys = ["table", "sequence_column", "annotation_column", "fragment_column", "db_uri"] + resolved = resolve_parameters(user_params, json_config, keys) + + # Unpack resolved parameters + table = resolved["table"] + sequence_column = resolved["sequence_column"] + annotation_column = resolved["annotation_column"] + fragment_column = resolved["fragment_column"] + db_uri = fix_db_uri(resolved["db_uri"]) + + # Prepare gb files gb_file_list = [f.strip() for f in args.input.split(",") if f.strip()] - db_uri = fix_db_uri(args.db_uri) + + # Start and wait for DB db_name = extract_db_name(db_uri) start_postgres_container(db_name) - - # Wait until the database is ready wait_for_db(db_uri) - # Fetch annotations from the database and save as gb - push_gb_annotations(gb_file_list, args.sequence_column, args.annotation_column, db_uri, args.table, args.fragment_column, args.output, args.file_name_mapping) + # Push annotations + push_gb_annotations( + gb_file_list, + sequence_column, + annotation_column, + db_uri, + table, + fragment_column, + args.output, + args.file_name_mapping + ) if __name__ == "__main__": main()
--- a/save_to_db.xml Fri May 23 08:51:50 2025 +0000 +++ b/save_to_db.xml Mon Jun 02 09:48:14 2025 +0000 @@ -1,8 +1,8 @@ <tool id="save_to_db" name="Save Data To DB" version="@TOOL_VERSION@+galaxy@VERSION_SUFFIX@" profile="21.09"> <description>Save data to SQL DB</description> <macros> - <token name="@VERSION_SUFFIX@">1</token> - <token name="@TOOL_VERSION@">0.1.0</token> + <token name="@VERSION_SUFFIX@">2</token> + <token name="@TOOL_VERSION@">0.2.0</token> </macros> <requirements> <requirement type="package" version="2.2.3">pandas</requirement> @@ -21,21 +21,25 @@ --fragment_column '$fragment_column' --output '$output' --file_name_mapping '$file_name_mapping' + --json_conf '$json_conf' ]]></command> <inputs> <param name="genbank_files" type="data_collection" collection_type="list" format="genbank" label="GenBank File(s)"/> - <param name="table" type="text" label="DB Table Name" optional="false" /> - <param name="sequence_column" type="text" label="DB Column Contains Sequence For ganbank File" optional="false" /> - <param name="annotation_column" type="text" label="DB Column Contains Annotation For Ganbank File" optional="false" /> - <param name="fragment_column" type="text" label="DB IDs Column Name" optional="false" /> - <param name="db_uri" type="text" label="DB Connection URI" help="postgresql+psycopg2://username:password@db_container_name:port/database" optional="false" /> + <param name="table" type="text" label="DB Table Name" optional="true" help="It can be extracted from JSON file -key:'JSON_table'-" /> + <param name="sequence_column" type="text" label="DB Column Contains Sequence For ganbank File" optional="true" help="It can be extracted from JSON file -key:'JSON_sequence_column'-" /> + <param name="annotation_column" type="text" label="DB Column Contains Annotation For Ganbank File" optional="true" help="It can be extracted from JSON file -key:'JSON_annotation_column'-" /> + <param name="fragment_column" type="text" label="DB IDs Column Name" optional="true" help="It can be extracted from JSON file -key:'JSON_fragment_column'-" /> + <param name="db_uri" type="text" label="DB Connection URI" help="postgresql+psycopg2://username:password@db_container_name:port/database (It can be extracted from JSON file -key:'JSON_db_uri'-)" optional="true" /> + <section name='adv' title='Advance' expanded='false'> + <param name="json_conf" type="data" format='json' label="DB config as a json file" help="JSON file specifying the database URI, table name and the column names for annotation and sequence data" optional="true" /> + </section> </inputs> <outputs> <data name="output" format="txt" label="saving report" /> </outputs> <tests> - <!--python save_to_db.py -input 'test-data/p7_L7Ae-Weiss.gb,test-data/p6_Nt-IgKLsequence.gb,test-data/p6_Kozak-ATG.gb,test-data/p4_Kt-L7Ae-Weiss.gb,test-data/HC_Amp_ccdB.gb' -sequence_column 'sequence' -annotation_column 'annotation' -db_uri 'postgresql://postgres:RK17@localhost:5432/test_fragments_db' -table 'sample' -fragment_column 'fragment' -output 'test-data/test_raport.txt' - but it will not work as there is an extra param '-file_name_mapping' that are generated by galaxy and contain the dict for 'file.dat:fragment name' to stock the fragment name from file name thus use planemo with debug to test --> + <!--Only 1 test can be execute because the fragment will be already saved for the second test and it will return error as the fragments are present in the DB (execut ../get_db_data/testMock.py to regenerate initial DB)--> + <!--test DB config in the tool --> <test> <param name="genbank_files"> <collection type="list"> @@ -62,6 +66,29 @@ </assert_contents> </output> </test> + <!--test DB config from JSON --> + <test> + <param name="genbank_files"> + <collection type="list"> + <element name="p7_L7Ae-Weiss" value="p7_L7Ae-Weiss.gb" /> + <element name="p7_gfp_sequence" value="p6_Nt-IgKLsequence.gb" /> + <element name="p14_CMVp" value="p6_Kozak-ATG.gb" /> + <element name="p16_bGHpolyA" value="p4_Kt-L7Ae-Weiss.gb" /> + <element name="p18_CMVp" value="HC_Amp_ccdB.gb" /> + </collection> + </param> + <param name="adv|json_conf" value="test-JSON_arg.json" /> + <output name="output" file="test_raport.txt" ftype="txt" > + <assert_contents> + <has_n_lines n="5" /> + <has_line_matching expression="p7_L7Ae-Weiss" /> + <has_line_matching expression="p6_Nt-IgKLsequence" /> + <has_line_matching expression="p6_Kozak-ATG" /> + <has_line_matching expression="p4_Kt-L7Ae-Weiss" /> + <has_line_matching expression="HC_Amp_ccdB" /> + </assert_contents> + </output> + </test> </tests> <help><