Hi, everyone
I'm trying to connect SAS Viya from my macOS terminal app via Python. It requires some confidentials, which I totally do not know what they are.
import swat conn = swat.CAS(hostname="http://server.demo.sas.com/cas-shared-default-http/", port=8777, username="student", password="Metadata0")
I got the error:
swat.exceptions.SWATError: Unable to connect to any URL: http://server.demo.sas.com/cas-shared-default-http/
Looking forward to your suggestions. Thank you.
Source:
Hi @TomHsiung,
I wrote a Community article offering two options on connecting SAS VFL from a Jupyter notebook. Hopefully, one of these solutions fits your needs.
Join us for SAS Community Trivia
SAS Bowl XLIII, The New SAS Developer Portal
Wednesday, August 14, 2024, at 10 a.m. ET | #SASBowl
Hi @TomHsiung ,
I think your issue is the server name. http://server.demo.sas.com. That's normally a generic name used in documentation. You need for replace this with your SAS Viya server URL.
I spoke with someone in Education and he suggested this course: https://learn.sas.com/course/view.php?id=6021.
Join us for SAS Community Trivia
SAS Bowl XLIII, The New SAS Developer Portal
Wednesday, August 14, 2024, at 10 a.m. ET | #SASBowl
It is unfortunately not free.
Join us for SAS Community Trivia
SAS Bowl XLIII, The New SAS Developer Portal
Wednesday, August 14, 2024, at 10 a.m. ET | #SASBowl
According to the document I received, I tried again to connect CAS from my python script. I manually installed SWAT 1.14.0 on my macOS. But, I got this error.
ValueError: The extensions for the binary protocol have not been installed. You can either install them using the full platform-dependent install file, or use the REST interface as an alternative.
It looks like the SWAT package 1.14.0 installed lacks something about the binary protocol extension. The REST interface uses the http protocol, which I think is not safe because of unencrypted communication. Therefore, the problem is to install the missing extensions for the binary protocol, which I don't know how. Thanks.
Tom
HiTom,
What version of python are you running? I see https://github.com/sassoftware/python-swat/issues/84 that it is possible the latest version of python might not work with swat.
Thanks.
Upon further research, I found https://github.com/sassoftware/python-swat/issues/184 which indicated
"Looks like you are running Python 3.12.4. The swat package does not support Python 3.12 at this time, it only supports <= 3.11"
Hope this helps.
Sorry, I have not yet succeeded, despite the downgrading from Python 3.12 to 3.11.
After that, I was able to install SWAT 1.14.0 via pip. However, it seems this installed SWAT does not support CAS protocol, because
ValueError: Could not import import _py311swat. This is likely due to an incorrect SAS TK path or an error while loading the SAS TK subsystem. You can try using the REST interface as an alternative.
I opened a SAS support case. The RESET model was also unsuccessful and I have to open the support ticket to confirm my credentials for SAS Viya. Anyway, thanks for your kind response and I will update the progress when the ticket is updated later.
Tom
Thanks Tom for the update.
Based on your error, I see https://sassoftware.github.io/python-swat/troubleshooting.html#unable-to-import-pyxxswat.
I guess I am wondering how you installed the swat package. You indicated that you did this manually. So pip or conda install was not used as per https://sassoftware.github.io/python-swat/troubleshooting.html#unable-to-import-pyxxswat ?
Yes, please keep us informed of the SAS support case.
Hi, I have received replies form SAS support staff. It looks like it is not possible to connect SAS Viya for Learners from python SWAT on a client.
Hi Tom,
Thanks for your enquiry to SAS.
SAS Viya for Learners is typically sandboxed so REST API calls outside of the environment are generally not possible.
Can you please specify if you are participating in the SAS Hackathon or or what you are trying to do exactly ?
And
Hey Tom,
This is *** from SAS Technical Support. We've received your case *** regarding the Python access to the SAS Viya issue.
The question you are inquiring about falls under concerns relating to the usage of SAS OnDemand for Academics/ SAS Viya for Learners, Unfortunately, Technical Support is limited to access assistance and unable to assist with usage issues for SAS OnDemand for Academics/ SAS Viya for Learners, as per the SAS OnDemand for Academics license agreement, and you get trouble with software regarding usage, how do you get support?
I would recommend checking out the SAS Software for Learning Community. The SAS Communities has wonderful resources available on our SAS Software for Learning Community for help with programming and content questions. Click here for instructions on how to get fast, helpful answers. Additionally, you may also want to consult your instructor for further usage assistance
I hope this helps!
Best Regards,
Hi Tom,
My quick investigation confirms the statement that it is sandboxed for the Viya for Learners environment. As a result, I would recommend to use instead jupyterlab for now. Hopefully, you have access to jupyterlab by picking "Access JupyterLab" as shown below when accessing the Viya for Learners environment.
Thanks.
After further more in-depth investigation, there is light at the end of the tunnel. It is possible to connect to CAS via your laptop if you use https protocol but unfortunately, not with binary.
For https, you do need to do some prep work.
echo -n | openssl s_client -showcerts -connect <server.demo.sas.com>:443 -servername <server.demo.sas.com>:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > certificate.pem
Ref: https://sassoftware.github.io/python-swat/encryption.html
Ref: https://stackoverflow.com/questions/19414832/how-can-i-pull-the-ssl-certificate-from-a-remote-server
On your browser, go to https://<server.demo.sas.com>/SASLogon/oauth/authorize?client_id=sas.cli&response_type=token
Then extract out the token which is between ...access_token=<token which is a long base64 encoded value>&expires_in...
Then export out the token in your OS:
export ACCESS_TOKEN=eyJh…
Ref: https://blogs.sas.com/content/sgf/2023/02/07/authentication-to-sas-viya/
import os,swat
conn = swat.CAS(hostname="https://<server.demo.sas.com>/cas-shared-default-http", ssl_ca_list="./certificate.pem", password=os.environ['ACCESS_TOKEN'], protocol="https")
Hope this helps.
Hi @TomHsiung,
I wrote a Community article offering two options on connecting SAS VFL from a Jupyter notebook. Hopefully, one of these solutions fits your needs.
Join us for SAS Community Trivia
SAS Bowl XLIII, The New SAS Developer Portal
Wednesday, August 14, 2024, at 10 a.m. ET | #SASBowl
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!