lists.arthurdejong.org
RSS feed

python-stdnum branch master updated. 1.0-12-g49d1e69

[Date Prev][Date Next] [Thread Prev][Thread Next]

python-stdnum branch master updated. 1.0-12-g49d1e69



This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "python-stdnum".

The branch, master has been updated
       via  49d1e691c02ec1e3c89c6d4e9e5f8a232bb1255e (commit)
       via  d003ac32422e8e1625ee1a35641d3c73ecfdf6de (commit)
       via  9e94ab80b6961847539456f9c29b4acbdc20c4d0 (commit)
      from  c334bcf616e1c582dec1a3c2f2fe45afa902755d (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://arthurdejong.org/git/python-stdnum/commit/?id=49d1e691c02ec1e3c89c6d4e9e5f8a232bb1255e

commit 49d1e691c02ec1e3c89c6d4e9e5f8a232bb1255e
Author: Arthur de Jong <arthur@arthurdejong.org>
Date:   Fri Apr 17 19:39:35 2015 +0200

    Add Dominican Republic Cedula number
    
    The Cedule is a Dominican Republic national identification number for
    persons.
    
    The number uses the Luhn checksum but apparently there are a lof of
    valid numbers in use that do not match the checksum. For this a
    whitelist is used.

diff --git a/stdnum/do/cedula.py b/stdnum/do/cedula.py
new file mode 100644
index 0000000..ec7b3f6
--- /dev/null
+++ b/stdnum/do/cedula.py
@@ -0,0 +1,160 @@
+# cedula.py - functions for handling Dominican Republic national identifier
+#
+# Copyright (C) 2015 Arthur de Jong
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 USA
+
+"""Cedula (Dominican Republic national identification number).
+
+A cedula is is an 11-digit number issues by the Dominican Republic government
+to citizens or residents for identification purposes.
+
+>>> validate('00113918205')
+'00113918205'
+>>> validate('00113918204')
+Traceback (most recent call last):
+    ...
+InvalidChecksum: ...
+>>> validate('0011391820A')
+Traceback (most recent call last):
+    ...
+InvalidFormat: ...
+>>> format('22400022111')
+'224-0002211-1'
+"""
+
+from stdnum.exceptions import *
+from stdnum.util import clean
+from stdnum import luhn
+
+
+# list of Cedulas that do not match the checksum but are nonetheless valid
+whitelist = set([
+    '00000021249', '00000035692', '00000058035', '00000065377',
+    '00000078587', '00000111941', '00000126295', '00000140874',
+    '00000155482', '00000236621', '00000292212', '00000564933',
+    '00000719400', '00004110056', '00100000169', '00100016495',
+    '00100053841', '00100061945', '00100083860', '00100126468',
+    '00100172940', '00100174666', '00100181057', '00100238382',
+    '00100239662', '00100255349', '00100288929', '00100322649',
+    '00100350928', '00100378440', '00100384523', '00100415853',
+    '00100523399', '00100524531', '00100530588', '00100593378',
+    '00100622461', '00100709215', '00100728113', '00100729795',
+    '00100756082', '00100759932', '00101118022', '00101527366',
+    '00101621981', '00101659661', '00101821735', '00101961125',
+    '00102025201', '00102577448', '00102630192', '00103266558',
+    '00103443802', '00103754365', '00103983004', '00104486903',
+    '00104662561', '00104785104', '00104862525', '00105328185',
+    '00105606543', '00107045499', '00108497822', '00108796883',
+    '00109402756', '00109785951', '00110047715', '00110071113',
+    '00114272360', '00114532330', '00116256005', '00117582001',
+    '00119161853', '00121581750', '00121581800', '00129737056',
+    '00130610001', '00131257003', '00134588056', '00142864013',
+    '00143072001', '00144435001', '00146965001', '00147485003',
+    '00155144906', '00161884001', '00162906003', '00163540003',
+    '00163549012', '00163709018', '00166533003', '00167311001',
+    '00170009162', '00170115579', '00171404771', '00174729003',
+    '00174940001', '00181880003', '00184129003', '00189213001',
+    '00189405093', '00190002567', '00196714003', '00200021994',
+    '00200028716', '00200040516', '00200063601', '00200123640',
+    '00200409772', '00201023001', '00207327056', '00208430205',
+    '00208832003', '00218507031', '00222017001', '00235482001',
+    '00236245013', '00241997013', '00246160013', '00261011013',
+    '00270764013', '00274652001', '00278005023', '00289931003',
+    '00291431001', '00291549003', '00297018001', '00298109001',
+    '00299724003', '00300001538', '00300011700', '00300013835',
+    '00300017875', '00300019575', '00300020806', '00300025568',
+    '00300169535', '00300244009', '00300636564', '00301200901',
+    '00305535206', '00345425001', '00352861001', '00356533003',
+    '00362684023', '00376023023', '00400001552', '00400012957',
+    '00425759001', '00435518003', '00475916056', '00481106001',
+    '00481595003', '00493593003', '00516077003', '00520207699',
+    '00524571001', '00539342005', '00540077717', '00544657001',
+    '00574599001', '00599408003', '00633126023', '00644236001',
+    '00648496171', '00651322001', '00686904003', '00720758056',
+    '00731054054', '00741721056', '00757398001', '00800106971',
+    '00848583056', '00857630012', '00971815056', '01000005580',
+    '01000268998', '01038813907', '01094560111', '01100014261',
+    '01100620962', '01154421047', '01200004166', '01200008613',
+    '01200011252', '01200014133', '01200033420', '01300001142',
+    '01300005424', '01300020331', '01400000282', '01400074875',
+    '01600009531', '01600026316', '01650257001', '01810035037',
+    '02038569001', '02300023225', '02300031758', '02300037618',
+    '02300047220', '02300052220', '02300054193', '02300062066',
+    '02300085158', '02600036132', '02600094954', '02700029905',
+    '02755972001', '02800000129', '02800021761', '02800025877',
+    '02800029588', '02831146001', '03000411295', '03100109611',
+    '03100673050', '03102828522', '03102936385', '03103749672',
+    '03111670001', '03121982479', '03200066940', '03400157849',
+    '03600127038', '03800032522', '03807240010', '03852380001',
+    '03900069856', '03900192284', '04400002002', '04600198229',
+    '04700004024', '04700020933', '04700027064', '04700061076',
+    '04700070460', '04700074827', '04800019561', '04800046910',
+    '04801245892', '04900011690', '04900026260', '04900028443',
+    '04902549001', '04941042001', '05300013029', '05400016031',
+    '05400021759', '05400022042', '05400028496', '05400033166',
+    '05400034790', '05400037495', '05400038776', '05400040523',
+    '05400047674', '05400048248', '05400049237', '05400049834',
+    '05400053627', '05400054156', '05400055485', '05400055770',
+    '05400057300', '05400058964', '05400059956', '05400060743',
+    '05400062459', '05400067703', '05400072273', '05400076481',
+    '05500003079', '05500006796', '05500008806', '05500012039',
+    '05500014375', '05500017761', '05500021118', '05500022399',
+    '05500023407', '05500024135', '05500024190', '05500027749',
+    '05500032681', '05600037761', '05600038251', '05600038964',
+    '05600051191', '05600063115', '05600267737', '05700071202',
+    '05900072869', '06100007818', '06100009131', '06100011935',
+    '06100013662', '06100016486', '06337850001', '06400007916',
+    '06400011981', '06400014372', '06486186001', '06800008448',
+    '06843739551', '07600000691', '07700009346', '07800000968',
+    '08016809001', '08498619001', '08800003986', '08900001310',
+    '08900005064', '08952698001', '09300006239', '09421581768',
+    '09700003030', '10061805811', '10462157001', '10491297001',
+    '10621581792', '10983439110', '11700000658', '12019831001',
+    '22321581834', '22721581818', '40200401324', '40200452735',
+    '40200639953', '40200700675', '90001200901'])
+
+
+def compact(number):
+    """Convert the number to the minimal representation. This strips the
+    number of any valid separators and removes surrounding whitespace."""
+    return clean(number, ' -').strip()
+
+
+def validate(number):
+    """Checks to see if the number provided is a valid cedula."""
+    number = compact(number)
+    if len(number) != 11:
+        raise InvalidLength()
+    if not number.isdigit():
+        raise InvalidFormat()
+    if number in whitelist:
+        return number
+    return luhn.validate(number)
+
+
+def is_valid(number):
+    """Checks to see if the number provided is a valid cedula."""
+    try:
+        return bool(validate(number))
+    except ValidationError:
+        return False
+
+
+def format(number):
+    """Reformat the passed number to the standard format."""
+    number = compact(number)
+    return '-'.join((number[:3], number[3:-1], number[-1]))
diff --git a/tests/test_do_cedula.doctest b/tests/test_do_cedula.doctest
new file mode 100644
index 0000000..7d1992a
--- /dev/null
+++ b/tests/test_do_cedula.doctest
@@ -0,0 +1,143 @@
+test_do_cedula.doctest - more detailed doctests for stdnum.do.cedula module
+
+Copyright (C) 2015 Arthur de Jong
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA
+
+
+This file contains more detailed doctests for the stdnum.do.cedula module. It
+tries to cover more corner cases and detailed functionality that is not
+really useful as module documentation.
+
+>>> from stdnum.do import cedula
+
+
+Some basic tests for invalid numbers:
+
+>>> cedula.validate('1234567890')
+Traceback (most recent call last):
+    ...
+InvalidLength: ...
+>>> cedula.validate('123456789111')
+Traceback (most recent call last):
+    ...
+InvalidLength: ...
+>>> cedula.validate('abcasdqwerz')
+Traceback (most recent call last):
+    ...
+InvalidFormat: ...
+>>> cedula.validate('00114272360')
+'00114272360'
+>>> cedula.validate('00114272368')
+Traceback (most recent call last):
+    ...
+InvalidChecksum: ...
+>>> cedula.validate('00105606543')
+'00105606543'
+>>> cedula.validate('00113918205')
+'00113918205'
+>>> cedula.validate('00113918204')
+Traceback (most recent call last):
+    ...
+InvalidChecksum: ...
+>>> cedula.validate('00113918213')
+'00113918213'
+>>> cedula.validate('0011391820x')
+Traceback (most recent call last):
+    ...
+InvalidFormat: ...
+>>> cedula.validate('x0113918205')
+Traceback (most recent call last):
+    ...
+InvalidFormat: ...
+>>> cedula.validate('00113x18205')
+Traceback (most recent call last):
+    ...
+InvalidFormat: ...
+
+
+Some numbers have an invalid check digit but were issued nonetheless. The
+following numbers should all be valid cedulas.
+
+>>> numbers = '''
+...
+... 00000058035
+... 00000155482
+... 00100288929
+... 00100709215
+... 00100759932
+... 00101552784
+... 00101659661
+... 00101961125
+... 00103754365
+... 00105606543
+... 00108796883
+... 00113918205
+... 00113918213
+... 00114272360
+... 00114532330
+... 00117582001
+... 00121581800
+... 00161884001
+... 00162906003
+... 00163540003
+... 00166533003
+... 00200123640
+... 00200409772
+... 00207327056
+... 00208430205
+... 00222017001
+... 00274652001
+... 00289931003
+... 00300169535
+... 00301200901
+... 00356533003
+... 00516077003
+... 00524571001
+... 00633126023
+... 00686904003
+... 00757398001
+... 00800106971
+... 00848583056
+... 01100620962
+... 01200004166
+... 01200008613
+... 01600026316
+... 02300023225
+... 02600036132
+... 02800021761
+... 02800029588
+... 03103749672
+... 03800032522
+... 04600198229
+... 04700027064
+... 05400038776
+... 05500003079
+... 05500006796
+... 05500022399
+... 05500023407
+... 07600000691
+... 09421581768
+... 10061805811
+... 12019831001
+... 22321581834
+... 22400022111
+... 40200401324
+... 90001200901
+...
+... '''
+>>> [x for x in numbers.splitlines() if x and not cedula.is_valid(x)]
+[]

http://arthurdejong.org/git/python-stdnum/commit/?id=d003ac32422e8e1625ee1a35641d3c73ecfdf6de

commit d003ac32422e8e1625ee1a35641d3c73ecfdf6de
Author: Arthur de Jong <arthur@arthurdejong.org>
Date:   Fri Apr 17 17:13:35 2015 +0200

    Add Dominican Republic RNC number
    
    The RNC (Registro Nacional del Contribuyente) is the Dominican Republic
    taxpayer registration number for companies.

diff --git a/stdnum/do/__init__.py b/stdnum/do/__init__.py
new file mode 100644
index 0000000..f60c1c0
--- /dev/null
+++ b/stdnum/do/__init__.py
@@ -0,0 +1,23 @@
+# __init__.py - collection of Dominican Republic numbers
+# coding: utf-8
+#
+# Copyright (C) 2015 Arthur de Jong
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 USA
+
+"""Collection of Dominican Republic numbers."""
+
+from stdnum.do import rnc as vat
diff --git a/stdnum/do/rnc.py b/stdnum/do/rnc.py
new file mode 100644
index 0000000..4134ad5
--- /dev/null
+++ b/stdnum/do/rnc.py
@@ -0,0 +1,79 @@
+# rnc.py - functions for handling Dominican Republic tax registration
+#
+# Copyright (C) 2015 Arthur de Jong
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301 USA
+
+"""RNC (Registro Nacional del Contribuyente, Dominican Republic tax number).
+
+The RNC is the Dominican Republic taxpayer registration number for
+institutions. The number consists of 9 digits.
+
+>>> validate('1-01-85004-3')
+'101850043'
+>>> validate('1018A0043')
+Traceback (most recent call last):
+    ...
+InvalidFormat: ...
+>>> validate('101850042')
+Traceback (most recent call last):
+    ...
+InvalidChecksum: ...
+>>> format('131246796')
+'1-31-24679-6'
+"""
+
+from stdnum.exceptions import *
+from stdnum.util import clean
+
+
+def compact(number):
+    """Convert the number to the minimal representation. This strips the
+    number of any valid separators and removes surrounding whitespace."""
+    return clean(number, ' -').strip()
+
+
+def calc_check_digit(number):
+    """Calculate the check digit."""
+    weights = (7, 9, 8, 6, 5, 4, 3, 2)
+    check = sum(weights[i] * int(n) for i, n in enumerate(number)) % 11
+    return str((10 - check) % 9 + 1)
+
+
+def validate(number):
+    """Checks to see if the number provided is a valid RNC."""
+    number = compact(number)
+    if len(number) != 9:
+        raise InvalidLength()
+    if not number.isdigit():
+        raise InvalidFormat()
+    if calc_check_digit(number[:-1]) != number[-1]:
+        raise InvalidChecksum()
+    return number
+
+
+def is_valid(number):
+    """Checks to see if the number provided is a valid RNC."""
+    try:
+        return bool(validate(number))
+    except ValidationError:
+        return False
+
+
+def format(number):
+    """Reformat the passed number to the standard format."""
+    number = compact(number)
+    return '-'.join((number[:1], number[1:3], number[3:-1], number[-1]))
diff --git a/tests/test_do_rnc.doctest b/tests/test_do_rnc.doctest
new file mode 100644
index 0000000..1fdfd54
--- /dev/null
+++ b/tests/test_do_rnc.doctest
@@ -0,0 +1,163 @@
+test_do_rnc.doctest - more detailed doctests for stdnum.do.rnc module
+
+Copyright (C) 2015 Arthur de Jong
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA
+
+
+This file contains more detailed doctests for the stdnum.do.rnc module. It
+tries to cover more corner cases and detailed functionality that is not
+really useful as module documentation.
+
+>>> from stdnum.do import rnc
+
+
+Some basic tests for invalid numbers:
+
+>>> rnc.validate('12345678')
+Traceback (most recent call last):
+    ...
+InvalidLength: ...
+>>> rnc.validate('1234567890')
+Traceback (most recent call last):
+    ...
+InvalidLength: ...
+>>> rnc.validate('123456789012')
+Traceback (most recent call last):
+    ...
+InvalidLength: ...
+>>> rnc.validate('acvbnmkjh')
+Traceback (most recent call last):
+    ...
+InvalidFormat: ...
+>>> rnc.validate('122011226')
+'122011226'
+>>> rnc.validate('112031226')
+Traceback (most recent call last):
+    ...
+InvalidChecksum: ...
+>>> rnc.validate('101637587')
+'101637587'
+
+
+These have been found online and should all be valid numbers.
+
+>>> numbers = '''
+...
+... 501050302
+... 501249532
+... 501275452
+... 501402772
+... 501406832
+... 501423982
+... 501430482
+... 501456252
+... 501464492
+... 501470042
+... 501494502
+... 501494812
+... 501496882
+... 501670912
+... 501690832
+... 501896112
+... 501925082
+... 501934782
+... 502004222
+... 502500262
+... 502571062
+... 502599382
+... 502601972
+... 502612532
+... 502614012
+... 502614802
+... 502858272
+... 502860692
+... 502866062
+... 502867182
+... 502871732
+... 502872372
+... 502873972
+... 502876882
+... 502879652
+... 502880022
+... 502880162
+... 502887132
+... 502889232
+... 502890842
+... 502894112
+... 503972922
+... 503995752
+... 504065782
+... 505030302
+... 505038532
+... 505063502
+... 505072412
+... 505613472
+... 505613502
+... 505613782
+... 505621912
+... 505622552
+... 507032262
+... 507883262
+... 511104382
+... 511106822
+... 512924072
+... 514026622
+... 514035672
+... 515121792
+... 515123442
+... 519505672
+... 522004242
+... 523006132
+... 523012132
+... 523013422
+... 523014062
+... 523015212
+... 523017622
+... 523021182
+... 523022162
+... 523022952
+... 523023592
+... 524001842
+... 524001982
+... 524007352
+... 524010892
+... 525001772
+... 525001802
+... 530001932
+... 531009502
+... 531030722
+... 531032342
+... 531035562
+... 531039622
+... 531042232
+... 531043182
+... 531054192
+... 531056152
+... 531073022
+... 531081602
+... 531085012
+... 531091322
+... 531096782
+... 531132312
+... 531136032
+... 531136962
+... 531137012
+... 531137152
+...
+... '''
+>>> [x for x in numbers.splitlines() if x and not rnc.is_valid(x)]
+[]

http://arthurdejong.org/git/python-stdnum/commit/?id=9e94ab80b6961847539456f9c29b4acbdc20c4d0

commit 9e94ab80b6961847539456f9c29b4acbdc20c4d0
Author: Arthur de Jong <arthur@arthurdejong.org>
Date:   Sun Apr 19 18:37:36 2015 +0200

    Add more stdnum.no.mva tests

diff --git a/tests/test_no_mva.doctest b/tests/test_no_mva.doctest
new file mode 100644
index 0000000..945974f
--- /dev/null
+++ b/tests/test_no_mva.doctest
@@ -0,0 +1,46 @@
+test_no_mva.doctest - more detailed doctests for stdnum.no.mva module
+
+Copyright (C) 2015 Arthur de Jong
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Lesser General Public
+License as published by the Free Software Foundation; either
+version 2.1 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301 USA
+
+
+This file contains more detailed doctests for the stdnum.no.mva module. It
+tries to cover more corner cases and detailed functionality that is not
+really useful as module documentation.
+
+>>> from stdnum.no import mva
+
+
+These have been found online and should all be valid numbers.
+
+>>> numbers = '''
+...
+... 965 920 358 MVA
+... 980 430 596 MVA
+... 998 772 680 MVA
+... NO 987 008 644 MVA
+... NO 917 313 008 MVA
+... NO 948007029 MVA
+... NO 966 813 946 MVA
+... NO 982 930 057 MVA
+... NO 982 952 573 MVA
+... NO 987 008 644 MVA
+... NO 987 989 297 MVA
+...
+... '''
+>>> [x for x in numbers.splitlines() if x and not mva.is_valid(x)]
+[]

-----------------------------------------------------------------------

Summary of changes:
 stdnum/{cz => do}/__init__.py                      |    9 +-
 stdnum/do/cedula.py                                |  160 +++++++++++++++++++
 stdnum/{no/orgnr.py => do/rnc.py}                  |   50 +++---
 tests/test_do_cedula.doctest                       |  143 +++++++++++++++++
 tests/test_do_rnc.doctest                          |  163 ++++++++++++++++++++
 ...st_is_kennitala.doctest => test_no_mva.doctest} |   36 ++---
 6 files changed, 512 insertions(+), 49 deletions(-)
 copy stdnum/{cz => do}/__init__.py (81%)
 create mode 100644 stdnum/do/cedula.py
 copy stdnum/{no/orgnr.py => do/rnc.py} (60%)
 create mode 100644 tests/test_do_cedula.doctest
 create mode 100644 tests/test_do_rnc.doctest
 copy tests/{test_is_kennitala.doctest => test_no_mva.doctest} (58%)


hooks/post-receive
-- 
python-stdnum
-- 
To unsubscribe send an email to
python-stdnum-commits-unsubscribe@lists.arthurdejong.org or see
http://lists.arthurdejong.org/python-stdnum-commits/