def createOrgSubMenu(term): submenu = [] menuFormat = menuHelper.getDefaultFormat() menuFormatWithSpace = menuHelper.getDefaultFormat() menuFormatWithSpace['addTopSpace'] = True submenu.append(["Create Scratch Org", org.createScratchOrg, menuFormat]) submenu.append(["Open Scratch Org", org.openScratchOrg, menuFormat]) submenu.append([ "Open Scratch Org (specify browser)", org.openScratchOrgSpecificBrowser, menuFormat ]) submenu.append([ "Status of Scratch Org", org.seeScratchOrgStatus, menuFormatWithSpace ]) submenu.append(["Delete Scratch Orgs", org.deleteScratchOrg, menuFormat]) submenu.append([ "Change Default Scratch Org", org.changeDefaultScratchOrg, menuFormat ]) submenu.append( ["Change Default Org", org.changeDefaultOrg, menuFormatWithSpace]) submenu.append(["Login to Org", org.login, menuFormat]) return "Org Related Commands", submenu, menuFormat
def createPackageSubMenu(term): menuFormat = menuHelper.getDefaultFormat() menuFormatWithSpace = menuHelper.getDefaultFormat() menuFormatWithSpace['addTopSpace'] = True submenu = [] submenu.append(["Re-Install Packages", package.reinstall, menuFormat]) return "Package Related Commands", submenu, menuFormatWithSpace
def createSourceSubMenu(term): menuFormat = menuHelper.getDefaultFormat() menuFormatWithSpace = menuHelper.getDefaultFormat() menuFormatWithSpace['addTopSpace'] = True submenu = [] submenu.append(["Pull Metadata", source.pull, menuFormat]) submenu.append(["Push Metadata", source.push, menuFormat]) submenu.append( ["Pull Metadata (manifest)", source.manifest, menuFormatWithSpace]) return "Source Related Commands", submenu, menuFormat
def createUserSubMenu(term): menuFormat = menuHelper.getDefaultFormat() submenu = [] submenu.append(["Create user", user.create, menuFormat]) return "User Related Commands", submenu, menuFormat
def login(term): subtitle = 'Login to Org' menuFormat = menuHelper.getDefaultFormat() items = [["Production Org / Developer Edition / DevHub", None, menuFormat], ["Sandbox", None, menuFormat], menuHelper.getReturnButton(2)] selection = menuHelper.giveUserChoices(term=term, showHeader=True, showFooter=True, items=items, selection=0, subtitle=subtitle, middleText="Choose Org type", printAtBottom=False) if (selection == 2): return param = "" if (selection == 0): setAsDefault = menuHelper.askUserYesOrNo(term, True, True, subtitle, ['Set this org as default DevHub? (scratch orgs will be made using this org)'], True, False, False, True) if (not setAsDefault): return if (setAsDefault): param = "-d" if (selection == 1): param = "-r https://test.salesforce.com" menuHelper.clear(term, True, True, title, subtitle, None) orgName = helper.askForInput( [ ["Enter name for org", [ helper.c.y ]] ] ) if (orgName): param += " -a " + orgName menuHelper.clear(term, True, True, title, subtitle, None) helper.startLoading("Waiting for login in browser") helper.tryCommand(term, ["sfdx force:auth:web:login " + param], True, True, False)[0] helper.pressToContinue(term)
def openScratchOrgSpecificBrowser(term): menuFormat = menuHelper.getDefaultFormat() items = [['Chrome', None, menuFormat], ['Firefox', None, menuFormat], ['Opera', None, menuFormat]] if (helper.isMac()): items.append(['Safari', None, menuFormat]) items.append(menuHelper.getReturnButton(2)) selection = menuHelper.giveUserChoices(term=term, showHeader=True, showFooter=True, items=items, selection=0, subtitle='Open Scratch Org (specify browser)', middleText=None, printAtBottom=False) if (selection == len(items) - 1): return browserName = items[selection][0] browserChoice = browserName.lower() helper.startLoading("Opening Scratch Org in {}".format(browserName)) output = helper.tryCommand(term=term, commands=["sfdx force:org:open -r --json"], clearBeforeShowingError=False, stopSpinnerAfterSuccess=False, printOutputAfterSuccess=False) if (not output[0]): # not failing jsonOutput = helper.loadJson(output[1][0]) url = helper.ifKeyExists("url", jsonOutput["result"]) res = webbrowser.get(browserChoice).open_new_tab(url) if (res): helper.spinnerSuccess() else: menuHelper.clear(term, True, True, title, 'Open Scratch Org (specify browser)', None) helper.startLoading("Opening Scratch Org") helper.spinnerError() print("Either {} is not running, or it's not installed.".format(browserName)) helper.pressToContinue(term)
def createOtherSubMenu(term): menuFormat = menuHelper.getDefaultFormat() submenu = [] submenu.append(["Add Package Key", other.createPackageKey, menuFormat]) submenu.append( ["Re-Import Dummy Data", other.reImportDummyData, menuFormat]) return "Other Commands", submenu, menuFormat
def askUserForOrgs(term, lookingForRegularOrgs, text, subtitle, selectMultiple): root = "scratchOrgs" kind = "Scratch Orgs" if (lookingForRegularOrgs): root = "nonScratchOrgs" kind = "orgs" helper.startLoading("Loading {}".format(kind)) output = helper.tryCommand(term=term, commands=["sfdx force:org:list --json"], clearBeforeShowingError=False, stopSpinnerAfterSuccess=True, printOutputAfterSuccess=False) if (output[0]): helper.pressToContinue(term) return jsonOutput = helper.loadJson(output[1][0]) menuFormat = menuHelper.getDefaultFormat() items = [] originalItems = [] for row in jsonOutput['result'][root]: alias = helper.ifKeyExists('alias', row) username = helper.ifKeyExists('username', row) orgId = helper.ifKeyExists('orgId', row) expirationDate = helper.ifKeyExists('expirationDate', row) defaultMarker = helper.ifKeyExists('defaultMarker', row).replace('(U)', 'X').replace('(D)', 'X') if (defaultMarker != ''): if (helper.isMac()): defaultMarker = "✅ " else: defaultMarker = "✓" if (expirationDate != ''): expirationDate = '({})'.format(expirationDate) if (alias == ""): alias = username line = " ".join([alias, defaultMarker, expirationDate]) items.append([line, None, menuFormat]) originalItems.append(alias) if (len(items) == 0): menuHelper.clear(term, True, True, title, subtitle, None) print(helper.col("You have no active {}!".format(kind), [helper.c.r])) helper.pressToContinue(term) return True items.append(menuHelper.getReturnButton(2)) if (selectMultiple): selected = menuHelper.giveUserChoicesWithMultipleAnswers(term=term, showHeader=True, showFooter=True, items=items, subtitle=subtitle, middleText=text, printAtBottom=False) values = [] for item in selected: values.append(originalItems[item]) return values else: selection = menuHelper.giveUserChoices(term=term, showHeader=True, showFooter=True, items=items, selection=0, subtitle=subtitle, middleText=text, printAtBottom=False) if (selection == len(originalItems)): return None return originalItems[selection]
def create(term): path = helper.getConfig('locations.users') if (path is None): print( helper.col( "\nEdit ./config/ssdx-config.json to add a default path for user configs", [helper.c.r])) helper.pressToContinue(term) return path = path + '/' text = "Which user definition to you want to user as baseline? (see {})".format( path) try: userTypes = helper.fetchFilesFromFolder(path, False) except Exception as e: print("Make sure users are configured in " + path) helper.pressToContinue(term) menuFormat = menuHelper.getDefaultFormat() items = [] for userType in userTypes: items.append([userType.replace(".json", ""), None, menuFormat]) items.append(menuHelper.getReturnButton(2)) selection = menuHelper.giveUserChoices(term=term, showHeader=True, showFooter=True, items=items, selection=0, subtitle='Create user', middleText=text, printAtBottom=False) if (selection == len(items) - 1): return file = path + userTypes[selection] d = datetime.datetime.now().strftime('%d%m%y_%f') username = "******".format(userTypes[selection].replace(".json", ""), d) email = "{}{}@fake.no".format(userTypes[selection].replace(".json", ""), d) menuHelper.clear(term, True, True, title, 'Create user', None) helper.startLoading("Creating user") error = helper.tryCommand(term, [ "sfdx force:user:create -f {} username={} email={}".format( file, username, email) ], False, True, False)[0] if (not error): helper.startLoading("Fetching password") res = helper.tryCommand( term, ["sfdx force:user:display -u {} --json".format(username)], False, False, False) if (not res[0]): jsonOutput = json.loads(res[1][0]) if ("password" in jsonOutput['result']): password = jsonOutput['result']['password'] if ("instanceUrl" in jsonOutput['result']): url = jsonOutput['result']['instanceUrl'].replace( 'https://', '').split('.cs')[0] login = helper.tryCommand( term, ["sfdx force:org:open -u {} -r --json".format(username)], False, True, False) if (not login[0]): loginJsonOutput = json.loads(login[1][0]) if ("url" in loginJsonOutput['result']): loginUrl = loginJsonOutput['result']['url'] pyperclip.copy(loginUrl) print( "\n URL: {}\n Username: {}\n Password: {}\n\n Instant login (copied to clipboard): \n{}\n" .format(url, username, password, loginUrl)) helper.pressToContinue(term)