从 dropbox API 构建目录树

2023-12-09

我想要做的是使用 python 绑定,从 dropbox API 为给定路径构建一棵树,并为每个路径提供共享链接。

我建议的结构看起来像这样:

[
    {
        'path': '/a',
        'is_dir': True,
        'contents': [
            {
                'path': '/a/b',
                'is_dir': True,
                'contents': [etc]
            },
            {
                'path': '/a/readme.txt',
                'is_dir': False,
                'share_link': 'http://etc'
            }
        ]
    },
    etc.
]

我有一些主要使用的东西metadata()但它的速度慢得可怕,因为它需要对每个遍历的目录进行 API 调用。

我想用的是delta(),这将使我获得一个请求中的每个文件,然后将其构建成一棵树,但我在弄清楚到底如何,特别是如何将路径解析成树时遇到问题。

编辑:我已经意识到每个共享链接都有一个调用,因此我将忽略这些链接并在需要时获取它们。

这是我必须获取到目前为止所需数据的一些代码:

paths = []

for path, metadata in client.delta(path_prefix='/whatever')['entries']:
    paths.append({
        'path': path,
        'is_dir': metadata['is_dir']
    })

所以我想我在弄清楚如何嵌套这些路径时遇到了困难。很确定我在这里需要一个递归函数,但不太明白。


我稍微调整了你的结构...这是下面代码生成的 JSON 表示形式。请注意,我已将内容字段设置为按路径索引的字典而不是数组。这只是更容易一点,并且可以更有效地查找,但是如果您愿意的话,应该很容易转换为上面的内容:

{
    "is_dir": true,
    "contents": {
        "/foo.txt": {
            "is_dir": false,
            "contents": {}
        },
        "/a": {
            "is_dir": true,
            "contents": {
                "/a/bar.txt": {
                    "is_dir": false,
                    "contents": {}
                },
                "/a/b": {
                    "is_dir": true,
                    "contents": {
                        "/a/b/hello.txt": {
                            "is_dir": false,
                            "contents": {}
                        }
                    }
                }
            }
        }
    }
}

这是产生该输出的代码:

ACCESS_TOKEN = '<REDACTED>'

from collections import defaultdict
import json

from dropbox.client import DropboxClient

def make_tree():
    return {
        'is_dir': True,
        'contents': defaultdict(make_tree)
    }
tree = defaultdict(make_tree)

client = DropboxClient(ACCESS_TOKEN)

has_more = True
cursor = None

while has_more:
    delta = client.delta(cursor)

    cursor = delta['cursor']
    has_more = delta['has_more']

    for path, metadata in delta['entries']:
        if metadata is not None:

            # find the right place in the tree
            segments = path.split('/')
            location = tree['/']
            for i in xrange(1, len(segments)-1):
                current_path = '/'.join(segments[:i+1])
                location = location['contents'][current_path]

            # insert the new entry
            location['contents'][path] = {
                'is_dir': metadata['is_dir'],
                'contents': {}
            }

print json.dumps(tree['/'], indent=4)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 dropbox API 构建目录树 的相关文章

随机推荐

  • 将信息从 collectionView 传递到 gameScene

    我使用 SpriteKit GameScene 和 GameViewController 和 Objective C 创建了一个游戏 那里的一切都运转良好 在同一个应用程序中 我在故事板中创建了一个 UIViewController 和第二
  • 一加一 CM12 构建失败

    我正在关注这个维基http wiki cyanogenmod org w Build for bacon为一加一构建cyanogenmod 12 构建失败并出现以下错误 早午餐培根 including vendor cm vendorset
  • app.yaml 处理程序登录:管理选项对标准环境 python GAE 应用程序无效?

    我正在为我的标准环境 python GAE 应用程序进行一些安全检查 我很惊讶地发现login admin选项似乎无效 我想将请求命名空间的一部分保护到应用程序本身 而不是外部请求 应用程序通过推送任务队列发送这些请求 这是相应的处理程序配
  • 为什么相同的代码在两种技术中表现不同[重复]

    这个问题在这里已经有答案了 下面是我的 C 代码片段 void main int x 7 x x printf d x 输出 8 public static void main String args int x 7 x x System
  • 排除以特定文件扩展名结尾的文件

    我想获取工作目录中的所有文件 不包括以以下结尾的文件 pl So test pl应该排除但不排除test txt or test xyz 表达方式glob 匹配工作目录中的所有文件并且似乎运行良好 除了排除以结尾的文件部分 pl 我尝试过几
  • 获取 Objective C 中某个类的所有实例?

    我有一个 UIView 它有很多实例 每个实例都有一个 UIRecognizer 当其中一个被点击时 我想删除其他人的所有识别器 我希望它能够获取该类的所有实例并删除它们的识别 我知道 ManagedObjects 有 Entity all
  • 在 VBScript 中运行带参数的 exe 文件

    我需要创建一个运行的脚本setup exe configure Install xml从脚本所在的文件夹 当我运行下面的脚本时 它确实找到了setup exe但它不读取参数 就像最后一部分 configure Install xml 未被读
  • 为什么 Parallel.ForEach 比 AsParallel().ForAll() 快得多,尽管 MSDN 另有建议?

    我一直在做一些调查 看看如何创建一个通过树运行的多线程应用程序 为了找到如何以最佳方式实现这一点 我创建了一个测试应用程序 该应用程序在我的 C 磁盘上运行并打开所有目录 class Program static void Main str
  • 让 gdb 与 emacs 24 一起工作

    经过与此相关的多次绞尽脑汁之后才意识到question that gdb似乎被打破了emacs 24 所以我已经切换到gud gdb 但我现在注意到断点上非常方便的红点似乎不起作用gud gdb 有谁对如何使用 C 代码进行明智的调试有明确
  • 嵌入的 YouTube 视频 showinfo 与适度品牌不兼容?

    我正在使用参数在我的网站上嵌入 YouTube 视频modestbranding 1 不幸的是 我也想使用参数showinfo 0 当我尝试这个时 似乎modestbranding不再起作用了 我做了研究并发现modestbranding仅
  • 如何显示用户的特定ec2实例

    我有一些 aws ec2 实例 并且只想向合作伙伴显示一个实例 我为合作伙伴创建了 IAM 用户 以下是我创建的政策 但是 当合作伙伴登录 aws 并查看 ec2 实例视图时 会显示以下消息 并且不会显示任何实例 获取实例数据时发生错误 您
  • Html / CSS:图像占据屏幕的一半

    我想创建一个网页 其中一个大图像占据屏幕的一半 如下所示 我怎样才能用 CSS 做到这一点 尝试这样的事情吗 2个分区 leftHalf background url bg 1 jpg width 50 position absolute
  • 从 Java 读取 Windows ACL

    在 Java 程序中 我希望能够列出有权读取给定文件的 Windows 用户和组 Java 没有内置的功能来读取 Windows ACL 信息 至少直到Java 7 所以我正在寻找其他解决方案 是否有任何第三方库可以提供对 Windows
  • 使用 GhostscriptProcessor 创建 PDF/A

    我想使用 GhostscriptProcessor 将 PDF 文件转换为 PDF A 但结果是 PDF 而不是 PDF A GhostscriptProcessor gsproc new GhostscriptProcessor Prop
  • 在 Centos 7.4x 上将 OSSubprocess 添加到我的 Pharo 6.1 时出现错误

    我想搞乱OSSubprocess 由马里亚诺 马丁内斯 佩克 来自 CentOS 7 4 上的 Pharo 6 1 我在 内搜索了Pharo Project Catalog并尝试安装它 我收到一个错误 ioLoadModule home s
  • 防止派生类隐藏基类中的非虚函数

    考虑一下我有 A 类和 B 类 这样 class A public void Fun class B public A 作为 A 类的设计者 有什么方法可以强制派生类 B 和从 A 派生的其他类被阻止 出现某种错误 隐藏非虚函数 Fun 吗
  • 如何将值传递到 MVC3 母版页 (_layout)?

    我有一个自定义 modelbinder 它检查身份验证 cookie 并返回值 public class UserDataModelBinder
  • 在cocos2d引擎中实现QR阅读器

    到目前为止 我正在使用 cocos2d 引擎创建一个游戏 我想实现一个 QR 阅读器 到目前为止 我已经创建了一个 CCScene CCScene 有一个菜单按钮 它指向一个 onScan 方法 void onScan id sender
  • 如何使用 Inno Setup 检测并“修复”DPI 设置?

    我创建了一个带有自定义向导页面和自定义背景图像的设置 问题出在非标准 DPI 系统上 当我运行此设置时 背景图像无法正确显示 如何检测 DPI 大小并使用向导页面的自定义设置 最正确 的方法是为小字体和大字体模式提供替代图像 不太正确 的方
  • 从 dropbox API 构建目录树

    我想要做的是使用 python 绑定 从 dropbox API 为给定路径构建一棵树 并为每个路径提供共享链接 我建议的结构看起来像这样 path a is dir True contents path a b is dir True c