接口到bbdb,一个阴险的老大哥数据库。
pybbdb的Python项目详细描述
内容
Introduction
pybbdb听起来像一个粗鲁的噪音,但实际上它是一个python接口 到阴险的老大哥数据库(BBDB),一个与 GNU Emacs。你可以在Emacs Wiki上找到更多关于bbdb的信息。这个 pybbdb源repo托管在Bitbucket。版本可以在上找到 PyPI。
注意
此模块仅处理BBDB版本2。中有版本3 关于Savannah的开发,但尚未公开发布。
Requirements
- 要安装并运行它:
- pyparsing、voluptuous和six
- 运行单元测试:
- pytest
Usage
Creating a BBDB database
创建一个新的数据库非常简单:
>>> from bbdb import BBDB >>> db = BBDB()
数据库从没有记录开始。若要添加新的,请使用 add_record()方法,指定名字和姓氏,以及任何其他 要设置的属性:
>>> fred = db.add_record("Fred", "Flintstone") >>> fred <Record: Fred Flintstone> >>> barney = db.add_record("Barney", "Rubble") >>> db <BBDB: 2 records>
您可以使用返回的记录对象设置其他属性:
>>> fred.set_company("Slate Rock & Gravel")
Record是OrderedDict的子类,因此您可以设置或修改 此样式的属性:
>>> fred["company"] = "Slate Rock & Gravel"
为了方便起见,每个有效属性都有属性:
>>> fred.firstname 'Fred' >>> fred.company 'Slate Rock & Gravel'
还有一个复合的name属性:
>>> fred.name 'Fred Flintstone'
一些bbdb属性由事物列表组成,其中有add_*() 这些方法:
>>> fred.add_net("fred@bedrock.org") >>> fred.add_net("fred.flintstone@gravel.com") >>> fred.net ['fred@bedrock.org', 'fred.flintstone@gravel.com'] >>> fred.add_aka("Freddie") >>> fred.aka ['Freddie']
电话记录由位置标签和电话号码字符串组成:
>>> fred.add_phone("Work", "555-6789") >>> fred.add_phone("Home", "555-1234") >>> fred.phone SortedDict([('Home', '555-1234'), ('Work', '555-6789')])
记录可以有多个地址,每个地址都由一个位置标记索引。每个 地址又有几个属性:
>>> home = fred.add_address("Home") >>> home.add_location("Cave 2a", "345 Cavestone Road") >>> home.set_city("Bedrock") >>> home.set_state("Hanna Barbera") >>> home.set_zipcode("12345") >>> home.set_country("USA") >>> home <Address: Cave 2a, 345 Cavestone Road, Bedrock, Hanna Barbera, 12345, USA> >>> home.location ['Cave 2a', '345 Cavestone Road'] >>> home.zipcode '12345'
最后,每个条目都可以有一个用户定义的任意字典 字段:
>>> fred.add_field("spouse", "Wilma") >>> fred.add_field("kids", "Pebbles, Bam-Bam") >>> fred.add_field("catchphrase", '"Yabba dabba doo!"') >>> fred.fields SortedDict([('catchphrase', '"Yabba dabba doo!"'), ('kids', 'Pebbles, Bam-Bam'), ('spouse', 'Wilma')])
字段值也可以有新行:
>>> barney.add_field("pets", "brontosaurus\npterodactyl")
Reading and writing BBDB files
write()方法将数据库写入流(默认 stdout)格式适合gnu emacs使用:
>>> db.write() # doctest: +ELLIPSIS +REPORT_UDIFF ;; -*-coding: utf-8-emacs;-*- ;;; file-version: 6 ;;; user-fields: (catchphrase kids pets spouse) ["Barney" "Rubble" nil nil nil nil nil ((pets . "brontosaurus\npterodactyl")) nil] ["Fred" "Flintstone" ("Freddie") "Slate Rock & Gravel" (["Home" "555-1234"] ...
方便的write_file()方法会将其放入一个文件:
>>> db.write_file("examples/bbdb.el")
您可以使用fromfile()静态方法从文件中读取数据库:
>>> newdb = BBDB.fromfile("examples/bbdb.el") >>> newdb <BBDB: 2 records> >>> newdb == db True
可以使用bbdb数据库的read()和read_file()方法 从其他数据库导入记录。
Exporting to other formats
因为所有的bbdb对象都是OrderedDict的子类,所以您可以很容易地 将其序列化为其他格式。例如,json:
>>> import sys >>> import json >>> json.dump(db, sys.stdout, indent=4) # doctest: +NORMALIZE_WHITESPACE +REPORT_UDIFF { "coding": "utf-8-emacs", "fileversion": 6, "records": [ { "firstname": "Barney", "lastname": "Rubble", "company": "", "aka": [], "phone": {}, "address": {}, "net": [], "fields": { "pets": "brontosaurus\\npterodactyl" } }, { "firstname": "Fred", "lastname": "Flintstone", "company": "Slate Rock & Gravel", "aka": [ "Freddie" ], "phone": { "Home": "555-1234", "Work": "555-6789" }, "address": { "Home": { "location": [ "Cave 2a", "345 Cavestone Road" ], "city": "Bedrock", "state": "Hanna Barbera", "zipcode": "12345", "country": "USA" } }, "net": [ "fred@bedrock.org", "fred.flintstone@gravel.com" ], "fields": { "catchphrase": "\"Yabba dabba doo!\"", "kids": "Pebbles, Bam-Bam", "spouse": "Wilma" } } ] }
您可以使用适当结构的dict创建bbdb数据库 fromdict方法:
>>> serialized = json.dumps(db) >>> data = json.loads(serialized) >>> newdb = BBDB.fromdict(data) >>> newdb == db True
Release history
Version 0.4 (10 February 2017)
- 使用pytest进行单元测试。
- 错误修复:在字段中添加对换行的支持。
- 错误修正:允许姓氏为零。
Version 0.3 (22 July 2015)
- 错误修复:让python 3正常工作。
Version 0.2 (2 July 2015)
- 使用voluptuous添加数据验证。
- 添加一组演示转换器程序。
- 添加tox测试支持。
- 添加Python3支持。
- 错误修复:将记录从文件转换为正确的类型。
Feedback
向我(格伦·哈钦斯)报告任何问题、虫子等 zondo42@gmail.com。也欢迎使用补丁程序!