Releases: sassoftware/saspy
Releases · sassoftware/saspy
v5.104.0
[5.104.0] - 2025-10-30
Added
EnhancementA minor tweak to allow ODS output to be left 'asis' for internal testers here at SAS.
Since SASPy started, the returned ODS Document from SAS has been tweakd to get it to render in Jupyter
better than it looks by default. This new key in theSAS_output_optionsconfiguration option allows for this:
'asis' : False # defaults to how this has always worked
Changed
NoneNothing Changed
Fixed
NoneNothing Changed
Removed
NoneNothing removed
v5.103.2
[5.103.2] - 2025-07-11
Added
NoneNothing Added
Changed
NoneNothing Changed
Fixed
FixI broke download() in the HTTP access method with that last release! :( 2 days ago. Cut-n-paste error doing all of those try: except: around the http calls. This is a one line fix to remove the read I accidently inserted. The problem that resulted was not a failure, but rather 0 byte files after the 'successful' download.
Removed
NoneNothing removed
V5.103.1
[5.103.1] - 2025-07-08
Added
NoneNothing Added
Changed
EnhancedThe HTTP Access Method (for Viya) has some places where it has to make an HTTP call in a loop. There were some of these where I was doing connect() and close() on the connection, inside the loop. Other places I wasn't. There's no need to have those in the loops, so I removed that from the places it was doing those. I also changed upload from doing 'chunked' http transfer manually, to having it done by the http request call itself. I also added try/except around all of the http request calls that didn't have it, to handle unexpected failures better.
Fixed
NoneNothing Fixed
Removed
NoneNothing removed
[5.103.0] - 2025-04-15
Added
NoneNothing Added
V5.103.0
[5.103.0] - 2025-04-15
Added
NoneNothing Added
Changed
EnhancedThe submit*() methods of the HTTP Access Method (for Viya) include a GETstatusDelay= option for delaying the HTTP calls to see if the code is finished, which happen in a loop until done. Once done the LOG and LST can then be retrieved. This was implemented as a sleep() call in the loop checking the status. I’ve found that the API call can take a wait= value suchthat it is a synchronous call with a timeout. I’ve changed to provide the GETstatusDelay value to the API call instead of being asleep delay in the python code. This will improve this loop be eliminating excessive calls while at the same time being more performant since wait= will return as soon as the job finishes, while sleep will sleep that whole time before making another status call. I’ve changed the default value of GETstatusDelay from 0 to 30 seconds to take advantage of this functionality, so it will be used by default. GETstatusDelay is no longer required to eliminate excessive http status calls, while returning as soon as the code finishes.
Fixed
NoneNothing Fixed
Removed
NoneNothing removed
V5.102.2
[5.102.2] - 2025-03-27
Added
NoneNothing Added
Changed
NoneNothing Changed
Fixed
FixIssue #640 found an edge case in sd2df where a row was dropped for a missing value in a single column data set for IOM and HTTP. STDIO didn't have the problem. Pandas read_csv required a column separator for that one case even though it didn't for cases with more than one column, even for the last column. I fixed the stream of data being provided to pandas so it handled this case.
Removed
NoneNothing removed
V5.102.1
Changelog
[5.102.1] - 2025-02-28
Added
EnhancementPR #635 was contributed by a new contributor @gregorywaynepower who enhanced the install instructions for installing saspy from other package manages and enhanced the conda instructions as well. Appreciate it!
Changed
NoneNothing Changed
Fixed
FixIssue #634 was fixed in this release. The read_csv() and write_csv() methods generated a filename statement with double quotes around the physical path. That’s fine unless there are special characters that can be configused with marco variables; ‘&’ for instance. I fixed this to use single quotes which won’t let the SAS parser think there are embedded marco variables to resolve in the path specification.
Removed
NoneNothing removed
New Contributors
- @gregorywaynepower made their first contribution in #635
V5.102.0
[5.102.0] - 2025-02-07
Added
EnhancementPer user request (#620) I’ve added a *kwargs parameter to the Submit() methods for the IOM Access Method,reset=which resets the LanguageService to an initial state with respect to token scanning; the default is False. This isn't something needed normally, but the API provides it so I added the ability to call it if needed.
Changed
EnhancementI’ve changed the method for acquiring the local IP address of the client for the SSH access method (STDIO over SSH) from using nslookup to using a a socket connect/close (to the remote host) to get the IP. This was a problem with internal systems that happened w/ a VPN application that no longer registers client machines w/ DNS such that the previous method didn’t resolve the hostname. This should cause no changes or regressions.
Fixed
FixFrom another internal consumer, I’ve fixed a bug in the HTTP access method around interrupt handling for submit*() methods. When processing a keyboard interrupt in submit, while waiting for the code to complete, the user is prompted with choices to take;Cancel the submitted code,Quit waiting for the results, or ignore – continue toWait. Cancel is a new feature in this access method, and for the case where Prompt=False (in the configuration file), where there can be no prompting, Cancel is the default for this interrupt. What has been changed/fixed is that in the case of Prompt=False and this interrupt happening and Canceling the submitted statements, that interrupt was not then being raised so the calling code (Prompt=False is used for non-interactive scripts) could catch that and do what was needed from the application. For the interactive case where the prompt is displayed, there is no change. So, for the case where Prompt=False and a keyboard interrupt (ctl-C) is taken in submit, the statements are Canceled (no change with that), and the interrupt is percolated to the caller (this is the change), instead of just returning.
Removed
NoneNothing removed
V5.101.1
[5.101.1] - 2024-12-20
Added
EnhancementFor an internal request to get around a VPN DNS problem, I've enhanced the way I try to get
the local IP address for the Python machine, when using the SSH access method to connect to a remote server.
So when the local machine isn't registered in DNS, this can get the local IP to use w/out requiring setting the
localhostkey in your configuration.localhostwill still be used if provided.
Changed
NoneNothing changed
Fixed
NoneNothing fixed
Removed
NoneNothing removed
V5.101.0
[5.101.0] - 2024-11-05
Added
EnhancementFor an internal request to get data set information, like date time created/modified, ...
I added a method on the SASdata object calledattrswhich returns a 1 row dataframe with each of the attributes
returned by the ATTRN and ATTRC functions. Mostly they are character or numeric, but the create/modified are
returned as timestamps. This provides an easy programmatic way to access any of these values.
Changed
NoneNothing changed
Fixed
NoneNothing fixed
Removed
NoneNothing removed
V5.100.4
[5.100.4] - 2024-10-28
Added
NoneNothing added
Changed
NoneNothing changed
Fixed
TweakThis was from an internal reported issue. I noticed 2 places where I was submitting code internally where
I was missing the results='text' that I use for internal code submissions that don't need ODS results. For an unusual
(not user case) reason that was causing them a problem. There's no issue reported from the field for this, so just
cleaning up these 2 submits so they are the same as all of the others.
Removed
NoneNothing removed