mirror of
https://github.com/sasjs/core.git
synced 2026-01-09 18:30:06 +00:00
chore: updating all.sas
This commit is contained in:
199
all.sas
199
all.sas
@@ -2276,11 +2276,7 @@ Usage:
|
|||||||
%else %if &ext=movie %then %do;%str(video/x-sgi-movie)%end;
|
%else %if &ext=movie %then %do;%str(video/x-sgi-movie)%end;
|
||||||
%else %if &ext=ice %then %do;%str(x-conference/x-cooltalk)%end;
|
%else %if &ext=ice %then %do;%str(x-conference/x-cooltalk)%end;
|
||||||
%else %if "&ext"="in" %then %do;%str(text/plain)%end;
|
%else %if "&ext"="in" %then %do;%str(text/plain)%end;
|
||||||
%else %do;
|
%else %do;%str(application/octet-stream)%end;
|
||||||
%put %str(WARN)ING: extension &ext not found!;
|
|
||||||
%put %str(WARN)ING- Returning text/plain.;
|
|
||||||
%str(text/plain)
|
|
||||||
%end;
|
|
||||||
|
|
||||||
%mend mf_mimetype;/**
|
%mend mf_mimetype;/**
|
||||||
@file
|
@file
|
||||||
@@ -24175,9 +24171,60 @@ run;
|
|||||||
%mend mfv_existsashdat;
|
%mend mfv_existsashdat;
|
||||||
/**
|
/**
|
||||||
@file
|
@file
|
||||||
@brief Creates a file in SAS Drive
|
@brief Returns the uri of a file or folder
|
||||||
@details Creates a file in SAS Drive and adds the appropriate content type.
|
@details The automatic variable _FILESRVC_[fref]_URI is used after assigning
|
||||||
|
a fileref using the filesrvc engine.
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
|
||||||
|
%put %mfv_existfile(/Public/folder/file.txt);
|
||||||
|
%put %mfv_existfile(/Public/folder);
|
||||||
|
|
||||||
|
@param [in] filepath The full path to the file on SAS drive
|
||||||
|
(eg /Public/myfile.txt)
|
||||||
|
|
||||||
|
<h4> SAS Macros </h4>
|
||||||
|
@li mf_abort.sas
|
||||||
|
@li mf_getuniquefileref.sas
|
||||||
|
|
||||||
|
<h4> Related Macros </h4>
|
||||||
|
@li mfv_existfile.sas
|
||||||
|
@li mfv_existfolder.sas
|
||||||
|
|
||||||
|
@version 3.5
|
||||||
|
@author [Allan Bowe](https://www.linkedin.com/in/allanbowe/)
|
||||||
|
**/
|
||||||
|
|
||||||
|
%macro mfv_getpathuri(filepath
|
||||||
|
)/*/STORE SOURCE*/;
|
||||||
|
|
||||||
|
%mf_abort(
|
||||||
|
iftrue=(&syscc ne 0),
|
||||||
|
msg=Cannot enter &sysmacroname with syscc=&syscc
|
||||||
|
)
|
||||||
|
|
||||||
|
%local fref rc path name;
|
||||||
|
%let fref=%mf_getuniquefileref();
|
||||||
|
%let name=%scan(&filepath,-1,/);
|
||||||
|
%let path=%substr(&filepath,1,%length(&filepath)-%length(&name)-1);
|
||||||
|
|
||||||
|
%if %sysfunc(filename(fref,,filesrvc,folderPath="&path" filename="&name"))=0
|
||||||
|
%then %do;&&_FILESRVC_&fref._URI%let rc=%sysfunc(filename(fref));
|
||||||
|
%end;
|
||||||
|
%else %do;
|
||||||
|
%put &sysmacroname: did not find &filepath;
|
||||||
|
%let syscc=0;
|
||||||
|
%end;
|
||||||
|
|
||||||
|
%mend mfv_getpathuri;/**
|
||||||
|
@file
|
||||||
|
@brief Creates a file in SAS Drive using the API method
|
||||||
|
@details Creates a file in SAS Drive using the API interface.
|
||||||
If the parent folder does not exist, it is created.
|
If the parent folder does not exist, it is created.
|
||||||
|
The API approach is more flexible than using the filesrvc engine of the
|
||||||
|
filename statement, as it provides more options.
|
||||||
|
|
||||||
|
SAS docs: https://developer.sas.com/rest-apis/files/createNewFile
|
||||||
|
|
||||||
Usage:
|
Usage:
|
||||||
|
|
||||||
@@ -24189,49 +24236,54 @@ run;
|
|||||||
%mv_createfile(path=/Public/temp,name=newfile.txt,inref=myfile)
|
%mv_createfile(path=/Public/temp,name=newfile.txt,inref=myfile)
|
||||||
|
|
||||||
|
|
||||||
@param [in] path= The parent folder in which to create the file
|
@param [in] path= The parent (SAS Drive) folder in which to create the file
|
||||||
@param [in] name= The name of the file to be created
|
@param [in] name= The name of the file to be created
|
||||||
@param [in] inref= The fileref pointing to the file to be uploaded
|
@param [in] inref= The fileref pointing to the file to be uploaded
|
||||||
@param [in] intype= (BINARY) The type of the input data. Valid values:
|
@param [in] intype= (BINARY) The type of the input data. Valid values:
|
||||||
@li BINARY File is copied byte for byte using the mp_binarycopy.sas macro.
|
@li BINARY File is copied byte for byte using the mp_binarycopy.sas macro.
|
||||||
@li BASE64 File will be first decoded using the mp_base64.sas macro, then
|
@li BASE64 File will be first decoded using the mp_base64.sas macro, then
|
||||||
loaded byte by byte to SAS Drive.
|
loaded byte by byte to SAS Drive.
|
||||||
@param [in] contentdisp= (inline) Content Disposition. Example values:
|
@param [in] contentdisp= Content Disposition. Example values:
|
||||||
@li inline
|
@li inline
|
||||||
@li attachment
|
@li attachment
|
||||||
@param [in] ctype= (0) Set a default HTTP Content-Type header to be returned
|
@param [in] ctype= (0) The actual MIME type of the file (if blank will be
|
||||||
with the file when the content is retrieved from the Files service.
|
determined based on file extension))
|
||||||
@param [in] access_token_var= The global macro variable to contain the access
|
@param [in] access_token_var= The global macro variable to contain the access
|
||||||
token, if using authorization_code grant type.
|
token, if using authorization_code grant type.
|
||||||
@param [in] grant_type= (sas_services) Valid values are:
|
@param [in] grant_type= (sas_services) Valid values are:
|
||||||
@li password
|
@li password
|
||||||
@li authorization_code
|
@li authorization_code
|
||||||
@li sas_services
|
@li sas_services
|
||||||
|
@param [out] outds= (_null_) Output dataset with the uri of the new file
|
||||||
|
|
||||||
@param [in] mdebug= (0) Set to 1 to enable DEBUG messages
|
@param [in] mdebug= (0) Set to 1 to enable DEBUG messages
|
||||||
|
|
||||||
@version VIYA V.03.05
|
|
||||||
@author Allan Bowe, source: https://github.com/sasjs/core
|
|
||||||
|
|
||||||
<h4> SAS Macros </h4>
|
<h4> SAS Macros </h4>
|
||||||
|
@li mf_getplatform.sas
|
||||||
@li mf_getuniquefileref.sas
|
@li mf_getuniquefileref.sas
|
||||||
|
@li mf_getuniquename.sas
|
||||||
@li mf_isblank.sas
|
@li mf_isblank.sas
|
||||||
|
@li mf_mimetype.sas
|
||||||
@li mp_abort.sas
|
@li mp_abort.sas
|
||||||
@li mp_base64copy.sas
|
@li mp_base64copy.sas
|
||||||
@li mp_binarycopy.sas
|
@li mp_binarycopy.sas
|
||||||
@li mv_createfolder.sas
|
@li mv_createfolder.sas
|
||||||
|
|
||||||
|
<h4> Related Macros</h4>
|
||||||
|
@li mv_createfile.sas
|
||||||
|
|
||||||
**/
|
**/
|
||||||
|
|
||||||
%macro mv_createfile(path=
|
%macro mv_createfile(path=
|
||||||
,name=
|
,name=
|
||||||
,inref=
|
,inref=
|
||||||
,intype=BINARY
|
,intype=BINARY
|
||||||
,contentdisp=inline
|
,contentdisp=
|
||||||
,ctype=0
|
,ctype=0
|
||||||
,access_token_var=ACCESS_TOKEN
|
,access_token_var=ACCESS_TOKEN
|
||||||
,grant_type=sas_services
|
,grant_type=sas_services
|
||||||
,mdebug=0
|
,mdebug=0
|
||||||
|
,outds=_null_
|
||||||
);
|
);
|
||||||
%local dbg;
|
%local dbg;
|
||||||
%if &mdebug=1 %then %do;
|
%if &mdebug=1 %then %do;
|
||||||
@@ -24266,38 +24318,87 @@ run;
|
|||||||
,msg=%str(name value with length >1 must be provided)
|
,msg=%str(name value with length >1 must be provided)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
/* prep the source file */
|
||||||
|
%local fref;
|
||||||
|
%let fref=%mf_getuniquefileref();
|
||||||
|
|
||||||
|
%if %upcase(&intype)=BINARY %then %do;
|
||||||
|
%mp_binarycopy(inref=&inref, outref=&fref)
|
||||||
|
%end;
|
||||||
|
%else %if %upcase(&intype)=BASE64 %then %do;
|
||||||
|
%mp_base64copy(inref=&inref, outref=&fref, action=DECODE)
|
||||||
|
%end;
|
||||||
|
%else %put %str(ERR)OR: invalid value for intype: &intype;
|
||||||
|
|
||||||
|
|
||||||
|
%if &mdebug=1 %then %do;
|
||||||
|
data _null_;
|
||||||
|
infile &fref lrecl=32767;
|
||||||
|
input;
|
||||||
|
put _infile_;
|
||||||
|
run;
|
||||||
|
%end;
|
||||||
|
|
||||||
|
|
||||||
/* create folder if it does not already exist */
|
/* create folder if it does not already exist */
|
||||||
|
%local folderds parenturi;
|
||||||
|
%let folderds=%mf_getuniquename(prefix=folderds);
|
||||||
%mv_createfolder(path=&path
|
%mv_createfolder(path=&path
|
||||||
,access_token_var=&access_token_var
|
,access_token_var=&access_token_var
|
||||||
,grant_type=&grant_type
|
,grant_type=&grant_type
|
||||||
,mdebug=&mdebug
|
,mdebug=&mdebug
|
||||||
|
,outds=&folderds
|
||||||
)
|
)
|
||||||
|
data _null_;
|
||||||
|
set &folderds;
|
||||||
|
call symputx('self_uri',self_uri,'l');
|
||||||
|
run;
|
||||||
|
|
||||||
/* create file with relevant options */
|
|
||||||
%local fref;
|
|
||||||
%let fref=%mf_getuniquefileref();
|
|
||||||
filename &fref filesrvc
|
|
||||||
folderPath="&path"
|
|
||||||
filename="&name"
|
|
||||||
cdisp="&contentdisp"
|
|
||||||
%if "&ctype" ne "0" %then %do;
|
|
||||||
ctype="&ctype"
|
|
||||||
%end;
|
|
||||||
lrecl=1048544;
|
|
||||||
%if &intype=BINARY %then %do;
|
|
||||||
%mp_binarycopy(inref=&inref, outref=&fref)
|
|
||||||
%end;
|
|
||||||
%else %if &intype=BASE64 %then %do;
|
|
||||||
%mp_base64copy(inref=&inref, outref=&fref, action=DECODE)
|
|
||||||
%end;
|
|
||||||
|
|
||||||
filename &fref clear;
|
|
||||||
|
|
||||||
|
options noquotelenmax;
|
||||||
%local base_uri; /* location of rest apis */
|
%local base_uri; /* location of rest apis */
|
||||||
%let base_uri=%mf_getplatform(VIYARESTAPI);
|
%let base_uri=%mf_getplatform(VIYARESTAPI);
|
||||||
|
|
||||||
%put &sysmacroname: File &name successfully created in &path;
|
|
||||||
%put &sysmacroname:;%put;
|
/* fetch job info */
|
||||||
|
%local fname1;
|
||||||
|
%let fname1=%mf_getuniquefileref();
|
||||||
|
proc http method='POST' out=&fname1 &oauth_bearer in=&fref
|
||||||
|
%if "&ctype" = "0" %then %do;
|
||||||
|
ct="%mf_mimetype(%scan(&name,-1,.))"
|
||||||
|
%end;
|
||||||
|
%else %do;
|
||||||
|
ct="&ctype"
|
||||||
|
%end;
|
||||||
|
url="&base_uri/files/files?parentFolderUri=&self_uri";
|
||||||
|
|
||||||
|
headers "Accept"="application/json"
|
||||||
|
%if &grant_type=authorization_code %then %do;
|
||||||
|
"Authorization"="Bearer &&&access_token_var"
|
||||||
|
%end;
|
||||||
|
"Content-Disposition"= "&contentdisp filename=""&name""; name=""&name"";";
|
||||||
|
run;
|
||||||
|
%put &=SYS_PROCHTTP_STATUS_CODE;
|
||||||
|
%put &=SYS_PROCHTTP_STATUS_PHRASE;
|
||||||
|
%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 201)
|
||||||
|
,mac=&sysmacroname
|
||||||
|
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
|
||||||
|
)
|
||||||
|
%local libref2;
|
||||||
|
%let libref2=%mf_getuniquelibref();
|
||||||
|
libname &libref2 JSON fileref=&fname1;
|
||||||
|
%put Grabbing the follow on link ;
|
||||||
|
data &outds;
|
||||||
|
set &libref2..links end=last;
|
||||||
|
if rel='createChild' then do;
|
||||||
|
call symputx('href',quote(cats("&base_uri",href)),'l');
|
||||||
|
&dbg put (_all_)(=);
|
||||||
|
end;
|
||||||
|
run;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
%put &sysmacroname: File &name successfully created:;%put;
|
||||||
%put &base_uri/SASJobExecution?_file=&path/&name;%put;
|
%put &base_uri/SASJobExecution?_file=&path/&name;%put;
|
||||||
%put &sysmacroname:;
|
%put &sysmacroname:;
|
||||||
|
|
||||||
@@ -24320,15 +24421,16 @@ filename &fref clear;
|
|||||||
@li sas_services
|
@li sas_services
|
||||||
|
|
||||||
@param [in] mdebug=(0) set to 1 to enable DEBUG messages
|
@param [in] mdebug=(0) set to 1 to enable DEBUG messages
|
||||||
|
@param [out] outds=(_null_) Optionally create an output dataset which will
|
||||||
|
contain the uri (self_uri) of the created (and parent) folder.
|
||||||
|
|
||||||
@version VIYA V.03.04
|
|
||||||
@author Allan Bowe, source: https://github.com/sasjs/core
|
|
||||||
|
|
||||||
<h4> SAS Macros </h4>
|
<h4> SAS Macros </h4>
|
||||||
@li mp_abort.sas
|
@li mp_abort.sas
|
||||||
@li mf_getuniquefileref.sas
|
@li mf_getuniquefileref.sas
|
||||||
@li mf_getuniquelibref.sas
|
@li mf_getuniquelibref.sas
|
||||||
@li mf_isblank.sas
|
@li mf_isblank.sas
|
||||||
|
@li mfv_getpathuri.sas
|
||||||
@li mf_getplatform.sas
|
@li mf_getplatform.sas
|
||||||
@li mfv_existfolder.sas
|
@li mfv_existfolder.sas
|
||||||
|
|
||||||
@@ -24339,6 +24441,7 @@ filename &fref clear;
|
|||||||
,access_token_var=ACCESS_TOKEN
|
,access_token_var=ACCESS_TOKEN
|
||||||
,grant_type=sas_services
|
,grant_type=sas_services
|
||||||
,mdebug=0
|
,mdebug=0
|
||||||
|
,outds=_null_
|
||||||
);
|
);
|
||||||
%local dbg;
|
%local dbg;
|
||||||
%if &mdebug=1 %then %do;
|
%if &mdebug=1 %then %do;
|
||||||
@@ -24349,6 +24452,11 @@ filename &fref clear;
|
|||||||
|
|
||||||
%if %mfv_existfolder(&path)=1 %then %do;
|
%if %mfv_existfolder(&path)=1 %then %do;
|
||||||
%put &sysmacroname: &path already exists;
|
%put &sysmacroname: &path already exists;
|
||||||
|
data &outds;
|
||||||
|
self_uri="%mfv_getpathuri(&path)";
|
||||||
|
output;
|
||||||
|
stop;
|
||||||
|
run;
|
||||||
%return;
|
%return;
|
||||||
%end;
|
%end;
|
||||||
|
|
||||||
@@ -24383,12 +24491,12 @@ options noquotelenmax;
|
|||||||
%local subfolder_cnt; /* determine the number of subfolders */
|
%local subfolder_cnt; /* determine the number of subfolders */
|
||||||
%let subfolder_cnt=%sysfunc(countw(&path,/));
|
%let subfolder_cnt=%sysfunc(countw(&path,/));
|
||||||
|
|
||||||
%local href; /* resource address (none for root) */
|
|
||||||
%let href="/folders/folders?parentFolderUri=/folders/folders/none";
|
|
||||||
|
|
||||||
%local base_uri; /* location of rest apis */
|
%local base_uri; /* location of rest apis */
|
||||||
%let base_uri=%mf_getplatform(VIYARESTAPI);
|
%let base_uri=%mf_getplatform(VIYARESTAPI);
|
||||||
|
|
||||||
|
%local href; /* resource address (none for root) */
|
||||||
|
%let href="&base_uri/folders/folders?parentFolderUri=/folders/folders/none";
|
||||||
|
|
||||||
%local x newpath subfolder;
|
%local x newpath subfolder;
|
||||||
%do x=1 %to &subfolder_cnt;
|
%do x=1 %to &subfolder_cnt;
|
||||||
%let subfolder=%scan(&path,&x,%str(/));
|
%let subfolder=%scan(&path,&x,%str(/));
|
||||||
@@ -24418,7 +24526,7 @@ options noquotelenmax;
|
|||||||
%put &sysmacroname following check to see if &newpath exists:;
|
%put &sysmacroname following check to see if &newpath exists:;
|
||||||
%put _local_;
|
%put _local_;
|
||||||
data _null_;
|
data _null_;
|
||||||
set &fname1;
|
infile &fname1;
|
||||||
input;
|
input;
|
||||||
putlog _infile_;
|
putlog _infile_;
|
||||||
run;
|
run;
|
||||||
@@ -24470,12 +24578,17 @@ options noquotelenmax;
|
|||||||
%let libref2=%mf_getuniquelibref();
|
%let libref2=%mf_getuniquelibref();
|
||||||
libname &libref2 JSON fileref=&fname2;
|
libname &libref2 JSON fileref=&fname2;
|
||||||
%put &sysmacroname &newpath now created. Grabbing the follow on link ;
|
%put &sysmacroname &newpath now created. Grabbing the follow on link ;
|
||||||
data _null_;
|
data &outds;
|
||||||
set &libref2..links;
|
set &libref2..links;
|
||||||
if rel='createChild' then do;
|
if rel='createChild' then do;
|
||||||
call symputx('href',quote(cats("&base_uri",href)),'l');
|
call symputx('href',quote(cats("&base_uri",href)),'l');
|
||||||
&dbg put (_all_)(=);
|
&dbg put (_all_)(=);
|
||||||
end;
|
end;
|
||||||
|
if method='GET' and rel='self' then do;
|
||||||
|
self_uri=uri;
|
||||||
|
output;
|
||||||
|
end;
|
||||||
|
keep self_uri ;
|
||||||
run;
|
run;
|
||||||
|
|
||||||
libname &libref2 clear;
|
libname &libref2 clear;
|
||||||
|
|||||||
Reference in New Issue
Block a user