Skip to content
Snippets Groups Projects
Select Git revision
  • efcb2b50af8cf439abb823a7015ac3cb9386362b
  • master default protected
2 results

generate_and_validate.py

Blame
  • user avatar
    mueller-ma authored and GitHub committed
    Signed-off-by: default avatarmueller-ma <mueller-ma@users.noreply.github.com>
    efcb2b50
    History
    generate_and_validate.py 4.75 KiB
    #!/usr/bin/env python3
    
    import glob
    import os
    import re
    import sys
    import xml.etree.ElementTree as ET
    
    enTree = ET.parse('assets/store_descriptions/en-US/strings.xml')
    enRoot = enTree.getroot()
    
    emptyStringPattern = re.compile("^([ ]+)+$")
    
    exitCode = 0
    
    def getEnglishString(key):
        return(enRoot.findall(key)[0].text)
    
    def getString(key):
        try:
            string = root.findall(key)[0].text
            if emptyStringPattern.match(string):
                string = getEnglishString(key)
        except TypeError:
            string = getEnglishString(key)
        return(string)
    
    playDevSiteDescription = "Play Store developer site description:\n"
    
    print("Checking app store strings...")
    appStoreStringsFiles = glob.glob('assets/store_descriptions/*/strings.xml')
    for file in appStoreStringsFiles:
        tree = ET.parse(file)
        root = tree.getroot()
        lang = file[26:-12]
        print("Processing " + lang)
    
        fullDescription = getString('intro') + "\n\n"
        if sys.argv[1] == "fdroid":
            fullDescription += getString('fdroid') + "\n\n"
        elif sys.argv[1] == "fdroidBeta":
            fullDescription += getString('fdroid') + "\n"
            fullDescription += getString('beta') + "\n"
            fullDescription += getString('fdroid_beta') + "\n\n"
        elif sys.argv[1] == "playBeta":
            fullDescription += getString('beta') + "\n"
            fullDescription += getString('play_beta') + "\n\n"
        fullDescription += "<b>" + getString('important_note') + "</b>\n\n"
        fullDescription += getString('oh_server') + "\n\n"
        fullDescription += getString('whatis') + "\n"
        fullDescription += getString('rules') + "\n\n"
        fullDescription += "<b>" + getString('supported') + "</b>\n\n"
        fullDescription += getString('bindings') + "\n\n"
        fullDescription += getString('home_automation_solutions') + "\n"
        fullDescription += getString('lighting') + "\n"
        fullDescription += getString('heating') + "\n"
        fullDescription += getString('home_entertainment') + "\n"
        fullDescription += getString('security') + "\n"
        fullDescription += getString('open_protocols') + "\n"
        fullDescription += getString('special_useCases') + "\n"
        fullDescription += getString('empty_point') + "\n\n"
        fullDescription += "<b>" + getString('oss_community') + "</b>\n\n"
        fullDescription += getString('forum') + "\n"
        fullDescription += getString('report_issues') + "\n"
        fullDescription += getString('translation') + "\n\n"
        fullDescription += "<b>" + getString('foundation') + "</b>\n\n"
        fullDescription += getString('about_foundation') + "\n"
        if "fdroid" in sys.argv[1]:
            fullDescription += "\n<b>" + getString('fdroid_anti_features') + "</b>\n\n"
            fullDescription += getString('fdroid_anti_features_text') + "\n\n\n"
            fullDescription += getString('fdroid_privacy_policy')
    
        # Validate full description
        if getString('empty_point') != "• ..." and getString('empty_point') != "... •":
            print("'empty_point' of " + lang + " is incorrect")
            exitCode += 1
    
        openhabOccurences = [m.start() for m in re.finditer("openhab", fullDescription, re.I)]
        for i in openhabOccurences:
            openhabString = fullDescription[i:i+7]
            if openhabString != "openhab" and openhabString != "openHAB": # "openhab" is used in links
                print("Incorrect spelling of openHAB in " + lang)
                exitCode += 1
    
        if "http://" in fullDescription:
            print("HTTP link found in " + lang)
            exitCode += 1
    
        if '<a href="https://f-droid.org/packages/org.openhab.habdroid/">' not in getString('fdroid_beta') or "</a>" not in getString('fdroid_beta'):
            print("Missing tags in 'fdroid_beta' of " + lang)
            exitCode += 1
    
        if len(fullDescription) > 4000:
            print("Full description of " + lang + " is too long: " + str(len(fullDescription)) + " > 4000 chars")
            exitCode += 1
    
        # Validate short description
        shortDescription = getString('short_description')
        if len(shortDescription) > 80:
            print("Short description of " + lang + " is too long: " + str(len(shortDescription)) + " > 80 chars")
            exitCode += 1
    
        newpath = r'fastlane/metadata/android/' + lang + '/'
        if not os.path.exists(newpath):
                os.makedirs(newpath)
    
        f = open('fastlane/metadata/android/' + lang + '/full_description.txt', 'w')
        f.write(fullDescription)
        f.close()
        f = open('fastlane/metadata/android/' + lang + '/short_description.txt', 'w')
        f.write(shortDescription)
        f.close()
    
        intro = getString('intro')
        if intro != getEnglishString('intro'):
            playDevSiteDescription += lang + ": " + intro + "\n"
            if len(intro) > 140:
                print("Intro string of " + lang + " is too long: " + str(len(getString('intro'))) + " > 140 chars")
                exitCode += 1
    
    print("\n\n" + playDevSiteDescription)
    
    exit(exitCode)