Package: ffs
===ffs===Python Filesystem Api helpers.. image:: https://secure.travis-ci.org/davidmiller/ffs.png?branch=master:alt: Build Status:target: https://secure.travis-ci.org/davidmiller/ffsDealing with the filesystem in Python is clunky. Those of us who have an almostemotional engagement with the elegance of the APIs we use, feel that it shouldn'thave to be this way. Not in Python.Rationale=========This dance started waaay back. Frist there was Jason Orendorff's path.py, backin 2004. Then in 05-06 Reinhold Birkenfeld and Björn Lindqvist tweaked it forPEP 355, which tried to get something like that into the Standard Library. Theattempt failed miserably. Then in 2007 there was Mike Orr's Unipath, which addeda test suite and made it setuptoolsable.Phew.Question (short): So why are you doing it again?Question (by implication): The idea has been solidly rejected by python-dev, withstrong objections from that community, and there's already a 3rd party module thatdoes a pretty good job of this stuff for those people who like This Kind Of Thing.Why should I care?Answer (short): The name is way more fun.Answer (less facetiously): The name is way more fun. And four less characters to type.And you know, if you're going to do something that's arguably a Bad Idea (TM) thatgoes against the One True Way, you have to at leas market it properly, and in my lifeat least, "FFS Python" is already a well established phrase.Answer (oh, right, I just looked up what facetious means):This kind of thing is about APIs. And the APIs that are out there, could *still bebetter*. In fact, the APIs *were* better before all the operator overloading got takenout in a misguided attempt to get the thing into the standard library.Unipath is self-proclaimed stable since 2007, and hasn't even seen a bugfix releasesince 2009. It's used in production by Real People's software that does Real Work.Right now, I'm not even sure what the *right* API even is, yet alone in a position toattempt to get patches into a package that's had a stable API for 5 years. That'sStick-A-Fork-In-It-It's-Done-style stability.The api for the Path class in ffs *Will* change, without depreciation warnings, onminor point releases. Hell, this thing's only *on* PyPi at this stage so I can pull itinto a CI system without having to maintain my own cheeseshop.`Docs`_`Source`_`Issues`_.. _Docs: http://www.deadpansincerity.com/docs/ffs.. _Source: https://github.com/davidmiller/ffs.. _Issues: https://github.com/davidmiller/ffs/issuesHistory-------0.0.7.7 ()+++++++++++++++++++++Adds .open() to HTTPPath to return file like objectsAdds .checksum() to Path.Adds .as_zip to base leafbranch pathAdds path argument to newfile0.0.7.6 (Feb 13 2014)+++++++++++++++++++++Adds minimal archive support to contrib.0.0.7.5+++++++Fixes bugs with CSV header rows when CSV rows have trailing commas/periods.Uses simplejson when available.Add the .mimetype property to Path objects0.0.7.4 (May 02 2013)+++++++++++++++++++++Add Path.here() for a nicer syntax for the directory of the calling file.0.0.7.3 (Nov 19 2012)+++++++++++++++++++++Add Path.newfile() and Path.newdir() - non destructive versions of thecontextmanager tempfile() && tempath()0.0.7.2 (Nov 14 2012)+++++++++++++++++++++Add __version__ to main module0.0.7.1 (Oct 12 2012)+++++++++++++++++++++Add glob patterns to Path().ls()Add a header argument to Path.csv() to autocreate CSV row classes0.0.7 (Oct 11 2012)+++++++++++++++++++Fix bug with Path.ls() so that children are returned as Path objectsrelative to the parent.Expose Path.decode (Useful when using Paths as Django template directories)0.0.6 (Oct 09 2012)+++++++++++++++++++Add ffs.contrib.mold for templating helpers.0.0.5 (Sep 22 2012)+++++++++++++++++++Add a mv() method to Path.Re-enable rstrip(). (Stdlib uses it e.g. shutil._basename)Catch the case where we call Path(Path('foo')) and get recursion errors.Add the formats module for helpers with Fileformats.Frist entry is the Indeterminate CSV class (ducktypes as both a reader and writer untilyou do something deterministic)xAdd a csv contextmanager to PathDiskFilesystem.open() implicitly calls expanduserInitial implementation of a HTTP path system0.0.4.1 (Sep 12 2012)+++++++++++++++++++++Copying:Add a GNU cp clone to nix.Add the --recursive argument to the filesystem cp implementationAdd a cp(target) method to the Path classTouching:When touching a subpath where some parents do not exist, Path().touch('this/that/theother.txt')should create them and assume the caller knows their own mind. This is consistent with thebehaviour of << and open().0.0.3 (Sep 11 2012)+++++++++++++++++++Reduce the level of String duck-typing to sane levels. Although we do inheritfrom str, we bail with AttributeErrors when we think that we're being usedfor something absurd - e.g. what's the sane use of Path().splitlines() ?Overload the / operator to be equivalent to path addition.Add a mkdir() method to Path. This (and now also touch()) take starargs ofchild nodes to the current Path, assuming it is a directory. This allows creatingmany directories with one call::>>> p = Path(rpmroot)>>> p.mkdir('BUILD', 'SOURCES', 'SPECS', 'RPM', 'SRPMS')Maintain immutability for in-place append and update tests to catch this regression.Add a Filesystem abstraction layer that allows us to use *nix semantics andmetaphors with anything that uses Path-like structures.0.0.2 (Aug 21 2012)+++++++++++++++++++Added the Path class - string-like with shortcuts!nix.cd doubles as a function and a contextmanagerMany extra aliases in ffs.nix0.0.1 (Jul 20 2012)+++++++++++++++++++Initial release. Minimal useful feature set. Known incomplete implementations.