if __name__ == '__main__': try: username = os.environ.get('SF_USERNAME') password = os.environ.get('SF_PASSWORD') serverurl = os.environ.get('SF_SERVERURL') push_request_id = os.environ.get('PUSH_REQUEST') subscriber_where = os.environ.get('SUBSCRIBER_WHERE', None) default_where = {'PackagePushRequest': "Id = '%s'" % push_request_id} if subscriber_where: default_where['PackageSubscriber'] = subscriber_where push_api = SalesforcePushApi(username, password, serverurl, lazy=['subscribers', 'jobs'], default_where=default_where) push_request = push_api.get_push_request_objs("Id = '%s'" % push_request_id, limit=1)[0] interval = 10 if push_request.status not in completed_statuses: print 'Push request is not yet complete. Polling for status every %s seconds until completion...' % interval i = 0 while push_request.status not in completed_statuses: if i == 10: print 'This is taking a while! Polling every 60 seconds...' interval = 60
version_id = os.environ.get('VERSION') subscriber_where = os.environ.get('SUBSCRIBER_WHERE', None) # Add standard filters for only active orgs default_where = { 'PackageSubscriber': "OrgStatus = 'Active' AND InstalledStatus = 'i'" } # Append subscriber where if passed in environment if subscriber_where: default_where[ 'PackageSubscriber'] += " AND (%s)" % subscriber_where push_api = SalesforcePushApi(username, password, serverurl, default_where=default_where) # Get the target version version = push_api.get_package_version_objs("Id = '%s'" % version_id, limit=1)[0] # Add exclusion of all orgs running on newer releases newer_versions = version.get_newer_released_version_objs() excluded_versions = [ str(version.sf_id), ] for newer in newer_versions: excluded_versions.append(str(newer.sf_id)) if len(excluded_versions) == 1: push_api.default_where[
startTime = None if not subscribers and not subscribers_file: raise ValueError( 'You must provide either the SUBSCRIBERS or SUBSCRIBERS_FILE environment variables' ) if subscribers: orgs = subscribers.split(',') else: f_orgs = open(subscribers_file, 'r') orgs = [] for org in f_orgs: orgs.append(org.strip()) push_api = SalesforcePushApi(username, password, serverurl) version = push_api.get_package_version_objs("Id = '%s'" % version, limit=1)[0] print 'Scheduling push upgrade for %s.%s to %s orgs' % ( version.major, version.minor, len(orgs)) if startTime: print 'Scheduled start time: %s UTC' % startTime request_id = push_api.create_push_request(version, orgs, startTime) if len(orgs) > 1000: print "Delaying 30 seconds to allow all jobs to initialize..." time.sleep(30) print 'Push Request %s is populated, setting status to Pending to queue execution.' % request_id