pyline


Namepyline JSON
Version 0.3.21 PyPI version JSON
download
home_pagehttps://github.com/westurner/pyline
SummaryPyline is a grep-like, sed-like, awk-like command-line tool for line-based text processing in Python.
upload_time2024-07-16 04:46:15
maintainerNone
docs_urlNone
authorWes Turner
requires_pythonNone
licensePSF
keywords pyline sed grep
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI
coveralls test coverage No coveralls.
            ===============================
pyline
===============================


`GitHub`_ |
`PyPi`_ |
`Warehouse`_ |
`ReadTheDocs`_ |
`Travis-CI`_


.. image:: https://badge.fury.io/py/pyline.png
   :target: http://badge.fury.io/py/pyline
    
.. image:: https://travis-ci.org/westurner/pyline.png?branch=master
        :target: https://travis-ci.org/westurner/pyline

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

.. _GitHub: https://github.com/westurner/pyline
.. _PyPi: https://pypi.python.org/pypi/pyline
.. _Warehouse: https://warehouse.python.org/project/pyline
.. _ReadTheDocs:  https://pyline.readthedocs.org/en/latest
.. _Travis-CI:  https://travis-ci.org/westurner/pyline

Pyline is a grep-like, sed-like, awk-like command-line tool for
line-based text processing in Python.

.. contents:: 

Features
==========

* Compatibility with the `original pyline recipe`_
* Python `str.split`_ by an optional delimiter str (``-F``, ``--input-delim``)
* `Python regex`_ (``-r``, ``--regex``, ``-R``, ``--regex-options``)
* Output as `txt`, `csv`, `tsv`, `json`, `html` (``-O csv``, ``--output-filetype=csv``)
* Output as Markdown/ReStructuredText checkboxes (``-O checkbox``, ``--output-filetype=checkbox``)
* Lazy sorting (``-s``, ``--sort-asc``; ``-S``, ``--sort-desc``)
* Create `path.py <https://pypi.python.org/pypi/path.py>`__
  (or `pathlib`_) objects from each line (``-p``,
  ``--path-tools``)
* Functional `namedtuples`_, `iterators`_ ``yield`` -ing `generators`_
* `optparse`_ argument parsing (``-h``, ``--help``)
* `cookiecutter-pypackage`_ project templating  


.. _path.py: https://pypi.python.org/pypi/path.py
.. _str.split: https://docs.python.org/2/library/stdtypes.html#str.split
.. _Python regex: https://docs.python.org/2/library/re.html   
.. _pathlib: https://pypi.python.org/pypi/pathlib
.. _namedtuples: https://docs.python.org/2/library/collections.html#collections.namedtuple 
.. _iterators: https://docs.python.org/2/howto/functional.html#iterators
.. _generators: https://docs.python.org/2/howto/functional.html#generators    
.. _optparse: https://docs.python.org/2/library/optparse.html 
.. _cookiecutter-pypackage: https://github.com/audreyr/cookiecutter-pypackage 


Why
=====
Somewhat unsurprisingly, I found the `original pyline recipe`_
while searching for "python grep sed"
(see ``AUTHORS.rst`` and ``LICENSE.psf``).

I added an option for setting ``p = Path(line)``
in the `eval`_/`compile`_ command context and `added it to my dotfiles
<https://github.com/westurner/dotfiles/commits/master/src/dotfiles/pyline.py>`_
; where it grew tests and an ``optparse.OptionParser``; and is now
promoted to a `GitHub`_ project with `ReadTheDocs`_ documentation,
tests with tox and `Travis-CI`_, and a setup.py for `PyPi`_.


.. _original Pyline recipe: https://code.activestate.com/recipes/437932-pyline-a-grep-like-sed-like-command-line-tool/
.. _eval: https://docs.python.org/2/library/functions.html#eval
.. _compile: https://docs.python.org/2/library/functions.html#compile
.. _MapReduce: https://en.wikipedia.org/wiki/MapReduce


What
======
Pyline is an ordered `MapReduce`_ tool:

Input Readers:
    * stdin (default)
    * file (``codecs.open(file, 'r', encoding='utf-8')``)

Map Functions:
    * Python module imports (``-m os``)
    * Python regex pattern (``-r '\(.*\)'``)
    * path library (``p`` from ``--pathpy`` OR ``--pathlib``)
    * Python codeobj **eval** output transform:

      .. code:: bash

         ls | pyline -m os 'line and os.path.abspath(line.strip())'
         ls | pyline -r '\(.*\)' 'rgx and (rgx.group(0), rgx.group(1)) or line'
         ls | pyline -p 'p and p.abspath() or ("# ".format(line))'

         # With an extra outer loop to bind variables in
         # (because (_p = p.abspath(); <codeobj>) does not work)
         find $PWD | pyline --pathpy -m os -m collections --input-delim='/' \
             'p and [collections.OrderedDict((
                     ("p", p),
                     ("_p", _p),
                     ("_p.split()", str(_p).split(os.path.sep)),
                     ("line.rstrip().split()", line.rstrip().split(os.path.sep)),
                     ("l.split()", l.split(os.path.sep)),
                     ("words", words),
                     ("w", w)))
                 for _p in [p.abspath()]][0]' \
                -O json

Partition Function:
    None

Compare Function:
    ``Result(collections.namedtuple).__cmp__``

Reduce Functions:
    ``bool()``,  ``sorted()``

Output Writers:
    ``ResultWriter`` classes

    .. code:: bash

       pyline -O csv
       pyline -O tsv
       pyline -O json


Installing
============
Install from `PyPi`_::

    pip install pyline

Install from `GitHub`_ as editable (add a ``pyline.pth`` in ``site-packages``)::

    pip install -e git+https://github.com/westurner/pyline#egg=pyline


Usage
=========

Print help::

    pyline --help

Process::

    # Print every line (null transform)
    cat ~/.bashrc | pyline line
    cat ~/.bashrc | pyline l

    # Number every line
    cat ~/.bashrc | pyline -n l

    # Print every word (str.split(input-delim=None))
    cat ~/.bashrc | pyline words
    cat ~/.bashrc | pyline w

    # Split into words and print (default: tab separated)
    cat ~/.bashrc | pyline 'len(w) >= 2 and w[1] or "?"'

    # Select the last word, dropping lines with no words
    pyline -f ~/.bashrc 'w[-1:]'

    # Regex matching with groups
    cat ~/.bashrc | pyline -n -r '^#(.*)' 'rgx and rgx.group()'
    cat ~/.bashrc | pyline -n -r '^#(.*)'

    ## Original Examples
    # Print out the first 20 characters of every line
    tail access_log | pyline "line[:20]"

    # Print just the URLs in the access log (seventh "word" in the line)
    tail access_log | pyline "words[6]"

Work with paths and files::

    # List current directory files larger than 1 Kb
    ls | pyline -m os \
      "os.path.isfile(line) and os.stat(line).st_size > 1024 and line"

    # List current directory files larger than 1 Kb
    #pip install path.py
    ls | pyline -p 'p and p.size > 1024 and line'


Documentation
==============
https://pyline.readthedocs.org/en/latest/


License
========
`Python Software License
<https://github.com/westurner/pyline/blob/master/LICENSE.psf>`_


.

History
=========

release/0.3.20 (2020-10-02 20:51:19 -0400)
++++++++++++++++++++++++++++++++++++++++++
::

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

* MRG: Merge tag 'v0.3.19' into develop \[fc2163e\]
* BLD: setup.py: 3 & 3.8 trove classifiers \[6bf10e0\]
* RLS: pyline.py,setup.py: v0.3.20 \[242a75a\]


v0.3.19 (2020-10-02 20:44:25 -0400)
+++++++++++++++++++++++++++++++++++
::

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

* MRG: Merge tag 'v0.3.18' into develop \[715618e\]
* DOC,BLD: HISTORY.rst: \*manually\* fix unquoted/unescaped reference \[9146f39\]
* BLD: setup.cfg: \[wheel\] -> \[bdist_wheel\] \[ba27bd5\]
* BLD: setup.py: long_description_content_type='text/x-rst' \[07dc247\]
* RLS: pyline.py,setup.py: v0.3.19 \[405f3f6\]
* DOC: HISTORY.rst: output from git-changelog.py \[9088f29\]
* MRG: Merge branch 'release/0.3.19' \[45110ec\]


v0.3.18 (2020-10-02 20:27:08 -0400)
+++++++++++++++++++++++++++++++++++
::

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

* MRG: Merge tag 'v0.3.17' into develop \[09f46ca\]
* REF,TST: Makefile, requirements-test: switch to pytest, require jinja2 for tests \[999446d\]
* REF,TST: pyline.py, test_pyline.py: py3 \[7365938\]
* WIP: __init__: change import for py3 (TODO: check py2 compatibility) \[fe61a93\]
* BLD: requirements\[-test\]: remove wheel, -test -> reqs.txt \[716a9b3\]
* REF,BUG: py3, pathpy import, rawstrs, only strip one newline when numbering lines \[f7b3281\]
* BLD: tox.ini,.travis.yml: use tox-travis, envs=py37,py38 \[a2a4a82\]
* DOC,BLD: docs/reqs,docs/conf: copyright, fix pyline import \[036bac8\]
* BLD,TST: setup.py: setup.py:test calls pytest -v \[ced27bb\]
* REF,BUG: pyline.py: when sorting, sort None as '' (and log extensively for other sort comparison TypeError exceptions) \[9248acb\]
* MRG: #29 REF,TST,BLD,BUG: Python 3 Support \[cb195b4\]
* REF: pyline.py: change shebang to \`#!/usr/bin/env python\` from python2 \[5841704\]
* RLS: pyline.py,setup.py: v0.3.18 \[a1072e2\]
* DOC: HISTORY.rst: output from git-changelog.py \[c9f7f89\]
* MRG: Merge branch 'release/0.3.18' \[579ccdf\]



v0.3.17 (2018-12-23 14:41:45 -0500)
+++++++++++++++++++++++++++++++++++
::

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

* MRG: Merge tag 'v0.3.15' into develop \[e1d7768\]
* MRG: Merge tag 'v0.3.16' into develop \[3a6fec4\]
* DOC: pyline.py: typo: checkbok -> checkbox \[a0917c5\]
* BUG,ENH: pyline.py: -p: strip one trailing '\n' from line before parsing as path \[47efdc9\]
* RLS: setup.py, pyline.py: v0.3.17 \[9ef9d41\]
* BLD,DOC: Makefile: setversion, release docs \[5cfc1e4\]
* MRG: Merge branch 'release/0.3.17' \[618920a\]


v0.3.16 (2016-07-22 11:42:57 -0500)
+++++++++++++++++++++++++++++++++++
::

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

* BUG: pyline.py: sys.argv\[1:\] (#7) \[a548405\]
* RLS: pyline v0.3.16 \[b17153a\]
* DOC: HISTORY.rst: git-changelog.py \[9725f8d\]
* MRG: Merge branch 'hotfix/0.3.16' \[c18d61c\]


v0.3.15 (2016-07-22 11:34:56 -0500)
+++++++++++++++++++++++++++++++++++
::

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

* MRG: Merge tag 'v0.3.12' into develop \[b4a3ec7\]
* BUG: include files named \s+ with -p/--pathpy or --pathlib (fixes #24) \[6c3f658\]
* MRG: Merge tag 'v0.3.13' into develop \[1f2b64b\]
* MRG: Merge tag 'v0.3.14' into develop \[b27731a\]
* ETC: pyline/__init__.py: __version__ = version = pyline.version \[4065820\]
* RLS: setup.py, pyline.py: version='0.3.15' \[a83ad49\]
* DOC: HISTORY.rst: git-changelog.py -r "release/0.3.15" --hdr="+"\` \[cfd26be\]
* MRG: Merge branch 'release/0.3.15' \[2225fd6\]


v0.3.14 (2016-07-22 11:27:03 -0500)
+++++++++++++++++++++++++++++++++++
::

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

* BUG: pyline/__init__.py: remove untested package-level __main__ function \[91e1f5f\]
* RLS: setup.py, __init__.py, pyline.py: v0.3.14 (in 3 places) \[3186eb5\]
* MRG: Merge branch 'hotfix/0.3.14' \[527df85\]


v0.3.13 (2016-07-22 11:16:44 -0500)
+++++++++++++++++++++++++++++++++++
::

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

* BUG,TST: pyline/pyline.py: console_entrypoint -> pyline.pyline:main_entrypoint (see: #7) \[a16570e\]
* MRG: Merge branch 'hotfix/0.3.13' \[29b64ef\]


v0.3.12 (2016-02-16 16:07:18 -0600)
+++++++++++++++++++++++++++++++++++
::

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

* MRG: Merge tag 'v0.3.11' into develop \[98adc78\]
* DOC: README.rst: add \.. contents:: \[4416581\]
* TST,UBY: pyline.py, scripts/pyline.py: symlinks to pyline/pyline.py \[2fda52e\]
* UBY,BUG: pyline.py: loglevels \[WARN\], -v/--verbose/DEBUG, -q/--quiet/ERROR \[07fbc09\]
* RLS,DOC: setup.py,pyline.py: version 0.3.12 \[0cb05f3\]
* DOC: HISTORY.rst: git-changelog.py --hdr=+ --rev 'release/0.3.12' \| pbcopy \[3b4d775\]
* MRG: Merge branch 'release/0.3.12' \[29332e2\]


v0.3.11 (2016-02-14 22:29:55 -0600)
+++++++++++++++++++++++++++++++++++
::

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

* MRG: Merge tag 'v0.3.10' into develop \[ed296ea\]
* BLD: tox.ini: testenv/deps/jinja2 \[1a6c2f5\]
* BLD: tox.ini, requirements.txt: add jinja2 to requirements.txt \[e267a1e\]
* RLS,DOC: setup.py,pyline.py: version 0.3.11 \[21bd6e9\]
* DOC: HISTORY.rst: git-changelog.py --hdr=+ --rev 'release/0.3.11' \| pbcopy \[efc24ce\]
* MRG: Merge branch 'release/0.3.11' \[9c05df0\]


v0.3.10 (2016-02-14 21:56:36 -0600)
+++++++++++++++++++++++++++++++++++
::

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

* MRG: Merge tag 'v0.3.9' into develop \[f7c8a16\]
* BUG,UBY: pyline.py: logging config (default INFO, -q/--quiet, -v/--verbose (DEBUG)) \[8a060ab\]
* UBY,DOC: pyline.py: log.info(('pyline.version', __version__)) at startup \[da1e883\]
* BUG,UBY: pyline.py: log.info(('argv', argv)) \[ede1d5e\]
* BUG,REF: opts\['cmd'\], main->(int, results\[\]), log opts after all config \[3cf9585\]
* UBY: pyline.py: log.info(('_rgx', _regexstr)) \[02bd234\]
* RLS,DOC: setup.py,pyline.py: version 0.3.10 \[ea6a1fd\]
* DOC: HISTORY.rst: git-changelog.py --hdr=+ --rev 'release/0.3.10' \| pbcopy \[5266662\]
* MRG: Merge branch 'release/0.3.10' \[aa2529a\]


v0.3.9 (2016-02-14 17:58:36 -0600)
++++++++++++++++++++++++++++++++++
::

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

* ENH: pyline.py: --version arg \[a38bf5a\]
* MRG: Merge tag 'v0.3.8' into develop \[85cd8e9\]
* BUG,REF: pyline.py: output-filetype/-> output-format \[fbcd9e2\]
* BUG: pyline.py: only print version when opts.get('version') \[ef8ac20\]
* RLS,DOC: setup.py,pyline.py: version 0.3.9 \[5f2c4a6\]
* DOC: HISTORY.rst: git-changelog.py --hdr=+ --rev 'release/0.3.9' \| pbcopy \[ce95bae\]
* MRG: Merge branch 'release/0.3.9' \[38e0393\]


v0.3.8 (2016-02-14 17:34:08 -0600)
++++++++++++++++++++++++++++++++++
::

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

* MRG: Merge tag 'v0.3.7' into develop \[0cd0e3c\]
* BUG,ENH: fix CSV header row; add -O jinja:template=path.jinja support (#1,) \[d5fe67b\]
* ENH: pyline.py: --version arg \[818fc1d\]
* RLS: setup.py, pyline.py: version 0.3.8 \[245214d\]
* DOC: HISTORY.rst: git-changelog.py --hdr=+ --rev 'release/0.3.8' \| pbcopy \[983b535\]
* DOC: HISTORY.rst: git-changelog.py --hdr=+ --rev 'release/0.3.8' \| pbcopy \[7b65d8e\]
* MRG: Merge branch 'release/0.3.8' \[2f5f249\]


v0.3.7 (2016-02-12 20:04:39 -0600)
++++++++++++++++++++++++++++++++++
::

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

* Merge tag 'v0.3.5' into develop \[8c5de0a\]
* ENH: pyline.py: main(args=None, iterable=None, output=None) \[dd490e1\]
* UBY: pyline.py: -O chk == -O checkbox \[3aa96ce\]
* UBY: pyline.py: l = line = o = obj \[3aa9a81\]
* DOC: pyline.py: -f/--in/--input-file, -o/--out/--output-file \[bcc9eff\]
* TST: requirements-test.txt: nose, nose-parameterized, nose-progressive \[213e0c0\]
* BUG: pyline: collections.OrderedDict, return 0 \[5fd1114\]
* DOC: setup.py: install_requires=\[\] \[a41bf30\]
* TST,BUG,CLN: test_pyline.py: chk, main(_args), docstrings, #opts._output.close() \[0254f30\]
* Merge tag 'v0.3.6' into develop \[f46f90c\]
* DOC,REF: pyline.py: type_func->typefunc, docstrings \[08c8d9c\]
* UBY: pyline.py: \[--input-delim-split-max\|--max\|--max-split\] \[b509726\]
* REF: pyline.py: ResultWriter.get_writer ValueError, expand \[143c5f7\]
* DOC: pyline.py: usage docstring, main docstring \[bc44747\]
* TST: tests/test_pylinepy: more tests of sorting \[b60750a\]
* DOC: pyline.py: docstrings \[89ea5c7\]
* BLD,TST,BUG: Makefile, setup.py, pyline.py, test_pyline.py: pyline.main does sorting, kwargs, opts obj \[e80cde6\]
* TST,REF: split to SequenceTestCase, LoggingTestCase, Test\* \[62ff39b\]
* TST: tests/test_pyline.py: TestPylinePyline.test_30_pyline_codefunc \[49928d5\]
* Merge branch 'feature/split_tests' into develop \[ef63a18\]
* RLS,DOC: README.rst, setup.py, pyline.py 0.3.7 description \[9fc262e\]
* Merge branch 'release/0.3.7' \[07b00b2\]


v0.3.6 (2015-12-21 04:17:23 -0600)
++++++++++++++++++++++++++++++++++
::

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

* BUG: pyline.py: #!/usr/bin/env python2 \[9729816\]
* RLS: HISTORY.rst, __init__.py, pyline.py, setup.py: __version__ = '0.3.6' \[a463d39\]
* Merge branch 'hotfix/0.3.6' \[445c089\]


v0.3.5 (2015-05-24 20:58:39 -0500)
++++++++++++++++++++++++++++++++++
::

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

* Merge tag 'v0.3.4' into develop \[3ec1391\]
* CLN: patchheader: rm \[c9f6304\]
* ENH: pyline.py: add a codefunc() kwarg \[be8dcc8\]
* BUG,DOC: pyline.py: set default regex_options to '', optparse helpstrings \[fa9e9cb\]
* DOC: pyline.py: docstrings (calling a function, stdlib/vendoring) \[ee22e2c\]
* ENH,TST: pyline.py: add a codefunc() kwarg \[91aa0a8\]
* RLS: setup.py, __init__, HISTORY: v0.3.5, git log --format='\* %s \[%h\]' master..develop \[78f3ad9\]
* Merge branch 'release/0.3.5' \[065797d\]


v0.3.4 (2015-04-25 06:48:47 -0500)
++++++++++++++++++++++++++++++++++
::

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

* Merge tag 'v0.3.3' into develop \[e630114\]
* RLS: HISTORY.rst, __init__.py, setup.py: v0.3.4 \[e448183\]
* Merge branch 'release/0.3.4' \[612228d\]


v0.3.3 (2015-04-25 06:43:37 -0500)
++++++++++++++++++++++++++++++++++
::

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

* Merge tag 'v0.3.2' into develop \[061840b\]
* BUG: pyline.pyline.__main__ \[db71796\]
* DOC,BLD,CLN: Makefile: sphinx-apidoc --no-toc \[209bff8\]
* TST,CLN: pyline.py: remote -t/--test option \[2629924\]
* DOC,CLN: modules.rst: remove generated modules.rst \[abdc00d\]
* BUG, ENH, BUG, TST: \[b5a21e7\]
* RLS: __init__.py, setup.py: v0.3.3 \[eb81129\]
* BLD: Makefile: release (dist), twine \[7e602c8\]
* Merge branch 'release/0.3.3' \[c0df4ab\]


v0.3.2 (2014-11-30 19:49:42 -0600)
++++++++++++++++++++++++++++++++++
::

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

* Merge tag 'v0.3.1' into develop \[a3f8c1c\]
* ENH: Add pyline.__main__ (pyline.pyline.main) for 'python -m pyline' \[1bd5e10\]
* DOC: README.rst \[a26d97a\]
* DOC: HISTORY.rst: link to Source: http://code.activestate.com/recipes/437932-pyline-a-grep-like-sed-like-command-line-tool/ \[5871727\]
* DOC: usage.rst: add :shell: option to 'pyline --help' output \[d1f32de\]
* BUG: pyline/__init__.py: Set pyline.pyline.__main__ correctly \[49ae891\]
* DOC: pyline/pyline.py: docstrings, import path as pathpy \[178af4e\]
* RLS: HISTORY.txt, pyline/__init__.py, setup.py: set version to v0.3.2 \[6c547e4\]
* Merge branch 'release/0.3.2' \[10b84f5\]


v0.3.1 (2014-10-27 07:53:27 -0500)
++++++++++++++++++++++++++++++++++
::

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

* Merge tag 'v0.3.0' into develop \[35a380b\]
* DOC: README.rst \[f803665\]
* Merge branch 'hotfix/readme-travis-link' \[35f7b44\]
* Merge tag 'vreadme-travis-link' into develop \[6849887\]
* DOC: setup.py version 0.3.1 \[a7fae60\]
* Merge branch 'release/0.3.1' \[276d16b\]


v0.3.0 (2014-10-27 07:34:58 -0500)
++++++++++++++++++++++++++++++++++
::

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

* Added tag v0.2.0 for changeset cddc5c513cd2 \[c53a725\]
* DOC: Update README.rst: typo -output-filetype -> --output-filetype \[6897954\]
* DOC: Update README.rst: update 'Features' \[548c426\]
* DOC: Update README.rst: update 'Features' \[273b475\]
* DOC: Update README.rst: update 'Features' \[254ed95\]
* DOC: Update README.rst add additional link to docs \[8415a7c\]
* BLD,DOC: Update requirements.txt: add ../ (from ./docs) as editable \[d94ff0e\]
* Revert "BLD,DOC: Update requirements.txt: add ../ (from ./docs) as editable" \[fa062b8\]
* DOC: program-output:: -> command-output:: \[984b8a6\]
* ENH,BUG,CLN: #10, #12, #13 \[a75d2f9\]
* CLN: remove _import_path_module \[0cc9bb9\]
* RLS: pyline v0.3.0 \[14941af\]
* Merge branch 'release/0.3.0' \[53609dc\]


v0.2.0 (2014-08-24 14:44:31 -0500)
++++++++++++++++++++++++++++++++++
::

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

* Added tag v0.1.5 for changeset 8cd9c44a80ab \[4bb3fc7\]
* BLD: Add docs for 'make release'; remove bdist_wheel upload \[e76b592\]
* BLD: Add docs for 'make release': HISTORY.rst \[e5b3e9a\]
* ENH: Add checkbox output formatter (closes #5) \[46b7177\]
* BUG: add NullHandler to logger (closes #6) \[a9fac28\]
* RLS: Release v0.2.0 \[9ef4a25\]
* Added tag v0.2.0 for changeset f510a75a37a8 \[38c7eeb\]


v0.1.5 (2014-05-12 20:59:34 -0500)
++++++++++++++++++++++++++++++++++
::

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

* Added tag v0.1.4 for changeset c79a1068cb1c \[0abdc5e\]
* DOC: setup.py keywords and classifiers \[9079d03\]
* DOC: Update HISTORY.rst: 0.1.0 -> 0.1.5 \[9bfe2a5\]
* BLD: bump version to v0.1.5 \[0af9381\]


v0.1.4 (2014-05-12 20:42:52 -0500)
++++++++++++++++++++++++++++++++++
::

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

* Added tag v0.1.3 for changeset d49705961509 \[4f8cfec\]
* DOC: correct license and download_url in setup.py \[49ea953\]


v0.1.3 (2014-05-12 20:30:47 -0500)
++++++++++++++++++++++++++++++++++
::

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

* Added tag v0.1.2 for changeset 09cca8fa5555 \[828d223\]
* DOC: missing newline in description \[63a442c\]
* DOC: version bump, setup description \[53ad0f4\]


v0.1.2 (2014-05-12 20:24:26 -0500)
++++++++++++++++++++++++++++++++++
::

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

* Added tag v0.1.1 for changeset 13ad121ea966 \[5727951\]
* BLD: add pathlib and path.py to requirements.txt \[aa6dda7\]
* DOC,BLD,BUG: setup.py build_long_description, file handles \[f7a73c1\]
* DOC: README.rst: remove includes \[2d2bd6f\]
* DOC: version bump, setup description \[e920ff2\]


v0.1.1 (2014-05-12 19:41:54 -0500)
++++++++++++++++++++++++++++++++++
::

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

* DOC,BLD: Update AUTHORS.rst, HISTORY.rst, README.rst, docs/license.rst \[7b087c8\]
* CLN: pyline rename arg\[0\] _input -> iterable \[7040271\]
* BUG: default command in -- ls \| pyline -p  " p = path = Path(line.strip()) \[30dce3a\]
* LOG: log.info(cmd) .\.. after shell parsing, exception \[c449765\]
* CLN: pep8 test command kwargs formatting \[993c65a\]
* DOC: README.rst; ReST doesn't seem to like \`path.py\`_ \.. _path.py:, links \[209ecb5\]
* TST: Update setup.py test command (runtests -v ./tests/test\*.py) \[bc84652\]
* TST: tox.ini: make html rather than sphinx-build \[c96b3b0\]
* CLN: factor out _import_pathmodule and get_path_module \[d0aebfb\]
* TST: move tests from pyline.py to tests/test_pyline.py \[477fbb4\]
* BUG: file handles (was causing tests to fail silently) \[80e84b6\]
* CLN: move optparse things into get_option_parser() \[723a8b7\]
* BLD: Release 0.1.1 \[3f9f56f\]


v0.1.0 (2014-05-12 04:03:15 -0500)
++++++++++++++++++++++++++++++++++
::

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

* CLN: Update .gitignore and .hgignore \[0d07ad1\]
* DOC: Update README.rst: comment out unconfigured badges \[b0e0fc1\]
* ENH: Add pyline script from https://github.com/westurner/dotfiles/blob/e7f766f3/src/dotfiles/pyline.py \[ce2dba8\]
* BLD,TST: Add py.test runtests.py and setup.py:PyTestCommand \[953edbe\]
* BUG: try/except import StringIO (Python 3 compatibility) \[97d5781\]
* BLD: remove py33 section from tox.ini for now \[b103587\]
* BLD: remove py33 section from tox.ini for now \[2ff4a77\]
* BLD: Update tox.ini, .travis.yml, reqs, docs/conf \[13b5487\]
* CLN: pyline cleanup \[9724f8e\]
* CLN: update .hgignore \[59196b7\]




0.0.1 (Unreleased)
+++++++++++++++++++
| Source: http://code.activestate.com/recipes/437932-pyline-a-grep-like-sed-like-command-line-tool/

* Updated 2012.11.17, Wes Turner
* Updated 2005.07.21, thanks to Jacob Oscarson
* Updated 2006.03.30, thanks to Mark Eichin



=======
Credits
=======

* Graham Fawcett  
* Jacob Oscarson
* Mark Eichin
* Wes Turner -- https://github.com/westurner


            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/westurner/pyline",
    "name": "pyline",
    "maintainer": null,
    "docs_url": null,
    "requires_python": null,
    "maintainer_email": null,
    "keywords": "pyline sed grep",
    "author": "Wes Turner",
    "author_email": "wes@wrd.nu",
    "download_url": "https://files.pythonhosted.org/packages/9d/f8/4e6dd7a4a8c2fa43d4bb7047012afa108c293b6a8c86f1c248ad9b6246cb/pyline-0.3.21.tar.gz",
    "platform": null,
    "description": "===============================\npyline\n===============================\n\n\n`GitHub`_ |\n`PyPi`_ |\n`Warehouse`_ |\n`ReadTheDocs`_ |\n`Travis-CI`_\n\n\n.. image:: https://badge.fury.io/py/pyline.png\n   :target: http://badge.fury.io/py/pyline\n    \n.. image:: https://travis-ci.org/westurner/pyline.png?branch=master\n        :target: https://travis-ci.org/westurner/pyline\n\n.. .. image:: https://pypip.in/d/pyline/badge.png\n..       :target: https://pypi.python.org/pypi/pyline\n\n.. _GitHub: https://github.com/westurner/pyline\n.. _PyPi: https://pypi.python.org/pypi/pyline\n.. _Warehouse: https://warehouse.python.org/project/pyline\n.. _ReadTheDocs:  https://pyline.readthedocs.org/en/latest\n.. _Travis-CI:  https://travis-ci.org/westurner/pyline\n\nPyline is a grep-like, sed-like, awk-like command-line tool for\nline-based text processing in Python.\n\n.. contents:: \n\nFeatures\n==========\n\n* Compatibility with the `original pyline recipe`_\n* Python `str.split`_ by an optional delimiter str (``-F``, ``--input-delim``)\n* `Python regex`_ (``-r``, ``--regex``, ``-R``, ``--regex-options``)\n* Output as `txt`, `csv`, `tsv`, `json`, `html` (``-O csv``, ``--output-filetype=csv``)\n* Output as Markdown/ReStructuredText checkboxes (``-O checkbox``, ``--output-filetype=checkbox``)\n* Lazy sorting (``-s``, ``--sort-asc``; ``-S``, ``--sort-desc``)\n* Create `path.py <https://pypi.python.org/pypi/path.py>`__\n  (or `pathlib`_) objects from each line (``-p``,\n  ``--path-tools``)\n* Functional `namedtuples`_, `iterators`_ ``yield`` -ing `generators`_\n* `optparse`_ argument parsing (``-h``, ``--help``)\n* `cookiecutter-pypackage`_ project templating  \n\n\n.. _path.py: https://pypi.python.org/pypi/path.py\n.. _str.split: https://docs.python.org/2/library/stdtypes.html#str.split\n.. _Python regex: https://docs.python.org/2/library/re.html   \n.. _pathlib: https://pypi.python.org/pypi/pathlib\n.. _namedtuples: https://docs.python.org/2/library/collections.html#collections.namedtuple \n.. _iterators: https://docs.python.org/2/howto/functional.html#iterators\n.. _generators: https://docs.python.org/2/howto/functional.html#generators    \n.. _optparse: https://docs.python.org/2/library/optparse.html \n.. _cookiecutter-pypackage: https://github.com/audreyr/cookiecutter-pypackage \n\n\nWhy\n=====\nSomewhat unsurprisingly, I found the `original pyline recipe`_\nwhile searching for \"python grep sed\"\n(see ``AUTHORS.rst`` and ``LICENSE.psf``).\n\nI added an option for setting ``p = Path(line)``\nin the `eval`_/`compile`_ command context and `added it to my dotfiles\n<https://github.com/westurner/dotfiles/commits/master/src/dotfiles/pyline.py>`_\n; where it grew tests and an ``optparse.OptionParser``; and is now\npromoted to a `GitHub`_ project with `ReadTheDocs`_ documentation,\ntests with tox and `Travis-CI`_, and a setup.py for `PyPi`_.\n\n\n.. _original Pyline recipe: https://code.activestate.com/recipes/437932-pyline-a-grep-like-sed-like-command-line-tool/\n.. _eval: https://docs.python.org/2/library/functions.html#eval\n.. _compile: https://docs.python.org/2/library/functions.html#compile\n.. _MapReduce: https://en.wikipedia.org/wiki/MapReduce\n\n\nWhat\n======\nPyline is an ordered `MapReduce`_ tool:\n\nInput Readers:\n    * stdin (default)\n    * file (``codecs.open(file, 'r', encoding='utf-8')``)\n\nMap Functions:\n    * Python module imports (``-m os``)\n    * Python regex pattern (``-r '\\(.*\\)'``)\n    * path library (``p`` from ``--pathpy`` OR ``--pathlib``)\n    * Python codeobj **eval** output transform:\n\n      .. code:: bash\n\n         ls | pyline -m os 'line and os.path.abspath(line.strip())'\n         ls | pyline -r '\\(.*\\)' 'rgx and (rgx.group(0), rgx.group(1)) or line'\n         ls | pyline -p 'p and p.abspath() or (\"# \".format(line))'\n\n         # With an extra outer loop to bind variables in\n         # (because (_p = p.abspath(); <codeobj>) does not work)\n         find $PWD | pyline --pathpy -m os -m collections --input-delim='/' \\\n             'p and [collections.OrderedDict((\n                     (\"p\", p),\n                     (\"_p\", _p),\n                     (\"_p.split()\", str(_p).split(os.path.sep)),\n                     (\"line.rstrip().split()\", line.rstrip().split(os.path.sep)),\n                     (\"l.split()\", l.split(os.path.sep)),\n                     (\"words\", words),\n                     (\"w\", w)))\n                 for _p in [p.abspath()]][0]' \\\n                -O json\n\nPartition Function:\n    None\n\nCompare Function:\n    ``Result(collections.namedtuple).__cmp__``\n\nReduce Functions:\n    ``bool()``,  ``sorted()``\n\nOutput Writers:\n    ``ResultWriter`` classes\n\n    .. code:: bash\n\n       pyline -O csv\n       pyline -O tsv\n       pyline -O json\n\n\nInstalling\n============\nInstall from `PyPi`_::\n\n    pip install pyline\n\nInstall from `GitHub`_ as editable (add a ``pyline.pth`` in ``site-packages``)::\n\n    pip install -e git+https://github.com/westurner/pyline#egg=pyline\n\n\nUsage\n=========\n\nPrint help::\n\n    pyline --help\n\nProcess::\n\n    # Print every line (null transform)\n    cat ~/.bashrc | pyline line\n    cat ~/.bashrc | pyline l\n\n    # Number every line\n    cat ~/.bashrc | pyline -n l\n\n    # Print every word (str.split(input-delim=None))\n    cat ~/.bashrc | pyline words\n    cat ~/.bashrc | pyline w\n\n    # Split into words and print (default: tab separated)\n    cat ~/.bashrc | pyline 'len(w) >= 2 and w[1] or \"?\"'\n\n    # Select the last word, dropping lines with no words\n    pyline -f ~/.bashrc 'w[-1:]'\n\n    # Regex matching with groups\n    cat ~/.bashrc | pyline -n -r '^#(.*)' 'rgx and rgx.group()'\n    cat ~/.bashrc | pyline -n -r '^#(.*)'\n\n    ## Original Examples\n    # Print out the first 20 characters of every line\n    tail access_log | pyline \"line[:20]\"\n\n    # Print just the URLs in the access log (seventh \"word\" in the line)\n    tail access_log | pyline \"words[6]\"\n\nWork with paths and files::\n\n    # List current directory files larger than 1 Kb\n    ls | pyline -m os \\\n      \"os.path.isfile(line) and os.stat(line).st_size > 1024 and line\"\n\n    # List current directory files larger than 1 Kb\n    #pip install path.py\n    ls | pyline -p 'p and p.size > 1024 and line'\n\n\nDocumentation\n==============\nhttps://pyline.readthedocs.org/en/latest/\n\n\nLicense\n========\n`Python Software License\n<https://github.com/westurner/pyline/blob/master/LICENSE.psf>`_\n\n\n.\n\nHistory\n=========\n\nrelease/0.3.20 (2020-10-02 20:51:19 -0400)\n++++++++++++++++++++++++++++++++++++++++++\n::\n\n   git log --reverse --pretty=format:'* %s [%h]' v0.3.19..release/0.3.20\n\n* MRG: Merge tag 'v0.3.19' into develop \\[fc2163e\\]\n* BLD: setup.py: 3 & 3.8 trove classifiers \\[6bf10e0\\]\n* RLS: pyline.py,setup.py: v0.3.20 \\[242a75a\\]\n\n\nv0.3.19 (2020-10-02 20:44:25 -0400)\n+++++++++++++++++++++++++++++++++++\n::\n\n   git log --reverse --pretty=format:'* %s [%h]' v0.3.18..v0.3.19\n\n* MRG: Merge tag 'v0.3.18' into develop \\[715618e\\]\n* DOC,BLD: HISTORY.rst: \\*manually\\* fix unquoted/unescaped reference \\[9146f39\\]\n* BLD: setup.cfg: \\[wheel\\] -> \\[bdist_wheel\\] \\[ba27bd5\\]\n* BLD: setup.py: long_description_content_type='text/x-rst' \\[07dc247\\]\n* RLS: pyline.py,setup.py: v0.3.19 \\[405f3f6\\]\n* DOC: HISTORY.rst: output from git-changelog.py \\[9088f29\\]\n* MRG: Merge branch 'release/0.3.19' \\[45110ec\\]\n\n\nv0.3.18 (2020-10-02 20:27:08 -0400)\n+++++++++++++++++++++++++++++++++++\n::\n\n   git log --reverse --pretty=format:'* %s [%h]' v0.3.17..v0.3.18\n\n* MRG: Merge tag 'v0.3.17' into develop \\[09f46ca\\]\n* REF,TST: Makefile, requirements-test: switch to pytest, require jinja2 for tests \\[999446d\\]\n* REF,TST: pyline.py, test_pyline.py: py3 \\[7365938\\]\n* WIP: __init__: change import for py3 (TODO: check py2 compatibility) \\[fe61a93\\]\n* BLD: requirements\\[-test\\]: remove wheel, -test -> reqs.txt \\[716a9b3\\]\n* REF,BUG: py3, pathpy import, rawstrs, only strip one newline when numbering lines \\[f7b3281\\]\n* BLD: tox.ini,.travis.yml: use tox-travis, envs=py37,py38 \\[a2a4a82\\]\n* DOC,BLD: docs/reqs,docs/conf: copyright, fix pyline import \\[036bac8\\]\n* BLD,TST: setup.py: setup.py:test calls pytest -v \\[ced27bb\\]\n* REF,BUG: pyline.py: when sorting, sort None as '' (and log extensively for other sort comparison TypeError exceptions) \\[9248acb\\]\n* MRG: #29 REF,TST,BLD,BUG: Python 3 Support \\[cb195b4\\]\n* REF: pyline.py: change shebang to \\`#!/usr/bin/env python\\` from python2 \\[5841704\\]\n* RLS: pyline.py,setup.py: v0.3.18 \\[a1072e2\\]\n* DOC: HISTORY.rst: output from git-changelog.py \\[c9f7f89\\]\n* MRG: Merge branch 'release/0.3.18' \\[579ccdf\\]\n\n\n\nv0.3.17 (2018-12-23 14:41:45 -0500)\n+++++++++++++++++++++++++++++++++++\n::\n\n   git log --reverse --pretty=format:'* %s [%h]' v0.3.16..v0.3.17\n\n* MRG: Merge tag 'v0.3.15' into develop \\[e1d7768\\]\n* MRG: Merge tag 'v0.3.16' into develop \\[3a6fec4\\]\n* DOC: pyline.py: typo: checkbok -> checkbox \\[a0917c5\\]\n* BUG,ENH: pyline.py: -p: strip one trailing '\\n' from line before parsing as path \\[47efdc9\\]\n* RLS: setup.py, pyline.py: v0.3.17 \\[9ef9d41\\]\n* BLD,DOC: Makefile: setversion, release docs \\[5cfc1e4\\]\n* MRG: Merge branch 'release/0.3.17' \\[618920a\\]\n\n\nv0.3.16 (2016-07-22 11:42:57 -0500)\n+++++++++++++++++++++++++++++++++++\n::\n\n   git log --reverse --pretty=format:'* %s [%h]' v0.3.15..v0.3.16\n\n* BUG: pyline.py: sys.argv\\[1:\\] (#7) \\[a548405\\]\n* RLS: pyline v0.3.16 \\[b17153a\\]\n* DOC: HISTORY.rst: git-changelog.py \\[9725f8d\\]\n* MRG: Merge branch 'hotfix/0.3.16' \\[c18d61c\\]\n\n\nv0.3.15 (2016-07-22 11:34:56 -0500)\n+++++++++++++++++++++++++++++++++++\n::\n\n   git log --reverse --pretty=format:'* %s [%h]' v0.3.14..v0.3.15\n\n* MRG: Merge tag 'v0.3.12' into develop \\[b4a3ec7\\]\n* BUG: include files named \\s+ with -p/--pathpy or --pathlib (fixes #24) \\[6c3f658\\]\n* MRG: Merge tag 'v0.3.13' into develop \\[1f2b64b\\]\n* MRG: Merge tag 'v0.3.14' into develop \\[b27731a\\]\n* ETC: pyline/__init__.py: __version__ = version = pyline.version \\[4065820\\]\n* RLS: setup.py, pyline.py: version='0.3.15' \\[a83ad49\\]\n* DOC: HISTORY.rst: git-changelog.py -r \"release/0.3.15\" --hdr=\"+\"\\` \\[cfd26be\\]\n* MRG: Merge branch 'release/0.3.15' \\[2225fd6\\]\n\n\nv0.3.14 (2016-07-22 11:27:03 -0500)\n+++++++++++++++++++++++++++++++++++\n::\n\n   git log --reverse --pretty=format:'* %s [%h]' v0.3.13..v0.3.14\n\n* BUG: pyline/__init__.py: remove untested package-level __main__ function \\[91e1f5f\\]\n* RLS: setup.py, __init__.py, pyline.py: v0.3.14 (in 3 places) \\[3186eb5\\]\n* MRG: Merge branch 'hotfix/0.3.14' \\[527df85\\]\n\n\nv0.3.13 (2016-07-22 11:16:44 -0500)\n+++++++++++++++++++++++++++++++++++\n::\n\n   git log --reverse --pretty=format:'* %s [%h]' v0.3.12..v0.3.13\n\n* BUG,TST: pyline/pyline.py: console_entrypoint -> pyline.pyline:main_entrypoint (see: #7) \\[a16570e\\]\n* MRG: Merge branch 'hotfix/0.3.13' \\[29b64ef\\]\n\n\nv0.3.12 (2016-02-16 16:07:18 -0600)\n+++++++++++++++++++++++++++++++++++\n::\n\n   git log --reverse --pretty=format:'* %s [%h]' v0.3.11..v0.3.12\n\n* MRG: Merge tag 'v0.3.11' into develop \\[98adc78\\]\n* DOC: README.rst: add \\.. contents:: \\[4416581\\]\n* TST,UBY: pyline.py, scripts/pyline.py: symlinks to pyline/pyline.py \\[2fda52e\\]\n* UBY,BUG: pyline.py: loglevels \\[WARN\\], -v/--verbose/DEBUG, -q/--quiet/ERROR \\[07fbc09\\]\n* RLS,DOC: setup.py,pyline.py: version 0.3.12 \\[0cb05f3\\]\n* DOC: HISTORY.rst: git-changelog.py --hdr=+ --rev 'release/0.3.12' \\| pbcopy \\[3b4d775\\]\n* MRG: Merge branch 'release/0.3.12' \\[29332e2\\]\n\n\nv0.3.11 (2016-02-14 22:29:55 -0600)\n+++++++++++++++++++++++++++++++++++\n::\n\n   git log --reverse --pretty=format:'* %s [%h]' v0.3.10..v0.3.11\n\n* MRG: Merge tag 'v0.3.10' into develop \\[ed296ea\\]\n* BLD: tox.ini: testenv/deps/jinja2 \\[1a6c2f5\\]\n* BLD: tox.ini, requirements.txt: add jinja2 to requirements.txt \\[e267a1e\\]\n* RLS,DOC: setup.py,pyline.py: version 0.3.11 \\[21bd6e9\\]\n* DOC: HISTORY.rst: git-changelog.py --hdr=+ --rev 'release/0.3.11' \\| pbcopy \\[efc24ce\\]\n* MRG: Merge branch 'release/0.3.11' \\[9c05df0\\]\n\n\nv0.3.10 (2016-02-14 21:56:36 -0600)\n+++++++++++++++++++++++++++++++++++\n::\n\n   git log --reverse --pretty=format:'* %s [%h]' v0.3.9..v0.3.10\n\n* MRG: Merge tag 'v0.3.9' into develop \\[f7c8a16\\]\n* BUG,UBY: pyline.py: logging config (default INFO, -q/--quiet, -v/--verbose (DEBUG)) \\[8a060ab\\]\n* UBY,DOC: pyline.py: log.info(('pyline.version', __version__)) at startup \\[da1e883\\]\n* BUG,UBY: pyline.py: log.info(('argv', argv)) \\[ede1d5e\\]\n* BUG,REF: opts\\['cmd'\\], main->(int, results\\[\\]), log opts after all config \\[3cf9585\\]\n* UBY: pyline.py: log.info(('_rgx', _regexstr)) \\[02bd234\\]\n* RLS,DOC: setup.py,pyline.py: version 0.3.10 \\[ea6a1fd\\]\n* DOC: HISTORY.rst: git-changelog.py --hdr=+ --rev 'release/0.3.10' \\| pbcopy \\[5266662\\]\n* MRG: Merge branch 'release/0.3.10' \\[aa2529a\\]\n\n\nv0.3.9 (2016-02-14 17:58:36 -0600)\n++++++++++++++++++++++++++++++++++\n::\n\n   git log --reverse --pretty=format:'* %s [%h]' v0.3.8..v0.3.9\n\n* ENH: pyline.py: --version arg \\[a38bf5a\\]\n* MRG: Merge tag 'v0.3.8' into develop \\[85cd8e9\\]\n* BUG,REF: pyline.py: output-filetype/-> output-format \\[fbcd9e2\\]\n* BUG: pyline.py: only print version when opts.get('version') \\[ef8ac20\\]\n* RLS,DOC: setup.py,pyline.py: version 0.3.9 \\[5f2c4a6\\]\n* DOC: HISTORY.rst: git-changelog.py --hdr=+ --rev 'release/0.3.9' \\| pbcopy \\[ce95bae\\]\n* MRG: Merge branch 'release/0.3.9' \\[38e0393\\]\n\n\nv0.3.8 (2016-02-14 17:34:08 -0600)\n++++++++++++++++++++++++++++++++++\n::\n\n   git log --reverse --pretty=format:'* %s [%h]' v0.3.7..v0.3.8\n\n* MRG: Merge tag 'v0.3.7' into develop \\[0cd0e3c\\]\n* BUG,ENH: fix CSV header row; add -O jinja:template=path.jinja support (#1,) \\[d5fe67b\\]\n* ENH: pyline.py: --version arg \\[818fc1d\\]\n* RLS: setup.py, pyline.py: version 0.3.8 \\[245214d\\]\n* DOC: HISTORY.rst: git-changelog.py --hdr=+ --rev 'release/0.3.8' \\| pbcopy \\[983b535\\]\n* DOC: HISTORY.rst: git-changelog.py --hdr=+ --rev 'release/0.3.8' \\| pbcopy \\[7b65d8e\\]\n* MRG: Merge branch 'release/0.3.8' \\[2f5f249\\]\n\n\nv0.3.7 (2016-02-12 20:04:39 -0600)\n++++++++++++++++++++++++++++++++++\n::\n\n   git log --reverse --pretty=format:'* %s [%h]' v0.3.6..v0.3.7\n\n* Merge tag 'v0.3.5' into develop \\[8c5de0a\\]\n* ENH: pyline.py: main(args=None, iterable=None, output=None) \\[dd490e1\\]\n* UBY: pyline.py: -O chk == -O checkbox \\[3aa96ce\\]\n* UBY: pyline.py: l = line = o = obj \\[3aa9a81\\]\n* DOC: pyline.py: -f/--in/--input-file, -o/--out/--output-file \\[bcc9eff\\]\n* TST: requirements-test.txt: nose, nose-parameterized, nose-progressive \\[213e0c0\\]\n* BUG: pyline: collections.OrderedDict, return 0 \\[5fd1114\\]\n* DOC: setup.py: install_requires=\\[\\] \\[a41bf30\\]\n* TST,BUG,CLN: test_pyline.py: chk, main(_args), docstrings, #opts._output.close() \\[0254f30\\]\n* Merge tag 'v0.3.6' into develop \\[f46f90c\\]\n* DOC,REF: pyline.py: type_func->typefunc, docstrings \\[08c8d9c\\]\n* UBY: pyline.py: \\[--input-delim-split-max\\|--max\\|--max-split\\] \\[b509726\\]\n* REF: pyline.py: ResultWriter.get_writer ValueError, expand \\[143c5f7\\]\n* DOC: pyline.py: usage docstring, main docstring \\[bc44747\\]\n* TST: tests/test_pylinepy: more tests of sorting \\[b60750a\\]\n* DOC: pyline.py: docstrings \\[89ea5c7\\]\n* BLD,TST,BUG: Makefile, setup.py, pyline.py, test_pyline.py: pyline.main does sorting, kwargs, opts obj \\[e80cde6\\]\n* TST,REF: split to SequenceTestCase, LoggingTestCase, Test\\* \\[62ff39b\\]\n* TST: tests/test_pyline.py: TestPylinePyline.test_30_pyline_codefunc \\[49928d5\\]\n* Merge branch 'feature/split_tests' into develop \\[ef63a18\\]\n* RLS,DOC: README.rst, setup.py, pyline.py 0.3.7 description \\[9fc262e\\]\n* Merge branch 'release/0.3.7' \\[07b00b2\\]\n\n\nv0.3.6 (2015-12-21 04:17:23 -0600)\n++++++++++++++++++++++++++++++++++\n::\n\n   git log --reverse --pretty=format:'* %s [%h]' v0.3.5..v0.3.6\n\n* BUG: pyline.py: #!/usr/bin/env python2 \\[9729816\\]\n* RLS: HISTORY.rst, __init__.py, pyline.py, setup.py: __version__ = '0.3.6' \\[a463d39\\]\n* Merge branch 'hotfix/0.3.6' \\[445c089\\]\n\n\nv0.3.5 (2015-05-24 20:58:39 -0500)\n++++++++++++++++++++++++++++++++++\n::\n\n   git log --reverse --pretty=format:'* %s [%h]' v0.3.4..v0.3.5\n\n* Merge tag 'v0.3.4' into develop \\[3ec1391\\]\n* CLN: patchheader: rm \\[c9f6304\\]\n* ENH: pyline.py: add a codefunc() kwarg \\[be8dcc8\\]\n* BUG,DOC: pyline.py: set default regex_options to '', optparse helpstrings \\[fa9e9cb\\]\n* DOC: pyline.py: docstrings (calling a function, stdlib/vendoring) \\[ee22e2c\\]\n* ENH,TST: pyline.py: add a codefunc() kwarg \\[91aa0a8\\]\n* RLS: setup.py, __init__, HISTORY: v0.3.5, git log --format='\\* %s \\[%h\\]' master..develop \\[78f3ad9\\]\n* Merge branch 'release/0.3.5' \\[065797d\\]\n\n\nv0.3.4 (2015-04-25 06:48:47 -0500)\n++++++++++++++++++++++++++++++++++\n::\n\n   git log --reverse --pretty=format:'* %s [%h]' v0.3.3..v0.3.4\n\n* Merge tag 'v0.3.3' into develop \\[e630114\\]\n* RLS: HISTORY.rst, __init__.py, setup.py: v0.3.4 \\[e448183\\]\n* Merge branch 'release/0.3.4' \\[612228d\\]\n\n\nv0.3.3 (2015-04-25 06:43:37 -0500)\n++++++++++++++++++++++++++++++++++\n::\n\n   git log --reverse --pretty=format:'* %s [%h]' v0.3.2..v0.3.3\n\n* Merge tag 'v0.3.2' into develop \\[061840b\\]\n* BUG: pyline.pyline.__main__ \\[db71796\\]\n* DOC,BLD,CLN: Makefile: sphinx-apidoc --no-toc \\[209bff8\\]\n* TST,CLN: pyline.py: remote -t/--test option \\[2629924\\]\n* DOC,CLN: modules.rst: remove generated modules.rst \\[abdc00d\\]\n* BUG, ENH, BUG, TST: \\[b5a21e7\\]\n* RLS: __init__.py, setup.py: v0.3.3 \\[eb81129\\]\n* BLD: Makefile: release (dist), twine \\[7e602c8\\]\n* Merge branch 'release/0.3.3' \\[c0df4ab\\]\n\n\nv0.3.2 (2014-11-30 19:49:42 -0600)\n++++++++++++++++++++++++++++++++++\n::\n\n   git log --reverse --pretty=format:'* %s [%h]' v0.3.1..v0.3.2\n\n* Merge tag 'v0.3.1' into develop \\[a3f8c1c\\]\n* ENH: Add pyline.__main__ (pyline.pyline.main) for 'python -m pyline' \\[1bd5e10\\]\n* DOC: README.rst \\[a26d97a\\]\n* DOC: HISTORY.rst: link to Source: http://code.activestate.com/recipes/437932-pyline-a-grep-like-sed-like-command-line-tool/ \\[5871727\\]\n* DOC: usage.rst: add :shell: option to 'pyline --help' output \\[d1f32de\\]\n* BUG: pyline/__init__.py: Set pyline.pyline.__main__ correctly \\[49ae891\\]\n* DOC: pyline/pyline.py: docstrings, import path as pathpy \\[178af4e\\]\n* RLS: HISTORY.txt, pyline/__init__.py, setup.py: set version to v0.3.2 \\[6c547e4\\]\n* Merge branch 'release/0.3.2' \\[10b84f5\\]\n\n\nv0.3.1 (2014-10-27 07:53:27 -0500)\n++++++++++++++++++++++++++++++++++\n::\n\n   git log --reverse --pretty=format:'* %s [%h]' v0.3.0..v0.3.1\n\n* Merge tag 'v0.3.0' into develop \\[35a380b\\]\n* DOC: README.rst \\[f803665\\]\n* Merge branch 'hotfix/readme-travis-link' \\[35f7b44\\]\n* Merge tag 'vreadme-travis-link' into develop \\[6849887\\]\n* DOC: setup.py version 0.3.1 \\[a7fae60\\]\n* Merge branch 'release/0.3.1' \\[276d16b\\]\n\n\nv0.3.0 (2014-10-27 07:34:58 -0500)\n++++++++++++++++++++++++++++++++++\n::\n\n   git log --reverse --pretty=format:'* %s [%h]' v0.2.0..v0.3.0\n\n* Added tag v0.2.0 for changeset cddc5c513cd2 \\[c53a725\\]\n* DOC: Update README.rst: typo -output-filetype -> --output-filetype \\[6897954\\]\n* DOC: Update README.rst: update 'Features' \\[548c426\\]\n* DOC: Update README.rst: update 'Features' \\[273b475\\]\n* DOC: Update README.rst: update 'Features' \\[254ed95\\]\n* DOC: Update README.rst add additional link to docs \\[8415a7c\\]\n* BLD,DOC: Update requirements.txt: add ../ (from ./docs) as editable \\[d94ff0e\\]\n* Revert \"BLD,DOC: Update requirements.txt: add ../ (from ./docs) as editable\" \\[fa062b8\\]\n* DOC: program-output:: -> command-output:: \\[984b8a6\\]\n* ENH,BUG,CLN: #10, #12, #13 \\[a75d2f9\\]\n* CLN: remove _import_path_module \\[0cc9bb9\\]\n* RLS: pyline v0.3.0 \\[14941af\\]\n* Merge branch 'release/0.3.0' \\[53609dc\\]\n\n\nv0.2.0 (2014-08-24 14:44:31 -0500)\n++++++++++++++++++++++++++++++++++\n::\n\n   git log --reverse --pretty=format:'* %s [%h]' v0.1.5..v0.2.0\n\n* Added tag v0.1.5 for changeset 8cd9c44a80ab \\[4bb3fc7\\]\n* BLD: Add docs for 'make release'; remove bdist_wheel upload \\[e76b592\\]\n* BLD: Add docs for 'make release': HISTORY.rst \\[e5b3e9a\\]\n* ENH: Add checkbox output formatter (closes #5) \\[46b7177\\]\n* BUG: add NullHandler to logger (closes #6) \\[a9fac28\\]\n* RLS: Release v0.2.0 \\[9ef4a25\\]\n* Added tag v0.2.0 for changeset f510a75a37a8 \\[38c7eeb\\]\n\n\nv0.1.5 (2014-05-12 20:59:34 -0500)\n++++++++++++++++++++++++++++++++++\n::\n\n   git log --reverse --pretty=format:'* %s [%h]' v0.1.4..v0.1.5\n\n* Added tag v0.1.4 for changeset c79a1068cb1c \\[0abdc5e\\]\n* DOC: setup.py keywords and classifiers \\[9079d03\\]\n* DOC: Update HISTORY.rst: 0.1.0 -> 0.1.5 \\[9bfe2a5\\]\n* BLD: bump version to v0.1.5 \\[0af9381\\]\n\n\nv0.1.4 (2014-05-12 20:42:52 -0500)\n++++++++++++++++++++++++++++++++++\n::\n\n   git log --reverse --pretty=format:'* %s [%h]' v0.1.3..v0.1.4\n\n* Added tag v0.1.3 for changeset d49705961509 \\[4f8cfec\\]\n* DOC: correct license and download_url in setup.py \\[49ea953\\]\n\n\nv0.1.3 (2014-05-12 20:30:47 -0500)\n++++++++++++++++++++++++++++++++++\n::\n\n   git log --reverse --pretty=format:'* %s [%h]' v0.1.2..v0.1.3\n\n* Added tag v0.1.2 for changeset 09cca8fa5555 \\[828d223\\]\n* DOC: missing newline in description \\[63a442c\\]\n* DOC: version bump, setup description \\[53ad0f4\\]\n\n\nv0.1.2 (2014-05-12 20:24:26 -0500)\n++++++++++++++++++++++++++++++++++\n::\n\n   git log --reverse --pretty=format:'* %s [%h]' v0.1.1..v0.1.2\n\n* Added tag v0.1.1 for changeset 13ad121ea966 \\[5727951\\]\n* BLD: add pathlib and path.py to requirements.txt \\[aa6dda7\\]\n* DOC,BLD,BUG: setup.py build_long_description, file handles \\[f7a73c1\\]\n* DOC: README.rst: remove includes \\[2d2bd6f\\]\n* DOC: version bump, setup description \\[e920ff2\\]\n\n\nv0.1.1 (2014-05-12 19:41:54 -0500)\n++++++++++++++++++++++++++++++++++\n::\n\n   git log --reverse --pretty=format:'* %s [%h]' v0.1.0..v0.1.1\n\n* DOC,BLD: Update AUTHORS.rst, HISTORY.rst, README.rst, docs/license.rst \\[7b087c8\\]\n* CLN: pyline rename arg\\[0\\] _input -> iterable \\[7040271\\]\n* BUG: default command in -- ls \\| pyline -p  \" p = path = Path(line.strip()) \\[30dce3a\\]\n* LOG: log.info(cmd) .\\.. after shell parsing, exception \\[c449765\\]\n* CLN: pep8 test command kwargs formatting \\[993c65a\\]\n* DOC: README.rst; ReST doesn't seem to like \\`path.py\\`_ \\.. _path.py:, links \\[209ecb5\\]\n* TST: Update setup.py test command (runtests -v ./tests/test\\*.py) \\[bc84652\\]\n* TST: tox.ini: make html rather than sphinx-build \\[c96b3b0\\]\n* CLN: factor out _import_pathmodule and get_path_module \\[d0aebfb\\]\n* TST: move tests from pyline.py to tests/test_pyline.py \\[477fbb4\\]\n* BUG: file handles (was causing tests to fail silently) \\[80e84b6\\]\n* CLN: move optparse things into get_option_parser() \\[723a8b7\\]\n* BLD: Release 0.1.1 \\[3f9f56f\\]\n\n\nv0.1.0 (2014-05-12 04:03:15 -0500)\n++++++++++++++++++++++++++++++++++\n::\n\n   git log --reverse --pretty=format:'* %s [%h]' b1303ba..v0.1.0\n\n* CLN: Update .gitignore and .hgignore \\[0d07ad1\\]\n* DOC: Update README.rst: comment out unconfigured badges \\[b0e0fc1\\]\n* ENH: Add pyline script from https://github.com/westurner/dotfiles/blob/e7f766f3/src/dotfiles/pyline.py \\[ce2dba8\\]\n* BLD,TST: Add py.test runtests.py and setup.py:PyTestCommand \\[953edbe\\]\n* BUG: try/except import StringIO (Python 3 compatibility) \\[97d5781\\]\n* BLD: remove py33 section from tox.ini for now \\[b103587\\]\n* BLD: remove py33 section from tox.ini for now \\[2ff4a77\\]\n* BLD: Update tox.ini, .travis.yml, reqs, docs/conf \\[13b5487\\]\n* CLN: pyline cleanup \\[9724f8e\\]\n* CLN: update .hgignore \\[59196b7\\]\n\n\n\n\n0.0.1 (Unreleased)\n+++++++++++++++++++\n| Source: http://code.activestate.com/recipes/437932-pyline-a-grep-like-sed-like-command-line-tool/\n\n* Updated 2012.11.17, Wes Turner\n* Updated 2005.07.21, thanks to Jacob Oscarson\n* Updated 2006.03.30, thanks to Mark Eichin\n\n\n\n=======\nCredits\n=======\n\n* Graham Fawcett  \n* Jacob Oscarson\n* Mark Eichin\n* Wes Turner -- https://github.com/westurner\n\n",
    "bugtrack_url": null,
    "license": "PSF",
    "summary": "Pyline is a grep-like, sed-like, awk-like command-line tool for line-based text processing in Python.",
    "version": "0.3.21",
    "project_urls": {
        "Download": "https://github.com/westurner/pyline/releases",
        "Homepage": "https://github.com/westurner/pyline"
    },
    "split_keywords": [
        "pyline",
        "sed",
        "grep"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "bfb045acee65d8f70ebfe3b0bc2691d0b6b2b200873d9cf7500d9d5e5a4879ea",
                "md5": "aee6e6db52c0597cc0b7ff82c8f1a3e2",
                "sha256": "bde8101012e00b9ec7b0aba6e5982379036e6bd085b63b27fe0145942ceb7b9e"
            },
            "downloads": -1,
            "filename": "pyline-0.3.21-py2.py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "aee6e6db52c0597cc0b7ff82c8f1a3e2",
            "packagetype": "bdist_wheel",
            "python_version": "py2.py3",
            "requires_python": null,
            "size": 22953,
            "upload_time": "2024-07-16T04:46:13",
            "upload_time_iso_8601": "2024-07-16T04:46:13.431039Z",
            "url": "https://files.pythonhosted.org/packages/bf/b0/45acee65d8f70ebfe3b0bc2691d0b6b2b200873d9cf7500d9d5e5a4879ea/pyline-0.3.21-py2.py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "9df84e6dd7a4a8c2fa43d4bb7047012afa108c293b6a8c86f1c248ad9b6246cb",
                "md5": "db9e7b5b4aef08ca853d1b13d88ad234",
                "sha256": "21c9f3180a5f9999929174467df18f172b0bc3262f8ff0d460ffb9aed71e9c73"
            },
            "downloads": -1,
            "filename": "pyline-0.3.21.tar.gz",
            "has_sig": false,
            "md5_digest": "db9e7b5b4aef08ca853d1b13d88ad234",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 48502,
            "upload_time": "2024-07-16T04:46:15",
            "upload_time_iso_8601": "2024-07-16T04:46:15.189084Z",
            "url": "https://files.pythonhosted.org/packages/9d/f8/4e6dd7a4a8c2fa43d4bb7047012afa108c293b6a8c86f1c248ad9b6246cb/pyline-0.3.21.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-07-16 04:46:15",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "westurner",
    "github_project": "pyline",
    "travis_ci": true,
    "coveralls": false,
    "github_actions": false,
    "requirements": [],
    "tox": true,
    "lcname": "pyline"
}
        
Elapsed time: 0.32514s