followthemoney 1.3.6__py3-none-any.whl → 3.8.0__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 (186) hide show
  1. followthemoney/__init__.py +5 -3
  2. followthemoney/cli/__init__.py +17 -0
  3. followthemoney/cli/aggregate.py +56 -0
  4. followthemoney/cli/cli.py +88 -0
  5. followthemoney/cli/exports.py +121 -0
  6. followthemoney/cli/mapping.py +85 -0
  7. followthemoney/cli/sieve.py +67 -0
  8. followthemoney/cli/util.py +142 -0
  9. followthemoney/compare.py +132 -55
  10. followthemoney/exc.py +19 -6
  11. followthemoney/export/common.py +29 -0
  12. followthemoney/export/csv.py +82 -0
  13. followthemoney/export/excel.py +75 -0
  14. followthemoney/export/graph.py +79 -0
  15. followthemoney/export/neo4j.py +182 -0
  16. followthemoney/export/rdf.py +26 -0
  17. followthemoney/graph.py +308 -0
  18. followthemoney/helpers.py +212 -0
  19. followthemoney/mapping/__init__.py +1 -1
  20. followthemoney/mapping/csv.py +67 -35
  21. followthemoney/mapping/entity.py +116 -44
  22. followthemoney/mapping/property.py +90 -44
  23. followthemoney/mapping/query.py +27 -19
  24. followthemoney/mapping/source.py +15 -5
  25. followthemoney/mapping/sql.py +75 -61
  26. followthemoney/messages.py +13 -7
  27. followthemoney/model.py +108 -56
  28. followthemoney/namespace.py +119 -0
  29. followthemoney/offshore.py +48 -0
  30. followthemoney/ontology.py +77 -0
  31. followthemoney/property.py +204 -71
  32. followthemoney/proxy.py +455 -118
  33. followthemoney/rdf.py +9 -0
  34. followthemoney/schema/Address.yaml +78 -0
  35. followthemoney/schema/Airplane.yaml +17 -10
  36. followthemoney/schema/Analyzable.yaml +54 -0
  37. followthemoney/schema/Article.yaml +16 -0
  38. followthemoney/schema/Assessment.yaml +32 -0
  39. followthemoney/schema/Asset.yaml +10 -4
  40. followthemoney/schema/Associate.yaml +41 -0
  41. followthemoney/schema/Audio.yaml +24 -0
  42. followthemoney/schema/BankAccount.yaml +53 -9
  43. followthemoney/schema/Call.yaml +48 -0
  44. followthemoney/schema/CallForTenders.yaml +117 -0
  45. followthemoney/schema/Company.yaml +37 -12
  46. followthemoney/schema/Contract.yaml +41 -7
  47. followthemoney/schema/ContractAward.yaml +30 -11
  48. followthemoney/schema/CourtCase.yaml +16 -10
  49. followthemoney/schema/CourtCaseParty.yaml +17 -6
  50. followthemoney/schema/CryptoWallet.yaml +48 -0
  51. followthemoney/schema/Debt.yaml +37 -0
  52. followthemoney/schema/Directorship.yaml +17 -4
  53. followthemoney/schema/Document.yaml +72 -139
  54. followthemoney/schema/Documentation.yml +38 -0
  55. followthemoney/schema/EconomicActivity.yaml +32 -17
  56. followthemoney/schema/Email.yaml +76 -0
  57. followthemoney/schema/Employment.yaml +39 -0
  58. followthemoney/schema/Event.yaml +35 -3
  59. followthemoney/schema/Family.yaml +41 -0
  60. followthemoney/schema/Folder.yaml +13 -0
  61. followthemoney/schema/HyperText.yaml +21 -0
  62. followthemoney/schema/Identification.yaml +40 -0
  63. followthemoney/schema/Image.yaml +25 -0
  64. followthemoney/schema/Interest.yaml +3 -6
  65. followthemoney/schema/Interval.yaml +56 -5
  66. followthemoney/schema/LegalEntity.yaml +81 -20
  67. followthemoney/schema/License.yaml +7 -3
  68. followthemoney/schema/Membership.yaml +19 -4
  69. followthemoney/schema/Mention.yaml +54 -0
  70. followthemoney/schema/Message.yaml +73 -0
  71. followthemoney/schema/Note.yaml +23 -0
  72. followthemoney/schema/Occupancy.yaml +40 -0
  73. followthemoney/schema/Organization.yaml +38 -3
  74. followthemoney/schema/Ownership.yaml +16 -4
  75. followthemoney/schema/Package.yaml +17 -0
  76. followthemoney/schema/Page.yaml +43 -0
  77. followthemoney/schema/Pages.yaml +23 -0
  78. followthemoney/schema/Passport.yaml +15 -17
  79. followthemoney/schema/Payment.yaml +38 -7
  80. followthemoney/schema/Person.yaml +61 -5
  81. followthemoney/schema/PlainText.yaml +17 -0
  82. followthemoney/schema/Position.yaml +50 -0
  83. followthemoney/schema/Post.yaml +42 -0
  84. followthemoney/schema/Project.yaml +27 -0
  85. followthemoney/schema/ProjectParticipant.yaml +36 -0
  86. followthemoney/schema/PublicBody.yaml +14 -3
  87. followthemoney/schema/RealEstate.yaml +19 -3
  88. followthemoney/schema/Representation.yaml +17 -6
  89. followthemoney/schema/Sanction.yaml +44 -20
  90. followthemoney/schema/Security.yaml +59 -0
  91. followthemoney/schema/Similar.yaml +37 -0
  92. followthemoney/schema/Succession.yaml +36 -0
  93. followthemoney/schema/Table.yaml +32 -0
  94. followthemoney/schema/TaxRoll.yaml +27 -9
  95. followthemoney/schema/Thing.yaml +69 -13
  96. followthemoney/schema/Trip.yaml +42 -0
  97. followthemoney/schema/UnknownLink.yaml +17 -6
  98. followthemoney/schema/UserAccount.yaml +44 -0
  99. followthemoney/schema/Value.yaml +5 -1
  100. followthemoney/schema/Vehicle.yaml +25 -8
  101. followthemoney/schema/Vessel.yaml +18 -10
  102. followthemoney/schema/Video.yaml +20 -0
  103. followthemoney/schema/Workbook.yaml +18 -0
  104. followthemoney/schema.py +406 -135
  105. followthemoney/translations/ar/LC_MESSAGES/followthemoney.mo +0 -0
  106. followthemoney/translations/ar/LC_MESSAGES/followthemoney.po +2900 -787
  107. followthemoney/translations/bs/LC_MESSAGES/followthemoney.mo +0 -0
  108. followthemoney/translations/bs/LC_MESSAGES/followthemoney.po +2108 -520
  109. followthemoney/translations/de/LC_MESSAGES/followthemoney.mo +0 -0
  110. followthemoney/translations/de/LC_MESSAGES/followthemoney.po +2902 -782
  111. followthemoney/translations/es/LC_MESSAGES/followthemoney.mo +0 -0
  112. followthemoney/translations/es/LC_MESSAGES/followthemoney.po +2893 -779
  113. followthemoney/translations/fr/LC_MESSAGES/followthemoney.mo +0 -0
  114. followthemoney/translations/fr/LC_MESSAGES/followthemoney.po +4362 -0
  115. followthemoney/translations/fr/followthemoney.po +3861 -0
  116. followthemoney/translations/messages.pot +3021 -725
  117. followthemoney/translations/nb/LC_MESSAGES/followthemoney.mo +0 -0
  118. followthemoney/translations/nb/LC_MESSAGES/followthemoney.po +3778 -0
  119. followthemoney/translations/nl/LC_MESSAGES/followthemoney.mo +0 -0
  120. followthemoney/translations/nl/LC_MESSAGES/followthemoney.po +3837 -0
  121. followthemoney/translations/pt_BR/LC_MESSAGES/followthemoney.mo +0 -0
  122. followthemoney/translations/pt_BR/LC_MESSAGES/followthemoney.po +3784 -0
  123. followthemoney/translations/ru/LC_MESSAGES/followthemoney.mo +0 -0
  124. followthemoney/translations/ru/LC_MESSAGES/followthemoney.po +2837 -539
  125. followthemoney/translations/ru/followthemoney.po +4221 -0
  126. followthemoney/translations/tr/LC_MESSAGES/followthemoney.mo +0 -0
  127. followthemoney/translations/tr/LC_MESSAGES/followthemoney.po +2073 -491
  128. followthemoney/types/__init__.py +35 -17
  129. followthemoney/types/address.py +41 -21
  130. followthemoney/types/checksum.py +25 -0
  131. followthemoney/types/common.py +233 -88
  132. followthemoney/types/country.py +89 -56
  133. followthemoney/types/date.py +59 -76
  134. followthemoney/types/email.py +66 -35
  135. followthemoney/types/entity.py +66 -13
  136. followthemoney/types/gender.py +66 -0
  137. followthemoney/types/iban.py +47 -28
  138. followthemoney/types/identifier.py +49 -22
  139. followthemoney/types/ip.py +35 -21
  140. followthemoney/types/json.py +58 -0
  141. followthemoney/types/language.py +124 -37
  142. followthemoney/types/mimetype.py +44 -0
  143. followthemoney/types/name.py +56 -12
  144. followthemoney/types/number.py +30 -0
  145. followthemoney/types/phone.py +92 -34
  146. followthemoney/types/registry.py +52 -0
  147. followthemoney/types/string.py +43 -0
  148. followthemoney/types/topic.py +94 -0
  149. followthemoney/types/url.py +39 -17
  150. followthemoney/util.py +139 -45
  151. followthemoney-3.8.0.dist-info/METADATA +153 -0
  152. followthemoney-3.8.0.dist-info/RECORD +157 -0
  153. {followthemoney-1.3.6.dist-info → followthemoney-3.8.0.dist-info}/WHEEL +1 -2
  154. followthemoney-3.8.0.dist-info/entry_points.txt +17 -0
  155. followthemoney-1.3.6.dist-info/LICENSE.txt → followthemoney-3.8.0.dist-info/licenses/LICENSE +1 -1
  156. followthemoney/link.py +0 -75
  157. followthemoney/schema/Associate.yml +0 -19
  158. followthemoney/schema/Family.yml +0 -19
  159. followthemoney/schema/Land.yml +0 -9
  160. followthemoney/schema/Relationship.yaml +0 -26
  161. followthemoney/types/domain.py +0 -50
  162. followthemoney-1.3.6.dist-info/DESCRIPTION.rst +0 -3
  163. followthemoney-1.3.6.dist-info/METADATA +0 -39
  164. followthemoney-1.3.6.dist-info/RECORD +0 -108
  165. followthemoney-1.3.6.dist-info/entry_points.txt +0 -3
  166. followthemoney-1.3.6.dist-info/metadata.json +0 -1
  167. followthemoney-1.3.6.dist-info/namespace_packages.txt +0 -1
  168. followthemoney-1.3.6.dist-info/top_level.txt +0 -3
  169. ns/ontology.py +0 -128
  170. tests/types/test_addresses.py +0 -24
  171. tests/types/test_common.py +0 -27
  172. tests/types/test_countries.py +0 -21
  173. tests/types/test_dates.py +0 -72
  174. tests/types/test_domains.py +0 -23
  175. tests/types/test_emails.py +0 -30
  176. tests/types/test_entity.py +0 -16
  177. tests/types/test_iban.py +0 -109
  178. tests/types/test_identifiers.py +0 -25
  179. tests/types/test_ip.py +0 -26
  180. tests/types/test_languages.py +0 -20
  181. tests/types/test_names.py +0 -33
  182. tests/types/test_phones.py +0 -24
  183. tests/types/test_registry.py +0 -14
  184. tests/types/test_urls.py +0 -23
  185. {ns → followthemoney/export}/__init__.py +0 -0
  186. /tests/types/__init__.py → /followthemoney/py.typed +0 -0
@@ -0,0 +1,153 @@
1
+ Metadata-Version: 2.4
2
+ Name: followthemoney
3
+ Version: 3.8.0
4
+ Summary: A data model for anti corruption data modeling and analysis.
5
+ Project-URL: Documentation, https://followthemoney.tech/
6
+ Project-URL: Repository, https://github.com/alephdata/followthemoney.git
7
+ Project-URL: Issues, https://github.com/alephdata/followthemoney/issues
8
+ Author-email: Organized Crime and Corruption Reporting Project <data@occrp.org>, OpenSanctions <info@opensanctions.org>
9
+ License: MIT License
10
+
11
+ Copyright (c) 2017-2024 Journalism Development Network, Inc.
12
+
13
+ Permission is hereby granted, free of charge, to any person obtaining a copy
14
+ of this software and associated documentation files (the "Software"), to deal
15
+ in the Software without restriction, including without limitation the rights
16
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
17
+ copies of the Software, and to permit persons to whom the Software is
18
+ furnished to do so, subject to the following conditions:
19
+
20
+ The above copyright notice and this permission notice shall be included in all
21
+ copies or substantial portions of the Software.
22
+
23
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
28
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
29
+ SOFTWARE.
30
+ License-File: LICENSE
31
+ Classifier: Intended Audience :: Developers
32
+ Classifier: License :: OSI Approved :: MIT License
33
+ Classifier: Operating System :: OS Independent
34
+ Classifier: Programming Language :: Python :: 3.10
35
+ Classifier: Programming Language :: Python :: 3.11
36
+ Classifier: Programming Language :: Python :: 3.12
37
+ Requires-Python: >=3.10
38
+ Requires-Dist: babel<3.0.0,>=2.14.0
39
+ Requires-Dist: banal<1.1.0,>=1.0.6
40
+ Requires-Dist: click<9.0.0,>=8.0
41
+ Requires-Dist: countrynames<2.0.0,>=1.13.0
42
+ Requires-Dist: fingerprints<2.0.0,>=1.0.1
43
+ Requires-Dist: networkx<3.5,>=2.5
44
+ Requires-Dist: normality<3.0.0,>=2.4.0
45
+ Requires-Dist: openpyxl<4.0.0,>=3.0.5
46
+ Requires-Dist: orjson<4.0,>=3.7
47
+ Requires-Dist: phonenumbers<9.0.0,>=8.12.22
48
+ Requires-Dist: prefixdate<1.0.0,>=0.4.0
49
+ Requires-Dist: python-stdnum<2.0.0,>=1.16
50
+ Requires-Dist: pytz>=2021.1
51
+ Requires-Dist: pyyaml<7.0.0,>=5.0.0
52
+ Requires-Dist: rdflib<7.2.0,>=6.2.0
53
+ Requires-Dist: requests<3.0.0,>=2.21.0
54
+ Requires-Dist: rigour<1.0.0,>=0.8.1
55
+ Requires-Dist: sqlalchemy2-stubs
56
+ Requires-Dist: sqlalchemy<3.0.0,>=1.4.49
57
+ Requires-Dist: stringcase<2.0.0,>=1.2.0
58
+ Requires-Dist: types-pyyaml
59
+ Provides-Extra: dev
60
+ Requires-Dist: build; extra == 'dev'
61
+ Requires-Dist: bump2version; extra == 'dev'
62
+ Requires-Dist: coverage>=4.1; extra == 'dev'
63
+ Requires-Dist: flake8>=2.6.0; extra == 'dev'
64
+ Requires-Dist: mypy; extra == 'dev'
65
+ Requires-Dist: pip>=10.0.0; extra == 'dev'
66
+ Requires-Dist: pytest; extra == 'dev'
67
+ Requires-Dist: pytest-cov; extra == 'dev'
68
+ Requires-Dist: recommonmark>=0.4.0; extra == 'dev'
69
+ Requires-Dist: responses>=0.9.0; extra == 'dev'
70
+ Requires-Dist: transifex-client; extra == 'dev'
71
+ Requires-Dist: twine; extra == 'dev'
72
+ Requires-Dist: types-openpyxl; extra == 'dev'
73
+ Requires-Dist: types-pyyaml; extra == 'dev'
74
+ Requires-Dist: types-requests; extra == 'dev'
75
+ Requires-Dist: types-setuptools; extra == 'dev'
76
+ Requires-Dist: wheel>=0.29.0; extra == 'dev'
77
+ Description-Content-Type: text/markdown
78
+
79
+ # Follow the Money
80
+
81
+ [![ftm-build](https://github.com/alephdata/followthemoney/actions/workflows/build.yml/badge.svg)](https://github.com/alephdata/followthemoney/actions/workflows/build.yml)
82
+
83
+ This repository contains a pragmatic data model for the entities most
84
+ commonly used in investigative reporting: people, companies, assets,
85
+ payments, court cases, etc.
86
+
87
+ The purpose of this is not to model reality in an ideal data model, but
88
+ rather to have a working data structure for researchers.
89
+
90
+ `followthemoney` also contains code used to validate and normalize many
91
+ of the elements of data, and to map tabular data into the model.
92
+
93
+ ## Documentation
94
+
95
+ For a general introduction to `followthemoney`, check the high-level introduction:
96
+
97
+ * https://followthemoney.tech
98
+
99
+ Part of this package is a command-line tool that can be used to process and
100
+ transform data in various ways. You can find a tutorial here:
101
+
102
+ * https://followthemoney.tech/docs/cli/
103
+
104
+ Besides the introductions, there is also a full reference documentation for the
105
+ library and the contained ontology:
106
+
107
+ * https://followthemoney.tech/explorer/
108
+
109
+ There's also a number of viewers for the RDF schema definitions generated
110
+ from FollowTheMoney, e.g.:
111
+
112
+ * [LODE documentation](http://150.146.207.114/lode/extract?url=https%3A%2F%2Falephdata.github.io%2Ffollowthemoney%2Fns%2Fftm.xml&owlapi=true&imported=true&lang=en)
113
+ * [WebVOWL](https://service.tib.eu/webvowl/#iri=https://alephdata.github.io/followthemoney/ns/ftm.xml)
114
+ * RDF/OWL specification in [XML](https://alephdata.github.io/followthemoney/ns/ftm.xml).
115
+
116
+ ## Development environment
117
+
118
+ For local development with a virtualenv:
119
+
120
+ ```bash
121
+ python3 -mvenv .env
122
+ source .env/bin/activate
123
+ pip install -e ".[dev]"
124
+ ```
125
+
126
+ Now you can run the tests with
127
+
128
+ ```bash
129
+ make test
130
+ ```
131
+
132
+ ## Releasing
133
+
134
+ We release a lot of version of `followthemoney` because even small changes
135
+ to the code base require a pypi release to begin being used in `aleph`. To
136
+ this end, here's the steps for making a release:
137
+
138
+ ```bash
139
+ git pull --rebase
140
+ make build
141
+ make test
142
+ git add . && git commit -m "Updating translation files"
143
+ bumpversion patch
144
+ git push --atomic origin main $(git describe --tags --abbrev=0)
145
+ ```
146
+
147
+ This will create a new patch release and upload a distribution of it. If
148
+ the changes are more significant, you can run `bumpversion` with the `minor`
149
+ or `major` arguments.
150
+
151
+ When the schema is updated, please update the docs, ideally including the
152
+ diagrams. For the RDF namespace and JavaScript version of the model,
153
+ run `make generate`.
@@ -0,0 +1,157 @@
1
+ followthemoney/__init__.py,sha256=-5MmNEJ1l81MQncQPSsLxZ-nf7ct3KDn1FrEZ5NRvNc,360
2
+ followthemoney/compare.py,sha256=1GFkCfTzA8QR0CH90kvySR8hvl9hQRUerW5Xw2Ivmpg,5134
3
+ followthemoney/exc.py,sha256=ynZs_UnTVxHR-iBfat_CpVLraYzVX5yLtVf5Ti14hl4,734
4
+ followthemoney/graph.py,sha256=VNDKrUBkz_-DmKsr5v-Xm8VfxzabnTwkU_MFk92_TjA,10848
5
+ followthemoney/helpers.py,sha256=Btb6BlHg_c-qCXZo-NP_LURKG-qu-QD3Fj1ev_c7Xic,7956
6
+ followthemoney/messages.py,sha256=zUEa9CFecU8nRafIzhN6TKCh1kEihiIyIS1qr8PxY4g,806
7
+ followthemoney/model.py,sha256=p4Bk0XPi9z7SKZVgG1FqeM2i45xwAlDIkHwyyUcDKk0,6426
8
+ followthemoney/namespace.py,sha256=qYplxKn5OO3zDMf3NItKwTwDsJOnski5JbeyhssqhR8,4434
9
+ followthemoney/offshore.py,sha256=Pf0tx-7GyhIZRueshDRqPNlxkHfGstmW5yNDID5Mnws,1060
10
+ followthemoney/ontology.py,sha256=7PEoUKISNpkRvVhuLeE3IE9ZiNtdR8mn9_kzZ9yF9l0,2986
11
+ followthemoney/property.py,sha256=zi9ss1v0e8Wmv-FuLtZd2aod5iTLfBekBxuOTgIOUMU,7718
12
+ followthemoney/proxy.py,sha256=M7RIPF0k-P3v7GYKYhRVVaO1cnUf5FArJepE-2c0KMQ,20033
13
+ followthemoney/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
+ followthemoney/rdf.py,sha256=_BzWiBc61UYjiyadvGKya4P4JlJfvZtNrn8SP2hC2JM,328
15
+ followthemoney/schema.py,sha256=Tk61vRmWaawW-1HOmu-hbYZtkD8it0fIvNtSRxBEQxA,16774
16
+ followthemoney/util.py,sha256=dMaCas9EjUPQ9q_a4qtV1pQOxWfxPjyjwR0e84XSN9c,4396
17
+ followthemoney/cli/__init__.py,sha256=Fl05wMr5-FlOSMRpmu1HJSNfPRpy8u9as5IRbGXdo4U,421
18
+ followthemoney/cli/aggregate.py,sha256=Gwfi5Bt1LCwqbpsCu4P1Cr-QJtCWhbaqgGEzfwJUUL4,2142
19
+ followthemoney/cli/cli.py,sha256=yrPw2iyKY-E-uRWe6KN9W3ayvz-22vfpe_ZeD0RiI0c,3591
20
+ followthemoney/cli/exports.py,sha256=HsTyIOz1KQSeObp9-9SKzSUBW158XOhpU5_Stv_2HWM,4016
21
+ followthemoney/cli/mapping.py,sha256=aEl57en0zu57yMA2AU5y01U5Yyqo_42hkMlAdfIQP08,3284
22
+ followthemoney/cli/sieve.py,sha256=Wh1UQxzyM9Gh60ooS4s4ydlW1b69bMzFM08tg8ttSIY,1940
23
+ followthemoney/cli/util.py,sha256=CFcS-PEwpMasMWX_Yg283O_PaAhcPwkvahFNWc13C8c,4769
24
+ followthemoney/export/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
+ followthemoney/export/common.py,sha256=_YrXrwsqmyboDZDhtJ_PazUUJYe1Y-Trqc9lz4YlVR8,991
26
+ followthemoney/export/csv.py,sha256=AvWgyWg0nICAVLv4k9QgWRlgJhJonKCjzlZkrahe5Tg,2633
27
+ followthemoney/export/excel.py,sha256=pj6zNpIbye_Zm3vhCamcqHEe9Fw-RyjtWQDCFY6608s,2645
28
+ followthemoney/export/graph.py,sha256=v0z1FgadyFk5aQ0A5q8E9R4fSO-Tpi5JU9YTDwnRKD8,2765
29
+ followthemoney/export/neo4j.py,sha256=JCLb1eW5FFIJXqmnpNMRzRs1KYuYkCtHZp7KJcu-JNY,7104
30
+ followthemoney/export/rdf.py,sha256=E6RiW7oIsJdaBaLAVm6o-MTokARZtqONPuayILqTqo0,786
31
+ followthemoney/mapping/__init__.py,sha256=iwNqzzvrzJNbNDlOCaDLlBTUrNTlnYHIB5cvo_-9oN4,82
32
+ followthemoney/mapping/csv.py,sha256=Tvc6VSh7-ca63LEE4G0yqOCeGMETkuKzUjIkVn4_d7Q,3185
33
+ followthemoney/mapping/entity.py,sha256=-x_VBHiVthIrZZ-PVKD3oBAq6LYcsyeYW-9TFv80k7M,5905
34
+ followthemoney/mapping/property.py,sha256=41V16HJh6da7oKdSJWyRcyMkx2XFd6iDm9-4PH7Wihw,5036
35
+ followthemoney/mapping/query.py,sha256=8M6bOlEX2p_bbVwEwTu_1slEtU0cfRJB7ajZp-F07CE,2622
36
+ followthemoney/mapping/source.py,sha256=sri-XpSjeHZbQtqNcz1eJYvwVSBNqGO5JwhWswiEx3c,649
37
+ followthemoney/mapping/sql.py,sha256=m3Ho8B2pFsg6q2zj-y55h0O3x9eb6wzjlPBQyZ6DVcI,4752
38
+ followthemoney/schema/Address.yaml,sha256=9cPZfkNiV-5fNfSzBFcE_dwD0V2_WLpGSLT6kL8GbuQ,1709
39
+ followthemoney/schema/Airplane.yaml,sha256=i3tI4INH6ZtKBqm09fAUtCbieFlha-vPfQURXMDZTIU,622
40
+ followthemoney/schema/Analyzable.yaml,sha256=WvyhjYqI7QzBt3qPDgO7MDasJH1qQtgQMToHkV_xtlU,1237
41
+ followthemoney/schema/Article.yaml,sha256=jTH63eP2aZ87W_6m8jS4R_btcrI46tYGeCEqKNLTwLU,266
42
+ followthemoney/schema/Assessment.yaml,sha256=-RH_aEz4xGejucRcwl45KVAnzSLeQ7zwJWguuKST3m0,630
43
+ followthemoney/schema/Asset.yaml,sha256=xQhHJJtnGLfiOaUncqGv4JR3Yn7l46yAg7p0hKFAFVE,260
44
+ followthemoney/schema/Associate.yaml,sha256=ijTHd6GDlK4lMtijdkTzERR9DODtqKk0XoZPlDEsUnI,901
45
+ followthemoney/schema/Audio.yaml,sha256=Eb1rZGUEOX7XDAj_1YIN28NCBzMvkopQBNwgHt_kS18,452
46
+ followthemoney/schema/BankAccount.yaml,sha256=Pvw9FxJYwwnJMoo3IblyPki9VRjLsM4F30jzKZWv9dE,1452
47
+ followthemoney/schema/Call.yaml,sha256=kbVCnVxucBrEplxehXHThLSJAJjy_GhWan-IeZZjr0M,980
48
+ followthemoney/schema/CallForTenders.yaml,sha256=2IWonTzfSbrkynMoEWqv5fekUeFM_xDKpKIbRe1XDbo,3227
49
+ followthemoney/schema/Company.yaml,sha256=ozXP_PHly_cOa3xjKkxaUnlwXc-0jsLYt_682Auql48,3276
50
+ followthemoney/schema/Contract.yaml,sha256=-wVVUBu_KvmiWEjXrw1zgY2m9AAkiHCDd-hxFCUzj6k,1586
51
+ followthemoney/schema/ContractAward.yaml,sha256=b2spaZHYCaP1yR1RCsrI7mUjk-fAF7BUE3dc8Vl3cUQ,1689
52
+ followthemoney/schema/CourtCase.yaml,sha256=lcovnY0Ne_xcggvkqfCW_RHvsRKo8kFTCPCyovAXRtI,599
53
+ followthemoney/schema/CourtCaseParty.yaml,sha256=MpodN2251V_MYD2dBOHZ_qD7Uv6cLg8Gd_b-I8HZjPI,588
54
+ followthemoney/schema/CryptoWallet.yaml,sha256=1Akp0Bzd_x_0GgsUOxW0zkvNDozoMP_8fJyrSn0dAy4,1068
55
+ followthemoney/schema/Debt.yaml,sha256=gSGl1xKPaPWAYYEcX7MxezVn3Gu-CYBIzxGzMd9UTm4,657
56
+ followthemoney/schema/Directorship.yaml,sha256=BMx2AQTLy5ta_lWPnYKj7LFjZWTwtu1hgWncISdKf28,773
57
+ followthemoney/schema/Document.yaml,sha256=MA-vZrK_Imd2HuIhJ7c_BH9Cpecv-DewXJhfjECXjuw,2927
58
+ followthemoney/schema/Documentation.yml,sha256=AZ1kHiKcvkyv3SINLwAwUyoWMVrF8O0mSJhMN4jNNaE,760
59
+ followthemoney/schema/EconomicActivity.yaml,sha256=hm2x-p-49fGOZcy6xVtiplpJs4XsQVFYLgb8D41az0k,4049
60
+ followthemoney/schema/Email.yaml,sha256=IqEHgqUsapbTnCBO7OuV-GvoxLH8LIQscZOyAiateqw,1549
61
+ followthemoney/schema/Employment.yaml,sha256=rQXGva4uOKzQbkow4AM4Iez5t7kzm0HTqhhWzvgosl4,674
62
+ followthemoney/schema/Event.yaml,sha256=NclU-s8puxBk-KlJuz3EF1dqM99d5DCwD_xFh-TXTOU,751
63
+ followthemoney/schema/Family.yaml,sha256=cgZ7ZM_2p_dzUGrLVj8QL86gpeDM-AoK8AbyHjh5b6E,983
64
+ followthemoney/schema/Folder.yaml,sha256=W12iJHTYua7bF7oTpgiDbarEkfa0Q2gSmfLdl537HQY,180
65
+ followthemoney/schema/HyperText.yaml,sha256=Wg5dWeLrVjbXiI-ao69tosJ7rI0DvNU8cCo8AhUXwh4,319
66
+ followthemoney/schema/Identification.yaml,sha256=6txjZs6-3Kn94c3G4tDeDt9Jb4FW55-xjSnYVrvmiEA,853
67
+ followthemoney/schema/Image.yaml,sha256=wuznboWECGiV96_GQiXq1-oKNoxO8zKisR4xyusnEn8,394
68
+ followthemoney/schema/Interest.yaml,sha256=VUrehmsN1WgtS1oAa5jn_JGtSkZGGYLGNahp-R5JhOQ,282
69
+ followthemoney/schema/Interval.yaml,sha256=WtmSoBngajhpNLtDZ8Ocpdd0I0tLG-7A4afuHXxssow,1919
70
+ followthemoney/schema/LegalEntity.yaml,sha256=1AouOu97lbKeLP1VNaprN_oACdTvcptGHob-Wbkc17Q,4298
71
+ followthemoney/schema/License.yaml,sha256=9Ye5vGEBhi7ttGqf0DdAGCJCN3zz5HtGu52dCcmCsQk,452
72
+ followthemoney/schema/Membership.yaml,sha256=IPmaOX4Ai2r4sGcA5ig2WmLvWHb38akdxp4smEdDWOE,710
73
+ followthemoney/schema/Mention.yaml,sha256=nBeulR_Jm4x75aJ7yNF0TAVhHJqXQaEzOutLIn_YU-4,1086
74
+ followthemoney/schema/Message.yaml,sha256=89k3kdN2w_Vfz1UjbUUPojZtMsAvmZGiDSkHeSNMl8w,1484
75
+ followthemoney/schema/Note.yaml,sha256=NohwtFupxIssZuEgQowiQWqKit4uQ-OatAu3yp9eJj4,411
76
+ followthemoney/schema/Occupancy.yaml,sha256=-alsy15cz3RXC_2xYN6rXxwxSOW_hazCNyIvmp7Jawo,773
77
+ followthemoney/schema/Organization.yaml,sha256=wPXU1ni0-3QzvttDq-gIjbAYHzcWoo3nsLGLw6cnHKI,1064
78
+ followthemoney/schema/Ownership.yaml,sha256=tLWESE9VX0aUuhe6C1pToq2-auPVZBdE3xvBmTRfmPc,1057
79
+ followthemoney/schema/Package.yaml,sha256=gPr-P3lcg7OOAav_KVa8baK4yK57JwfcXwxXheD96UQ,310
80
+ followthemoney/schema/Page.yaml,sha256=sQt_CnVyjDVGVECLQoGYZH4hxpjdPhxVRz4XJW-_1OU,1107
81
+ followthemoney/schema/Pages.yaml,sha256=KKPGZ06Ehp5mWIGnYfHUBN9jT03bk8nakw0pB5bA_7E,450
82
+ followthemoney/schema/Passport.yaml,sha256=gFVnLRkNzLfjQqDOArk8IIXghqCTcpAu0TDsizAIju4,786
83
+ followthemoney/schema/Payment.yaml,sha256=WRBJuj9ljsxLBs-0g9Z9UD87uR1RTtuUiYnWOnKr1qA,1757
84
+ followthemoney/schema/Person.yaml,sha256=EsMcdOzGa8v8zQ_AgvDHSUFL0SflPMhdSdC7TWwW0sU,2354
85
+ followthemoney/schema/PlainText.yaml,sha256=hfnVi-HmQeDbqDquSpkPJax9hNm86ioXGr4hzNzyPFE,278
86
+ followthemoney/schema/Position.yaml,sha256=ZpxjWOLxwva_on32r9WD5ys0Ty3YxCju41mg9HG-pe0,1308
87
+ followthemoney/schema/Post.yaml,sha256=cbxy8cWXHFKSvr1ylwDilRURhcsyd9-H7fn_Lb4lsFE,1034
88
+ followthemoney/schema/Project.yaml,sha256=2svtyGJopS0UrqPiuYGpBzj30V7k3LRDX4N1U56y4yY,462
89
+ followthemoney/schema/ProjectParticipant.yaml,sha256=xNehEu90uqUfboNouezhZQ8ZQLxzWq1yyNO4kua-Lyc,727
90
+ followthemoney/schema/PublicBody.yaml,sha256=BNfLBqH1OapoEninAjWmqZx_n-G5QUnzzydW7300TiY,301
91
+ followthemoney/schema/RealEstate.yaml,sha256=NWFHXqEHskYQN-kvQESZpu74nztShqoYSZEjZAr-DHM,1363
92
+ followthemoney/schema/Representation.yaml,sha256=sCvFnUDQaElq2cqSB0rILcMYb2gaMZqlzxlHxyX9IGg,792
93
+ followthemoney/schema/Sanction.yaml,sha256=fKkfVPQvY_R2zyQfEkuradilBAwVQWRkWw1Z4_Fn1V8,1259
94
+ followthemoney/schema/Security.yaml,sha256=w8Och0cslWjHPAs60HZ6JarEXdIbqGlIbN1NlvgN_7Y,1212
95
+ followthemoney/schema/Similar.yaml,sha256=gD8rZEaPQWzU-rEfsKdn62uEucF3KxYBcPMoSdnxvME,817
96
+ followthemoney/schema/Succession.yaml,sha256=RMJQqZ4Fv88N1RvWTAgjYg9BB5cELSj5CCAjM681Fpg,749
97
+ followthemoney/schema/Table.yaml,sha256=GcsIAgSO9t2tvObA9zU2HhxlSqTe9CePmUnagu1Z0vI,641
98
+ followthemoney/schema/TaxRoll.yaml,sha256=ugMzaaS7uyq2OLD50eGLcfvd6Cg0cSt65-T9GVqpRSA,746
99
+ followthemoney/schema/Thing.yaml,sha256=PeseDMTO8rDzoTrxRjL9efyJQ0_lGgRQRTzwLu5OwiU,2458
100
+ followthemoney/schema/Trip.yaml,sha256=nLQD_ApmVJ8D56Czl7K700hhNZjzFV9FOQ3NBSQDLiM,771
101
+ followthemoney/schema/UnknownLink.yaml,sha256=lneS_HZNgeLyJxwzWnLx0ZoyY3MXt99I_K2X_o9z5g8,682
102
+ followthemoney/schema/UserAccount.yaml,sha256=V1JWwwcggCO4G9ByJY9zlQ0uOVp8HQK2mRXwqaGJnBM,763
103
+ followthemoney/schema/Value.yaml,sha256=cNHTCtakMTXDW0Qpb6ArZodi9rMJ-Ebvp1WsOIRRzw4,310
104
+ followthemoney/schema/Vehicle.yaml,sha256=Ypl4A5HJFOZfZh3DK0ewN-hyJuCMcovR0mPNddIZrOA,1051
105
+ followthemoney/schema/Vessel.yaml,sha256=nFaUJ_0BzFJstvog1iDvwV9DHKHr9ky4DLb1NZGGh1E,1096
106
+ followthemoney/schema/Video.yaml,sha256=LY3DYMWTHXiAhL0hxBCNCz50cp2sPbUlEhhig5Fbjos,327
107
+ followthemoney/schema/Workbook.yaml,sha256=iikWPElz4klA7SkWH7eae6xqhbkMCIP_3zdeXzFEMU0,354
108
+ followthemoney/translations/messages.pot,sha256=JhtY9NJ9wP_EAX4APxOqMyvKcX53oIC9kAxBsliJkf4,107703
109
+ followthemoney/translations/ar/LC_MESSAGES/followthemoney.mo,sha256=uhb2crSNh8K2ts_QUeD2wvgWgzzpLJWRzXok-Uyx3Zk,38795
110
+ followthemoney/translations/ar/LC_MESSAGES/followthemoney.po,sha256=DuIfvR5v0sPGwFbeg3y6_jCbeglvHWXQ2LDH6prfwLc,121326
111
+ followthemoney/translations/bs/LC_MESSAGES/followthemoney.mo,sha256=xBctvF0GUKbZl6cszj_s3oB6I6Z7iJ8O_pXKRZcR4QU,10751
112
+ followthemoney/translations/bs/LC_MESSAGES/followthemoney.po,sha256=cQdXsSU0gDtH-cdCuyhHDotRjDCz_xrEOZBP62JocXc,93144
113
+ followthemoney/translations/de/LC_MESSAGES/followthemoney.mo,sha256=6SiKvdkHPo6Ru4Jep_P_J-eJnd0TZv-bUdMHELrLoSY,36069
114
+ followthemoney/translations/de/LC_MESSAGES/followthemoney.po,sha256=pB9sZkXx-eS5-WVhGWme03HOiP0XEIluijRHHJlqr_c,115528
115
+ followthemoney/translations/es/LC_MESSAGES/followthemoney.mo,sha256=PYf8-_3V_thdDe6L2DbAAx4_G7_XuNduttlHqSMJ2WI,32142
116
+ followthemoney/translations/es/LC_MESSAGES/followthemoney.po,sha256=AyH6mEivN3tEemqVY6CVrcoVnu2dMjcN1NzuR32Qzz8,115178
117
+ followthemoney/translations/fr/followthemoney.po,sha256=uLWYl4ibZHfQObR_LWvXOq7SvdYC_VaAaisPUzZQDTY,106799
118
+ followthemoney/translations/fr/LC_MESSAGES/followthemoney.mo,sha256=TAsq2ALl1g6JdoEJWl3sSASmIv5a0BBUU8nScjGSruo,42515
119
+ followthemoney/translations/fr/LC_MESSAGES/followthemoney.po,sha256=NBH5chbuqUBqxYZgMnDo2RtQz7UuMGMeHLeFwrEflR8,119960
120
+ followthemoney/translations/nb/LC_MESSAGES/followthemoney.mo,sha256=u8912O6hTkuuxDpT6804JzvZ-jitITqe6I1i30hXPSg,498
121
+ followthemoney/translations/nb/LC_MESSAGES/followthemoney.po,sha256=Tvm7-UzSUGqCcY1wK7rbVP3JFKW-wxCxU1gDJw_9_XQ,89793
122
+ followthemoney/translations/nl/LC_MESSAGES/followthemoney.mo,sha256=nupwBw55tZSJoCocIHO4txPd_Zxl7wuBOXbOHzjRTYE,486
123
+ followthemoney/translations/nl/LC_MESSAGES/followthemoney.po,sha256=qOBe7fZ4AXL9J8pqH2Lv8LFzaHm_C0O8R6dHwlLnQA8,90873
124
+ followthemoney/translations/pt_BR/LC_MESSAGES/followthemoney.mo,sha256=E6v_Qz5JIV-UmhfUovtth7AYIw947f2K5UKnEjpU9V0,505
125
+ followthemoney/translations/pt_BR/LC_MESSAGES/followthemoney.po,sha256=pG6tnzGFvsKrNRNwq8_JMH2_IjaOpGm_ztZfR5B20FY,89844
126
+ followthemoney/translations/ru/followthemoney.po,sha256=NYISuFWe_4sPleIqmHjDsIsMBE_oS6yZxbdpizACpUY,130617
127
+ followthemoney/translations/ru/LC_MESSAGES/followthemoney.mo,sha256=bXJ9UXFg_MMxzxgqpyyMhv-qT0llqwZFMRocJp-K4PM,67338
128
+ followthemoney/translations/ru/LC_MESSAGES/followthemoney.po,sha256=7SQWytOTvoAQq60GJMh22a1nAzhdEUb5BO4ldpiCtnA,141918
129
+ followthemoney/translations/tr/LC_MESSAGES/followthemoney.mo,sha256=SC84e_ZF_oFJG1NKdyZY_W6Kb6POORZB6wdeAcEWmnE,487
130
+ followthemoney/translations/tr/LC_MESSAGES/followthemoney.po,sha256=AZC3marhtVVq8Ck1FOgnt4sbDMz548nX48O9GDwImbQ,89826
131
+ followthemoney/types/__init__.py,sha256=X9XeM6JktzirAw5gGkyDKGM70NuiJ9Tbjoq0IwVclxU,1745
132
+ followthemoney/types/address.py,sha256=P6ctzojJks70RZIwk5Bhc9djxejZo4Te0m5pQ9M7bAM,1651
133
+ followthemoney/types/checksum.py,sha256=OqjCsBPyMIV3_Y20kTTvjkyayy32pBtaI5KKwYQb6lY,937
134
+ followthemoney/types/common.py,sha256=Yk-7LZ6uDgFzKXUZxQ_j5miN2ZMnlBOziU0iFC7FE9I,10202
135
+ followthemoney/types/country.py,sha256=PlkqZ9_06UO3f47YFYyL3gWwpm151FFlWAV3fodtPfQ,3409
136
+ followthemoney/types/date.py,sha256=4lZCd0aws-T3HE2BYkb-a-t8iQDr0nqFSAEBoUKiTlM,2683
137
+ followthemoney/types/email.py,sha256=zAnMHwC_FZh7IagpDRhGZf-GfQR6uW8d-lZP4UCdGcM,2745
138
+ followthemoney/types/entity.py,sha256=FA8xXNCkiM7HlF6k5lxTlb_B_LKlUwaoOMaVqAdjgYc,2477
139
+ followthemoney/types/gender.py,sha256=AVCa6ocsxueVhGW7RA2BIbQEfDRQANDpKkGY7ZakTYE,1820
140
+ followthemoney/types/iban.py,sha256=QYD49erJCB6I2nbtTagRMvpa4RyjezfB4Fpat2QLwAc,1797
141
+ followthemoney/types/identifier.py,sha256=Gk4h75_KyjkdtomrK9Ldsh9rD7-bsenFryevJFwqlX0,2036
142
+ followthemoney/types/ip.py,sha256=BxGARP9JWEWvyRnr7A7xUNwmTxyFd9kwXSZrKR0TK2Q,1412
143
+ followthemoney/types/json.py,sha256=Hefwns1-ziJf310MWvdfX5ICkOgj9cnnMJuqq1e6qKY,1676
144
+ followthemoney/types/language.py,sha256=CaNKofIzgH8M0yC7YcDt3o2faVCm-NL9xsaC9ypnTyc,2849
145
+ followthemoney/types/mimetype.py,sha256=EZ5hIdn-wosfLc-GjXDaOzevxaSXPbSPHDUJmPT1h0I,1355
146
+ followthemoney/types/name.py,sha256=_Vu-MPYbgdN55gNBT2qHh-RDgbLQgT2l_kftnqJIEdw,2240
147
+ followthemoney/types/number.py,sha256=9l5v3hcAoJ4V6jaBS_-Kc1gtdJlQrY9L98ElC5e_PLQ,943
148
+ followthemoney/types/phone.py,sha256=2YFbPBtMepvCWTdcxXq3Fq4AU8B4QYk1FARBpsH8xjs,4040
149
+ followthemoney/types/registry.py,sha256=hvQ1oIWz_4PpyUnKA5azbaZCulNb5LCIPyC-AQYVVyw,1936
150
+ followthemoney/types/string.py,sha256=grDn1OgKWxIzVxGEdp0HjVKIqtQ9W4SW2ty4quv3Pcs,1202
151
+ followthemoney/types/topic.py,sha256=6g57JKTFF_I233-afvuaswFxMaN_Kmg5MZ4_iAKZh9c,3754
152
+ followthemoney/types/url.py,sha256=r7Pd6Yfn--amwMi_nHoTLMwm5SH8h50SMgQaa2G4PJ0,1492
153
+ followthemoney-3.8.0.dist-info/METADATA,sha256=8VnbpVAf1DUAE8xYD6U2OE-5bBGdGlcMMx10e_EIqaY,6145
154
+ followthemoney-3.8.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
155
+ followthemoney-3.8.0.dist-info/entry_points.txt,sha256=xvTXjAz0CiZplq4V3iQXlmBexaJyW3zNucIvcDP6L_c,593
156
+ followthemoney-3.8.0.dist-info/licenses/LICENSE,sha256=3tfmmk9RtT1eh67a-NDRwcmOLzztbCtqlHW6O1U92ZA,1098
157
+ followthemoney-3.8.0.dist-info/RECORD,,
@@ -1,5 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.30.0)
2
+ Generator: hatchling 1.27.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
-
@@ -0,0 +1,17 @@
1
+ [console_scripts]
2
+ followthemoney = followthemoney.cli.cli:cli
3
+ ftm = followthemoney.cli.cli:cli
4
+ ftmutil = followthemoney.cli.cli:cli
5
+
6
+ [babel.extractors]
7
+ ftmmodel = followthemoney.messages:extract_yaml
8
+
9
+ [followthemoney.cli]
10
+ aggregate = followthemoney.cli.aggregate:aggregate
11
+ csv = followthemoney.cli.exports:export_csv
12
+ cypher = followthemoney.cli.exports:export_cypher
13
+ excel = followthemoney.cli.exports:export_excel
14
+ gexf = followthemoney.cli.exports:export_gexf
15
+ mapping = followthemoney.cli.mapping:run_mapping
16
+ rdf = followthemoney.cli.exports:export_rdf
17
+ sieve = followthemoney.cli.sieve:sieve
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2017-2018 Journalism Development Network, Inc.
3
+ Copyright (c) 2017-2024 Journalism Development Network, Inc.
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
followthemoney/link.py DELETED
@@ -1,75 +0,0 @@
1
- from followthemoney.types import registry
2
-
3
-
4
- class Link(object):
5
- """A wrapper object for an RDF-like statement, similar to a triple
6
- but with weighting and some other metadata. This has built-in
7
- support for packing, i.e. transforming the link to a form suitable
8
- for storage in a key/value store.
9
- """
10
- __slots__ = ['ref', 'prop', 'value', 'weight', 'inverted', 'inferred']
11
-
12
- def __init__(self, ref, prop, value, weight=1.0,
13
- inverted=False, inferred=False):
14
- self.ref = ref
15
- self.prop = prop
16
- self.value = value
17
- self.weight = weight
18
- self.inverted = inverted
19
- self.inferred = inferred
20
-
21
- @property
22
- def subject(self):
23
- return registry.deref(self.ref)[1]
24
-
25
- @property
26
- def value_ref(self):
27
- return self.prop.type.ref(self.value)
28
-
29
- def rdf(self):
30
- """Convert to an RDF triple. This looses weighting and inferrence
31
- metadata."""
32
- if self.inverted:
33
- return
34
- subject_type, subject = registry.deref(self.ref)
35
- subject_uri = subject_type.rdf(subject)
36
- value_obj = self.prop.type.rdf(self.value)
37
- return (subject_uri, self.prop.uri, value_obj)
38
-
39
- def to_tuple(self):
40
- return (self.prop.qname, self.weight, self.inverted, self.inferred,
41
- self.value)
42
-
43
- @classmethod
44
- def from_tuple(cls, model, ref, data):
45
- qname, weight, inverted, inferred, value = data
46
- prop = model.get_qname(qname)
47
- return cls(ref, prop, value,
48
- weight=weight,
49
- inverted=inverted,
50
- inferred=inferred)
51
-
52
- def invert(self):
53
- if not self.inverted and self.prop.reverse is not None:
54
- return Link(self.value_ref,
55
- self.prop.reverse,
56
- self.subject,
57
- weight=self.weight)
58
- return Link(self.value_ref,
59
- self.prop,
60
- self.subject,
61
- weight=self.weight,
62
- inverted=not self.inverted)
63
-
64
- def __repr__(self):
65
- return '<Link(%r, %r, %r)>' % (self.ref, self.prop, self.value)
66
-
67
- def __hash__(self):
68
- return hash(self.to_tuple())
69
-
70
- def __eq__(self, other):
71
- return self.ref == other.ref \
72
- and self.prop == other.prop \
73
- and self.value == other.value \
74
- and self.weight == other.weight \
75
- and self.inverted == other.inverted
@@ -1,19 +0,0 @@
1
- Associate:
2
- label: "Associate"
3
- description: "Non-family association between two people"
4
- extends: Relationship
5
- icon: fa-hand-holding-usd
6
- matchable: false
7
- featured:
8
- - person
9
- - associate
10
- - relationship
11
- properties:
12
- associate:
13
- label: "Associate"
14
- description: "An associate of the subject person."
15
- type: entity
16
- schema: Person
17
- reverse:
18
- name: associates
19
- label: "Associates"
@@ -1,19 +0,0 @@
1
- Family:
2
- label: "Family"
3
- description: "Family relationship between two people"
4
- extends: Relationship
5
- icon: fa-home-heart
6
- matchable: false
7
- featured:
8
- - person
9
- - relative
10
- - relationship
11
- properties:
12
- relative:
13
- label: "Relative"
14
- type: entity
15
- schema: Person
16
- reverse:
17
- name: familyRelative
18
- label: "Relatives"
19
- description: "The relative of the subject person."
@@ -1,9 +0,0 @@
1
- Land:
2
- label: Land
3
- plural: Lands
4
- extends: RealEstate
5
- icon: fa-map
6
- matchable: false
7
- featured:
8
- - registrationNumber
9
- properties: {}
@@ -1,26 +0,0 @@
1
- Relationship:
2
- label: "Relationship"
3
- description: "Person-to-person relationship"
4
- extends: Interval
5
- matchable: false
6
- featured:
7
- - person
8
- - relationship
9
- properties:
10
- person:
11
- label: "Person"
12
- description: "The subject of the familial relation."
13
- type: entity
14
- schema: Person
15
- reverse:
16
- name: relationshipPerson
17
- label: "Related to"
18
- relationship:
19
- label: "Relationship"
20
- description: "Nature of the relationship, from the *person's* perspective eg. 'mother', where 'relative' is mother of 'person'."
21
- supportingDocumentType:
22
- label: "Supporting document"
23
- description: "Eg. birth certificate, marriage license. This is *not* just the data source."
24
- supportingDocumentNumber:
25
- label: "Supporting document number"
26
- descripton: "Number or unique identifier for supporting document"
@@ -1,50 +0,0 @@
1
- # TODO: https://pypi.python.org/pypi/publicsuffix/
2
- # import socket
3
- from normality import stringify
4
- from urllib.parse import urlparse
5
-
6
- from followthemoney.types.common import PropertyType
7
-
8
-
9
- class DomainType(PropertyType):
10
- name = 'domain'
11
- group = 'domains'
12
- prefix = 'dns'
13
-
14
- # def _check_exists(self, domain):
15
- # """Actually try to resolve a domain name."""
16
- # try:
17
- # domain = domain.encode('idna').lower()
18
- # socket.getaddrinfo(domain, None)
19
- # return True
20
- # except:
21
- # return False
22
-
23
- def validate(self, obj, **kwargs):
24
- """Check if a thing is a valid domain name."""
25
- text = stringify(obj)
26
- if text is None:
27
- return False
28
- if '.' not in text:
29
- return False
30
- if '@' in text or ':' in text:
31
- return False
32
- if len(text) < 4:
33
- return False
34
- return True
35
-
36
- def clean_text(self, domain, **kwargs):
37
- """Try to extract only the domain bit from the """
38
- try:
39
- # handle URLs by extracting the domain name
40
- domain = urlparse(domain).hostname or domain
41
- domain = domain.lower()
42
- # get rid of port specs
43
- domain = domain.rsplit(':', 1)[0]
44
- domain = domain.rstrip('.')
45
- # handle unicode
46
- domain = domain.encode("idna").decode('ascii')
47
- except ValueError:
48
- return None
49
- if self.validate(domain):
50
- return domain
@@ -1,3 +0,0 @@
1
- Data model and validator for investigative graph data.
2
-
3
-
@@ -1,39 +0,0 @@
1
- Metadata-Version: 2.0
2
- Name: followthemoney
3
- Version: 1.3.6
4
- Summary: UNKNOWN
5
- Home-page: https://occrp.org
6
- Author: Organized Crime and Corruption Reporting Project
7
- Author-email: pudo@occrp.org
8
- License: MIT
9
- Description-Content-Type: UNKNOWN
10
- Platform: UNKNOWN
11
- Requires-Dist: babel
12
- Requires-Dist: banal (>=0.3.8)
13
- Requires-Dist: pyyaml
14
- Requires-Dist: requests[security] (>=2.18.4)
15
- Requires-Dist: python-levenshtein (>=0.12.0)
16
- Requires-Dist: normality (>=0.6.1)
17
- Requires-Dist: sqlalchemy (>=1.2.0)
18
- Requires-Dist: countrynames (>=1.6.0)
19
- Requires-Dist: languagecodes (>=1.0.4)
20
- Requires-Dist: phonenumbers (>=8.9.11)
21
- Requires-Dist: schwifty (>=2018.4.1)
22
- Requires-Dist: urlnormalizer (>=1.2.0)
23
- Requires-Dist: pytz (>=2018.5)
24
- Requires-Dist: rdflib (>=4.1)
25
- Provides-Extra: dev
26
- Requires-Dist: pip (>=10.0.0); extra == 'dev'
27
- Requires-Dist: bumpversion (>=0.5.3); extra == 'dev'
28
- Requires-Dist: wheel (>=0.29.0); extra == 'dev'
29
- Requires-Dist: twine; extra == 'dev'
30
- Requires-Dist: flake8 (>=2.6.0); extra == 'dev'
31
- Requires-Dist: nose; extra == 'dev'
32
- Requires-Dist: transifex-client; extra == 'dev'
33
- Requires-Dist: responses (>=0.9.0); extra == 'dev'
34
- Requires-Dist: coverage (>=4.1); extra == 'dev'
35
- Requires-Dist: recommonmark (>=0.4.0); extra == 'dev'
36
-
37
- Data model and validator for investigative graph data.
38
-
39
-