Intuitive Subversion wrapper.
Project description
|donate|
------------
Introduction
------------
*svn* is a simple Subversion library for Python. I wrote it so that there could be a lightweight and accessible library that was also available on *PyPI*. It is compatible with both Python 2.7 and 3.3+.
Functions currently implemented:
- list
- info
- log
- checkout
- export
- cat
**You are more than welcome to submit pull-requests to add more support for additional subcommands.**
-----
Usage
-----
Usage is divided between two clients that either allow for access to a local
working-directory or a remote repository.
Both clients inherit a common set of methods that work with both local working-
directories and remote repositories.
`svn.utility.get_client` is provided for convenience. If you provide a location
that starts with a backslash, it will return a LocalClient instance. Otherwise,
it will return a RemoteClient instance.
You may pass `username` and `password` as optional arguments to both the constructor and utility function.
LocalClient
===========
*LocalClient* allows access to a local working copy.
RemoteClient
============
*RemoteClient* allows access to a remote repository.
checkout(path)
^^^^^^^^^^^^^^
Checkout a remote repository::
import svn.remote
r = svn.remote.RemoteClient('https://repo.local/svn')
r.checkout('/tmp/working')
Common Functionality
====================
These methods are available on both clients.
info(rel_path=None)
^^^^^^^^^^^^^^^^^^^
Get information about the directory::
import pprint
import svn.local
r = svn.local.LocalClient('/tmp/test_repo.co')
info = r.info()
pprint.pprint(info)
#{'commit#revision': 0,
# 'commit/author': None,
# 'commit/date': datetime.datetime(2015, 4, 24, 2, 53, 21, 874970, tzinfo=tzutc()),
# 'commit_author': None,
# 'commit_date': datetime.datetime(2015, 4, 24, 2, 53, 21, 874970, tzinfo=tzutc()),
# 'commit_revision': 0,
# 'entry#kind': 'dir',
# 'entry#path': '/tmp/test_repo.co',
# 'entry#revision': 0,
# 'entry_kind': 'dir',
# 'entry_path': '/tmp/test_repo.co',
# 'entry_revision': 0,
# 'relative_url': None,
# 'repository/root': 'file:///tmp/test_repo',
# 'repository/uuid': '7446d4e9-8846-46c0-858a-34a2a1739d1c',
# 'repository_root': 'file:///tmp/test_repo',
# 'repository_uuid': '7446d4e9-8846-46c0-858a-34a2a1739d1c',
# 'url': 'file:///tmp/test_repo',
# 'wc-info/depth': None,
# 'wc-info/schedule': None,
# 'wc-info/wcroot-abspath': None,
# 'wcinfo_depth': None,
# 'wcinfo_schedule': None,
# 'wcinfo_wcroot_abspath': None}
NOTE: The keys named with dashes, slashes, and hashes are considered
obsolete, and only available for backwards compatibility. We
have since moved to using only underscores to separate words.
cat(rel_filepath)
^^^^^^^^^^^^^^^^^
Get file-data as string::
import svn.local
l = svn.local.LocalClient('/tmp/test_repo')
content = l.cat('test_file')
log_default(timestamp_from_dt=None, timestamp_to_dt=None, limit=None, rel_filepath='', stop_on_copy=False, revision_from=None, revision_to=None, changelist=False)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Perform a log-listing that can be bounded by time or revision number and/or take a maximum-
count::
import svn.local
l = svn.local.LocalClient('/tmp/test_repo.co')
for e in l.log_default():
print(e)
#LogEntry(date=datetime.datetime(2015, 4, 24, 3, 2, 39, 895975, tzinfo=tzutc()), msg='Added second file.', revision=2, author='dustin')
#LogEntry(date=datetime.datetime(2015, 4, 24, 2, 54, 2, 136170, tzinfo=tzutc()), msg='Initial commit.', revision=1, author='dustin')
export(to_path, revision=None)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Checkout the tree without embedding an meta-information::
import svn.remote
r = svn.remote.RemoteClient('file:///tmp/test_repo')
r.export('/tmp/test_export')
list(extended=False, rel_path=None)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Return either a flat-list of filenames or a list of objects describing even
more information about each::
import pprint
import svn.local
l = svn.local.LocalClient('/tmp/test_repo.co')
# Flat list.
entries = l.list()
for filename in entries:
print(filename)
#aa
#bb
# Extended information.
entries = l.list(extended=True)
for entry in entries:
pprint.pprint(entry)
#{'author': 'dustin',
# 'commit_revision': 1,
# 'date': datetime.datetime(2015, 4, 24, 2, 54, 2, 136170, tzinfo=tzutc()),
# 'is_directory': False,
# 'kind': 'file',
# 'name': 'aa',
# 'size': 0,
# 'timestamp': datetime.datetime(2015, 4, 24, 2, 54, 2, 136170, tzinfo=tzutc())}
#{'author': 'dustin',
# 'commit_revision': 2,
# 'date': datetime.datetime(2015, 4, 24, 3, 2, 39, 895975, tzinfo=tzutc()),
# 'is_directory': False,
# 'kind': 'file',
# 'name': 'bb',
# 'size': 0,
# 'timestamp': datetime.datetime(2015, 4, 24, 3, 2, 39, 895975, tzinfo=tzutc())}
list_recursive(rel_path=None, yield_dirs=False, path_filter_cb=None)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
List all entries at and beneath the root or given relative-path::
import pprint
import svn.local
l = svn.local.LocalClient('/tmp/test_repo.co')
for rel_path, e in l.list_recursive():
print('')
print('[' + rel_path + ']')
print('')
pprint.pprint(e)
#[]
#
#{'author': 'dustin',
# 'commit_revision': 1,
# 'date': datetime.datetime(2015, 4, 24, 2, 54, 2, 136170, tzinfo=tzutc()),
# 'is_directory': False,
# 'kind': 'file',
# 'name': 'aa',
# 'size': 0,
# 'timestamp': datetime.datetime(2015, 4, 24, 2, 54, 2, 136170, tzinfo=tzutc())}
#
#[]
#
#{'author': 'dustin',
# 'commit_revision': 2,
# 'date': datetime.datetime(2015, 4, 24, 3, 2, 39, 895975, tzinfo=tzutc()),
# 'is_directory': False,
# 'kind': 'file',
# 'name': 'bb',
# 'size': 0,
# 'timestamp': datetime.datetime(2015, 4, 24, 3, 2, 39, 895975, tzinfo=tzutc())}
#
#[dir1]
#
#{'author': 'dustin',
# 'commit_revision': 3,
# 'date': datetime.datetime(2015, 4, 24, 3, 25, 13, 479212, tzinfo=tzutc()),
# 'is_directory': False,
# 'kind': 'file',
# 'name': 'cc',
# 'size': 0,
# 'timestamp': datetime.datetime(2015, 4, 24, 3, 25, 13, 479212, tzinfo=tzutc())}
.. |donate| image:: https://pledgie.com/campaigns/31718.png?skin_name=chrome
:alt: Click here to lend your support to: PySvn and make a donation at pledgie.com !
:target: https://pledgie.com/campaigns/31718
------------
Introduction
------------
*svn* is a simple Subversion library for Python. I wrote it so that there could be a lightweight and accessible library that was also available on *PyPI*. It is compatible with both Python 2.7 and 3.3+.
Functions currently implemented:
- list
- info
- log
- checkout
- export
- cat
**You are more than welcome to submit pull-requests to add more support for additional subcommands.**
-----
Usage
-----
Usage is divided between two clients that either allow for access to a local
working-directory or a remote repository.
Both clients inherit a common set of methods that work with both local working-
directories and remote repositories.
`svn.utility.get_client` is provided for convenience. If you provide a location
that starts with a backslash, it will return a LocalClient instance. Otherwise,
it will return a RemoteClient instance.
You may pass `username` and `password` as optional arguments to both the constructor and utility function.
LocalClient
===========
*LocalClient* allows access to a local working copy.
RemoteClient
============
*RemoteClient* allows access to a remote repository.
checkout(path)
^^^^^^^^^^^^^^
Checkout a remote repository::
import svn.remote
r = svn.remote.RemoteClient('https://repo.local/svn')
r.checkout('/tmp/working')
Common Functionality
====================
These methods are available on both clients.
info(rel_path=None)
^^^^^^^^^^^^^^^^^^^
Get information about the directory::
import pprint
import svn.local
r = svn.local.LocalClient('/tmp/test_repo.co')
info = r.info()
pprint.pprint(info)
#{'commit#revision': 0,
# 'commit/author': None,
# 'commit/date': datetime.datetime(2015, 4, 24, 2, 53, 21, 874970, tzinfo=tzutc()),
# 'commit_author': None,
# 'commit_date': datetime.datetime(2015, 4, 24, 2, 53, 21, 874970, tzinfo=tzutc()),
# 'commit_revision': 0,
# 'entry#kind': 'dir',
# 'entry#path': '/tmp/test_repo.co',
# 'entry#revision': 0,
# 'entry_kind': 'dir',
# 'entry_path': '/tmp/test_repo.co',
# 'entry_revision': 0,
# 'relative_url': None,
# 'repository/root': 'file:///tmp/test_repo',
# 'repository/uuid': '7446d4e9-8846-46c0-858a-34a2a1739d1c',
# 'repository_root': 'file:///tmp/test_repo',
# 'repository_uuid': '7446d4e9-8846-46c0-858a-34a2a1739d1c',
# 'url': 'file:///tmp/test_repo',
# 'wc-info/depth': None,
# 'wc-info/schedule': None,
# 'wc-info/wcroot-abspath': None,
# 'wcinfo_depth': None,
# 'wcinfo_schedule': None,
# 'wcinfo_wcroot_abspath': None}
NOTE: The keys named with dashes, slashes, and hashes are considered
obsolete, and only available for backwards compatibility. We
have since moved to using only underscores to separate words.
cat(rel_filepath)
^^^^^^^^^^^^^^^^^
Get file-data as string::
import svn.local
l = svn.local.LocalClient('/tmp/test_repo')
content = l.cat('test_file')
log_default(timestamp_from_dt=None, timestamp_to_dt=None, limit=None, rel_filepath='', stop_on_copy=False, revision_from=None, revision_to=None, changelist=False)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Perform a log-listing that can be bounded by time or revision number and/or take a maximum-
count::
import svn.local
l = svn.local.LocalClient('/tmp/test_repo.co')
for e in l.log_default():
print(e)
#LogEntry(date=datetime.datetime(2015, 4, 24, 3, 2, 39, 895975, tzinfo=tzutc()), msg='Added second file.', revision=2, author='dustin')
#LogEntry(date=datetime.datetime(2015, 4, 24, 2, 54, 2, 136170, tzinfo=tzutc()), msg='Initial commit.', revision=1, author='dustin')
export(to_path, revision=None)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Checkout the tree without embedding an meta-information::
import svn.remote
r = svn.remote.RemoteClient('file:///tmp/test_repo')
r.export('/tmp/test_export')
list(extended=False, rel_path=None)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Return either a flat-list of filenames or a list of objects describing even
more information about each::
import pprint
import svn.local
l = svn.local.LocalClient('/tmp/test_repo.co')
# Flat list.
entries = l.list()
for filename in entries:
print(filename)
#aa
#bb
# Extended information.
entries = l.list(extended=True)
for entry in entries:
pprint.pprint(entry)
#{'author': 'dustin',
# 'commit_revision': 1,
# 'date': datetime.datetime(2015, 4, 24, 2, 54, 2, 136170, tzinfo=tzutc()),
# 'is_directory': False,
# 'kind': 'file',
# 'name': 'aa',
# 'size': 0,
# 'timestamp': datetime.datetime(2015, 4, 24, 2, 54, 2, 136170, tzinfo=tzutc())}
#{'author': 'dustin',
# 'commit_revision': 2,
# 'date': datetime.datetime(2015, 4, 24, 3, 2, 39, 895975, tzinfo=tzutc()),
# 'is_directory': False,
# 'kind': 'file',
# 'name': 'bb',
# 'size': 0,
# 'timestamp': datetime.datetime(2015, 4, 24, 3, 2, 39, 895975, tzinfo=tzutc())}
list_recursive(rel_path=None, yield_dirs=False, path_filter_cb=None)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
List all entries at and beneath the root or given relative-path::
import pprint
import svn.local
l = svn.local.LocalClient('/tmp/test_repo.co')
for rel_path, e in l.list_recursive():
print('')
print('[' + rel_path + ']')
print('')
pprint.pprint(e)
#[]
#
#{'author': 'dustin',
# 'commit_revision': 1,
# 'date': datetime.datetime(2015, 4, 24, 2, 54, 2, 136170, tzinfo=tzutc()),
# 'is_directory': False,
# 'kind': 'file',
# 'name': 'aa',
# 'size': 0,
# 'timestamp': datetime.datetime(2015, 4, 24, 2, 54, 2, 136170, tzinfo=tzutc())}
#
#[]
#
#{'author': 'dustin',
# 'commit_revision': 2,
# 'date': datetime.datetime(2015, 4, 24, 3, 2, 39, 895975, tzinfo=tzutc()),
# 'is_directory': False,
# 'kind': 'file',
# 'name': 'bb',
# 'size': 0,
# 'timestamp': datetime.datetime(2015, 4, 24, 3, 2, 39, 895975, tzinfo=tzutc())}
#
#[dir1]
#
#{'author': 'dustin',
# 'commit_revision': 3,
# 'date': datetime.datetime(2015, 4, 24, 3, 25, 13, 479212, tzinfo=tzutc()),
# 'is_directory': False,
# 'kind': 'file',
# 'name': 'cc',
# 'size': 0,
# 'timestamp': datetime.datetime(2015, 4, 24, 3, 25, 13, 479212, tzinfo=tzutc())}
.. |donate| image:: https://pledgie.com/campaigns/31718.png?skin_name=chrome
:alt: Click here to lend your support to: PySvn and make a donation at pledgie.com !
:target: https://pledgie.com/campaigns/31718
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
svn-0.3.41.tar.gz
(9.9 kB
view details)
Built Distribution
svn-0.3.41-py2-none-any.whl
(13.8 kB
view details)
File details
Details for the file svn-0.3.41.tar.gz
.
File metadata
- Download URL: svn-0.3.41.tar.gz
- Upload date:
- Size: 9.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c1b9c63b92cac9ffc366e06574153641c239a15a1ac18a4b5df54fa01eb24c85 |
|
MD5 | b4bb867edc9430518e880a41dffbf688 |
|
BLAKE2b-256 | 1277646efd48f830dbf0793537f6428457a07fb36c5086ad213c8997a393dd27 |
File details
Details for the file svn-0.3.41-py2-none-any.whl
.
File metadata
- Download URL: svn-0.3.41-py2-none-any.whl
- Upload date:
- Size: 13.8 kB
- Tags: Python 2
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7aac60fb72a4577989b2719f459e2954d26298d0dd7c85149bd1f40c4179d436 |
|
MD5 | 0b2bb2ef0a4701170d5ba119666b064f |
|
BLAKE2b-256 | 08cac15cf6cc883a5ae3e089b0961bb4d988337dd5369caa42282b9f140ac852 |