[svn r37752] Added some more code examples.
--HG-- branch : trunk
This commit is contained in:
		
							parent
							
								
									f21df1b455
								
							
						
					
					
						commit
						a2359e0554
					
				|  | @ -8,7 +8,8 @@ py.path | ||||||
| The 'py' lib provides a uniform high-level api to deal with filesystems | The 'py' lib provides a uniform high-level api to deal with filesystems | ||||||
| and filesystem-like interfaces: :api:`py.path`.  It aims to offer a central | and filesystem-like interfaces: :api:`py.path`.  It aims to offer a central | ||||||
| object to fs-like object trees (reading from and writing to files, adding | object to fs-like object trees (reading from and writing to files, adding | ||||||
| files/directories, examining the types and structure, etc.).  | files/directories, examining the types and structure, etc.), and out-of-the-box | ||||||
|  | provides a number of implementations of this API. | ||||||
| 
 | 
 | ||||||
| Path implementations provided by :api:`py.path` | Path implementations provided by :api:`py.path` | ||||||
| =============================================== | =============================================== | ||||||
|  | @ -34,6 +35,9 @@ a :api:`py.path.local` object for us (which wraps a directory):: | ||||||
|   True |   True | ||||||
|   >>> foopath.read() |   >>> foopath.read() | ||||||
|   'bar' |   'bar' | ||||||
|  |   >>> foofile = foopath.open() # return a 'real' file object | ||||||
|  |   >>> foofile.read(1) | ||||||
|  |   'b' | ||||||
| 
 | 
 | ||||||
| :api:`py.path.svnurl` and :api:`py.path.svnwc` | :api:`py.path.svnurl` and :api:`py.path.svnwc` | ||||||
| ---------------------------------------------- | ---------------------------------------------- | ||||||
|  | @ -74,32 +78,103 @@ for many use cases and allowing to transparently switch the | ||||||
| path object within an application (e.g. from "local" to "svnwc").  | path object within an application (e.g. from "local" to "svnwc").  | ||||||
| The common set includes functions such as `path.read()` to read all data  | The common set includes functions such as `path.read()` to read all data  | ||||||
| from a file, `path.write()` to write data, `path.listdir()` to get a list  | from a file, `path.write()` to write data, `path.listdir()` to get a list  | ||||||
| of directory entries, and `path.check()` to check if a node exists | of directory entries, `path.check()` to check if a node exists | ||||||
| and is of a particular type, `path.join()` to get | and is of a particular type, `path.join()` to get | ||||||
| to a (grand)child, `path.visit()` to recursively walk through a node's | to a (grand)child, `path.visit()` to recursively walk through a node's | ||||||
| children, etc.  Only things that are not common on all filesystems, such  | children, etc.  Only things that are not common on 'normal' filesystems (yet),  | ||||||
| as handling metadata (e.g. the subversion "properties") require | such as handling metadata (e.g. the Subversion "properties") require | ||||||
| using specific APIs.  | using specific APIs.  | ||||||
| 
 | 
 | ||||||
| Examples | Examples | ||||||
| --------------------------------- | --------------------------------- | ||||||
| 
 | 
 | ||||||
|  | A quick 'cookbook' of small examples that will be useful 'in real life', | ||||||
|  | which also presents parts of the 'common' API, and shows some non-common | ||||||
|  | methods: | ||||||
|  | 
 | ||||||
| Searching `.txt` files  | Searching `.txt` files  | ||||||
| +++++++++++++++++++++++++++++++++++++ | +++++++++++++++++++++++++++++++++++++ | ||||||
| 
 | 
 | ||||||
| XXX example | Search for a particular string inside all files with a .txt extension in a | ||||||
|  | specific directory. | ||||||
| 
 | 
 | ||||||
|  | :: | ||||||
| 
 | 
 | ||||||
| Joining and checking path types  |   >>> dirpath = temppath.ensure('testdir', dir=True) | ||||||
| +++++++++++++++++++++++++++++++++++++ |   >>> dirpath.join('textfile1.txt').write('foo bar baz') | ||||||
|  |   >>> dirpath.join('textfile2.txt').write('frob bar spam eggs') | ||||||
|  |   >>> subdir = dirpath.ensure('subdir', dir=True) | ||||||
|  |   >>> subdir.join('textfile1.txt').write('foo baz') | ||||||
|  |   >>> subdir.join('textfile2.txt').write('spam eggs spam foo bar spam') | ||||||
|  |   >>> results = [] | ||||||
|  |   >>> for fpath in dirpath.visit('*.txt'): | ||||||
|  |   ...   if 'bar' in fpath.read(): | ||||||
|  |   ...     results.append(fpath.relto(dirpath)) | ||||||
|  |   >>> results | ||||||
|  |   ['textfile1.txt', 'textfile2.txt', 'subdir/textfile2.txt'] | ||||||
| 
 | 
 | ||||||
| XXX example | Joining path types  | ||||||
|  | ++++++++++++++++++++ | ||||||
| 
 | 
 | ||||||
| setting svn-properties  | This example shows the :api:`py.path` features to deal with actual paths | ||||||
|  | (strings). Note that the filesystem is never touched, all operations are | ||||||
|  | performed on a string level (so the paths don't have to exist, either):: | ||||||
|  | 
 | ||||||
|  |   >>> p1 = py.path.local('/foo/bar') | ||||||
|  |   >>> p2 = p1.join('baz/qux') | ||||||
|  |   >>> p2.strpath | ||||||
|  |   '/foo/bar/baz/qux' | ||||||
|  |   >>> p2.relto(p1) | ||||||
|  |   'baz/qux' | ||||||
|  |   >>> p3 = p1 / 'baz/qux' # the / operator allows joining, too | ||||||
|  |   >>> p2 == p3 | ||||||
|  |   True | ||||||
|  | 
 | ||||||
|  | This should be possible on every implementation of :api:`py.path`, so | ||||||
|  | regardless of whether the implementation wraps a UNIX filesystem, a Windows | ||||||
|  | one, or a database or object tree, these functions should be available (each | ||||||
|  | with their own notion of path seperators and dealing with conversions, etc.). | ||||||
|  | 
 | ||||||
|  | Checking path types | ||||||
|  | +++++++++++++++++++++ | ||||||
|  | 
 | ||||||
|  | Now we will show a bit about the powerful 'check()' method on paths, which | ||||||
|  | allows you to check whether a file exists, what type it is, etc.:: | ||||||
|  | 
 | ||||||
|  |   >>> file1 = temppath.join('file1') | ||||||
|  |   >>> file1.check() # does it exist? | ||||||
|  |   False | ||||||
|  |   >>> file1 = file1.ensure(file=True) # 'touch' the file | ||||||
|  |   >>> file1.check() | ||||||
|  |   True | ||||||
|  |   >>> file1.check(dir=True) # is it a dir? | ||||||
|  |   False | ||||||
|  |   >>> file1.check(file=True) # or a file? | ||||||
|  |   True | ||||||
|  |   >>> file1.check(ext='.txt') # check the extension | ||||||
|  |   False | ||||||
|  |   >>> textfile = temppath.ensure('text.txt', file=True) | ||||||
|  |   >>> textfile.check(ext='.txt') | ||||||
|  |   True | ||||||
|  |   >>> file1.check(basename='file1') # we can use all the path's properties here | ||||||
|  |   True | ||||||
|  | 
 | ||||||
|  | Setting svn-properties  | ||||||
| +++++++++++++++++++++++++++++++++++++++ | +++++++++++++++++++++++++++++++++++++++ | ||||||
| 
 | 
 | ||||||
| XXX example | As an example of 'uncommon' methods, we'll show how to read and write | ||||||
|  | properties in an :api:`py.path.svnwc` instance:: | ||||||
| 
 | 
 | ||||||
|  |   >>> wc.propget('foo') | ||||||
|  |   '' | ||||||
|  |   >>> wc.propset('foo', 'bar') | ||||||
|  |   >>> wc.propget('foo') | ||||||
|  |   'bar' | ||||||
|  |   >>> len(wc.status().prop_modified) # our own props | ||||||
|  |   1 | ||||||
|  |   >>> msg = wc.revert() # roll back our changes | ||||||
|  |   >>> len(wc.status().prop_modified) | ||||||
|  |   0 | ||||||
| 
 | 
 | ||||||
| XXX more examples (look at API) | XXX more examples (look at API) | ||||||
| +++++++++++++++++++++++++++++++++++++++ | +++++++++++++++++++++++++++++++++++++++ | ||||||
|  | @ -117,7 +192,6 @@ is a bit fragile across versions and locales | ||||||
| 
 | 
 | ||||||
| XXX note more here | XXX note more here | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| Future plans | Future plans | ||||||
| ============ | ============ | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue