Start on 0.10.2.
[jelmer/subvertpy.git] / subvertpy / __init__.py
1 # Copyright (C) 2006-2008 Jelmer Vernooij <jelmer@jelmer.uk>
2
3 # This program is free software; you can redistribute it and/or modify
4 # it under the terms of the GNU Lesser General Public License as published by
5 # the Free Software Foundation; either version 2.1 of the License, or
6 # (at your option) any later version.
7
8 # This program is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 # GNU Lesser General Public License for more details.
12
13 # You should have received a copy of the GNU Lesser General Public License
14 # along with this program; if not, write to the Free Software
15 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
16
17 """Python bindings for Subversion."""
18
19 __author__ = "Jelmer Vernooij <jelmer@jelmer.uk>"
20 __version__ = (0, 10, 2)
21
22 NODE_DIR = 2
23 NODE_FILE = 1
24 NODE_NONE = 0
25 NODE_UNKNOWN = 3
26
27 ERR_UNSUPPORTED_FEATURE = 200007
28 ERR_RA_SVN_UNKNOWN_CMD = 210001
29 ERR_RA_SVN_CONNECTION_CLOSED = 210002
30 ERR_WC_LOCKED = 155004
31 ERR_RA_NOT_AUTHORIZED = 170001
32 ERR_INCOMPLETE_DATA = 200003
33 ERR_DIR_NOT_EMPTY = 200011
34 ERR_RA_SVN_MALFORMED_DATA = 210004
35 ERR_RA_NOT_IMPLEMENTED = 170003
36 ERR_FS_NO_SUCH_REVISION = 160006
37 ERR_FS_TXN_OUT_OF_DATE = 160028
38 ERR_REPOS_DISABLED_FEATURE = 165006
39 ERR_STREAM_MALFORMED_DATA = 140001
40 ERR_RA_ILLEGAL_URL = 170000
41 ERR_RA_LOCAL_REPOS_OPEN_FAILED = 180001
42 ERR_BAD_FILENAME = 125001
43 ERR_BAD_URL = 125002
44 ERR_BAD_DATE = 125003
45 ERR_RA_DAV_REQUEST_FAILED = 175002
46 ERR_RA_DAV_PATH_NOT_FOUND = 175007
47 ERR_FS_NOT_DIRECTORY = 160016
48 ERR_FS_NOT_FOUND = 160013
49 ERR_FS_ALREADY_EXISTS = 160020
50 ERR_RA_SVN_REPOS_NOT_FOUND = 210005
51 ERR_WC_NOT_WORKING_COPY = ERR_WC_NOT_DIRECTORY = 155007
52 ERR_ENTRY_EXISTS = 150002
53 ERR_WC_PATH_NOT_FOUND = 155010
54 ERR_CANCELLED = 200015
55 ERR_WC_UNSUPPORTED_FORMAT = 155021
56 ERR_UNKNOWN_CAPABILITY = 200026
57 ERR_AUTHN_NO_PROVIDER = 215001
58 ERR_RA_DAV_RELOCATED = 175011
59 ERR_FS_NOT_FILE = 160017
60 ERR_WC_BAD_ADM_LOG = 155009
61 ERR_WC_BAD_ADM_LOG_START = 155020
62 ERR_WC_NOT_LOCKED = 155005
63 ERR_RA_DAV_NOT_VCC = 20014
64 ERR_REPOS_HOOK_FAILURE = 165001
65 ERR_XML_MALFORMED = 130003
66 ERR_MALFORMED_FILE = 200002
67 ERR_FS_PATH_SYNTAX = 160005
68 ERR_RA_DAV_FORBIDDEN = 175013
69 ERR_WC_SCHEDULE_CONFLICT = 155013
70 ERR_RA_DAV_PROPPATCH_FAILED = 175008
71 ERR_SVNDIFF_CORRUPT_WINDOW = 185001
72 ERR_FS_CONFLICT = 160024
73 ERR_NODE_UNKNOWN_KIND = 145000
74 ERR_RA_SERF_SSL_CERT_UNTRUSTED = 230001
75 ERR_ENTRY_NOT_FOUND = 150000
76 ERR_BAD_PROPERTY_VALUE = 125005
77 ERR_FS_ROOT_DIR = 160021
78 ERR_WC_NODE_KIND_CHANGE = 155018
79 ERR_WC_UPGRADE_REQUIRED = 155036
80 ERR_RA_CANNOT_CREATE_SESSION = 170013
81
82 ERR_APR_OS_START_EAIERR = 670000
83 ERR_APR_OS_ERRSPACE_SIZE = 50000
84 ERR_CATEGORY_SIZE = 5000
85
86
87 # These will be removed in the next version of subvertpy
88 ERR_EAI_NONAME = 670008
89 ERR_UNKNOWN_HOSTNAME = 670002
90
91 AUTH_PARAM_DEFAULT_USERNAME = 'svn:auth:username'
92 AUTH_PARAM_DEFAULT_PASSWORD = 'svn:auth:password'
93
94 SSL_NOTYETVALID = 0x00000001
95 SSL_EXPIRED = 0x00000002
96 SSL_CNMISMATCH = 0x00000004
97 SSL_UNKNOWNCA = 0x00000008
98 SSL_OTHER = 0x40000000
99
100
101 class SubversionException(Exception):
102     """A Subversion exception"""
103
104     def __init__(self, msg, num, child=None, location=None):
105         self.args = (msg, num)
106         self.child = child
107         self.location = location
108
109
110 def _check_mtime(m):
111     """Check whether a C extension is out of date.
112
113     :param m: Python module that is a C extension
114     """
115     import os
116     (base, _) = os.path.splitext(m.__file__)
117     c_file = "%s.c" % base
118     if not os.path.exists(c_file):
119         return True
120     if os.path.getmtime(m.__file__) < os.path.getmtime(c_file):
121         return False
122     return True
123
124
125 try:
126     from subvertpy import client, _ra, repos, wc
127     for x in client, _ra, repos, wc:
128         if not _check_mtime(x):
129             from warnings import warn
130             warn("subvertpy extensions are outdated and need to be rebuilt")
131             break
132 except ImportError as e:
133     raise ImportError("Unable to load subvertpy extensions: %s" % e)