useblocks / sphinx-needs-enterprise

Sphinx-Needs Functions for enterprise users
http://useblocks.com/sphinx-needs-enterprise/
Other
5 stars 1 forks source link

Polarion Adapter #39

Open jeising opened 2 years ago

jeising commented 2 years ago

It would be awesome to be able to also connect Polarion requirements in Sphinx Needs.

Polarion provides a Java API:

Polarion® ALM™ Software Development Kit (SDK)

I am not sure how well that integrates in the existing system. Maybe there is a way to use Polarion via REST?

danwos commented 2 years ago

Looks like Polarion is not providing a REST API, but at least a SOAP API Not state of the art, but it does its job.

As sphinx-needs-enterprise is Python based, we would need a lib which understands SOAP / WSDL. This one looks promising: https://github.com/mvantellingen/python-zeep

Last time I have worked with SOAP is ~8 years ago, before JIRA moved to REST. But I think there will not be any technical surprises, so I think it's doable.

Looks like there was a demo site available in the past: almdemo.polarion.com

@jeising: If you know a contact / sales person at Polarion, pls write me an e-mail. So I can try to get access to a test license or test instance for 2022.

jeising commented 2 years ago

Thank you for your quick answer!

I will check to find a sales contact for you. We might be able to provide access to one of our test environments.

alacasta commented 2 years ago

We in the past succeeded accessing using Python to the SOAP interface by using suds like follows

from suds.client import Client
from suds.sax.element import Element

url_session_web_service = 'https://almdemo.polarion.com/polarion/ws/services/SessionWebService?wsdl' % self.hostname
url_tracker_web_service = 'https://almdemo.polarion.com/polarion/ws/services/TrackerWebService?wsdl' % self.hostname
self.session = Client(url_session_web_service)
self.tracker = Client(url_tracker_web_service)
self.session.service.logIn(username, password)

From that point, it is straightforward to access to data like

# Query workitems, get a list[suds.sudsobject.WorkItem].
workitems_raw = self.tracker.service.queryWorkItems(query, 'id', Workitem.WORKITEM_FIELDS)

where query is the typical Polarion Query (e.g. query = 'project.id:' + project_id)

Is there a chance for creating an skeleton where we can play around to make a Proof of Concept for this? I don't know the internals of sphinx-needs or sphinx-needs-enterprise, but I can try to contribute if a boilerplate is provided.

Thanks!