followthemoney 3.5.8__py2.py3-none-any.whl → 3.6.0__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. followthemoney/__init__.py +1 -1
  2. followthemoney/cli/cli.py +18 -14
  3. followthemoney/export/excel.py +6 -6
  4. followthemoney/mapping/entity.py +14 -2
  5. followthemoney/mapping/property.py +15 -3
  6. followthemoney/mapping/sql.py +1 -1
  7. followthemoney/property.py +11 -0
  8. followthemoney/proxy.py +29 -19
  9. followthemoney/schema/Analyzable.yaml +2 -0
  10. followthemoney/schema/BankAccount.yaml +3 -0
  11. followthemoney/schema/LegalEntity.yaml +4 -0
  12. followthemoney/schema/Person.yaml +4 -0
  13. followthemoney/schema/Security.yaml +2 -0
  14. followthemoney/schema/Thing.yaml +1 -0
  15. followthemoney/translations/ru/LC_MESSAGES/followthemoney.po +24 -22
  16. followthemoney/types/__init__.py +2 -2
  17. followthemoney/types/common.py +13 -5
  18. followthemoney/types/date.py +7 -2
  19. followthemoney/types/email.py +3 -1
  20. followthemoney/types/entity.py +3 -1
  21. followthemoney/types/iban.py +7 -9
  22. followthemoney/types/identifier.py +17 -0
  23. followthemoney/types/ip.py +3 -1
  24. followthemoney/types/language.py +1 -1
  25. followthemoney/types/mimetype.py +2 -2
  26. followthemoney/types/name.py +6 -35
  27. followthemoney/types/phone.py +3 -1
  28. followthemoney/types/topic.py +6 -1
  29. followthemoney/types/url.py +5 -21
  30. {followthemoney-3.5.8.dist-info → followthemoney-3.6.0.dist-info}/METADATA +6 -10
  31. {followthemoney-3.5.8.dist-info → followthemoney-3.6.0.dist-info}/RECORD +40 -40
  32. {followthemoney-3.5.8.dist-info → followthemoney-3.6.0.dist-info}/WHEEL +1 -1
  33. {followthemoney-3.5.8.dist-info → followthemoney-3.6.0.dist-info}/entry_points.txt +0 -1
  34. tests/types/test_dates.py +5 -5
  35. tests/types/test_iban.py +2 -1
  36. tests/types/test_identifiers.py +99 -0
  37. tests/types/test_names.py +1 -7
  38. {followthemoney-3.5.8.dist-info → followthemoney-3.6.0.dist-info}/LICENSE +0 -0
  39. {followthemoney-3.5.8.dist-info → followthemoney-3.6.0.dist-info}/namespace_packages.txt +0 -0
  40. {followthemoney-3.5.8.dist-info → followthemoney-3.6.0.dist-info}/top_level.txt +0 -0
@@ -4,6 +4,9 @@ from followthemoney.types import registry
4
4
 
5
5
  identifiers = registry.identifier
6
6
 
7
+ def iban_valid(text: str) -> bool:
8
+ return registry.identifier.validate(text, format='iban')
9
+
7
10
 
8
11
  class IdentifiersTest(unittest.TestCase):
9
12
  def test_parse(self):
@@ -21,3 +24,99 @@ class IdentifiersTest(unittest.TestCase):
21
24
  assert comp > 0, comp
22
25
  comp = identifiers.compare_sets(["9818700"], ["AS9818700"])
23
26
  assert comp > 0, comp
27
+ iban = "AE460090000000123456789"
28
+ comp = identifiers.compare_safe(iban, iban)
29
+ assert comp == 1, comp
30
+
31
+ def test_iban_parse(self):
32
+ val = "GB29 NWBK 6016 1331 9268 19"
33
+ self.assertEqual(identifiers.clean(val), val)
34
+ self.assertEqual(
35
+ identifiers.clean(val, format='iban'),
36
+ "GB29NWBK60161331926819"
37
+ )
38
+
39
+ def test_specificity(self):
40
+ self.assertEqual(identifiers.specificity("VG21PACG0000000123456789"), 1)
41
+
42
+ def test_iban_validation(self):
43
+ self.assertTrue(iban_valid("GB29 NWBK 6016 1331 9268 19"))
44
+ self.assertTrue(iban_valid("GB29NWBK60161331926819"))
45
+ self.assertFalse(iban_valid("GB28 NWBK 6016 1331 9268 19"))
46
+ self.assertFalse(iban_valid("GB29NWBKN0161331926819"))
47
+ self.assertFalse(iban_valid(""))
48
+ self.assertTrue(iban_valid("AL35202111090000000001234567"))
49
+ self.assertTrue(iban_valid("AD1400080001001234567890"))
50
+ self.assertTrue(iban_valid("AT483200000012345864"))
51
+ self.assertTrue(iban_valid("AZ96AZEJ00000000001234567890"))
52
+ self.assertTrue(iban_valid("BH02CITI00001077181611"))
53
+ # self.assertTrue(iban_valid('BY86AKBB10100000002966000000'))
54
+ self.assertTrue(iban_valid("BE71096123456769"))
55
+ self.assertTrue(iban_valid("BA275680000123456789"))
56
+ self.assertTrue(iban_valid("BR1500000000000010932840814P2"))
57
+ self.assertTrue(iban_valid("BG18RZBB91550123456789"))
58
+ # self.assertTrue(iban_valid('CR37012600000123456789'))
59
+ self.assertTrue(iban_valid("HR1723600001101234565"))
60
+ self.assertTrue(iban_valid("CY21002001950000357001234567"))
61
+ self.assertTrue(iban_valid("CZ5508000000001234567899"))
62
+ self.assertTrue(iban_valid("DK9520000123456789"))
63
+ self.assertTrue(iban_valid("DO22ACAU00000000000123456789"))
64
+ # self.assertTrue(iban_valid('SV43ACAT00000000000000123123'))
65
+ self.assertTrue(iban_valid("EE471000001020145685"))
66
+ self.assertTrue(iban_valid("FO9264600123456789"))
67
+ self.assertTrue(iban_valid("FI1410093000123458"))
68
+ self.assertTrue(iban_valid("FR7630006000011234567890189"))
69
+ self.assertTrue(iban_valid("GE60NB0000000123456789"))
70
+ self.assertTrue(iban_valid("DE91100000000123456789"))
71
+ self.assertTrue(iban_valid("GI04BARC000001234567890"))
72
+ self.assertTrue(iban_valid("GR9608100010000001234567890"))
73
+ self.assertTrue(iban_valid("GL8964710123456789"))
74
+ self.assertTrue(iban_valid("GT20AGRO00000000001234567890"))
75
+ self.assertTrue(iban_valid("HU93116000060000000012345676"))
76
+ self.assertTrue(iban_valid("IS030001121234561234567890"))
77
+ # self.assertTrue(iban_valid('IQ20CBIQ861800101010500'))
78
+ self.assertTrue(iban_valid("IE64IRCE92050112345678"))
79
+ self.assertTrue(iban_valid("IL170108000000012612345"))
80
+ self.assertTrue(iban_valid("IT60X0542811101000000123456"))
81
+ self.assertTrue(iban_valid("JO71CBJO0000000000001234567890"))
82
+ self.assertTrue(iban_valid("KZ563190000012344567"))
83
+ self.assertTrue(iban_valid("XK051212012345678906"))
84
+ self.assertTrue(iban_valid("KW81CBKU0000000000001234560101"))
85
+ self.assertTrue(iban_valid("LV97HABA0012345678910"))
86
+ self.assertTrue(iban_valid("LB92000700000000123123456123"))
87
+ self.assertTrue(iban_valid("LI7408806123456789012"))
88
+ self.assertTrue(iban_valid("LT601010012345678901"))
89
+ self.assertTrue(iban_valid("LU120010001234567891"))
90
+ self.assertTrue(iban_valid("MK07200002785123453"))
91
+ self.assertTrue(iban_valid("MT31MALT01100000000000000000123"))
92
+ self.assertTrue(iban_valid("MR1300020001010000123456753"))
93
+ self.assertTrue(iban_valid("MU43BOMM0101123456789101000MUR"))
94
+ self.assertTrue(iban_valid("MD21EX000000000001234567"))
95
+ self.assertTrue(iban_valid("MC5810096180790123456789085"))
96
+ self.assertTrue(iban_valid("ME25505000012345678951"))
97
+ self.assertTrue(iban_valid("NL02ABNA0123456789"))
98
+ self.assertTrue(iban_valid("NO8330001234567"))
99
+ self.assertTrue(iban_valid("PK36SCBL0000001123456702"))
100
+ self.assertTrue(iban_valid("PS92PALS000000000400123456702"))
101
+ self.assertTrue(iban_valid("PL10105000997603123456789123"))
102
+ self.assertTrue(iban_valid("PT50002700000001234567833"))
103
+ self.assertTrue(iban_valid("QA54QNBA000000000000693123456"))
104
+ self.assertTrue(iban_valid("RO09BCYP0000001234567890"))
105
+ self.assertTrue(iban_valid("LC14BOSL123456789012345678901234"))
106
+ self.assertTrue(iban_valid("SM76P0854009812123456789123"))
107
+ self.assertTrue(iban_valid("ST23000200000289355710148"))
108
+ self.assertTrue(iban_valid("SA4420000001234567891234"))
109
+ self.assertTrue(iban_valid("RS35105008123123123173"))
110
+ self.assertTrue(iban_valid("SC52BAHL01031234567890123456USD"))
111
+ self.assertTrue(iban_valid("SK8975000000000012345671"))
112
+ self.assertTrue(iban_valid("SI56192001234567892"))
113
+ self.assertTrue(iban_valid("ES7921000813610123456789"))
114
+ self.assertTrue(iban_valid("SE1412345678901234567890"))
115
+ self.assertTrue(iban_valid("CH5604835012345678009"))
116
+ self.assertTrue(iban_valid("TL380080012345678910157"))
117
+ self.assertTrue(iban_valid("TN4401000067123456789123"))
118
+ self.assertTrue(iban_valid("TR320010009999901234567890"))
119
+ self.assertTrue(iban_valid("UA903052992990004149123456789"))
120
+ self.assertTrue(iban_valid("AE460090000000123456789"))
121
+ self.assertTrue(iban_valid("GB98MIDL07009312345678"))
122
+ self.assertTrue(iban_valid("VG21PACG0000000123456789"))
tests/types/test_names.py CHANGED
@@ -20,13 +20,7 @@ class NamesTest(unittest.TestCase):
20
20
  self.assertEqual(names.pick(["Banana"]), "Banana")
21
21
  self.assertEqual(names.pick([]), None)
22
22
  values = ["Robert Smith", "Rob Smith", "Robert SMITH"]
23
- self.assertEqual(names.pick(values), "Robert SMITH")
24
-
25
- # handle dirty edgecases
26
- values = ["", "(", "Peter"]
27
- self.assertEqual(names.pick(values), "Peter")
28
- values = ["", "("]
29
- self.assertEqual(names.pick(values), None)
23
+ self.assertEqual(names.pick(values), "Robert Smith")
30
24
 
31
25
  def test_domain_validity(self):
32
26
  self.assertTrue(names.validate("huhu"))