Ejemplo n.º 1
0
def main():
    try:
        repo = nog.createRepo('test-resolveimgsrc-optimization')
    except RuntimeError:
        repo = nog.openRepo('test-resolveimgsrc-optimization')

    master = repo.getMaster()

    root = nog.Tree()
    root.name = 'root'

    lines = [
        '# {} small squares'.format(N),
        '',
    ]

    images = nog.Tree()
    images.name = 'images'
    for i in range(N):
        img = nog.Object()
        name = 'img-{}.png'.format(i)
        img.name = name
        img.blob = '/tmp/test.png'
        images.append(img)
        lines.append('<img src="./images/{}" width="20">'.format(name))

    md = nog.Object()
    md.name = 'images.md'
    md.text = '\n'.join(lines)

    root.append(md)
    root.append(images)

    repo.commitTree(subject='images', tree=root, parent=master.sha1)
Ejemplo n.º 2
0
def makeResultTree(treeName):
    res = nog.Tree()
    res.name = treeName

    report = nog.Object()
    report.name = 'report.md'
    res.append(report)
    lines = [
        '# {}: {} images'.format(treeName, nImages),
        '',
    ]

    images = nog.Tree()
    images.name = 'images'
    res.append(images)
    for i in range(nImages):
        img = nog.Object()
        name = '{}-img-{}.png'.format(treeName, i)
        img.name = name
        img.blob = '/tmp/test.png'
        images.append(img)
        lines.append('<img src="./images/{}" width="20">'.format(name))

    report.text = '\n'.join(lines)
    return res
Ejemplo n.º 3
0
def main():
    for r in range(nRepos):
        repoName = '{0}{1}'.format(repoBaseName, r)
        print('Creating repo {0}'.format(repoName))
        try:
            repo = nog.createRepo(repoName)
        except RuntimeError:
            repo = nog.openRepo(repoName)

        master = repo.getMaster()
        root = nog.Tree()
        root.name = 'root'
        root.meta['files'] = {}

        for t in range(nTreesPerRepo):
            treeName = 'Tree{0}'.format(t)
            tree = nog.Tree()
            tree.name = treeName

            for i in range(nEntriesPerTree):
                entry = nog.Object()
                entry.name = 'entry-{}'.format(i)
                entry.meta['entryNum'] = i
                entry.meta['entryName'] = entry.name
                entry.meta['repoName'] = repoName
                entry.meta['treeName'] = treeName
                tree.append(entry)

            root.append(tree)

        repo.commitTree(subject='images', tree=root, parent=master.sha1)
Ejemplo n.º 4
0
def test_empty_blob():
    obj = nog.Object()
    obj.blob = b''
    assert obj.blob == emptyBlobSha1

    sha1 = remote.postObject(obj)
    obj = remote.getObject(sha1)
    assert obj.blob == emptyBlobSha1
Ejemplo n.º 5
0
def test_blob_from_sha1():
    obj = nog.Object()
    obj.blob = blobSha1
    assert obj.blob == blobSha1

    sha1 = remote.postObject(obj)
    obj = remote.getObject(sha1)
    assert obj.blob == blobSha1
Ejemplo n.º 6
0
    def jobIndexDoc(self):
        doc = Document('index.md')
        name = os.path.basename(self.params['nog']['program']['name'])
        doc.insertLink('Go to result', '../../results/' + name)
        obj = nog.Object()
        obj.name = doc.name
        obj.meta['content'] = doc.content

        return obj
Ejemplo n.º 7
0
def completeJob(job):
    job.meta['job']['status'] = 'completed'
    log = nog.Object()
    log.name = 'log'
    log.meta['description'] = 'job execution log'
    log.meta['content'] = xout.getvalue()
    job.insert(0, log)

    return job
Ejemplo n.º 8
0
def test_reject_invalid_idv1_obj():
    obj = nog.Object()
    obj.name = 'foo'
    obj.meta['content'] = 'bar'
    with pytest.raises(RuntimeError) as errinfo:
        remote.postObject(obj)
    assert ('Invalid Object' in str(errinfo.value))
    assert ('foo' in str(errinfo.value))
    assert ('idversion 1' in str(errinfo.value))
Ejemplo n.º 9
0
def test_blob_random_bytes_to_force_upload():
    obj = nog.Object()
    buf = os.urandom(20)
    bufSha1 = sha1(buf)
    obj.blob = buf
    assert obj.blob == bufSha1

    oid = remote.postObject(obj)
    obj = remote.getObject(oid)
    assert obj.blob == bufSha1
Ejemplo n.º 10
0
def test_post_buf_size_flush():
    saved = nog.POST_BUFFER_SIZE
    savedLimit = nog.POST_BUFFER_SIZE_LIMIT
    nog.POST_BUFFER_SIZE = 1000
    nog.POST_BUFFER_SIZE_LIMIT = 100000
    obj = nog.Object()
    obj.text = 'a' * 100 * 100
    remote.postObject(obj)
    nog.POST_BUFFER_SIZE = saved
    nog.POST_BUFFER_SIZE_LIMIT = savedLimit
Ejemplo n.º 11
0
    def progIndexDoc(self):
        doc = Document('index.md')
        doc.insertText(
            '**<span style="color:red">Warning: </span>** The current'
            ' results are created by a non-published version.')
        obj = nog.Object()
        obj.name = doc.name
        obj.meta['content'] = doc.content

        return obj
Ejemplo n.º 12
0
def test_post_buf_size_limit():
    saved = nog.POST_BUFFER_SIZE
    savedLimit = nog.POST_BUFFER_SIZE_LIMIT
    nog.POST_BUFFER_SIZE = 1000
    nog.POST_BUFFER_SIZE_LIMIT = 100000
    obj = nog.Object()
    obj.text = 'a' * 1000 * 1000
    with pytest.raises(RuntimeError):
        remote.postObject(obj)
    nog.POST_BUFFER_SIZE = saved
    nog.POST_BUFFER_SIZE_LIMIT = savedLimit
Ejemplo n.º 13
0
def addLogEntry(log, description, content, auto=None):
    auto = auto or True
    if auto:
        creation = 'automatic'
    else:
        creation = 'human'
    date = datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%SZ')
    entry = nog.Object()
    entry.name = date + '.md'
    entry.meta['logentry'] = {'date': date, 'creation': creation}
    entry.meta['description'] = description
    entry.meta['content'] = content
    log.insert(0, entry)
Ejemplo n.º 14
0
def addContentsOfDirToTree(dirpath, tree):
    for entry in os.listdir(dirpath):
        entrypath = os.path.join(dirpath, entry)
        if os.path.isfile(entrypath):
            obj = nog.Object()
            obj.name = entry
            obj.blob = entrypath
            tree.append(obj)
        elif os.path.isdir(entrypath):
            subtree = nog.Tree()
            subtree.name = entry
            tree.append(subtree)
            addContentsOfDirToTree(entrypath, subtree)
Ejemplo n.º 15
0
def test_Tree_collapse():
    tree = nog.Tree()
    obj = nog.Object()
    tree.append(obj)
    obj.name = 'foo'
    assert next(tree.objects()).name == 'foo'

    # Post tree and collapse entries, which detaches children.
    remote.postTree(tree)
    tree.collapse()

    obj.name = 'bar'
    assert next(tree.objects()).name == 'foo'
Ejemplo n.º 16
0
def test_blob_setter():
    obj = nog.Object()
    assert obj.idversion == 1
    obj.blob = None
    assert obj.blob is None
    obj.blob = NULL_SHA1
    assert obj.blob is None

    obj.format(0)
    assert obj.idversion == 0
    obj.blob = None
    assert obj.blob == NULL_SHA1
    obj.blob = NULL_SHA1
    assert obj.blob == NULL_SHA1
Ejemplo n.º 17
0
def test_fundamental_Object_operations():
    obj_v1 = nog.Object()
    obj_v1.name = 'foo'
    obj_v1.text = 'text'
    assert obj_v1.content == objContent_v1
    assert obj_v1.sha1 == objId_v1

    obj_v0 = deepcopy(obj_v1)
    obj_v0.format(0)
    assert obj_v0.content == objContent_v0
    assert obj_v0.sha1 == objId_v0

    assert remote.postObject(obj_v0) == objId_v0
    assert remote.postObject(obj_v1) == objId_v1

    obj = remote.getObject(objId_v0)
    assert obj.idversion == 0
    assert obj.sha1 == objId_v0
    assert obj.content == objContent_v0
    assert obj.text == 'text'
    assert obj.meta == {'content': 'text'}
    assert obj.blob == NULL_SHA1

    obj = remote.getObject(objId_v1)
    assert obj.idversion == 1
    assert obj.sha1 == objId_v1
    assert obj.content == objContent_v1
    assert obj.text == 'text'
    assert obj.meta == {}
    assert obj.blob is None

    obj.format(0)
    assert obj.sha1 == objId_v0

    assert nog.Object(content=objContent_v0).sha1 == objId_v0
    assert nog.Object(content=objContent_v1).sha1 == objId_v1
Ejemplo n.º 18
0
def test_object_with_special_character():
    master = remote.getMaster()
    root = master.tree
    oname = u'BlaBlub-\u00fc\u00e4\u00f6'
    tname = u'Wau-Wau-\u72d7'
    sname = u'Blafasel-\u0641\u0644\u0627\u0641\u0644'
    obj = nog.Object()
    obj.name = oname
    tr = nog.Tree()
    tr.name = tname
    tr.append(obj)
    root.append(tr)
    remote.commitTree(subject=sname, tree=root, parent=master.sha1)

    new_master = remote.getMaster()
    new_root = new_master.tree
    new_tr = next(new_root.trees(tname))
    new_obj = next(new_tr.objects(oname))
    assert new_obj.name == oname
    assert new_tr.name == tname
    assert new_master.subject == sname
Ejemplo n.º 19
0
def test_blob_from_file(tmpdir):
    inpath = tmpdir.join('a.dat')
    inpath.write(blobBytes)

    obj = nog.Object()
    obj.blob = str(inpath)
    assert obj.blob == blobSha1

    sha1 = remote.postObject(obj)
    obj = remote.getObject(sha1)
    assert obj.blob == blobSha1
    with obj.openBlob() as fp:
        assert fp.read() == blobBytes

    cppath = tmpdir.join('cp.dat')
    obj.copyBlob(str(cppath))
    with cppath.open('rb') as fp:
        assert fp.read() == blobBytes

    lnpath = tmpdir.join('ln.dat')
    obj.linkBlob(str(lnpath))
    with lnpath.open('rb') as fp:
        assert fp.read() == blobBytes
Ejemplo n.º 20
0
def test_default_Object_idversion():
    obj = nog.Object()
    assert obj.idversion == 1
Ejemplo n.º 21
0
def main():
    try:
        repo = nog.createRepo(repoName)
    except RuntimeError:
        repo = nog.openRepo(repoName)

    master = repo.getMaster()

    root = nog.Tree()
    root.name = 'root'
    root.meta['workspace'] = {}

    datalist = nog.Tree()
    datalist.name = 'datalist'
    datalist.meta['datalist'] = {}
    for i in range(nImages):
        img = nog.Object()
        img.name = 'img-{}.png'.format(i)
        img.blob = '/tmp/test.png'
        datalist.append(img)
    root.append(datalist)

    programs = nog.Tree()
    programs.name = 'programs'
    programs.meta['programs'] = {}
    root.append(programs)

    jobs = nog.Tree()
    jobs.name = 'jobs'
    jobs.meta['jobs'] = {}
    root.append(jobs)

    # The result tree can be organized as:
    #
    # ```
    # /results/result-0/report.md
    # /results/result-1/report.md
    # ...
    # ```
    #
    # or as:
    #
    # ```
    # /results/subresults-0/subresult-0-0/report.md
    # /results/subresults-0/subresult-0-1/report.md
    # /results/subresults-1/subresult-1-0/report.md
    # ...
    # ```
    #
    # Simulate both structures in a single tree.

    results = nog.Tree()
    results.name = 'results'
    results.meta['results'] = {}
    root.append(results)
    for i in range(nResults):
        results.append(makeResultTree('result-{}'.format(i)))
        subresults = nog.Tree()
        subresults.name = 'subresults-{}'.format(i)
        results.append(subresults)
        for j in range(nResults):
            r = makeResultTree('subresult-{}-{}'.format(i, j))
            for k in range(nRepeatResults):
                subresults.append(r)

    repo.commitTree(subject='images', tree=root, parent=master.sha1)
Ejemplo n.º 22
0
def test_fundamental_Tree_operations():
    tree = nog.Tree()
    tree.name = 'tree'
    tree.meta['foo'] = 'bar'
    tree.append(nog.Object(content=objContent_v0))
    tree.append(nog.Object(content=objContent_v1))
    assert tree.content == treeContent
    assert tree.sha1 == treeId

    remote.postTree(tree)
    tree = remote.getTree(treeId)
    assert tree.content == treeContent
    assert tree.sha1 == treeId

    tree.pop()
    tree.pop()
    tree.insert(0, nog.Object(content=objContent_v1))
    tree.insert(0, nog.Object(content=objContent_v0))
    assert tree.content == treeContent
    assert tree.sha1 == treeId

    tree.pop(0)
    tree.insert(0, nog.Object(content=objContent_v0))
    assert tree.content == treeContent
    assert tree.sha1 == treeId

    childTree = deepcopy(tree)
    tree.append(childTree)

    it = tree.entries()
    assert next(it).sha1 == objId_v0
    assert next(it).sha1 == objId_v1
    assert next(it).sha1 == treeId
    with pytest.raises(StopIteration):
        next(it)

    it = tree.enumerateEntries()
    (i, e) = next(it)
    assert i == 0
    assert e.sha1 == objId_v0
    (i, e) = next(it)
    assert i == 1
    assert e.sha1 == objId_v1
    (i, e) = next(it)
    assert i == 2
    assert e.sha1 == treeId
    with pytest.raises(StopIteration):
        next(it)

    it = tree.objects()
    assert next(it).sha1 == objId_v0
    assert next(it).sha1 == objId_v1
    with pytest.raises(StopIteration):
        next(it)

    it = tree.enumerateObjects()
    (i, e) = next(it)
    assert i == 0
    assert e.sha1 == objId_v0
    (i, e) = next(it)
    assert i == 1
    assert e.sha1 == objId_v1
    with pytest.raises(StopIteration):
        next(it)

    it = tree.trees()
    assert next(it).sha1 == treeId
    with pytest.raises(StopIteration):
        next(it)

    it = tree.enumerateTrees()
    (i, e) = next(it)
    assert i == 2
    assert e.sha1 == treeId
    with pytest.raises(StopIteration):
        next(it)