Exemplo n.º 1
0
 def testDocker(self):
   om = OMPython.OMCSessionZMQ(docker="openmodelica/openmodelica:v1.16.1-minimal")
   assert(om.sendExpression("getVersion()") == "OpenModelica 1.16.1")
   omInner = OMPython.OMCSessionZMQ(dockerContainer=om._dockerCid)
   assert(omInner.sendExpression("getVersion()") == "OpenModelica 1.16.1")
   om2 = OMPython.OMCSessionZMQ(docker="openmodelica/openmodelica:v1.16.1-minimal", port=11111)
   assert(om2.sendExpression("getVersion()") == "OpenModelica 1.16.1")
   del(om2)
   del(omInner)
   del(om)
Exemplo n.º 2
0
def createDiscretizedLib():
    #os.chdir("./..")

    # copy all files:
    dirD = "Discretized"
    dirSB = "SnowBreathing"

    if os.path.exists(dirD):
        shutil.rmtree(dirD)
    os.mkdir(dirD)
    os.mkdir(dirD + "/" + dirSB)
    for d in os.listdir(dirSB):
        if d != ".git":
            src = dirSB + "/" + d
            dst = dirD + "/" + dirSB + "/" + d
            if os.path.isdir(src):
                shutil.copytree(src, dst)
            else:
                shutil.copy(src, dst)
    #discretize PDEModelica:
    toDiscretize = ["DifussionSphereCO2", "DifussionSphereCO2O2"]

    omc = OMPython.OMCSessionZMQ()
    #print("omc verze: " + omCommand("getVersion()", omc));
    #omCommandP("setCompilerFlags(\"--grammar=PDEModelica\")", omc);
    omCommandP("setCommandLineOptions(\"--grammar=PDEModelica\")", omc)
    omCommandP("loadModel(Modelica)", omc)
    omCommandP("loadFile(\"" + dirSB + "/package.mo" + "\")", omc)
    pOFile = open(dirD + "/" + dirSB + "/" + "Components/package.order", "a")
    for nameUnqual in toDiscretize:
        fileName = dirD + "/" + dirSB + "/" + "Components/" + nameUnqual + "_discretised.mo"
        nameQual = "SnowBreathing.Components." + nameUnqual
        modelStr = discretize(omc, nameUnqual, nameQual)
        dirname = os.path.dirname(fileName)
        if not os.path.exists(dirname):
            os.makedirs(dirname)
        F = open(fileName, "wt+")
        #F.write(modelStr.encode("utf8"))
        F.write(modelStr)
        F.close()
        shutil.copy("./AuxMo/" + nameUnqual + ".mo",
                    dirD + "/SnowBreathing/Components/" + nameUnqual + ".mo")
        pOFile.write(nameUnqual + "_discretised\n")
    pOFile.close()
    print(
        "Automatic discretization finished. You have to make this changes manually:\n"
        + "    - delete the fluxConcB_q = 0; equation\n" +
        "    - add the fluxConc_CO2(O2)In variable\n" +
        "           Real fluxConcB_CO2In(unit=\"1\") \"CO2 volume concentration\";\n"
        +
        "           Real fluxConcB_O2In(unit=\"1\") \"CO2 volume concentration\";\n"
        +
        "    - modify the boundary condition to incorporate the ..In var. \n" +
        "           CO2_ghostL = if exhale then fluxConcB_CO2In else 2.0 * CO2_1 - CO2_2;\n"
        +
        "           O2_ghostL = if exhale then fluxConcB_O2In else 2.0 * O2_1 - O2_2;\n"
    )
Exemplo n.º 3
0
    def __init__(self, *args, **kwargs):
        super(ZMQTester, self).__init__(*args, **kwargs)
        self.simpleModel = """model M
  Real r = time;
end M;"""
        self.tmp = tempfile.mkdtemp(prefix='tmpOMPython.tests')
        self.origDir = os.getcwd()
        os.chdir(self.tmp)
        self.om = OMPython.OMCSessionZMQ()
        os.chdir(self.origDir)
Exemplo n.º 4
0
def main():
    gh_auth = os.environ["GITHUB_AUTH"]
    g = Github(gh_auth)

    omc = OMPython.OMCSessionZMQ()

    data = json.load(open("repos.json"))
    if os.path.exists("rawdata.json"):
        serverdata = json.load(open("rawdata.json"))
    else:
        serverdata = {}

    if not os.path.exists("cache"):
        os.mkdir("cache")

    namesInFile = set()
    for key in data.keys():
        for name in data[key].get("names", []):
            if name in namesInFile:
                raise Exception(key + " exists multiple times")
            namesInFile.add(name)

    for key in sorted(data.keys()):
        entry = data[key]
        repopath = os.path.join("cache", key)
        if "ignore" in entry:
            continue

        if len(insensitive_glob(repopath)) > 1:
            for d in insensitive_glob(repopath):
                print("Cleaning duplicate case-insensitive names")
                shutil.rmtree(d)

        if "github" in entry or "git" in entry or "zipfiles" in entry:
            if "github" in entry:
                try:
                    r = g.get_repo(entry["github"])
                    branches = list(
                        (b.name, b.commit.sha) for b in r.get_branches())
                    tags = list((b.name, b.commit.sha) for b in r.get_tags())
                    giturl = "https://github.com/%s.git" % entry["github"]
                except:
                    print("Failed to get github entry: %s" % entry["github"])
                    raise
            elif "git" in entry:
                giturl = entry["git"]
                gitrepo = getgitrepo(giturl, repopath + ".git")
                branches = allbranches(gitrepo)
                if entry.get("bitbucket-api-downloads-instead-of-tags"):
                    tags = []
                    for download in bitbucket._get_paged(
                            "2.0/repositories/%s/downloads" % entry.get(
                                "bitbucket-api-downloads-instead-of-tags")):
                        name = download["name"]
                        if name.endswith(".zip") and name.startswith(key):
                            ver = common.VersionNumber(
                                name[len(key):-4].strip("-").strip(" "))
                            if ver.major == 0 and ver.minor == 0 and ver.patch == 0:
                                continue
                            tags.append(("v" + str(ver),
                                         download["links"]["self"]["href"]))
                else:
                    tags = alltags(gitrepo)
            elif "zipfiles" in entry:
                branches = []
                tags = list(entry["zipfiles"].items())
                giturl = ""

            if key not in serverdata:
                serverdata[key] = {}
                print("Did not have stored data for " + key)
            if "refs" not in serverdata[key]:
                serverdata[key]["refs"] = {}
            ignoreTags = set()
            if "ignore-tags" in entry:
                ignoreTags = set(entry["ignore-tags"])
            objects = []
            for (name, sha) in branches:
                if name in (entry.get("branches") or []):
                    objects.append((entry["branches"][name], sha))
            for (name, sha) in tags:
                if name not in ignoreTags:
                    objects.append((name, sha))

            if not objects:
                raise Exception("No commits or zip-files found for %s" % key)

            tagsDict = serverdata[key]["refs"]

            for (tagName, sha) in objects:
                if not isinstance(tagName, str):
                    names = tagName["names"]
                    tagName = tagName["version"]
                else:
                    names = entry["names"]
                v = common.VersionNumber(tagName)
                # v3.2.1+build.0-beta.1 is not a pre-release...
                for build in v.build:
                    if "-" in build:
                        raise Exception(
                            "Release build string looks like a pre-release: %s"
                            % v)
                if tagName not in tagsDict:
                    tagsDict[tagName] = {}
                thisTagBackup = tagsDict[tagName]
                thisTag = tagsDict[tagName]

                entrykind = "zip" if ("zipfiles" in entry
                                      or sha.startswith("http")) else "sha"

                if (entrykind not in thisTag) or (thisTag[entrykind] != sha):
                    if entrykind == "zip":
                        try:
                            os.unlink(repopath)
                        except:
                            pass
                        try:
                            shutil.rmtree(repopath)
                        except FileNotFoundError:
                            pass
                        os.mkdir(repopath)
                        zipfilepath = repopath + "-" + tagName + ".zip"
                        with open(zipfilepath, 'wb') as fout:
                            fout.write(
                                requests.get(sha,
                                             allow_redirects=True).content)
                        with zipfile.ZipFile(zipfilepath, 'r') as zip_ref:
                            zip_ref.extractall(repopath)
                    else:
                        gitrepo = getgitrepo(giturl, repopath + ".git")
                        try:
                            gitrepo.checkout_tree(
                                gitrepo.get(sha),
                                strategy=pygit2.GIT_CHECKOUT_FORCE
                                | pygit2.GIT_CHECKOUT_RECREATE_MISSING)
                            try:
                                os.unlink(repopath)
                            except:
                                pass
                            try:
                                shutil.rmtree(repopath)
                            except FileNotFoundError:
                                pass
                            shutil.copytree(repopath + ".git", repopath)
                        except:
                            print("Failed to checkout %s with SHA %s" %
                                  (tagName, sha))
                            raise
                    omc.sendExpression(
                        "OpenModelica.Scripting.getErrorString()")

                    provided = {}
                    for libname in names:
                        hits = insensitive_glob(
                            os.path.join(repopath, "package.mo"))
                        if len(hits) == 1:
                            if libname != entry["names"][0]:
                                continue
                        else:
                            hits = []
                            for extraPath in (
                                [""] +
                                (entry.get("search-extra-paths") or [])):
                                p = repopath
                                if extraPath != "":
                                    p = os.path.join(repopath, extraPath)
                                else:
                                    p = repopath
                                hitsNew = (
                                    insensitive_glob(
                                        os.path.join(p, libname, "package.mo"))
                                    + insensitive_glob(
                                        os.path.join(p, libname + " *",
                                                     "package.mo")) +
                                    insensitive_glob(
                                        os.path.join(p, libname + "-*",
                                                     "package.mo")) +
                                    insensitive_glob(
                                        os.path.join(p, libname + ".mo")) +
                                    insensitive_glob(
                                        os.path.join(p, libname + " *.mo")) +
                                    insensitive_glob(
                                        os.path.join(p, libname + "-*.mo")) +
                                    insensitive_glob(
                                        os.path.join(p, libname + "*",
                                                     libname + ".mo")) +
                                    insensitive_glob(
                                        os.path.join(p, libname + "*",
                                                     libname + "-*.mo")) +
                                    insensitive_glob(
                                        os.path.join(p, libname + "*",
                                                     libname + " *.mo")))
                                hits += hitsNew
                        if len(hits) != 1:
                            print(
                                str(len(hits)) + " hits for " + libname +
                                " in " + tagName + ": " + str(hits))
                            continue
                        omc.sendExpression("clear()")
                        if "standard" in entry:
                            grammar = common.findMatchingLevel(
                                tagName, entry["standard"])
                            if grammar is None:
                                grammar = "latest"
                        else:
                            grammar = "latest"
                        omc.sendExpression(
                            "setCommandLineOptions(\"--std=%s\")" % grammar)

                        if not omc.sendExpression(
                                "loadFile(\"%s\", uses=false)" % hits[0]):
                            print("Failed to load file %s in %s" %
                                  (hits[0], tagName))
                            continue
                        classNamesAfterLoad = omc.sendExpression(
                            "getClassNames()")
                        if libname not in classNamesAfterLoad:
                            print("Did not load the library? ")
                            print(classNamesAfterLoad)
                            continue
                        version = omc.sendExpression("getVersion(%s)" %
                                                     libname)
                        if version == "":
                            version = str(common.VersionNumber(tagName))
                        else:
                            v1 = common.VersionNumber(version)
                            v2 = common.VersionNumber(tagName)
                            if len(v2.prerelease) == 0 and entry.get(
                                    "semverTagOverridesAnnotation") and (
                                        v2 > v1 or
                                        entry["semverTagOverridesAnnotation"]
                                        == "alsoNewerVersions"):
                                v1 = v2
                            if len(v2.prerelease) > 0 and (
                                    len(v1.prerelease) == 0 or entry.get(
                                        "semverPrereleaseOverridesAnnotation")
                                    or tagName in ["master", "main", "trunk"]):
                                v1.prerelease = v2.prerelease
                                if tagName in ["master", "main", "trunk"
                                               ] and len(v2.build) == 0:
                                    v1.build = []
                            if v1.major == v2.major and v1.minor == v2.minor and v1.patch == v2.patch and len(
                                    v1.prerelease) == 0 and len(v1.build) == 0:
                                version = str(v2)
                            else:
                                version = str(v1)
                        if version.startswith("0.0.0-"):
                            version = version[6:]
                        if version.startswith("+"):
                            version = version[1:]
                        uses = sorted([[
                            e[0], str(common.VersionNumber(e[1]))
                        ] for e in omc.sendExpression("getUses(%s)" % libname)
                                       ])
                        # Get conversions
                        (withoutConversion,
                         withConversion) = omc.sendExpression(
                             "getConversionsFromVersions(%s)" % libname)
                        withoutConversion = list(
                            filter(None, [
                                str(ver) for ver in sorted([
                                    common.VersionNumber(v)
                                    for v in withoutConversion
                                ])
                            ]))
                        withConversion = list(
                            filter(None, [
                                str(ver) for ver in sorted([
                                    common.VersionNumber(v)
                                    for v in withConversion
                                ])
                            ]))
                        path = hits[0][len(repopath) + 1:]
                        if os.path.basename(hits[0]) == "package.mo":
                            path = os.path.dirname(path)
                        libentry = {"version": version, "path": path}
                        if len(uses) > 0:
                            libentry["uses"] = dict(uses)
                        if len(withoutConversion) > 0:
                            libentry["provides"] = withoutConversion
                        if len(withConversion) > 0:
                            libentry["convertFromVersion"] = withConversion
                        provided[libname] = libentry
                    try:
                        errorString = omc.sendExpression(
                            "OpenModelica.Scripting.getErrorString()")
                    except UnicodeDecodeError:
                        print("UnicodeDecodeError for %s %s" % (key, tagName))
                        raise
                    if len(provided) == 0:
                        print("Broken for " + key + " " +
                              tagName)  # + ":" + errorString)
                        tagsDict[tagName] = thisTagBackup
                        continue
                    thisTag["libs"] = provided
                    thisTag[entrykind] = sha
                    if "broken" in thisTag:
                        del thisTag["broken"]
                # level = getSupportLevel(tagName, entry["support"])
                # thisTag["support"] = level
            serverdata[key]["refs"] = tagsDict
        else:
            raise Exception("Don't know how to handle entry for %s: %s" %
                            (key, entry))
    with open("rawdata.json", "w") as io:
        json.dump(serverdata, io, sort_keys=True, indent=2)
Exemplo n.º 5
0
#!/usr/bin/env python3

import os.path
import json
import OMPython

with open(os.path.expanduser("~/.openmodelica/libraries/index.json")) as f:
    data = json.load(f)
om = OMPython.OMCSessionZMQ()
for lib in data['libs'].keys():
    om.sendExpression("installPackage(%s)" % lib)
    s = om.sendExpression("getErrorString()").strip()
    if s:
        print(s)