Changeset a8a768ef in trunk for src/allmydata


Ignore:
Timestamp:
2009-12-27T22:54:43Z (15 years ago)
Author:
Brian Warner <warner@…>
Branches:
master
Children:
00d0ca3
Parents:
931ab76
Message:

Fix 'tahoe ls' on files (#771). Patch adapted from Kevan Carstensen.

web/filenode.py: also serve edge metadata when using t=json on a

DIRCAP/childname object.

tahoe_ls.py: list file objects as if we were listing one-entry directories.

Show edge metadata if we have it, which will be true when doing
'tahoe ls DIRCAP/filename' and false when doing 'tahoe ls
FILECAP'

Location:
src/allmydata
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified src/allmydata/scripts/tahoe_ls.py

    r931ab76 ra8a768ef  
    5353    elif nodetype == "filenode":
    5454        childname = path.split("/")[-1]
    55         children = {childname: d}
     55        children = {childname: (nodetype, d)}
    5656    childnames = sorted(children.keys())
    5757    now = time.time()
  • TabularUnified src/allmydata/test/test_cli.py

    r931ab76 ra8a768ef  
    786786        d.addCallback(lambda ign: self.do_cli("ls", "0share"))
    787787        d.addCallback(_check3)
     788        def _check4((rc, out, err)):
     789            self.failUnlessEqual(rc, 0)
     790            self.failUnlessIn("good", out)
     791        d.addCallback(lambda ign: self.do_cli("ls", "good"))
     792        d.addCallback(_check4)
    788793        return d
    789794
  • TabularUnified src/allmydata/test/test_web.py

    r931ab76 ra8a768ef  
    861861        return d
    862862
     863    def failUnlessHasBarDotTxtMetadata(self, res):
     864        data = simplejson.loads(res)
     865        self.failUnless(isinstance(data, list))
     866        self.failUnless(data[1].has_key("metadata"))
     867        self.failUnless(data[1]["metadata"].has_key("ctime"))
     868        self.failUnless(data[1]["metadata"].has_key("mtime"))
     869        self.failUnlessEqual(data[1]["metadata"]["ctime"],
     870                             self._bar_txt_metadata["ctime"])
     871
    863872    def test_GET_FILEURL_json(self):
    864873        # twisted.web.http.parse_qs ignores any query args without an '=', so
     
    867876        # completely.
    868877        d = self.GET(self.public_url + "/foo/bar.txt?t=json")
    869         d.addCallback(self.failUnlessIsBarJSON)
     878        def _check1(data):
     879            self.failUnlessIsBarJSON(data)
     880            self.failUnlessHasBarDotTxtMetadata(data)
     881            return
     882        d.addCallback(_check1)
    870883        return d
    871884
  • TabularUnified src/allmydata/web/filenode.py

    r931ab76 ra8a768ef  
    187187            return d
    188188        if t == "json":
    189             return FileJSONMetadata(ctx, self.node)
     189            if self.parentnode and self.name:
     190                d = self.parentnode.get_metadata_for(self.name)
     191            else:
     192                d = defer.succeed(None)
     193            d.addCallback(lambda md: FileJSONMetadata(ctx, self.node, md))
     194            return d
    190195        if t == "info":
    191196            return MoreInfo(self.node)
     
    422427
    423428
    424 def FileJSONMetadata(ctx, filenode):
     429def FileJSONMetadata(ctx, filenode, edge_metadata=None):
    425430    if filenode.is_readonly():
    426431        rw_uri = None
     
    439444        data[1]['verify_uri'] = verifycap.to_string()
    440445    data[1]['mutable'] = filenode.is_mutable()
     446    if edge_metadata:
     447        data[1]["metadata"] = edge_metadata
    441448    return text_plain(simplejson.dumps(data, indent=1) + "\n", ctx)
    442449
Note: See TracChangeset for help on using the changeset viewer.