pbm 0.6.4
pbm works with Chromium bookmarks JSON.
License: BSD
Keywords: pbm bookmarks chrome chromium

===============================
pbm
===============================

.. image:: https://badge.fury.io/py/pbm.png
    :target: http://badge.fury.io/py/pbm

.. .. image:: https://travis-ci.org/westurner/pbm.png?branch=master
..        :target: https://travis-ci.org/westurner/pbm

.. image:: https://pypip.in/d/pbm/badge.png
        :target: https://pypi.python.org/pypi/pbm


pbm works with Chrome and Chromium bookmarks JSON.

* Free software: BSD license
* Source: https://github.com/westurner/pbm
* PyPI: https://pypi.python.org/pypi/pbm

.. * Documentation: https://pbm.readthedocs.org.

Features
========

* List Chrome and Chromium Bookmarks JSON files (``-l`` / ``-L``)
* Print all bookmarks (``--print-all``)
* Reorganize all bookmarks into the Bookmarks Bar (``--organize``)


Bookmarks Bar Folders
-----------------------

+------------------+-------------------------------------------------------------+
|   Name           | Description                                                 |
+------------------+-------------------------------------------------------------+
| yearly           | date-based folders: ``YYYY`` > ``YYYY-MM`` > ``YYYY-MM-DD`` |
+------------------+-------------------------------------------------------------+
| ``bookmarklets`` | bookmarklets (additions will be merged with a default set)  |
+------------------+-------------------------------------------------------------+
| ``chrome``       | select ``chrome://`` URLs                                   |
+------------------+-------------------------------------------------------------+
| ``quicklinks``   | custom quicklinks (optional; copied as-is)                  |
+------------------+-------------------------------------------------------------+
| ``starred``      | bookmarks ending in one or more ``#`` are copied here       |
|                  | searchably prefixed with ``[XO]``, ``[XOOOO]``              |
+------------------+-------------------------------------------------------------+
| ``queue``        | default folder for new bookmarks                            |
+------------------+-------------------------------------------------------------+


Installation
==============
Install from PyPI with pip:

.. code:: bash

   pip install pbm

Development:

.. code:: bash

   pip install -e git+ssh://git@github.com/westurner/pbm#egg=pbm


Usage
=======
List available ``Bookmarks`` files in Chrome and Chromium User Data
directories:

.. code:: bash

   pbm -l  # or -L to also list Bookmarks.%FT%T%z.bkp backups

Reorganize all bookmarks into Bookmarks Bar folders:

.. code:: bash

   bmarks=$(pbm -l | grep "Profile 1" | head -n1)
   pbm --organize "${bmarks}"

Serve and search bookmarks with the Tornado webapp:

.. code:: bash

   pbmweb -H localhost -P 8080 -f "${bmarks}"

Then access the searchable bookmarks jstree at
http://localhost:28881/bookmarks/chrome




History
=======


release/0.6.4 (2016-04-28 21:00:48 -0500)
-----------------------------------------
::

   git log --reverse --pretty=format:'* %s [%h]' v0.6.3..release/0.6.4

* MRG: Merge tag 'v0.6.3' into develop [c1c2ef6]
* BLD,BUG: pbm/static/brw: upgrade [7ff47be]
* RLS: setup.py, __init__: v0.6.4 [5405e90]


v0.6.3 (2016-04-28 18:37:59 -0500)
----------------------------------
::

   git log --reverse --pretty=format:'* %s [%h]' v0.6.2..v0.6.3

* MRG: Merge tag 'v0.6.2' into develop [449ad8b]
* BUG,DOC: HISTORY.rst: escape \* [6e9f74d]
* BUG,DOC: HISTORY.rst: escape \* [158ad09]
* BLD: MANIFEST.in: recursive-include \* LICENSE\* [251cb7e]
* BLD: MANIFEST.in: recursive-include pbm/templates \*.jinja [bd9a93a]
* RLS: setup.py, __init__: v0.6.3 [d477d74]
* BLD,BUG: Makefile: build, dist [d7b62a4]
* DOC: HISTORY.rst: `git-changelog.py -r release/0.6.3 --hdr=- | pbcopy` [bd174ab]
* MRG: Merge branch 'release/0.6.3' [d66f624]


v0.6.2 (2016-04-28 18:18:06 -0500)
----------------------------------
::

   git log --reverse --pretty=format:'* %s [%h]' v0.6.1..v0.6.2

* MRG: Merge tag 'v0.6.1' into develop [f69ab60]
* BUG,BLD: setup.py: install_requires jinja_tornado [189210d]
* BLD: src/jinja_tornado: upgrade [850198b]
* RLS: setup.py, __init__: v0.6.2 [5298786]
* DOC: HISTORY.rst: `git-changelog.py -r release/0.6.2 --hdr=- | pbcopy` [b3e6597]
* MRG: Merge branch 'release/0.6.2' [376e14f]


v0.6.1 (2016-04-28 16:28:14 -0500)
----------------------------------
::

   git log --reverse --pretty=format:'* %s [%h]' v0.6.0..v0.6.1

* MRG: Merge tag 'v0.6.0' into develop [c74bd7f]
* BUG,DOC: HISTORY.rst: escape \* [d14de7c]
* BLD: MANIFEST.in: recursive-include pbm/static \*.html \*.js [bd07338]
* BLD: Makefile: release w/ twine because HTTPS [56a72d3]
* RLS: setup.py, __init__: v0.6.1 [511ee6a]
* DOC: HISTORY.rst: 'git-changelog.py -r release/0.6.1 --hdr=- | pbcopy' [d884851]
* MRG: Merge branch 'release/0.6.1' [d5ddf17]


v0.6.0 (2016-04-28 16:11:26 -0500)
----------------------------------
::

   git log --reverse --pretty=format:'* %s [%h]' v0.5.3..v0.6.0

* Merge tag 'v0.5.3' into develop [d330a7e]
* ENH: app.py: add HTTP_ACCESS_CONTROL_ALLOW_ORIGIN (optional CORS) [a17eb19]
* CLN: rm filenames ending with ' ' from sed -i' ' [17459bd]
* BLD: setup.py, requirements.txt: add tornado as a dependency (for pbmweb) [b670e1c]
* UBY: main.py: -y/--yes/--skip-prompt [91ff556]
* BUG: pbm/main.py: ./Bookmarks -> Bookmarks (toward path.py/pathlib compat) [47838d0]
* BLD: setup.py, requirements-test.txt: test deps: urlobject, rdflib [fb41197]
* DOC: setup.py: package description [6c934cc]
* TST,CLN: remove old /bookmarks/chrome/dict route [482f141]
* REF: app.py: cls.template_path [e77b2b2]
* BLD: pbm/static/brw: git submodule [1aa753f]
* ENH: templates/main.jinja: link to //static/brw/index.html [4aa0804]
* TST,UBY: pbm/main.py: logging.basicConfig(format=) [d50b31d]
* BLD: Makefile: UNAME_S:=$(shell uname -s) [2a70f57]
* CLN: .gitignore: add vim .swp, .swo [c177f25]
* ENH: views, /logout, navlinks, /about, --open [ba9f16b]
* BLD: pbm/static/brw: :fast_forward: to 3cb3d6f [4698efe]
* DOC: HISTORY.rst: 0.6.0 [467eef1]
* RLS: setup.py, __init__.py: v0.6.0 [d8191b5]
* UBY: index.html: css [c44144f]
* MRG: Merge branch 'develop' of https://github.com/westurner/pbm into develop [df28218]
* BLD: src/jinja_tornado: upgrade [656c89d]
* BLD: pbm/static/brw: upgrade [a782e17]
* RLS: setup.py, __init__: v0.6.0 [dfa0da9]
* MRG: Merge branch 'release/0.6.0' of ssh://github.com/westurner/pbm into release/0.6.0 [60875ae]
* DOC: HISTORY.rst: 'git-changelog.py -r release/0.6.0 --hdr=- | pbcopy' [5345b84]
* MRG: Merge branch 'release/0.6.0' [73af3ea]


v0.5.3 (2015-04-23 21:12:41 -0500)
----------------------------------
::

   git log --reverse --pretty=format:'* %s [%h]' v0.5.2..v0.5.3

* Merge tag 'v0.5.2' into develop [c7d528f]
* BUG: app.py: main argv handling, logging [21a669e]
* DOC: v0.5.3 docs, version [cf2e2ee]
* Merge branch 'release/0.5.3' [ff5b2bd]


v0.5.2 (2015-04-23 20:53:01 -0500)
----------------------------------
::

   git log --reverse --pretty=format:'* %s [%h]' v0.5.1..v0.5.2

* Merge tag 'v0.5.1' into develop [b2f5992]
* DOC: __init__.py, setup.py, HISTORY.rst: v0.5.2 [0cb8e87]
* Merge branch 'release/0.5.2' [cfeed42]


v0.5.1 (2015-04-23 20:47:26 -0500)
----------------------------------
::

   git log --reverse --pretty=format:'* %s [%h]' v0.5.0..v0.5.1

* Merge tag 'v0.5.0' into develop [0ecf417]
* DOC: HISTORY.rst: v0.5.0, [a1111d4]
* DOC: README.rst [b6ac7ee]
* BUG,TST,REF: generate longdates, regular imports, test that queue['id'] is the max [fb1ab15]
* DOC: HISTORY.rst: v0.5.1 [ad04316]
* RLS: __init__.py: version v0.5.1 [a84d4e2]
* Merge branch 'release/0.5.1' [4cda097]


v0.5.0 (2015-04-23 15:05:47 -0500)
----------------------------------
::

   git log --reverse --pretty=format:'* %s [%h]' v0.4.1..v0.5.0

* ENH: main.py: Add --print-all output formatter [016a601]
* BUG,ENH: main.py encoding errors w/ getwriter, print_json_link_list [f26b867]
* ENH,TST: print_html_tree, tornado app, recursive RDFa template (todo: simplify) [102c5c8]
* ENH: /bookmarks (jstree, /bookmarks/dict), /bookmarks/list [4bea937]
* BUG: make window.open work with middle-click [4e7673d]
* ENH,REF,CLN: JSON handlers, ##searchterm! onhashchanged, css, [markdown](url://formatting) [578c0ff]
* BUG,REF: onhashchange sync ('bindings'), css [8145dc6]
* TST: tests/test_app.py: tornado.testing.AsyncHTTPTestCase [ba24573]
* REF: /bookmarks -> /bookmarks/chrome [ac47841]
* TST,REF: main function signature, explicit stdout, q [19f50a8]
* BUG: main() argv must default to sys.argv[1:] for console_script [3ee4438]
* TST: tests/data: current output [0b2384f]
* REF: utils.get_template, imports [3cfbaca]
* REF: -> pbm [c1e292e]
* REF: -> pbm [9d57407]
* REF: -> pbm [6481879]
* REF: -> pbm [abae5ed]
* RLS: setup.py, __init__.py: v0.5.0 [ab5e5e3]
* Merge branch 'release/0.5.0' [c6096e8]


v0.4.1 (2015-03-02 04:24:00 -0600)
----------------------------------
::

   git log --reverse --pretty=format:'* %s [%h]' v0.4.0..v0.4.1

* Merge tag 'v0.4.0' into develop [604f9d3]
* BLD: MANIFEST.in: exclude .ropeproject and .bak [86a9090]
* RLS: HISTORY.txt: v0.4.1 release notes [a93991d]
* BLD,CLN: MANIFEST.in, Makefile: clean [3617d0c]
* RLS: HISTORY.txt: v0.4.1 release notes [2c0300f]
* RLS: setup.py: v0.4.1 [2990c02]
* Merge branch 'release/v0.4.1' [f9a5a67]
* Merge tag 'vv0.4.1' into develop [357d223]


v0.4.0 (2015-03-02 04:11:08 -0600)
----------------------------------
::

   git log --reverse --pretty=format:'* %s [%h]' v0.3.0..v0.4.0

* Merge tag 'v0.3.0' into develop [08b5088]
* BLD: Makefile: make test -> nosetests ./tests/test_promiumbookmarks.py [c934e99]
* BUG: promiumbookmarks.plugins.PromiumPlugin: accept a conf={} argument [261a855]
* TST: test_promiumbookmarks: remove import of promiumbookmarks.plugins.other [91d8132]
* REF: promiumbookmarks/promiumbookmarks.py: factor BookmarksObject back into ChromiumBookmarks [4df13c9]
* DOC: promiumbookmarks.ChromiumBookmarks.walk_bookmarks: docstring [780da1f]
* BUG: promiumbookmarks.ChromiumBookmarks.bookmarks_list: bookmarks_list consume the iterable [1d1ab48]
* CLN: dbf plugin: cleanup and simplify [26e3c07]
* ENH: bookmarkletsfolder.py: add "notetab (800px)" bookmarklet (closes #2) [53582c9]
* BUG: promiumbookmarks.ChromiumBookmarks.walk_bookmarks: pass filterfunc through [ee41454]
* TST: tests/data/Bookmarks: set date_added to a nonzero date [c88f78b]
* BUG: set date_added to a nonzero date [326c4fe]
* ENH: Add plugins.DedupePlugin to deduplicate bookmarks on (url, date_added) [9369891]
* TST: Bookmarks [1620af5]
* TST: tests/data/Bookmarks: add starred, queued [ca7278e]
* DOC: README.rst: fix title underline [5c8dc9f]
* REF: promiumbookmarks.plugins plugin API [773ff26]
* ENH: plugins.starred: O instead of # (searchable) [aa95b9c]
* ENH: plugins.starred: prefix with X [783411d]
* BLD: Makefile: check readme syntax [1309ac4]
* RLS: HISTORY.txt: v0.4.0 release notes [39ef2b2]
* Merge branch 'release/0.4.0' [ca63866]


v0.3.0 (2015-02-08 02:50:29 -0600)
----------------------------------
::

   git log --reverse --pretty=format:'* %s [%h]' v0.2.5..v0.3.0

* Merge tag 'v0.2.5' into develop [2a1cfaa]
* CLN,ENH: refactoring, initial plugin support [aaf96dc]
* CLN: auto-lint [1b25145]
* ENH: refactor to plugins, move tests to test_promiumbookmarks.py, add allinone and starred plugins [67dc734]
* Merge with 0.2.5 [4dca76e]
* DOC: README.rst, HISTORY.rst: headings [5f0a8a1]
* RLS: setup.py: version 0.3.0 [b191c91]
* Merge branch 'release/0.3.0' [fcd8496]


v0.2.5 (2014-12-25 08:18:16 -0600)
----------------------------------
::

   git log --reverse --pretty=format:'* %s [%h]' v0.2.4..v0.2.5

* Merge tag 'v0.2.4' into develop [0a7ca31]
* BUG: Add support for "linux2" platform [eb7621d]
* RLS: setup.py, HISTORY.rst: v0.2.5 [6057e77]
* Merge branch 'release/0.2.5' [59df7fe]


v0.2.4 (2014-12-13 17:58:55 -0600)
----------------------------------
::

   git log --reverse --pretty=format:'* %s [%h]' v0.2.3..v0.2.4

* Merge tag 'v0.2.3' into develop [52555ac]
* DOC: pip install -e git+, Bookmarks Bar Folders RST Table (Riv.vim) [ad01158]
* RLS: version=0.2.4, keywords [7f1b08d]
* DOC: README.rst: Bookmarks Bar Folders table (Riv.vim) [fa12164]
* Merge branch 'release/0.2.4' [a582d44]


v0.2.3 (2014-12-13 17:37:45 -0600)
----------------------------------
::

   git log --reverse --pretty=format:'* %s [%h]' v0.2.2..v0.2.3

* Merge tag 'v0.2.2' into develop [adfe382]
* DOC: README.rst: https://pypi.python.org/pypi/promiumbookmarks [e5f6464]
* RLS: setup.py version=0.2.3 [2e36d52]
* Merge branch 'release/0.2.3' [7251ab5]


v0.2.2 (2014-12-13 17:33:12 -0600)
----------------------------------
::

   git log --reverse --pretty=format:'* %s [%h]' v0.2.1..v0.2.2

* Merge tag 'v0.2.1' into develop [d2390e9]
* BLD: MANIFEST.in: exclude tests/data/\*.bkp [634235a]
* RLS: setup.py version=0.2.2 [85b111e]
* Merge branch 'release/0.2.2' [92b79d9]


v0.2.1 (2014-12-13 17:27:52 -0600)
----------------------------------
::

   git log --reverse --pretty=format:'* %s [%h]' v0.2.0..v0.2.1

* Merge tag 'v0.2.0' into develop [b8e1f96]
* RLS,DOC,CLN: setup.py description, classifiers, README.rst, HISTORY.rst, .gitignore [8e2e0c6]
* Merge branch 'release/0.2.1' [dc8465a]


v0.2.0 (2014-12-13 17:10:04 -0600)
----------------------------------
::

   git log --reverse --pretty=format:'* %s [%h]' 0677946..v0.2.0

* CLN: plain refactor into ChromiumBookmarks(object) [9eef12b]
* ENH: Add ChromiumBookmarks.__init__, __iter__ and ChromiumBookmarks.reorganized [6cc0635]
* CLN: -> ChromiumBookmarks.reorganize_by_date [648f64e]
* CLN: update .gitignore [aa4bd44]
* ENH,DOC: CLI actions and options [8384381]
* CLN: move to chromium_bookmarks.py [5e9d0e6]
* CLN: pep8, lint, rename to chromium_bookmarks.py [2847bfd]
* BLD: Update Makefile [745b370]
* ENH: Add chrome://history and chrome://bookmarks links to bookmarks bar [cf12e50]
* ENH,DOC: bookmarklets, chrome:// URIs, docstrings, filterfunc param [05c7634]
* ENH,CLN: Add 'quicklinks' Bookmarks Bar folder passthrough [1d49949]
* ENH,BUG: date-based backups, merge defaults into 'bookmarklets', add a default 'queue' folder, filterfunc passthrough [577cd1c]
* PRF: optimize chrome_filterfunc [522a3e6]
* TST: test filenames, assertRaises(IOError) if ./Bookmarks does not exist [ac68e3e]
* BLD,CLN: Makefile, chromium_bookmarks.py -> promiumbookmarks.py [21d6dd1]
* CLN: chromium_bookmarks.py -> promiumbookmarks.py [6ce5194]
* CLN: .gitignore [87e0962]
* ENH: -l/-L to list Bookmarks [5090209]
* TST: Update test Bookmarks [fb0e632]
* ENH: get_chromedir, get_chromiumdir for (platform, release) [4d423d1]
* BLD: promiumbookmarks.py -> promiumbookmarks/promiumbookmarks.py [6655625]
* BLD: Add templated cookiecutter-pypackage [5038500]
* BLD: Makefile: merge with cookiecutter [57ce9dd]
* DOC: README.rst: Feature descriptions [a65ce02]
* BLD: setup.py: promiumbookmarks console_script entrypoint [935aaa5]
* DOC: README.rst: comment out travis badge for now [e3ea2b4]
* DOC: README.rst: feature descriptions [91d304f]
* DOC: README.rst: feature descriptions [886126d]
* DOC: README.rst: feature descriptions [2c53107]
* DOC: README.rst: Installation, Usage [5267be5]
* RLS: setup.py: version=0.2.0 [a06a2a2]
* Merge branch 'release/0.2.0' [87eece7]