-
Notifications
You must be signed in to change notification settings - Fork 31
/
exportfolder.py
executable file
·119 lines (88 loc) · 4.2 KB
/
exportfolder.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#!/usr/bin/python
# -*- coding: utf-8 -*-
#
# exportfolder.py
# Feb 2021
#
# Pass in a folder and this tool will export the folder to a package
#
#
# Change History
# 22aug2022 add option to auto delete transport file after download completes
#
# Copyright © 2019, SAS Institute Inc., Cary, NC, USA. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the License);
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Import Python modules
import argparse, sys, subprocess, uuid, time, os, glob
from sharedfunctions import getfolderid, callrestapi, getapplicationproperties, printresult, getclicommand
# get python version
version=int(str(sys.version_info[0]))
# get cli location from properties, check that cli is there if not ERROR and stop
clicommand=getclicommand()
# get input parameters
parser = argparse.ArgumentParser(description="Export a Viya Folder and its sub-folders")
parser.add_argument("-f","--folderpath", help="Folder path to export",required='True')
parser.add_argument("-d","--directory", help="Directory for Export",required='True')
parser.add_argument("--filename", help="File name without extension. Optional, default name is the folder path.",default="XNOFILENAMEX")
parser.add_argument("-t","--tranferremove", help="Remove transfer package from SAS Viya after download to JSON file", action='store_true')
parser.add_argument("-q","--quiet", help="Suppress the are you sure prompt.", action='store_true')
args= parser.parse_args()
folderpath=args.folderpath
basedir=args.directory
filename=args.filename
autotranferremove=args.tranferremove
quietmode=args.quiet
# prompt if directory exists because existing json files are deleted
if os.path.exists(basedir):
# if the quiet mode flag is not passed then prompt to continue
if not quietmode:
if version > 2:
areyousure=input("The folder exists, any existing json files of the same name will be overwritten. Continue? (Y)")
else:
areyousure=raw_input("The folder exists, any existing json files of the same name will be overwritten. Continue? (Y)")
else:
areyousure="Y"
else: areyousure="Y"
# prompt is Y if user selected Y, its a new directory, or user selected quiet mode
if areyousure.upper() =='Y':
path=basedir
# create directory if it doesn't exist
if not os.path.exists(path): os.makedirs(path)
folderinfo=getfolderid(folderpath)
results=(folderinfo[3])
printresult(results,'JSON')
id=results["id"]
package_name=str(uuid.uuid1())
json_name=folderpath.replace("/","_")
if filename !="XNOFILENAMEX" : json_name=filename
command=clicommand+' transfer export -u /folders/folders/'+id+' --name "'+package_name+'"'
print(command)
subprocess.call(command, shell=True)
reqtype='get'
reqval='/transfer/packages?filter=eq(name,"'+package_name+'")'
package_info=callrestapi(reqval,reqtype)
package_id=package_info['items'][0]['id']
completefile=os.path.join(path,json_name+'.json')
command=clicommand+' transfer download --file '+completefile+' --id '+package_id
print(command)
subprocess.call(command, shell=True)
if autotranferremove:
print(clicommand+' transfer delete --id '+package_id+"\n")
remTransferObject = subprocess.Popen(clicommand+' transfer delete --id '+package_id, stdin=subprocess.PIPE, stdout=subprocess.PIPE, shell=True)
remTransferObjectOutput = remTransferObject.communicate(b'Y\n')
remTransferObject.wait()
print("NOTE: Viya folder "+folderpath+ " exported to json file "+completefile)
else:
print("NOTE: Operation cancelled")