Pradeep,
I was hoping that someone with more experience than I would have responded to you. I would have liked to have heard the perspective of veteran XNAT pipeline coders. But since nobody else has chimed in yet... I've only been using XNAT for about 18 months (administering an XNAT server, uploading data, building and running pipelines, etc.). Most of my XNAT work has been under considerable time pressure to just-get-it-done-and-move-on, so I haven't been able to be as thorough as I'd like when making decisions such as choosing which technology to use for programatic control of my XNAT server.
I began by trying to figure out the differences between pyXNAT and XNATpy and understand what tools like DAX offered. I had a lot of data to store and process and I didn't want to start down the wrong path, but the pros and cons of the various choices were not clear, and with a beginner's perspective, it was all quite overwhelming.
To make a long story short... I decided to use XNATpy, but right away I had trouble figuring out how to perform some tasks with it. Then I had trouble installing it in the environment of the compute cluster that I was going to use for my pipelines (the trouble was really with a dependency, the six.moves.collections_abc module), and on top of that, from something that I'd read I was concerned that it wasn't going to be able to manipulate all of the data that I needed (I can't figure out from my notes specifically what I was concerned with, maybe a custom plugin?). Anyway, after struggling with these issues for a while, I threw in the towel and decided to just use straight python (and the requests library) to access XNAT through the RESTful API. I combined this with using cURL commands from the shell (esp. for uploading data or bulk operations on long lists of experiments or subjects). This way I thought that I wouldn't have to learn yet another tool's interface, and I wouldn't have to worry about limitations or bugs of any specific tool. And that's what I did, writing a lot of CRUD functions for different XNAT objects.
Since then, I've started to use XNATpy again, and have found it to be very useful. With more XNAT experience under my belt it was easier to understand how to use it. A lot of my early confusion was with XNAT concepts (e.g. the data model) rather than XNATpy itself. I realize now how much XNATpy would have simplified some of my pipelines and saved me a lot of time sifting through JSON output and catching http exceptions.
So, in retrospect after all of this time, I wish that I'd stuck with XNATpy, and moving forward, I'll probably start using XNATpy for more of my new development.
- Martin