mirror of
				https://github.com/ilri/csv-metadata-quality.git
				synced 2025-10-31 12:51:14 +01:00 
			
		
		
		
	Compare commits
	
		
			9 Commits
		
	
	
		
			14010896a5
			...
			f816e17fe7
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| f816e17fe7 | |||
| 9061c7c79b | |||
| 661d05b977 | |||
| 652b7ea98c | |||
| 65da6e9b05 | |||
| a313b7527a | |||
| 51ee370697 | |||
| e8422bfa74 | |||
| 9f2dc0a0f5 | 
| @@ -4,7 +4,7 @@ All notable changes to this project will be documented in this file. | |||||||
| The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), | The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), | ||||||
| and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). | and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). | ||||||
|  |  | ||||||
| ## Unreleased | ## [0.4.7] - 2021-03-17 | ||||||
| ### Changed | ### Changed | ||||||
| - Fixing invalid multi-value separators like `|` and `|||` is no longer class- | - Fixing invalid multi-value separators like `|` and `|||` is no longer class- | ||||||
| ified as "unsafe" as I have yet to see a case where this was intentional | ified as "unsafe" as I have yet to see a case where this was intentional | ||||||
| @@ -15,11 +15,16 @@ use less memory | |||||||
| ### Added | ### Added | ||||||
| - Configurable directory for AGROVOC requests cache (to allow running the web | - Configurable directory for AGROVOC requests cache (to allow running the web | ||||||
| version from Google App Engine where we can only write to /tmp) | version from Google App Engine where we can only write to /tmp) | ||||||
|  | - Ability to check for duplicate items in the data set (uses a combination of | ||||||
|  | the title, type, and date issued to determine uniqueness) | ||||||
|  |  | ||||||
| ### Removed | ### Removed | ||||||
| - Checks for invalid and unnecessary multi-value separators because now I fix | - Checks for invalid and unnecessary multi-value separators because now I fix | ||||||
| them whenever I see them, so there is no need to have checks for them | them whenever I see them, so there is no need to have checks for them | ||||||
|  |  | ||||||
|  | ### Updated | ||||||
|  | - Run `poetry update` to update project dependencies | ||||||
|  |  | ||||||
| ## [0.4.6] - 2021-03-11 | ## [0.4.6] - 2021-03-11 | ||||||
| ### Added | ### Added | ||||||
| - Validation of dcterms.license field against SPDX license identifiers  | - Validation of dcterms.license field against SPDX license identifiers  | ||||||
|   | |||||||
| @@ -151,6 +151,18 @@ def run(argv): | |||||||
|         if match is not None: |         if match is not None: | ||||||
|             df[column].apply(check.spdx_license_identifier) |             df[column].apply(check.spdx_license_identifier) | ||||||
|  |  | ||||||
|  |     ### End individual column checks ### | ||||||
|  |  | ||||||
|  |     # Check: duplicate items | ||||||
|  |     # We extract just the title, type, and date issued columns to analyze | ||||||
|  |     duplicates_df = df.filter( | ||||||
|  |         regex=r"dcterms\.title|dc\.title|dcterms\.type|dc\.type|dcterms\.issued|dc\.date\.issued" | ||||||
|  |     ) | ||||||
|  |     check.duplicate_items(duplicates_df) | ||||||
|  |  | ||||||
|  |     # Delete the temporary duplicates DataFrame | ||||||
|  |     del duplicates_df | ||||||
|  |  | ||||||
|     ## |     ## | ||||||
|     # Perform some checks on rows so we can consider items as a whole rather |     # Perform some checks on rows so we can consider items as a whole rather | ||||||
|     # than simple on a field-by-field basis. This allows us to check whether |     # than simple on a field-by-field basis. This allows us to check whether | ||||||
|   | |||||||
| @@ -304,3 +304,44 @@ def spdx_license_identifier(field): | |||||||
|             pass |             pass | ||||||
|  |  | ||||||
|     return |     return | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def duplicate_items(df): | ||||||
|  |     """Attempt to identify duplicate items. | ||||||
|  |  | ||||||
|  |     First we check the total number of titles and compare it with the number of | ||||||
|  |     unique titles. If there are less unique titles than total titles we expand | ||||||
|  |     the search by creating a key (of sorts) for each item that includes their | ||||||
|  |     title, type, and date issued, and compare it with all the others. If there | ||||||
|  |     are multiple occurrences of the same title, type, date string then it's a | ||||||
|  |     very good indicator that the items are duplicates. | ||||||
|  |     """ | ||||||
|  |  | ||||||
|  |     # Extract the names of the title, type, and date issued columns so we can | ||||||
|  |     # reference them later. First we filter columns by likely patterns, then | ||||||
|  |     # we extract the name from the first item of the resulting object, ie: | ||||||
|  |     # | ||||||
|  |     #   Index(['dcterms.title[en_US]'], dtype='object') | ||||||
|  |     # | ||||||
|  |     title_column_name = df.filter(regex=r"dcterms\.title|dc\.title").columns[0] | ||||||
|  |     type_column_name = df.filter(regex=r"dcterms\.title|dc\.title").columns[0] | ||||||
|  |     date_column_name = df.filter( | ||||||
|  |         regex=r"dcterms\.issued|dc\.date\.accessioned" | ||||||
|  |     ).columns[0] | ||||||
|  |  | ||||||
|  |     items_count_total = df[title_column_name].count() | ||||||
|  |     items_count_unique = df[title_column_name].nunique() | ||||||
|  |  | ||||||
|  |     if items_count_unique < items_count_total: | ||||||
|  |         # Create a list to hold our items while we check for duplicates | ||||||
|  |         items = list() | ||||||
|  |  | ||||||
|  |         for index, row in df.iterrows(): | ||||||
|  |             item_title_type_date = f"{row[title_column_name]}{row[type_column_name]}{row[date_column_name]}" | ||||||
|  |  | ||||||
|  |             if item_title_type_date in items: | ||||||
|  |                 print( | ||||||
|  |                     f"{Fore.YELLOW}Possible duplicate ({title_column_name}): {Fore.RESET}{row[title_column_name]}" | ||||||
|  |                 ) | ||||||
|  |             else: | ||||||
|  |                 items.append(item_title_type_date) | ||||||
|   | |||||||
| @@ -1 +1 @@ | |||||||
| VERSION = "0.4.6-dev" | VERSION = "0.4.7" | ||||||
|   | |||||||
| @@ -1,32 +1,34 @@ | |||||||
| dc.title,dcterms.issued,dc.identifier.issn,dc.identifier.isbn,dcterms.language,dcterms.subject,cg.coverage.country,filename,dcterms.license | dc.title,dcterms.issued,dc.identifier.issn,dc.identifier.isbn,dcterms.language,dcterms.subject,cg.coverage.country,filename,dcterms.license,dcterms.type | ||||||
|  Leading space,2019-07-29,,,,,,, |  Leading space,2019-07-29,,,,,,,, | ||||||
| Trailing space ,2019-07-29,,,,,,, | Trailing space ,2019-07-29,,,,,,,, | ||||||
| Excessive  space,2019-07-29,,,,,,, | Excessive  space,2019-07-29,,,,,,,, | ||||||
| Miscellaenous ||whitespace | issues ,2019-07-29,,,,,,, | Miscellaenous ||whitespace | issues ,2019-07-29,,,,,,,, | ||||||
| Duplicate||Duplicate,2019-07-29,,,,,,, | Duplicate||Duplicate,2019-07-29,,,,,,,, | ||||||
| Invalid ISSN,2019-07-29,2321-2302,,,,,, | Invalid ISSN,2019-07-29,2321-2302,,,,,,, | ||||||
| Invalid ISBN,2019-07-29,,978-0-306-40615-6,,,,, | Invalid ISBN,2019-07-29,,978-0-306-40615-6,,,,,, | ||||||
| Multiple valid ISSNs,2019-07-29,0378-5955||0024-9319,,,,,, | Multiple valid ISSNs,2019-07-29,0378-5955||0024-9319,,,,,,, | ||||||
| Multiple valid ISBNs,2019-07-29,,99921-58-10-7||978-0-306-40615-7,,,,, | Multiple valid ISBNs,2019-07-29,,99921-58-10-7||978-0-306-40615-7,,,,,, | ||||||
| Invalid date,2019-07-260,,,,,,, | Invalid date,2019-07-260,,,,,,,, | ||||||
| Multiple dates,2019-07-26||2019-01-10,,,,,,, | Multiple dates,2019-07-26||2019-01-10,,,,,,,, | ||||||
| Invalid multi-value separator,2019-07-29,0378-5955|0024-9319,,,,,, | Invalid multi-value separator,2019-07-29,0378-5955|0024-9319,,,,,,, | ||||||
| Unnecessary Unicode,2019-07-29,,,,,,, | Unnecessary Unicode,2019-07-29,,,,,,,, | ||||||
| Suspicious character||foreˆt,2019-07-29,,,,,,, | Suspicious character||foreˆt,2019-07-29,,,,,,,, | ||||||
| Invalid ISO 639-1 (alpha 2) language,2019-07-29,,,jp,,,, | Invalid ISO 639-1 (alpha 2) language,2019-07-29,,,jp,,,,, | ||||||
| Invalid ISO 639-3 (alpha 3) language,2019-07-29,,,chi,,,, | Invalid ISO 639-3 (alpha 3) language,2019-07-29,,,chi,,,,, | ||||||
| Invalid language,2019-07-29,,,Span,,,, | Invalid language,2019-07-29,,,Span,,,,, | ||||||
| Invalid AGROVOC subject,2019-07-29,,,,FOREST,,, | Invalid AGROVOC subject,2019-07-29,,,,FOREST,,,, | ||||||
| Newline (LF),2019-07-30,,,,"TANZA | Newline (LF),2019-07-30,,,,"TANZA | ||||||
| NIA",,, | NIA",,,, | ||||||
| Missing date,,,,,,,, | Missing date,,,,,,,,, | ||||||
| Invalid country,2019-08-01,,,,,KENYAA,, | Invalid country,2019-08-01,,,,,KENYAA,,, | ||||||
| Uncommon filename extension,2019-08-10,,,,,,file.pdf.lck, | Uncommon filename extension,2019-08-10,,,,,,file.pdf.lck,, | ||||||
| Unneccesary unicode (U+002D + U+00AD),2019-08-10,,978-92-9043-823-6,,,,, | Unneccesary unicode (U+002D + U+00AD),2019-08-10,,978-92-9043-823-6,,,,,, | ||||||
| "Missing space,after comma",2019-08-27,,,,,,, | "Missing space,after comma",2019-08-27,,,,,,,, | ||||||
| Incorrect ISO 639-1 language,2019-09-26,,,es,,,, | Incorrect ISO 639-1 language,2019-09-26,,,es,,,,, | ||||||
| Incorrect ISO 639-3 language,2019-09-26,,,spa,,,, | Incorrect ISO 639-3 language,2019-09-26,,,spa,,,,, | ||||||
| Composéd Unicode,2020-01-14,,,,,,, | Composéd Unicode,2020-01-14,,,,,,,, | ||||||
| Decomposéd Unicode,2020-01-14,,,,,,, | Decomposéd Unicode,2020-01-14,,,,,,,, | ||||||
| Unnecessary multi-value separator,2021-01-03,0378-5955||,,,,,, | Unnecessary multi-value separator,2021-01-03,0378-5955||,,,,,,, | ||||||
| Invalid SPDX license identifier,2021-03-11,,,,,,,CC-BY | Invalid SPDX license identifier,2021-03-11,,,,,,,CC-BY, | ||||||
|  | Duplicate Title,2021-03-17,,,,,,,,Report | ||||||
|  | Duplicate Title,2021-03-17,,,,,,,,Report | ||||||
|   | |||||||
| 
 | 
							
								
								
									
										196
									
								
								poetry.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										196
									
								
								poetry.lock
									
									
									
										generated
									
									
									
								
							| @@ -43,7 +43,7 @@ xlrd = ">=0.9.4" | |||||||
|  |  | ||||||
| [[package]] | [[package]] | ||||||
| name = "agate-sql" | name = "agate-sql" | ||||||
| version = "0.5.5" | version = "0.5.6" | ||||||
| description = "agate-sql adds SQL read/write support to agate." | description = "agate-sql adds SQL read/write support to agate." | ||||||
| category = "dev" | category = "dev" | ||||||
| optional = false | optional = false | ||||||
| @@ -53,6 +53,10 @@ python-versions = "*" | |||||||
| agate = ">=1.5.0" | agate = ">=1.5.0" | ||||||
| sqlalchemy = ">=1.0.8" | sqlalchemy = ">=1.0.8" | ||||||
|  |  | ||||||
|  | [package.extras] | ||||||
|  | docs = ["Sphinx (>=1.2.2)", "sphinx_rtd_theme (>=0.1.6)"] | ||||||
|  | test = ["crate", "nose (>=1.1.2)", "geojson"] | ||||||
|  |  | ||||||
| [[package]] | [[package]] | ||||||
| name = "appdirs" | name = "appdirs" | ||||||
| version = "1.4.4" | version = "1.4.4" | ||||||
| @@ -205,17 +209,28 @@ python-versions = "*" | |||||||
|  |  | ||||||
| [[package]] | [[package]] | ||||||
| name = "flake8" | name = "flake8" | ||||||
| version = "3.8.4" | version = "3.9.0" | ||||||
| description = "the modular source code checker: pep8 pyflakes and co" | description = "the modular source code checker: pep8 pyflakes and co" | ||||||
| category = "dev" | category = "dev" | ||||||
| optional = false | optional = false | ||||||
| python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" | ||||||
|  |  | ||||||
| [package.dependencies] | [package.dependencies] | ||||||
| importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} | importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} | ||||||
| mccabe = ">=0.6.0,<0.7.0" | mccabe = ">=0.6.0,<0.7.0" | ||||||
| pycodestyle = ">=2.6.0a1,<2.7.0" | pycodestyle = ">=2.7.0,<2.8.0" | ||||||
| pyflakes = ">=2.2.0,<2.3.0" | pyflakes = ">=2.3.0,<2.4.0" | ||||||
|  |  | ||||||
|  | [[package]] | ||||||
|  | name = "greenlet" | ||||||
|  | version = "1.0.0" | ||||||
|  | description = "Lightweight in-process concurrent programming" | ||||||
|  | category = "dev" | ||||||
|  | optional = false | ||||||
|  | python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*" | ||||||
|  |  | ||||||
|  | [package.extras] | ||||||
|  | docs = ["sphinx"] | ||||||
|  |  | ||||||
| [[package]] | [[package]] | ||||||
| name = "idna" | name = "idna" | ||||||
| @@ -227,7 +242,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" | |||||||
|  |  | ||||||
| [[package]] | [[package]] | ||||||
| name = "importlib-metadata" | name = "importlib-metadata" | ||||||
| version = "3.7.2" | version = "3.7.3" | ||||||
| description = "Read metadata from Python packages" | description = "Read metadata from Python packages" | ||||||
| category = "dev" | category = "dev" | ||||||
| optional = false | optional = false | ||||||
| @@ -501,7 +516,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" | |||||||
|  |  | ||||||
| [[package]] | [[package]] | ||||||
| name = "pycodestyle" | name = "pycodestyle" | ||||||
| version = "2.6.0" | version = "2.7.0" | ||||||
| description = "Python style guide checker" | description = "Python style guide checker" | ||||||
| category = "dev" | category = "dev" | ||||||
| optional = false | optional = false | ||||||
| @@ -517,7 +532,7 @@ python-versions = "*" | |||||||
|  |  | ||||||
| [[package]] | [[package]] | ||||||
| name = "pyflakes" | name = "pyflakes" | ||||||
| version = "2.2.0" | version = "2.3.0" | ||||||
| description = "passive checker of Python programs" | description = "passive checker of Python programs" | ||||||
| category = "dev" | category = "dev" | ||||||
| optional = false | optional = false | ||||||
| @@ -690,20 +705,30 @@ python-versions = "*" | |||||||
|  |  | ||||||
| [[package]] | [[package]] | ||||||
| name = "sqlalchemy" | name = "sqlalchemy" | ||||||
| version = "1.3.23" | version = "1.4.0" | ||||||
| description = "Database Abstraction Library" | description = "Database Abstraction Library" | ||||||
| category = "dev" | category = "dev" | ||||||
| optional = false | optional = false | ||||||
| python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" | python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" | ||||||
|  |  | ||||||
|  | [package.dependencies] | ||||||
|  | greenlet = {version = "!=0.4.17", markers = "python_version >= \"3\""} | ||||||
|  | importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} | ||||||
|  |  | ||||||
| [package.extras] | [package.extras] | ||||||
|  | aiomysql = ["greenlet (!=0.4.17)", "aiomysql"] | ||||||
|  | asyncio = ["greenlet (!=0.4.17)"] | ||||||
|  | mariadb_connector = ["mariadb (>=1.0.1)"] | ||||||
| mssql = ["pyodbc"] | mssql = ["pyodbc"] | ||||||
| mssql_pymssql = ["pymssql"] | mssql_pymssql = ["pymssql"] | ||||||
| mssql_pyodbc = ["pyodbc"] | mssql_pyodbc = ["pyodbc"] | ||||||
| mysql = ["mysqlclient"] | mypy = ["sqlalchemy2-stubs", "mypy (>=0.800)"] | ||||||
| oracle = ["cx-oracle"] | mysql = ["mysqlclient (>=1.4.0,<2)", "mysqlclient (>=1.4.0)"] | ||||||
| postgresql = ["psycopg2"] | mysql_connector = ["mysqlconnector"] | ||||||
| postgresql_pg8000 = ["pg8000 (<1.16.6)"] | oracle = ["cx_oracle (>=7,<8)", "cx_oracle (>=7)"] | ||||||
|  | postgresql = ["psycopg2 (>=2.7)"] | ||||||
|  | postgresql_asyncpg = ["greenlet (!=0.4.17)", "asyncpg"] | ||||||
|  | postgresql_pg8000 = ["pg8000 (>=1.16.6)"] | ||||||
| postgresql_psycopg2binary = ["psycopg2-binary"] | postgresql_psycopg2binary = ["psycopg2-binary"] | ||||||
| postgresql_psycopg2cffi = ["psycopg2cffi"] | postgresql_psycopg2cffi = ["psycopg2cffi"] | ||||||
| pymysql = ["pymysql (<1)", "pymysql"] | pymysql = ["pymysql (<1)", "pymysql"] | ||||||
| @@ -764,16 +789,16 @@ python-versions = "*" | |||||||
|  |  | ||||||
| [[package]] | [[package]] | ||||||
| name = "urllib3" | name = "urllib3" | ||||||
| version = "1.26.3" | version = "1.26.4" | ||||||
| description = "HTTP library with thread-safe connection pooling, file post, and more." | description = "HTTP library with thread-safe connection pooling, file post, and more." | ||||||
| category = "main" | category = "main" | ||||||
| optional = false | optional = false | ||||||
| python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" | python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" | ||||||
|  |  | ||||||
| [package.extras] | [package.extras] | ||||||
| brotli = ["brotlipy (>=0.6.0)"] |  | ||||||
| secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] | secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] | ||||||
| socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] | socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] | ||||||
|  | brotli = ["brotlipy (>=0.6.0)"] | ||||||
|  |  | ||||||
| [[package]] | [[package]] | ||||||
| name = "wcwidth" | name = "wcwidth" | ||||||
| @@ -819,7 +844,7 @@ agate-excel = [ | |||||||
|     {file = "agate-excel-0.2.3.tar.gz", hash = "sha256:8f255ef2c87c436b7132049e1dd86c8e08bf82d8c773aea86f3069b461a17d52"}, |     {file = "agate-excel-0.2.3.tar.gz", hash = "sha256:8f255ef2c87c436b7132049e1dd86c8e08bf82d8c773aea86f3069b461a17d52"}, | ||||||
| ] | ] | ||||||
| agate-sql = [ | agate-sql = [ | ||||||
|     {file = "agate-sql-0.5.5.tar.gz", hash = "sha256:50a39754babef6cd0d1b1e75763324a49593394fe46ab1ea9546791b5e6b69a7"}, |     {file = "agate-sql-0.5.6.tar.gz", hash = "sha256:056dc9e587fbdfdf3f1c9950f4793a5ee87622c19deba31aa0a6d6681816dcde"}, | ||||||
| ] | ] | ||||||
| appdirs = [ | appdirs = [ | ||||||
|     {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"}, |     {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"}, | ||||||
| @@ -879,16 +904,61 @@ et-xmlfile = [ | |||||||
|     {file = "et_xmlfile-1.0.1.tar.gz", hash = "sha256:614d9722d572f6246302c4491846d2c393c199cfa4edc9af593437691683335b"}, |     {file = "et_xmlfile-1.0.1.tar.gz", hash = "sha256:614d9722d572f6246302c4491846d2c393c199cfa4edc9af593437691683335b"}, | ||||||
| ] | ] | ||||||
| flake8 = [ | flake8 = [ | ||||||
|     {file = "flake8-3.8.4-py2.py3-none-any.whl", hash = "sha256:749dbbd6bfd0cf1318af27bf97a14e28e5ff548ef8e5b1566ccfb25a11e7c839"}, |     {file = "flake8-3.9.0-py2.py3-none-any.whl", hash = "sha256:12d05ab02614b6aee8df7c36b97d1a3b2372761222b19b58621355e82acddcff"}, | ||||||
|     {file = "flake8-3.8.4.tar.gz", hash = "sha256:aadae8761ec651813c24be05c6f7b4680857ef6afaae4651a4eccaef97ce6c3b"}, |     {file = "flake8-3.9.0.tar.gz", hash = "sha256:78873e372b12b093da7b5e5ed302e8ad9e988b38b063b61ad937f26ca58fc5f0"}, | ||||||
|  | ] | ||||||
|  | greenlet = [ | ||||||
|  |     {file = "greenlet-1.0.0-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:1d1d4473ecb1c1d31ce8fd8d91e4da1b1f64d425c1dc965edc4ed2a63cfa67b2"}, | ||||||
|  |     {file = "greenlet-1.0.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:cfd06e0f0cc8db2a854137bd79154b61ecd940dce96fad0cba23fe31de0b793c"}, | ||||||
|  |     {file = "greenlet-1.0.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:eb333b90036358a0e2c57373f72e7648d7207b76ef0bd00a4f7daad1f79f5203"}, | ||||||
|  |     {file = "greenlet-1.0.0-cp27-cp27m-win32.whl", hash = "sha256:1a1ada42a1fd2607d232ae11a7b3195735edaa49ea787a6d9e6a53afaf6f3476"}, | ||||||
|  |     {file = "greenlet-1.0.0-cp27-cp27m-win_amd64.whl", hash = "sha256:f6f65bf54215e4ebf6b01e4bb94c49180a589573df643735107056f7a910275b"}, | ||||||
|  |     {file = "greenlet-1.0.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:f59eded163d9752fd49978e0bab7a1ff21b1b8d25c05f0995d140cc08ac83379"}, | ||||||
|  |     {file = "greenlet-1.0.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:875d4c60a6299f55df1c3bb870ebe6dcb7db28c165ab9ea6cdc5d5af36bb33ce"}, | ||||||
|  |     {file = "greenlet-1.0.0-cp35-cp35m-macosx_10_14_x86_64.whl", hash = "sha256:1bb80c71de788b36cefb0c3bb6bfab306ba75073dbde2829c858dc3ad70f867c"}, | ||||||
|  |     {file = "greenlet-1.0.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:b5f1b333015d53d4b381745f5de842f19fe59728b65f0fbb662dafbe2018c3a5"}, | ||||||
|  |     {file = "greenlet-1.0.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:5352c15c1d91d22902582e891f27728d8dac3bd5e0ee565b6a9f575355e6d92f"}, | ||||||
|  |     {file = "greenlet-1.0.0-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:2c65320774a8cd5fdb6e117c13afa91c4707548282464a18cf80243cf976b3e6"}, | ||||||
|  |     {file = "greenlet-1.0.0-cp35-cp35m-manylinux2014_ppc64le.whl", hash = "sha256:111cfd92d78f2af0bc7317452bd93a477128af6327332ebf3c2be7df99566683"}, | ||||||
|  |     {file = "greenlet-1.0.0-cp35-cp35m-win32.whl", hash = "sha256:cdb90267650c1edb54459cdb51dab865f6c6594c3a47ebd441bc493360c7af70"}, | ||||||
|  |     {file = "greenlet-1.0.0-cp35-cp35m-win_amd64.whl", hash = "sha256:eac8803c9ad1817ce3d8d15d1bb82c2da3feda6bee1153eec5c58fa6e5d3f770"}, | ||||||
|  |     {file = "greenlet-1.0.0-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:c93d1a71c3fe222308939b2e516c07f35a849c5047f0197442a4d6fbcb4128ee"}, | ||||||
|  |     {file = "greenlet-1.0.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:122c63ba795fdba4fc19c744df6277d9cfd913ed53d1a286f12189a0265316dd"}, | ||||||
|  |     {file = "greenlet-1.0.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:c5b22b31c947ad8b6964d4ed66776bcae986f73669ba50620162ba7c832a6b6a"}, | ||||||
|  |     {file = "greenlet-1.0.0-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:4365eccd68e72564c776418c53ce3c5af402bc526fe0653722bc89efd85bf12d"}, | ||||||
|  |     {file = "greenlet-1.0.0-cp36-cp36m-manylinux2014_ppc64le.whl", hash = "sha256:da7d09ad0f24270b20f77d56934e196e982af0d0a2446120cb772be4e060e1a2"}, | ||||||
|  |     {file = "greenlet-1.0.0-cp36-cp36m-win32.whl", hash = "sha256:647ba1df86d025f5a34043451d7c4a9f05f240bee06277a524daad11f997d1e7"}, | ||||||
|  |     {file = "greenlet-1.0.0-cp36-cp36m-win_amd64.whl", hash = "sha256:e6e9fdaf6c90d02b95e6b0709aeb1aba5affbbb9ccaea5502f8638e4323206be"}, | ||||||
|  |     {file = "greenlet-1.0.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:62afad6e5fd70f34d773ffcbb7c22657e1d46d7fd7c95a43361de979f0a45aef"}, | ||||||
|  |     {file = "greenlet-1.0.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:d3789c1c394944084b5e57c192889985a9f23bd985f6d15728c745d380318128"}, | ||||||
|  |     {file = "greenlet-1.0.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:f5e2d36c86c7b03c94b8459c3bd2c9fe2c7dab4b258b8885617d44a22e453fb7"}, | ||||||
|  |     {file = "greenlet-1.0.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:292e801fcb3a0b3a12d8c603c7cf340659ea27fd73c98683e75800d9fd8f704c"}, | ||||||
|  |     {file = "greenlet-1.0.0-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:f3dc68272990849132d6698f7dc6df2ab62a88b0d36e54702a8fd16c0490e44f"}, | ||||||
|  |     {file = "greenlet-1.0.0-cp37-cp37m-win32.whl", hash = "sha256:7cd5a237f241f2764324396e06298b5dee0df580cf06ef4ada0ff9bff851286c"}, | ||||||
|  |     {file = "greenlet-1.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:0ddd77586553e3daf439aa88b6642c5f252f7ef79a39271c25b1d4bf1b7cbb85"}, | ||||||
|  |     {file = "greenlet-1.0.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:90b6a25841488cf2cb1c8623a53e6879573010a669455046df5f029d93db51b7"}, | ||||||
|  |     {file = "greenlet-1.0.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:ed1d1351f05e795a527abc04a0d82e9aecd3bdf9f46662c36ff47b0b00ecaf06"}, | ||||||
|  |     {file = "greenlet-1.0.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:94620ed996a7632723a424bccb84b07e7b861ab7bb06a5aeb041c111dd723d36"}, | ||||||
|  |     {file = "greenlet-1.0.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:f97d83049715fd9dec7911860ecf0e17b48d8725de01e45de07d8ac0bd5bc378"}, | ||||||
|  |     {file = "greenlet-1.0.0-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:0a77691f0080c9da8dfc81e23f4e3cffa5accf0f5b56478951016d7cfead9196"}, | ||||||
|  |     {file = "greenlet-1.0.0-cp38-cp38-win32.whl", hash = "sha256:e1128e022d8dce375362e063754e129750323b67454cac5600008aad9f54139e"}, | ||||||
|  |     {file = "greenlet-1.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:5d4030b04061fdf4cbc446008e238e44936d77a04b2b32f804688ad64197953c"}, | ||||||
|  |     {file = "greenlet-1.0.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:f8450d5ef759dbe59f84f2c9f77491bb3d3c44bc1a573746daf086e70b14c243"}, | ||||||
|  |     {file = "greenlet-1.0.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:df8053867c831b2643b2c489fe1d62049a98566b1646b194cc815f13e27b90df"}, | ||||||
|  |     {file = "greenlet-1.0.0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:df3e83323268594fa9755480a442cabfe8d82b21aba815a71acf1bb6c1776218"}, | ||||||
|  |     {file = "greenlet-1.0.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:181300f826625b7fd1182205b830642926f52bd8cdb08b34574c9d5b2b1813f7"}, | ||||||
|  |     {file = "greenlet-1.0.0-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:58ca0f078d1c135ecf1879d50711f925ee238fe773dfe44e206d7d126f5bc664"}, | ||||||
|  |     {file = "greenlet-1.0.0-cp39-cp39-win32.whl", hash = "sha256:5f297cb343114b33a13755032ecf7109b07b9a0020e841d1c3cedff6602cc139"}, | ||||||
|  |     {file = "greenlet-1.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:5d69bbd9547d3bc49f8a545db7a0bd69f407badd2ff0f6e1a163680b5841d2b0"}, | ||||||
|  |     {file = "greenlet-1.0.0.tar.gz", hash = "sha256:719e169c79255816cdcf6dccd9ed2d089a72a9f6c42273aae12d55e8d35bdcf8"}, | ||||||
| ] | ] | ||||||
| idna = [ | idna = [ | ||||||
|     {file = "idna-2.10-py2.py3-none-any.whl", hash = "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0"}, |     {file = "idna-2.10-py2.py3-none-any.whl", hash = "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0"}, | ||||||
|     {file = "idna-2.10.tar.gz", hash = "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6"}, |     {file = "idna-2.10.tar.gz", hash = "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6"}, | ||||||
| ] | ] | ||||||
| importlib-metadata = [ | importlib-metadata = [ | ||||||
|     {file = "importlib_metadata-3.7.2-py3-none-any.whl", hash = "sha256:407d13f55dc6f2a844e62325d18ad7019a436c4bfcaee34cda35f2be6e7c3e34"}, |     {file = "importlib_metadata-3.7.3-py3-none-any.whl", hash = "sha256:b74159469b464a99cb8cc3e21973e4d96e05d3024d337313fedb618a6e86e6f4"}, | ||||||
|     {file = "importlib_metadata-3.7.2.tar.gz", hash = "sha256:18d5ff601069f98d5d605b6a4b50c18a34811d655c55548adc833e687289acde"}, |     {file = "importlib_metadata-3.7.3.tar.gz", hash = "sha256:742add720a20d0467df2f444ae41704000f50e1234f46174b51f9c6031a1bd71"}, | ||||||
| ] | ] | ||||||
| iniconfig = [ | iniconfig = [ | ||||||
|     {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, |     {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, | ||||||
| @@ -1018,15 +1088,15 @@ py = [ | |||||||
|     {file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"}, |     {file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"}, | ||||||
| ] | ] | ||||||
| pycodestyle = [ | pycodestyle = [ | ||||||
|     {file = "pycodestyle-2.6.0-py2.py3-none-any.whl", hash = "sha256:2295e7b2f6b5bd100585ebcb1f616591b652db8a741695b3d8f5d28bdc934367"}, |     {file = "pycodestyle-2.7.0-py2.py3-none-any.whl", hash = "sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068"}, | ||||||
|     {file = "pycodestyle-2.6.0.tar.gz", hash = "sha256:c58a7d2815e0e8d7972bf1803331fb0152f867bd89adf8a01dfd55085434192e"}, |     {file = "pycodestyle-2.7.0.tar.gz", hash = "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef"}, | ||||||
| ] | ] | ||||||
| pycountry = [ | pycountry = [ | ||||||
|     {file = "pycountry-19.8.18.tar.gz", hash = "sha256:3c57aa40adcf293d59bebaffbe60d8c39976fba78d846a018dc0c2ec9c6cb3cb"}, |     {file = "pycountry-19.8.18.tar.gz", hash = "sha256:3c57aa40adcf293d59bebaffbe60d8c39976fba78d846a018dc0c2ec9c6cb3cb"}, | ||||||
| ] | ] | ||||||
| pyflakes = [ | pyflakes = [ | ||||||
|     {file = "pyflakes-2.2.0-py2.py3-none-any.whl", hash = "sha256:0d94e0e05a19e57a99444b6ddcf9a6eb2e5c68d3ca1e98e90707af8152c90a92"}, |     {file = "pyflakes-2.3.0-py2.py3-none-any.whl", hash = "sha256:910208209dcea632721cb58363d0f72913d9e8cf64dc6f8ae2e02a3609aba40d"}, | ||||||
|     {file = "pyflakes-2.2.0.tar.gz", hash = "sha256:35b2d75ee967ea93b55750aa9edbbf72813e06a66ba54438df2cfac9e3c27fc8"}, |     {file = "pyflakes-2.3.0.tar.gz", hash = "sha256:e59fd8e750e588358f1b8885e5a4751203a0516e0ee6d34811089ac294c8806f"}, | ||||||
| ] | ] | ||||||
| pygments = [ | pygments = [ | ||||||
|     {file = "Pygments-2.8.1-py3-none-any.whl", hash = "sha256:534ef71d539ae97d4c3a4cf7d6f110f214b0e687e92f9cb9d2a3b0d3101289c8"}, |     {file = "Pygments-2.8.1-py3-none-any.whl", hash = "sha256:534ef71d539ae97d4c3a4cf7d6f110f214b0e687e92f9cb9d2a3b0d3101289c8"}, | ||||||
| @@ -1125,44 +1195,40 @@ spdx-license-list = [ | |||||||
|     {file = "spdx_license_list-0.5.2.tar.gz", hash = "sha256:952996f72ab807972dc2278bb9b91e5294767211e51f09aad9c0e2ff5b82a31b"}, |     {file = "spdx_license_list-0.5.2.tar.gz", hash = "sha256:952996f72ab807972dc2278bb9b91e5294767211e51f09aad9c0e2ff5b82a31b"}, | ||||||
| ] | ] | ||||||
| sqlalchemy = [ | sqlalchemy = [ | ||||||
|     {file = "SQLAlchemy-1.3.23-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:fd3b96f8c705af8e938eaa99cbd8fd1450f632d38cad55e7367c33b263bf98ec"}, |     {file = "SQLAlchemy-1.4.0-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:364b3d46be78eeaa0efc8771d86bd4e66e0e24bc998610ae9b07ab0630a2e0f2"}, | ||||||
|     {file = "SQLAlchemy-1.3.23-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:29cccc9606750fe10c5d0e8bd847f17a97f3850b8682aef1f56f5d5e1a5a64b1"}, |     {file = "SQLAlchemy-1.4.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:e7902051dc747cc96b552230464ddb2c96407e7f07680c71c1923dca2f3a6d9d"}, | ||||||
|     {file = "SQLAlchemy-1.3.23-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:927ce09e49bff3104459e1451ce82983b0a3062437a07d883a4c66f0b344c9b5"}, |     {file = "SQLAlchemy-1.4.0-cp27-cp27m-win32.whl", hash = "sha256:38a50d4d657bd7aa5a8ddeb06eb4f099c29f9ca7b50295ea0f98793007d448b5"}, | ||||||
|     {file = "SQLAlchemy-1.3.23-cp27-cp27m-win32.whl", hash = "sha256:b4b0e44d586cd64b65b507fa116a3814a1a53d55dce4836d7c1a6eb2823ff8d1"}, |     {file = "SQLAlchemy-1.4.0-cp27-cp27m-win_amd64.whl", hash = "sha256:9613ae722a818d231b47fe03c7ff60ce2cd9a54c7a3fb927db9e5df6683c438a"}, | ||||||
|     {file = "SQLAlchemy-1.3.23-cp27-cp27m-win_amd64.whl", hash = "sha256:6b8b8c80c7f384f06825612dd078e4a31f0185e8f1f6b8c19e188ff246334205"}, |     {file = "SQLAlchemy-1.4.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:5f326c4264d2f1614f471b6f04e96522f7cc94843172e099bf2fb22079891c20"}, | ||||||
|     {file = "SQLAlchemy-1.3.23-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:9e9c25522933e569e8b53ccc644dc993cab87e922fb7e142894653880fdd419d"}, |     {file = "SQLAlchemy-1.4.0-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:6a144c87df1eeeb604e20deb074b9252e7f63b5f528a61b7d9d509c2e67adfb0"}, | ||||||
|     {file = "SQLAlchemy-1.3.23-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:a0e306e9bb76fd93b29ae3a5155298e4c1b504c7cbc620c09c20858d32d16234"}, |     {file = "SQLAlchemy-1.4.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:56d33a788c427f29a54600374bb3e435331238e7551c1ce738da5186c20f6c68"}, | ||||||
|     {file = "SQLAlchemy-1.3.23-cp35-cp35m-macosx_10_14_x86_64.whl", hash = "sha256:6c9e6cc9237de5660bcddea63f332428bb83c8e2015c26777281f7ffbd2efb84"}, |     {file = "SQLAlchemy-1.4.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:7fdec39fe2495a1c833b917d7c0c8b9d06c0b1b91df74e45be7dc7af325a40fa"}, | ||||||
|     {file = "SQLAlchemy-1.3.23-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:94f667d86be82dd4cb17d08de0c3622e77ca865320e0b95eae6153faa7b4ecaf"}, |     {file = "SQLAlchemy-1.4.0-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:5beadd632440aa67f3cb3ec235246c3753f8b3d72b254ee5a87c1e87619952f4"}, | ||||||
|     {file = "SQLAlchemy-1.3.23-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:751934967f5336a3e26fc5993ccad1e4fee982029f9317eb6153bc0bc3d2d2da"}, |     {file = "SQLAlchemy-1.4.0-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:bd73da5de31118a8130540297779d36bf4d7414c6cca8d7f769b1550dafce78d"}, | ||||||
|     {file = "SQLAlchemy-1.3.23-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:63677d0c08524af4c5893c18dbe42141de7178001360b3de0b86217502ed3601"}, |     {file = "SQLAlchemy-1.4.0-cp36-cp36m-win32.whl", hash = "sha256:a595fe93ef2722c4877e1db80aabbe172b0af7846c61b2852388780a53203855"}, | ||||||
|     {file = "SQLAlchemy-1.3.23-cp35-cp35m-win32.whl", hash = "sha256:ddfb511e76d016c3a160910642d57f4587dc542ce5ee823b0d415134790eeeb9"}, |     {file = "SQLAlchemy-1.4.0-cp36-cp36m-win_amd64.whl", hash = "sha256:90a8529f04f25051357fc149bc7815b515d018598ff6f1f91038dad665a7ac61"}, | ||||||
|     {file = "SQLAlchemy-1.3.23-cp35-cp35m-win_amd64.whl", hash = "sha256:040bdfc1d76a9074717a3f43455685f781c581f94472b010cd6c4754754e1862"}, |     {file = "SQLAlchemy-1.4.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:ce33a952476f9100daa76fb8228fdc99ac11df3c316be2eb946ba31fbe845ba6"}, | ||||||
|     {file = "SQLAlchemy-1.3.23-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:d1a85dfc5dee741bf49cb9b6b6b8d2725a268e4992507cf151cba26b17d97c37"}, |     {file = "SQLAlchemy-1.4.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:bc626e44fec23d9ea92aeecd2359720e8620c1f963c8e24bfdd27e757ed0548c"}, | ||||||
|     {file = "SQLAlchemy-1.3.23-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:639940bbe1108ac667dcffc79925db2966826c270112e9159439ab6bb14f8d80"}, |     {file = "SQLAlchemy-1.4.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:0b77e40d63147cd322307a10905f2690661acaa6f21eb1168a6e6de144c97a12"}, | ||||||
|     {file = "SQLAlchemy-1.3.23-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:e8a1750b44ad6422ace82bf3466638f1aa0862dbb9689690d5f2f48cce3476c8"}, |     {file = "SQLAlchemy-1.4.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:1373b38a8bba90b54f21ff6b8ec7561d7e4fcc44a1fd70a845ece1014b554f9b"}, | ||||||
|     {file = "SQLAlchemy-1.3.23-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:e5bb3463df697279e5459a7316ad5a60b04b0107f9392e88674d0ece70e9cf70"}, |     {file = "SQLAlchemy-1.4.0-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:506ff11bc52426bedb66618d10ec1e41c64667ee685fbffb6a3057e5d9513129"}, | ||||||
|     {file = "SQLAlchemy-1.3.23-cp36-cp36m-win32.whl", hash = "sha256:e273367f4076bd7b9a8dc2e771978ef2bfd6b82526e80775a7db52bff8ca01dd"}, |     {file = "SQLAlchemy-1.4.0-cp37-cp37m-win32.whl", hash = "sha256:e04efa8dd75b9bfc16a6bc174e715678c6e99f52c633eccef76e156e408a5432"}, | ||||||
|     {file = "SQLAlchemy-1.3.23-cp36-cp36m-win_amd64.whl", hash = "sha256:ac2244e64485c3778f012951fdc869969a736cd61375fde6096d08850d8be729"}, |     {file = "SQLAlchemy-1.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:befa0b60b663fdbc1bb1bde60d3788ff5a64700f253f7981a22081f3b44239f2"}, | ||||||
|     {file = "SQLAlchemy-1.3.23-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:23927c3981d1ec6b4ea71eb99d28424b874d9c696a21e5fbd9fa322718be3708"}, |     {file = "SQLAlchemy-1.4.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:c272f0340a40d178461b2b54f27360289e063f70db495daa852c2f318fc00640"}, | ||||||
|     {file = "SQLAlchemy-1.3.23-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:d90010304abb4102123d10cbad2cdf2c25a9f2e66a50974199b24b468509bad5"}, |     {file = "SQLAlchemy-1.4.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8319413aaf11e777ed328a763038c85faf4ff4461a14c09f8c2bf5e46954ea8b"}, | ||||||
|     {file = "SQLAlchemy-1.3.23-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:a8bfc1e1afe523e94974132d7230b82ca7fa2511aedde1f537ec54db0399541a"}, |     {file = "SQLAlchemy-1.4.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:ddb17736fc2999dc4e550f02e05add7a2197668cde059269b23989d8730ef71a"}, | ||||||
|     {file = "SQLAlchemy-1.3.23-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:269990b3ab53cb035d662dcde51df0943c1417bdab707dc4a7e4114a710504b4"}, |     {file = "SQLAlchemy-1.4.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:682961ff4e9fcd9803ab3918c7f8c44ab4076566a0385606377723caf18c371a"}, | ||||||
|     {file = "SQLAlchemy-1.3.23-cp37-cp37m-win32.whl", hash = "sha256:fdd2ed7395df8ac2dbb10cefc44737b66c6a5cd7755c92524733d7a443e5b7e2"}, |     {file = "SQLAlchemy-1.4.0-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:b8bdfb73d07467f2e21e7ff3abc823d52f88b1e5c377fc14da625b30469350ab"}, | ||||||
|     {file = "SQLAlchemy-1.3.23-cp37-cp37m-win_amd64.whl", hash = "sha256:6a939a868fdaa4b504e8b9d4a61f21aac11e3fecc8a8214455e144939e3d2aea"}, |     {file = "SQLAlchemy-1.4.0-cp38-cp38-win32.whl", hash = "sha256:a75ac5cdac68c10b71f00aff2f4179168abcf462e73d0289d806293b44abfce6"}, | ||||||
|     {file = "SQLAlchemy-1.3.23-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:24f9569e82a009a09ce2d263559acb3466eba2617203170e4a0af91e75b4f075"}, |     {file = "SQLAlchemy-1.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:c101e9f57d8a67a4b613852d4a5ee850cd2e8b4791ddba2a90ced4dbc66e5fa2"}, | ||||||
|     {file = "SQLAlchemy-1.3.23-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:2578dbdbe4dbb0e5126fb37ffcd9793a25dcad769a95f171a2161030bea850ff"}, |     {file = "SQLAlchemy-1.4.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:dd940003b5724e7376dd627b13086798076c5bc124d562163224334854bdd0ca"}, | ||||||
|     {file = "SQLAlchemy-1.3.23-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:1fe5d8d39118c2b018c215c37b73fd6893c3e1d4895be745ca8ff6eb83333ed3"}, |     {file = "SQLAlchemy-1.4.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:faad6bcbc1af9dfb2b2e02be988f992989d99e3eae0c5b21fce818d47aab5181"}, | ||||||
|     {file = "SQLAlchemy-1.3.23-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:c7dc052432cd5d060d7437e217dd33c97025287f99a69a50e2dc1478dd610d64"}, |     {file = "SQLAlchemy-1.4.0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:02a77eef48da7a5239c003a18afa05c964f1e3001cb2039f69b912b0e0d69c61"}, | ||||||
|     {file = "SQLAlchemy-1.3.23-cp38-cp38-win32.whl", hash = "sha256:ecce8c021894a77d89808222b1ff9687ad84db54d18e4bd0500ca766737faaf6"}, |     {file = "SQLAlchemy-1.4.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:441788cdc1617fe3e43565399c95098d54e91422a049df08acb3709854e7cec0"}, | ||||||
|     {file = "SQLAlchemy-1.3.23-cp38-cp38-win_amd64.whl", hash = "sha256:37b83bf81b4b85dda273aaaed5f35ea20ad80606f672d94d2218afc565fb0173"}, |     {file = "SQLAlchemy-1.4.0-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:308968eb85969ca3025452cebff7e3d9af5f5c0771b6e19df3c68b1a3c6918ae"}, | ||||||
|     {file = "SQLAlchemy-1.3.23-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:8be835aac18ec85351385e17b8665bd4d63083a7160a017bef3d640e8e65cadb"}, |     {file = "SQLAlchemy-1.4.0-cp39-cp39-win32.whl", hash = "sha256:1293cbcaf556f3de5a3eb143012e830a7d78952796f5ba9d2a8286d808e158f1"}, | ||||||
|     {file = "SQLAlchemy-1.3.23-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:6ec1044908414013ebfe363450c22f14698803ce97fbb47e53284d55c5165848"}, |     {file = "SQLAlchemy-1.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:6fd3bfc212f68913fe42e9a7b5a39fb259e40e927fe5e813f27c6a692bd624e7"}, | ||||||
|     {file = "SQLAlchemy-1.3.23-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:eab063a70cca4a587c28824e18be41d8ecc4457f8f15b2933584c6c6cccd30f0"}, |     {file = "SQLAlchemy-1.4.0.tar.gz", hash = "sha256:9cfef2ad30c5ee1d494d98f3c55a9ac29ec6d294b70849c541d139e4fe1a74e6"}, | ||||||
|     {file = "SQLAlchemy-1.3.23-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:baeb451ee23e264de3f577fee5283c73d9bbaa8cb921d0305c0bbf700094b65b"}, |  | ||||||
|     {file = "SQLAlchemy-1.3.23-cp39-cp39-win32.whl", hash = "sha256:94208867f34e60f54a33a37f1c117251be91a47e3bfdb9ab8a7847f20886ad06"}, |  | ||||||
|     {file = "SQLAlchemy-1.3.23-cp39-cp39-win_amd64.whl", hash = "sha256:f4d972139d5000105fcda9539a76452039434013570d6059993120dc2a65e447"}, |  | ||||||
|     {file = "SQLAlchemy-1.3.23.tar.gz", hash = "sha256:6fca33672578666f657c131552c4ef8979c1606e494f78cd5199742dfb26918b"}, |  | ||||||
| ] | ] | ||||||
| termcolor = [ | termcolor = [ | ||||||
|     {file = "termcolor-1.1.0.tar.gz", hash = "sha256:1d6d69ce66211143803fbc56652b41d73b4a400a2891d7bf7a1cdf4c02de613b"}, |     {file = "termcolor-1.1.0.tar.gz", hash = "sha256:1d6d69ce66211143803fbc56652b41d73b4a400a2891d7bf7a1cdf4c02de613b"}, | ||||||
| @@ -1217,8 +1283,8 @@ typing-extensions = [ | |||||||
|     {file = "typing_extensions-3.7.4.3.tar.gz", hash = "sha256:99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c"}, |     {file = "typing_extensions-3.7.4.3.tar.gz", hash = "sha256:99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c"}, | ||||||
| ] | ] | ||||||
| urllib3 = [ | urllib3 = [ | ||||||
|     {file = "urllib3-1.26.3-py2.py3-none-any.whl", hash = "sha256:1b465e494e3e0d8939b50680403e3aedaa2bc434b7d5af64dfd3c958d7f5ae80"}, |     {file = "urllib3-1.26.4-py2.py3-none-any.whl", hash = "sha256:2f4da4594db7e1e110a944bb1b551fdf4e6c136ad42e4234131391e21eb5b0df"}, | ||||||
|     {file = "urllib3-1.26.3.tar.gz", hash = "sha256:de3eedaad74a2683334e282005cd8d7f22f4d55fa690a2a1020a416cb0a47e73"}, |     {file = "urllib3-1.26.4.tar.gz", hash = "sha256:e7b021f7241115872f92f43c6508082facffbd1c048e3c6e2bb9c2a157e28937"}, | ||||||
| ] | ] | ||||||
| wcwidth = [ | wcwidth = [ | ||||||
|     {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, |     {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| [tool.poetry] | [tool.poetry] | ||||||
| name = "csv-metadata-quality" | name = "csv-metadata-quality" | ||||||
| version = "0.4.6-dev" | version = "0.4.7" | ||||||
| description="A simple, but opinionated CSV quality checking and fixing pipeline for CSVs in the DSpace ecosystem." | description="A simple, but opinionated CSV quality checking and fixing pipeline for CSVs in the DSpace ecosystem." | ||||||
| authors = ["Alan Orth <alan.orth@gmail.com>"] | authors = ["Alan Orth <alan.orth@gmail.com>"] | ||||||
| license="GPL-3.0-only" | license="GPL-3.0-only" | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| agate-dbf==0.2.2 | agate-dbf==0.2.2 | ||||||
| agate-excel==0.2.3 | agate-excel==0.2.3 | ||||||
| agate-sql==0.5.5 | agate-sql==0.5.6 | ||||||
| agate==1.6.2 | agate==1.6.2 | ||||||
| appdirs==1.4.4; python_version >= "3.6" | appdirs==1.4.4; python_version >= "3.6" | ||||||
| appnope==0.1.2; python_version >= "3.7" and python_version < "4.0" and sys_platform == "darwin" | appnope==0.1.2; python_version >= "3.7" and python_version < "4.0" and sys_platform == "darwin" | ||||||
| @@ -17,8 +17,10 @@ csvkit==1.0.5 | |||||||
| dbfread==2.0.7 | dbfread==2.0.7 | ||||||
| decorator==4.4.2; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.2.0" | decorator==4.4.2; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.2.0" | ||||||
| et-xmlfile==1.0.1; python_version >= "3.6" | et-xmlfile==1.0.1; python_version >= "3.6" | ||||||
| flake8==3.8.4; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0") | flake8==3.9.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0") | ||||||
|  | greenlet==1.0.0; python_version >= "3" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3" | ||||||
| idna==2.10; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" | idna==2.10; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" | ||||||
|  | importlib-metadata==3.7.3; python_version < "3.8" and python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "3.8" or python_full_version >= "3.5.0" and python_version < "3.8" and python_version >= "3.6") and (python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "3.8" or python_full_version >= "3.4.0" and python_version >= "3.6" and python_version < "3.8") and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6") and (python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "3.8" or python_full_version >= "3.6.0" and python_version < "3.8" and python_version >= "3.6") | ||||||
| iniconfig==1.1.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6" | iniconfig==1.1.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6" | ||||||
| ipython-genutils==0.2.0; python_version >= "3.7" and python_version < "4.0" | ipython-genutils==0.2.0; python_version >= "3.7" and python_version < "4.0" | ||||||
| ipython==7.21.0; python_version >= "3.7" and python_version < "4.0" | ipython==7.21.0; python_version >= "3.7" and python_version < "4.0" | ||||||
| @@ -27,7 +29,7 @@ isort==5.7.0; python_version >= "3.6" and python_version < "4.0" | |||||||
| jedi==0.18.0; python_version >= "3.7" and python_version < "4.0" | jedi==0.18.0; python_version >= "3.7" and python_version < "4.0" | ||||||
| langid==1.1.6 | langid==1.1.6 | ||||||
| leather==0.3.3 | leather==0.3.3 | ||||||
| mccabe==0.6.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" | mccabe==0.6.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" | ||||||
| mypy-extensions==0.4.3; python_version >= "3.6" | mypy-extensions==0.4.3; python_version >= "3.6" | ||||||
| numpy==1.20.1; python_version >= "3.7" and python_full_version >= "3.7.1" | numpy==1.20.1; python_version >= "3.7" and python_full_version >= "3.7.1" | ||||||
| openpyxl==3.0.7; python_version >= "3.6" | openpyxl==3.0.7; python_version >= "3.6" | ||||||
| @@ -39,12 +41,12 @@ pathspec==0.8.1; python_version >= "3.6" and python_full_version < "3.0.0" or py | |||||||
| pexpect==4.8.0; python_version >= "3.7" and python_version < "4.0" and sys_platform != "win32" | pexpect==4.8.0; python_version >= "3.7" and python_version < "4.0" and sys_platform != "win32" | ||||||
| pickleshare==0.7.5; python_version >= "3.7" and python_version < "4.0" | pickleshare==0.7.5; python_version >= "3.7" and python_version < "4.0" | ||||||
| pluggy==0.13.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6" | pluggy==0.13.1; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6" | ||||||
| prompt-toolkit==3.0.16; python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.6.1" | prompt-toolkit==3.0.17; python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.6.1" | ||||||
| ptyprocess==0.7.0; python_version >= "3.7" and python_version < "4.0" and sys_platform != "win32" | ptyprocess==0.7.0; python_version >= "3.7" and python_version < "4.0" and sys_platform != "win32" | ||||||
| py==1.10.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6" | py==1.10.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6" | ||||||
| pycodestyle==2.6.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" | pycodestyle==2.7.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" | ||||||
| pycountry==19.8.18 | pycountry==19.8.18 | ||||||
| pyflakes==2.2.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" | pyflakes==2.3.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" | ||||||
| pygments==2.8.1; python_version >= "3.7" and python_version < "4.0" | pygments==2.8.1; python_version >= "3.7" and python_version < "4.0" | ||||||
| pyicu==2.6 | pyicu==2.6 | ||||||
| pyparsing==2.4.7; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6" | pyparsing==2.4.7; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6" | ||||||
| @@ -60,13 +62,14 @@ requests-cache==0.5.2 | |||||||
| requests==2.25.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0") | requests==2.25.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0") | ||||||
| six==1.15.0; python_full_version >= "3.7.1" | six==1.15.0; python_full_version >= "3.7.1" | ||||||
| spdx-license-list==0.5.2 | spdx-license-list==0.5.2 | ||||||
| sqlalchemy==1.3.23; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" | sqlalchemy==1.4.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" | ||||||
| termcolor==1.1.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" | termcolor==1.1.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" | ||||||
| text-unidecode==1.3; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" | text-unidecode==1.3; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" | ||||||
| toml==0.10.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6" | toml==0.10.2; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.6" | ||||||
| traitlets==5.0.5; python_version >= "3.7" and python_version < "4.0" | traitlets==5.0.5; python_version >= "3.7" and python_version < "4.0" | ||||||
| typed-ast==1.4.2; python_version >= "3.6" | typed-ast==1.4.2; python_version >= "3.6" | ||||||
| typing-extensions==3.7.4.3; python_version >= "3.6" | typing-extensions==3.7.4.3; python_version < "3.8" and python_version >= "3.6" | ||||||
| urllib3==1.26.3; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version < "4" | urllib3==1.26.4; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version < "4" | ||||||
| wcwidth==0.2.5; python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.6.1" | wcwidth==0.2.5; python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.6.1" | ||||||
| xlrd==1.2.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0") | xlrd==1.2.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0") | ||||||
|  | zipp==3.4.1; python_version < "3.8" and python_version >= "3.6" | ||||||
|   | |||||||
| @@ -13,5 +13,5 @@ requests-cache==0.5.2 | |||||||
| requests==2.25.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0") | requests==2.25.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0") | ||||||
| six==1.15.0; python_full_version >= "3.7.1" | six==1.15.0; python_full_version >= "3.7.1" | ||||||
| spdx-license-list==0.5.2 | spdx-license-list==0.5.2 | ||||||
| urllib3==1.26.3; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version < "4" | urllib3==1.26.4; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version < "4" | ||||||
| xlrd==1.2.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0") | xlrd==1.2.0; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0") | ||||||
|   | |||||||
							
								
								
									
										3
									
								
								setup.py
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								setup.py
									
									
									
									
									
								
							| @@ -14,7 +14,7 @@ install_requires = [ | |||||||
|  |  | ||||||
| setuptools.setup( | setuptools.setup( | ||||||
|     name="csv-metadata-quality", |     name="csv-metadata-quality", | ||||||
|     version="0.4.6-dev", |     version="0.4.7", | ||||||
|     author="Alan Orth", |     author="Alan Orth", | ||||||
|     author_email="aorth@mjanja.ch", |     author_email="aorth@mjanja.ch", | ||||||
|     description="A simple, but opinionated CSV quality checking and fixing pipeline for CSVs in the DSpace ecosystem.", |     description="A simple, but opinionated CSV quality checking and fixing pipeline for CSVs in the DSpace ecosystem.", | ||||||
| @@ -28,7 +28,6 @@ setuptools.setup( | |||||||
|         "Programming Language :: Python :: 3.9", |         "Programming Language :: Python :: 3.9", | ||||||
|         "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", |         "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", | ||||||
|         "Operating System :: OS Independent", |         "Operating System :: OS Independent", | ||||||
|         "Development Status :: 4 - Beta", |  | ||||||
|     ], |     ], | ||||||
|     packages=["csv_metadata_quality"], |     packages=["csv_metadata_quality"], | ||||||
|     entry_points={ |     entry_points={ | ||||||
|   | |||||||
| @@ -316,3 +316,26 @@ def test_check_invalid_spdx_license_identifier(capsys): | |||||||
|         captured.out |         captured.out | ||||||
|         == f"{Fore.YELLOW}Non-SPDX license identifier: {Fore.RESET}{license}\n" |         == f"{Fore.YELLOW}Non-SPDX license identifier: {Fore.RESET}{license}\n" | ||||||
|     ) |     ) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | def test_check_duplicate_item(capsys): | ||||||
|  |     """Test item with duplicate title, type, and date.""" | ||||||
|  |  | ||||||
|  |     item_title = "Title" | ||||||
|  |     item_type = "Report" | ||||||
|  |     item_date = "2021-03-17" | ||||||
|  |  | ||||||
|  |     d = { | ||||||
|  |         "dc.title": [item_title, item_title], | ||||||
|  |         "dcterms.type": [item_type, item_type], | ||||||
|  |         "dcterms.issued": [item_date, item_date], | ||||||
|  |     } | ||||||
|  |     df = pd.DataFrame(data=d) | ||||||
|  |  | ||||||
|  |     result = check.duplicate_items(df) | ||||||
|  |  | ||||||
|  |     captured = capsys.readouterr() | ||||||
|  |     assert ( | ||||||
|  |         captured.out | ||||||
|  |         == f"{Fore.YELLOW}Possible duplicate (dc.title): {Fore.RESET}{item_title}\n" | ||||||
|  |     ) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user