1212"""
1313#pylint: disable-msg=R0912,R0913,R0914,R0915
1414
15- import sys , argparse
15+ import sys
16+ import os
17+ import argparse
18+ import datetime
19+ import pickle
1620import simplejson as json
1721import helpers
1822
@@ -174,19 +178,28 @@ def main(args):
174178 # Who is running this script?
175179 runuser = helpers .who_is_running ()
176180
181+ # Set the base dir of the script and where the var data is
182+ global dir
183+ global vardir
184+ dir = os .path .dirname (__file__ )
185+ vardir = os .path .join (dir , 'var' )
186+ # confdir = os.path.join(dir, 'config')
187+
177188 # Check for sane input
178189 parser = argparse .ArgumentParser (
179190 description = 'Promotes content views for specified organization to the target environment.' )
180191 group = parser .add_mutually_exclusive_group ()
181192 # pylint: disable=bad-continuation
182193 parser .add_argument ('-e' , '--env' , help = 'Target Environment (e.g. Development, Quality, Production)' ,
183- required = True )
194+ required = False )
184195 parser .add_argument ('-o' , '--org' , help = 'Organization (Uses default if not specified)' ,
185196 required = False )
186197 group .add_argument ('-a' , '--all' , help = 'Promote ALL content views' , required = False ,
187198 action = "store_true" )
188199 parser .add_argument ('-d' , '--dryrun' , help = 'Dry Run - Only show what will be promoted' ,
189200 required = False , action = "store_true" )
201+ parser .add_argument ('-l' , '--last' , help = 'Display last promotions' , required = False ,
202+ action = "store_true" )
190203
191204 args = parser .parse_args ()
192205
@@ -202,14 +215,36 @@ def main(args):
202215 target_env = args .env
203216 dry_run = args .dryrun
204217
218+ # Load the promotion history
219+ if not os .path .exists (vardir + '/promotions.pkl' ):
220+ if not os .path .exists (vardir ):
221+ os .makedirs (vardir )
222+ phistory = {}
223+ else :
224+ phistory = pickle .load (open (vardir + '/promotions.pkl' , 'rb' ))
225+
226+ # Read the promotion history if --last requested
227+ if args .last :
228+ if phistory :
229+ print 'Last promotions:'
230+ for lenv , time in phistory .iteritems ():
231+ print lenv , time
232+ else :
233+ print 'No promotions recorded'
234+ sys .exit (- 1 )
235+
236+ # Error if no environment to promote to is given
237+ if args .env is None :
238+ parser .error ('--env is required' )
239+
205240 promote_list = []
206241 if not args .all :
207242 for x in helpers .CONFIG ['promotion' ]:
208243 if helpers .CONFIG ['promotion' ][x ]['name' ] == target_env :
209244 promote_list = helpers .CONFIG ['promotion' ][x ]['content_views' ]
210245
211246 if not promote_list :
212- msg = "Cannot find promotion configuration for '" + target_env
247+ msg = "Cannot find promotion configuration for '" + target_env + "'"
213248 helpers .log_msg (msg , 'ERROR' )
214249 sys .exit (- 1 )
215250
@@ -230,6 +265,10 @@ def main(args):
230265 (task_list , ref_list , task_name ) = promote (target_env , ver_list , ver_descr , ver_version ,
231266 env_list , prior_list , dry_run )
232267
268+ # Add/Update the promotion history dictionary so we can check when we last promoted
269+ phistory [target_env ] = datetime .datetime .strftime (datetime .datetime .now (), '%Y-%m-%d' )
270+ pickle .dump (phistory , open (vardir + '/promotions.pkl' , 'wb' ))
271+
233272 # Monitor the status of the promotion tasks
234273 helpers .watch_tasks (task_list , ref_list , task_name )
235274
0 commit comments