示例#1
0
文件: itccli.py 项目: wpsteak/itc.cli
def main():
    os.umask(0077)
    if not os.path.exists(temp_dir):
        os.mkdir(temp_dir);

    args = __parse_options()

    logging.debug('Python %s' % sys.version)
    logging.debug('Running on %s' % platform.platform())
    logging.debug('Temp path = %s' % temp_dir)
    logging.debug('Current Directory = %s' % os.getcwd())

    logging.debug('args %s' % args)

    if options['--no-cookies'] or options['--store-password']:
        logging.debug('Deleting cookie file: ' + cookie_file)
        if os.path.exists(cookie_file):
            os.remove(cookie_file)
            cookie_jar.clear()
            logging.info('Removed authentication cookies')
        else:
            logging.debug('Cookie file doesn\'t exist')

    if options['--username'] == None:
        options['--username'] = raw_input('Username: '******'--delete-password']:
        keyring.delete_password(KEYRING_SERVICE_NAME, options['--username'])

    if options['--password'] == None:
        logging.debug('Looking for password in a secure storage. Username: '******'--username'])
        options['--password'] = keyring.get_password(KEYRING_SERVICE_NAME, options['--username'])

    server = ITCServer(options['--username'], options['--password'])

    if not server.isLoggedIn:
        if options['--password'] == None:
            options['--password'] = getpass.getpass()
        server.login(password = options['--password'])

    if server.isLoggedIn and options['--store-password']:
        keyring.set_password(KEYRING_SERVICE_NAME, options['--username'], options['--password'])

    if len(server.applications) == 0:
        server.fetchApplicationsList()

    if len(server.applications) == 0:
        logging.info('No applications found.')
        return
        
    logging.debug(server.applications)
    if options['--application-id']:
        options['--application-id'] = int(options['--application-id'])


    if options['generate']:
        if options['--application-id']:
            if options['--application-id'] in server.applications: 
                applications = {}
                applications[options['--application-id']] = server.applications[options['--application-id']]
            else:
                logging.error('No application with id ' + str(options['--application-id']))
                return
        else:
            applications = server.applications

        for applicationId, application in applications.items():
            updatedApplication = server.getApplicationById(applicationId)
            updatedApplication.generateConfig(options['--application-version'], generateInapps = options['--generate-config-inapp'])

        return

    if options['promo']:
        if not options['--application-id'] in server.applications: 
            logging.error("Provide correct application id (--application-id or -a option)")
        else:
            application = server.getApplicationById(options['--application-id'])
            promocodes = application.getPromocodes(options['<amount>'])
            if options['--output-file']:
                with open(options['--output-file'], 'a') as outFile:
                    outFile.write(promocodes)
            else: # just print to console. Using print as we want to suppress silence option
                print promocodes

        return

    if options['reviews']:
        if not options['--application-id'] in server.applications: 
            logging.error("Provide correct application id (--application-id or -a option)")
        else:
            application = server.getApplicationById(options['--application-id'])
            application.generateReviews(options['--latest-version'], options['--date-range'], options['--output-file'])

        return

    cfg = __parse_configuration_file()
    if len(cfg) == 0:
        logging.info('Nothing to do.')
        return

    applicationDict = cfg['application']
    applicationId = applicationDict.get('id', -1)
    if options['--application-id']:
        applicationId = int(options['--application-id'])
    application = None
    commonActions = applicationDict.get('metadata', {}).get('general', {})
    specificLangCommands = applicationDict.get('metadata', {}).get('languages', {})
    langActions = {}
    filename_format = cfg.get('config', {}) \
                           .get('images', {}) \
                              .get('file name format', default_file_format)

    for lang in specificLangCommands:
        langActions[languages.languageNameForId(lang)] = dict_merge(commonActions, specificLangCommands[lang])

    logging.debug(langActions)

    if applicationId not in server.applications and not options['create']:
        logging.warning('No application with id ' + str(applicationId))
        choice = raw_input('Do you want to create a new one? [y/n]')
        options['create'] = True if choice.strip().lower() in ('y', 'yes', '') else False

    if options['create']:
        server.createNewApp(applicationDict, filename_format=filename_format)
    elif applicationId in server.applications:
        application = server.getApplicationById(applicationId)
        if options['version']:
            langActions['default'] = commonActions
            application.addVersion(applicationDict['version'], langActions)
        else:
            for lang in langActions:
                actions = langActions[lang]
                application.editVersion(actions, lang=lang, filename_format=filename_format)

            appReviewInfo = applicationDict.get('app review information', None)

            if appReviewInfo != None:
                application.editReviewInformation(appReviewInfo)

            for inappDict in applicationDict.get('inapps', {}):
                isIterable = inappDict['id'].find('{index}') != -1
                iteratorDict = inappDict.get('index iterator')

                if isIterable and (iteratorDict == None):
                    logging.error('Inapp id contains {index} keyword, but no index_iterator object found. Skipping inapp: ' + inappDict['id'])
                    continue

                langsDict = inappDict['languages']
                genericLangsDict = inappDict['general']

                for langId in langsDict:
                    langsDict[langId] = dict_merge(genericLangsDict, langsDict[langId])

                inappDict['languages'] = langsDict
                del inappDict['general']

                indexes = [-1]
                if (isIterable):
                    indexes = iteratorDict.get('indexes')
                    if indexes == None:
                        indexes = range(iteratorDict.get('from', 1), iteratorDict['to'] + 1)

                if iteratorDict != None:
                    del inappDict['index iterator']

                for key, value in inappDict.items():
                    if (not key in ("index iterator", "general", "languages")) and isinstance(value, dict):
                        flattenDictIndexes(value)

                for langKey, value in inappDict["languages"].items():
                    for innerLangKey, langValue in inappDict["languages"][langKey].items():
                        if isinstance(langValue, dict):
                            flattenDictIndexes(langValue)

                realindex = 0
                for index in indexes:
                    inappIndexDict = deepcopy(inappDict)
                    if isIterable:
                        for key in inappIndexDict:
                            if key in ("index iterator", "general", "languages"):
                                continue

                            if (isinstance(inappIndexDict[key], basestring)):
                                inappIndexDict[key] = inappIndexDict[key].replace('{index}', str(index))
                            elif (isinstance(inappIndexDict[key], list)):
                                inappIndexDict[key] = inappIndexDict[key][realindex]
                            elif (isinstance(inappIndexDict[key], dict)):
                                inappIndexDict[key] = inappIndexDict[key][index]

                        langsDict = inappIndexDict['languages']

                        for langId, langDict in langsDict.items():
                            for langKey in langDict:
                                if (isinstance(langDict[langKey], basestring)):
                                    langDict[langKey] = langDict[langKey].replace('{index}', str(index))
                                elif (isinstance(langDict[langKey], list)):
                                    langDict[langKey] = langDict[langKey][realindex]
                                elif (isinstance(langDict[langKey], dict)):
                                    langDict[langKey] = langDict[langKey][index]

                    inapp = application.getInappById(inappIndexDict['id'])
                    if inapp == None:
                        application.createInapp(inappIndexDict)
                    else:
                        inapp.update(inappIndexDict)

                    realindex += 1
    else:
        logging.error('No application with id ' + str(applicationId))
        return
示例#2
0
def main():
    os.umask(0077)
    if not os.path.exists(temp_dir):
        os.mkdir(temp_dir);

    args = __parse_options(sys.argv[1:])
    
    logging.debug('Python %s' % sys.version)
    logging.debug('Running on %s' % platform.platform())
    logging.debug('Temp path = %s' % temp_dir)
    logging.debug('Current Directory = %s' % os.getcwd())

    logging.debug('args %s' % args)

    if options.username == None:
        options.username = raw_input('Username: '******'No applications found.')
        return
        
    logging.debug(server.applications)
    # logging.debug(options)

    if options.generate_config:
        if options.application_id:
            if options.application_id in server.applications: 
                applications = {}
                applications[options.application_id] = server.applications[options.application_id]
            else:
                logging.error('No application with id ' + str(options.application_id))
                return
        else:
            applications = server.applications

        for applicationId, application in applications.items():
            application.generateConfig(options.application_version, generateInapps = options.generate_inapp)

        return

    if options.reviews:
        if not options.application_id in server.applications: 
            logging.error("Provide correct application id (--application-id or -a option)")
        else:
            application = server.applications[options.application_id]
            application.generateReviews(options.application_version)

    cfg = __parse_configuration_file()
    if len(cfg) == 0:
        logging.info('Nothing to do.')
        return

    applicationDict = cfg['application']
    applicationId = applicationDict.get('id', options.application_id)
    application = None
    commonActions = applicationDict['metadata'].get('general', {})
    specificLangCommands = applicationDict['metadata']['languages']
    langActions = {}
    filename_format = cfg.get('config', {}) \
                           .get('images', {}) \
                              .get('file name format', default_file_format)

    for lang in specificLangCommands:
        langActions[languages.languageNameForId(lang)] = dict_merge(commonActions, specificLangCommands[lang])

    logging.debug(langActions)

    if applicationId in server.applications:
        application = server.applications[applicationId]

        for lang in langActions:
            actions = langActions[lang]
            application.editVersion(actions, lang=lang, filename_format=filename_format)

        for inappDict in applicationDict.get('inapps', {}):
            isIterable = inappDict['id'].find('{index}') != -1
            iteratorDict = inappDict.get('index iterator')

            if isIterable and (iteratorDict == None):
                logging.error('Inapp id contains {index} keyword, but no index_iterator object found. Skipping inapp: ' + inappDict['id'])
                continue

            langsDict = inappDict['languages']
            genericLangsDict = inappDict['general']

            for langId in langsDict:
                langsDict[langId] = dict_merge(genericLangsDict, langsDict[langId])

            inappDict['languages'] = langsDict
            del inappDict['general']

            indexes = [-1]
            if (isIterable):
                indexes = iteratorDict.get('indexes')
                if indexes == None:
                    indexes = range(iteratorDict.get('from', 1), iteratorDict['to'] + 1)

            del inappDict['index iterator']

            for key, value in inappDict.items():
                if (not key in ("index iterator", "general", "languages")) and isinstance(value, dict):
                    flattenDictIndexes(value)

            for langKey, value in inappDict["languages"].items():
                for innerLangKey, langValue in inappDict["languages"][langKey].items():
                    if isinstance(langValue, dict):
                        flattenDictIndexes(langValue)

            realindex = 0
            for index in indexes:
                inappIndexDict = deepcopy(inappDict)
                if isIterable:
                    for key in inappIndexDict:
                        if key in ("index iterator", "general", "languages"):
                            continue

                        if (isinstance(inappIndexDict[key], basestring)):
                            inappIndexDict[key] = inappIndexDict[key].replace('{index}', str(index))
                        elif (isinstance(inappIndexDict[key], list)):
                            inappIndexDict[key] = inappIndexDict[key][realindex]
                        elif (isinstance(inappIndexDict[key], dict)):
                            inappIndexDict[key] = inappIndexDict[key][index]

                    langsDict = inappIndexDict['languages']

                    for langId, langDict in langsDict.items():
                        for langKey in langDict:
                            if (isinstance(langDict[langKey], basestring)):
                                langDict[langKey] = langDict[langKey].replace('{index}', str(index))
                            elif (isinstance(langDict[langKey], list)):
                                langDict[langKey] = langDict[langKey][realindex]
                            elif (isinstance(langDict[langKey], dict)):
                                langDict[langKey] = langDict[langKey][index]

                inapp = application.getInappById(inappIndexDict['id'])
                if inapp == None:
                    application.createInapp(inappIndexDict)
                else:
                    inapp.update(inappIndexDict)

                realindex += 1
示例#3
0
def main():
    os.umask(0077)
    if not os.path.exists(temp_dir):
        os.mkdir(temp_dir);

    args = __parse_options()
    
    logging.debug('Python %s' % sys.version)
    logging.debug('Running on %s' % platform.platform())
    logging.debug('Temp path = %s' % temp_dir)
    logging.debug('Current Directory = %s' % os.getcwd())

    logging.debug('args %s' % args)

    if options['--no-cookies']:
        logging.debug('Deleting cookie file: ' + cookie_file)
        if os.path.exists(cookie_file):
            os.remove(cookie_file)
            logging.info('Removed authentication cookies')
        else:
            logging.debug('Cookie file doesn\'t exist')

    if options['--username'] == None:
        options['--username'] = raw_input('Username: '******'--username'], options['--password'])

    if not server.isLoggedIn:
        if options['--password'] == None:
            options['--password'] = getpass.getpass()
        server.login(password = options['--password'])

    if len(server.applications) == 0:
        server.fetchApplicationsList()

    if len(server.applications) == 0:
        logging.info('No applications found.')
        return
        
    logging.debug(server.applications)
    if options['--application-id']:
        options['--application-id'] = int(options['--application-id'])


    if options['generate']:
        if options['--application-id']:
            if options['--application-id'] in server.applications: 
                applications = {}
                applications[options['--application-id']] = server.applications[options['--application-id']]
            else:
                logging.error('No application with id ' + str(options['--application-id']))
                return
        else:
            applications = server.applications

        for applicationId, application in applications.items():
            application.generateConfig(options['--application-version'], generateInapps = options['--generate-config-inapp'])

        return

    if options['promo']:
        if not options['--application-id'] in server.applications: 
            logging.error("Provide correct application id (--application-id or -a option)")
        else:
            application = server.applications[options['--application-id']]
            promocodes = application.getPromocodes(options['<amount>'])
            if options['--output-file']:
                with open(options['--output-file'], 'a') as outFile:
                    outFile.write(promocodes)
            else: # just print to console. Using print as we want to suppress silence option
                print promocodes

        return

    if options['reviews']:
        if not options['--application-id'] in server.applications: 
            logging.error("Provide correct application id (--application-id or -a option)")
        else:
            application = server.applications[options['--application-id']]
            application.generateReviews(options['--latest-version'], options['--date-range'], options['--output-file'])

        return

    cfg = __parse_configuration_file()
    if len(cfg) == 0:
        logging.info('Nothing to do.')
        return

    applicationDict = cfg['application']
    applicationId = applicationDict.get('id', -1)
    if options['--application-id']:
        applicationId = int(options['--application-id'])
    application = None
    commonActions = applicationDict.get('metadata', {}).get('general', {})
    specificLangCommands = applicationDict.get('metadata', {}).get('languages', {})
    langActions = {}
    filename_format = cfg.get('config', {}) \
                           .get('images', {}) \
                              .get('file name format', default_file_format)

    for lang in specificLangCommands:
        langActions[languages.languageNameForId(lang)] = dict_merge(commonActions, specificLangCommands[lang])

    logging.debug(langActions)

    if applicationId not in server.applications and not options['create']:
        logging.warning('No application with id ' + str(applicationId))
        choice = raw_input('Do you want to create a new one? [y/n]')
        options['create'] = True if choice.strip().lower() in ('y', 'yes', '') else False

    if options['create']:
        server.createNewApp(applicationDict, filename_format=filename_format)
    elif applicationId in server.applications:
        application = server.applications[applicationId]
        if options['version']:
            langActions['default'] = commonActions
            application.addVersion(applicationDict['version'], langActions)
        else:
            for lang in langActions:
                actions = langActions[lang]
                application.editVersion(actions, lang=lang, filename_format=filename_format)

            appReviewInfo = applicationDict.get('app review information', None)

            if appReviewInfo != None:
                application.editReviewInformation(appReviewInfo)

            for inappDict in applicationDict.get('inapps', {}):
                isIterable = inappDict['id'].find('{index}') != -1
                iteratorDict = inappDict.get('index iterator')

                if isIterable and (iteratorDict == None):
                    logging.error('Inapp id contains {index} keyword, but no index_iterator object found. Skipping inapp: ' + inappDict['id'])
                    continue

                langsDict = inappDict['languages']
                genericLangsDict = inappDict['general']

                for langId in langsDict:
                    langsDict[langId] = dict_merge(genericLangsDict, langsDict[langId])

                inappDict['languages'] = langsDict
                del inappDict['general']

                indexes = [-1]
                if (isIterable):
                    indexes = iteratorDict.get('indexes')
                    if indexes == None:
                        indexes = range(iteratorDict.get('from', 1), iteratorDict['to'] + 1)

                del inappDict['index iterator']

                for key, value in inappDict.items():
                    if (not key in ("index iterator", "general", "languages")) and isinstance(value, dict):
                        flattenDictIndexes(value)

                for langKey, value in inappDict["languages"].items():
                    for innerLangKey, langValue in inappDict["languages"][langKey].items():
                        if isinstance(langValue, dict):
                            flattenDictIndexes(langValue)

                realindex = 0
                for index in indexes:
                    inappIndexDict = deepcopy(inappDict)
                    if isIterable:
                        for key in inappIndexDict:
                            if key in ("index iterator", "general", "languages"):
                                continue

                            if (isinstance(inappIndexDict[key], basestring)):
                                inappIndexDict[key] = inappIndexDict[key].replace('{index}', str(index))
                            elif (isinstance(inappIndexDict[key], list)):
                                inappIndexDict[key] = inappIndexDict[key][realindex]
                            elif (isinstance(inappIndexDict[key], dict)):
                                inappIndexDict[key] = inappIndexDict[key][index]

                        langsDict = inappIndexDict['languages']

                        for langId, langDict in langsDict.items():
                            for langKey in langDict:
                                if (isinstance(langDict[langKey], basestring)):
                                    langDict[langKey] = langDict[langKey].replace('{index}', str(index))
                                elif (isinstance(langDict[langKey], list)):
                                    langDict[langKey] = langDict[langKey][realindex]
                                elif (isinstance(langDict[langKey], dict)):
                                    langDict[langKey] = langDict[langKey][index]

                    inapp = application.getInappById(inappIndexDict['id'])
                    if inapp == None:
                        application.createInapp(inappIndexDict)
                    else:
                        inapp.update(inappIndexDict)

                    realindex += 1
    else:
        logging.error('No application with id ' + str(applicationId))
        return