lists.arthurdejong.org
RSS feed

python-stdnum branch master updated. 1.17-45-g09d595b

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

python-stdnum branch master updated. 1.17-45-g09d595b



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  09d595bad2333bcd1641104ee672f9c4ad4ba6df (commit)
       via  7c2153eec8ce32a395ed83f5f759813f2101ddc6 (commit)
      from  1003033fa0e97726d92f47231f96cf02fb35869a (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 -----------------------------------------------------------------
https://arthurdejong.org/git/python-stdnum/commit/?id=09d595bad2333bcd1641104ee672f9c4ad4ba6df

commit 09d595bad2333bcd1641104ee672f9c4ad4ba6df
Author: Arthur de Jong <arthur@arthurdejong.org>
Date:   Wed Oct 19 21:16:19 2022 +0200

    Improve validation of CAS Registry Number
    
    This ensures that a leading 0 is treated as invalid.

diff --git a/stdnum/casrn.py b/stdnum/casrn.py
index acd5d7f..cb0555b 100644
--- a/stdnum/casrn.py
+++ b/stdnum/casrn.py
@@ -1,6 +1,6 @@
 # casrn.py - functions for handling CAS Registry Numbers
 #
-# Copyright (C) 2017 Arthur de Jong
+# Copyright (C) 2017-2022 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
@@ -32,12 +32,21 @@ More information:
 Traceback (most recent call last):
     ...
 InvalidChecksum: ...
+>>> validate('012770-26-2')
+Traceback (most recent call last):
+    ...
+InvalidFormat: ...
 """
 
+import re
+
 from stdnum.exceptions import *
 from stdnum.util import clean, isdigits
 
 
+_cas_re = re.compile(r'^[1-9][0-9]{1,6}-[0-9]{2}-[0-9]$')
+
+
 def compact(number):
     """Convert the number to the minimal representation."""
     number = clean(number, ' ').strip()
@@ -59,9 +68,7 @@ def validate(number):
     number = compact(number)
     if not 7 <= len(number) <= 12:
         raise InvalidLength()
-    if not isdigits(number[:-5]) or not isdigits(number[-4:-2]):
-        raise InvalidFormat()
-    if number[-2] != '-' or number[-5] != '-':
+    if not _cas_re.match(number):
         raise InvalidFormat()
     if number[-1] != calc_check_digit(number[:-1]):
         raise InvalidChecksum()

https://arthurdejong.org/git/python-stdnum/commit/?id=7c2153eec8ce32a395ed83f5f759813f2101ddc6

commit 7c2153eec8ce32a395ed83f5f759813f2101ddc6
Author: Arthur de Jong <arthur@arthurdejong.org>
Date:   Wed Oct 19 21:13:51 2022 +0200

    Remove duplicate CAS Registry Number
    
    The recently added stdnum.cas module was already available as teh
    stdnum.casrn module.
    
    Reverts acb6934

diff --git a/stdnum/cas.py b/stdnum/cas.py
deleted file mode 100644
index 98ebf5a..0000000
--- a/stdnum/cas.py
+++ /dev/null
@@ -1,82 +0,0 @@
-# cas.py - functions for handling CAS registry numbers
-#
-# Copyright (C) 2022 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
-
-"""CAS Registry Number.
-
-A CAS Registry Number, CAS RN or CAS number is a unique identified assign to
-chemical substances. The number is issued by the Chemical Abstracts Service
-(CAS).
-
-The number consists of 5 to 10 digits and is assigned sequentially and
-contains a check digit.
-
-More information:
-
-* https://en.wikipedia.org/wiki/CAS_Registry_Number
-* https://www.cas.org/cas-data/cas-registry
-
->>> validate('12770-26-2')
-'12770-26-2'
->>> validate('12770-29-2')
-Traceback (most recent call last):
-    ...
-InvalidChecksum: ...
->>> validate('012770-26-2')
-Traceback (most recent call last):
-    ...
-InvalidFormat: ...
-"""
-
-import re
-
-from stdnum.exceptions import *
-from stdnum.util import clean
-
-
-_cas_re = re.compile(r'^[1-9][0-9]{1,6}-[0-9]{2}-[0-9]$')
-
-
-def compact(number):
-    """Convert the number to the minimal representation."""
-    return clean(number).strip()
-
-
-def calc_check_digit(number):
-    """Calculate the check digit. The number passed should not have the check
-    digit included."""
-    number = clean(number, '-').strip()
-    return str(sum((i + 1) * int(n) for i, n in enumerate(reversed(number))) % 
10)
-
-
-def validate(number):
-    """Check if the number is a valid CAS Registry Number."""
-    number = compact(number)
-    if not _cas_re.match(number):
-        raise InvalidFormat()
-    if not number[-1] == calc_check_digit(number[:-1]):
-        raise InvalidChecksum()
-    return number
-
-
-def is_valid(number):
-    """Check if the number is a valid CAS Registry Number."""
-    try:
-        return bool(validate(number))
-    except ValidationError:
-        return False

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

Summary of changes:
 stdnum/cas.py   | 82 ---------------------------------------------------------
 stdnum/casrn.py | 15 ++++++++---
 2 files changed, 11 insertions(+), 86 deletions(-)
 delete mode 100644 stdnum/cas.py


hooks/post-receive
-- 
python-stdnum