DataComparerLibrary 0.849__tar.gz → 0.850__tar.gz

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 (25) hide show
  1. {datacomparerlibrary-0.849 → datacomparerlibrary-0.850}/PKG-INFO +44 -43
  2. {datacomparerlibrary-0.849 → datacomparerlibrary-0.850}/README.rst +36 -28
  3. datacomparerlibrary-0.850/pyproject.toml +34 -0
  4. {datacomparerlibrary-0.849 → datacomparerlibrary-0.850}/src/DataComparerLibrary/field.py +4 -6
  5. {datacomparerlibrary-0.849 → datacomparerlibrary-0.850}/src/DataComparerLibrary/row.py +2 -4
  6. datacomparerlibrary-0.850/src/DataComparerLibrary/tools.py +23 -0
  7. {datacomparerlibrary-0.849 → datacomparerlibrary-0.850}/src/DataComparerLibrary/twodarray.py +2 -4
  8. {datacomparerlibrary-0.849 → datacomparerlibrary-0.850}/src/DataComparerLibrary.egg-info/PKG-INFO +44 -43
  9. {datacomparerlibrary-0.849 → datacomparerlibrary-0.850}/src/DataComparerLibrary.egg-info/SOURCES.txt +1 -2
  10. datacomparerlibrary-0.850/src/DataComparerLibrary.egg-info/requires.txt +1 -0
  11. datacomparerlibrary-0.849/pyproject.toml +0 -6
  12. datacomparerlibrary-0.849/setup.py +0 -50
  13. datacomparerlibrary-0.849/src/DataComparerLibrary/tools.py +0 -8
  14. datacomparerlibrary-0.849/src/DataComparerLibrary/version.py +0 -3
  15. {datacomparerlibrary-0.849 → datacomparerlibrary-0.850}/LICENSE.txt +0 -0
  16. {datacomparerlibrary-0.849 → datacomparerlibrary-0.850}/setup.cfg +0 -0
  17. {datacomparerlibrary-0.849 → datacomparerlibrary-0.850}/src/DataComparerLibrary/__init__.py +0 -0
  18. {datacomparerlibrary-0.849 → datacomparerlibrary-0.850}/src/DataComparerLibrary/datacomparer.py +0 -0
  19. {datacomparerlibrary-0.849 → datacomparerlibrary-0.850}/src/DataComparerLibrary/datasorter.py +0 -0
  20. {datacomparerlibrary-0.849 → datacomparerlibrary-0.850}/src/DataComparerLibrary/datetimehandler.py +0 -0
  21. {datacomparerlibrary-0.849 → datacomparerlibrary-0.850}/src/DataComparerLibrary/delimitertranslator.py +0 -0
  22. {datacomparerlibrary-0.849 → datacomparerlibrary-0.850}/src/DataComparerLibrary/fileconverter.py +0 -0
  23. {datacomparerlibrary-0.849 → datacomparerlibrary-0.850}/src/DataComparerLibrary/report.py +0 -0
  24. {datacomparerlibrary-0.849 → datacomparerlibrary-0.850}/src/DataComparerLibrary.egg-info/dependency_links.txt +0 -0
  25. {datacomparerlibrary-0.849 → datacomparerlibrary-0.850}/src/DataComparerLibrary.egg-info/top_level.txt +0 -0
@@ -1,13 +1,11 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: DataComparerLibrary
3
- Version: 0.849
3
+ Version: 0.850
4
4
  Summary: For comparing csv-files, 2d-array with a csv-file or 2d-arrays. For comparing text-files, text variable with a text-file or text variables. Including a sorting module.
5
- Home-page:
6
- Author: René Philip Zuijderduijn
7
- Author-email: datacomparerlibrary@outlook.com
8
- License: Apache
9
- Keywords: robotframework testing test-automation datacompare
10
- Classifier: License :: OSI Approved :: Apache Software License
5
+ Author-email: René Philip Zuijderduijn <datacomparerlibrary@outlook.com>
6
+ License-Expression: Apache-2.0
7
+ Keywords: robotframework,Robot Framework,testing,test-automation,datacompare,data compare,compare csv files,compare text files,compare txt files,compare arrays,compare text
8
+ Classifier: Development Status :: 5 - Production/Stable
11
9
  Classifier: Operating System :: Microsoft :: Windows :: Windows 10
12
10
  Classifier: Operating System :: Microsoft :: Windows :: Windows 11
13
11
  Classifier: Programming Language :: Python :: 3.8
@@ -16,17 +14,12 @@ Classifier: Programming Language :: Python :: 3.10
16
14
  Classifier: Programming Language :: Python :: 3.11
17
15
  Classifier: Programming Language :: Python :: 3.12
18
16
  Classifier: Programming Language :: Python :: 3.13
17
+ Classifier: Topic :: Software Development :: Testing
18
+ Requires-Python: >=3.8
19
19
  Description-Content-Type: text/x-rst
20
20
  License-File: LICENSE.txt
21
- Dynamic: author
22
- Dynamic: author-email
23
- Dynamic: classifier
24
- Dynamic: description
25
- Dynamic: description-content-type
26
- Dynamic: keywords
27
- Dynamic: license
21
+ Requires-Dist: python-dateutil
28
22
  Dynamic: license-file
29
- Dynamic: summary
30
23
 
31
24
  ===================
32
25
  DataComparerLibrary
@@ -94,6 +87,10 @@ The DataComparerLibrary can be used for:
94
87
  | With {INTEGER} in the expected data file you can make clear that the data of a field/cell of the actual data should be an
95
88
  integer. This can be helpful for fields that have constant changing integer values. For example integer id's.
96
89
  |
90
+ | {NOT(...)}:
91
+ | With {NOT(...)} in the expected data file you can make clear that data of a field/cell should not match the unexpected data.
92
+ | At "Examples comparing Actual Data with Expected Data" you can find some examples how to use it.
93
+ |
97
94
  | {NOW()...:....}:
98
95
  | With {NOW()} in the expected data file you can make clear that the data of a field/cell or part of a field/cell of the actual
99
96
  data should be (a part of) a date. You can let calculate the current or a date in the past or future. Calculation is
@@ -169,34 +166,38 @@ Below there is an example of actual and expected data with some different cases.
169
166
  Based on current datetime = 2023-09-06 19:04:00 (example):
170
167
 
171
168
 
172
- +--------------------------------------------------------------------------------------------------+
173
- | Actual csv file or 2d-array |
174
- +--------------+----------+--------------+---------------------------------+---------+-------------+
175
- | id | name | city | start datetime | code | password |
176
- +==============+==========+==============+=================================+=========+=============+
177
- | 87 | John | London | 2019-09-01 10:00:15 | abc1 | xxxxxxxx |
178
- +--------------+----------+--------------+---------------------------------+---------+-------------+
179
- | 88 | Bert | Amsterdam | 2023/09/06 19:02:00 | | xxxxxxxx |
180
- +--------------+----------+--------------+---------------------------------+---------+-------------+
181
- | 89 | Klaas | Brussel | 23-8-6 12:04:17 | 5ghi | xxxxxxxx |
182
- +--------------+----------+--------------+---------------------------------+---------+-------------+
183
- | 90 | Joe | Helsinki | 08062025 12:04:17 | 99fg | xxxxxxxx |
184
- +--------------+----------+--------------+---------------------------------+---------+-------------+
185
-
186
-
187
- +--------------------------------------------------------------------------------------------------+
188
- | Expected csv file or 2d-array |
189
- +--------------+----------+--------------+---------------------------------+---------+-------------+
190
- | id | name | city | start datetime | code | password |
191
- +==============+==========+==============+=================================+=========+=============+
192
- | {INTEGER} | John | London | {NOW()-4Y5D:YYYY-MM-DD} | abc1 | {PRESENT} |
193
- +--------------+----------+--------------+---------------------------------+---------+-------------+
194
- | {INTEGER} | Bert | Amsterdam | {NOW():YYYY/MM/DD} {SKIP} | {EMPTY} | {PRESENT} |
195
- +--------------+----------+--------------+---------------------------------+---------+-------------+
196
- | {INTEGER} | Klaas | Brussel | {NOW()-1M:YY-M-D} {SKIP} | 5ghi | {PRESENT} |
197
- +--------------+----------+--------------+---------------------------------+---------+-------------+
198
- | {INTEGER} | Joe | Helsinki | {NOW()+1Y9M2D:DDMMYYYY} {SKIP} | {SKIP} | {PRESENT} |
199
- +--------------+----------+--------------+---------------------------------+---------+-------------+
169
+ +--------------+-------------+--------------+---------------------------------+------------+-------------+
170
+ | Actual csv file or 2d-array |
171
+ +--------------+-------------+--------------+---------------------------------+------------+-------------+
172
+ | id | name | city | start datetime | code | password |
173
+ +==============+=============+==============+=================================+============+=============+
174
+ | 87 | John | London | 2019-09-01 10:00:15 | abc1 | xxxxxxxx |
175
+ +--------------+-------------+--------------+---------------------------------+------------+-------------+
176
+ | 88 | Bert | Amsterdam | 2023/09/06 19:02:00 | | xxxxxxxx |
177
+ +--------------+-------------+--------------+---------------------------------+------------+-------------+
178
+ | 89 | Klaas | Brussel | 23-8-6 12:04:17 | 5ghi | xxxxxxxx |
179
+ +--------------+-------------+--------------+---------------------------------+------------+-------------+
180
+ | 90 | Joe | Helsinki | 08062025 12:04:17 | 99fg | xxxxxxxx |
181
+ +--------------+-------------+--------------+---------------------------------+------------+-------------+
182
+ | 91 | Mike | Berlin | 2023/09/06 19:02:00 | 123 | xxxxxxxx |
183
+ +--------------+-------------+--------------+---------------------------------+------------+-------------+
184
+
185
+
186
+ +--------------+-------------+--------------+---------------------------------+------------+-------------+
187
+ | Expected csv file or 2d-array |
188
+ +--------------+-------------+--------------+---------------------------------+------------+-------------+
189
+ | id | name | city | start datetime | code | password |
190
+ +==============+=============+==============+=================================+============+=============+
191
+ | {INTEGER} | John | London | {NOW()-4Y5D:YYYY-MM-DD} | abc1 | {PRESENT} |
192
+ +--------------+-------------+--------------+---------------------------------+------------+-------------+
193
+ | {INTEGER} | Bert | Amsterdam | {NOW():YYYY/MM/DD} {SKIP} | {EMPTY} | {PRESENT} |
194
+ +--------------+-------------+--------------+---------------------------------+------------+-------------+
195
+ | {INTEGER} | Klaas | Brussel | {NOW()-1M:YY-M-D} {SKIP} | 5ghi | {PRESENT} |
196
+ +--------------+-------------+--------------+---------------------------------+------------+-------------+
197
+ | {INTEGER} | Joe | Helsinki | {NOW()+1Y9M2D:DDMMYYYY} {SKIP} | {SKIP} | {PRESENT} |
198
+ +--------------+-------------+--------------+---------------------------------+------------+-------------+
199
+ | {INTEGER} | NOT("Jack"} | Berlin | {NOW():YYYY/MM/DD} {SKIP} | {NOT(456)} | {PRESENT} |
200
+ +--------------+-------------+--------------+---------------------------------+------------+-------------+
200
201
 
201
202
 
202
203
  Comparing Text
@@ -64,6 +64,10 @@ The DataComparerLibrary can be used for:
64
64
  | With {INTEGER} in the expected data file you can make clear that the data of a field/cell of the actual data should be an
65
65
  integer. This can be helpful for fields that have constant changing integer values. For example integer id's.
66
66
  |
67
+ | {NOT(...)}:
68
+ | With {NOT(...)} in the expected data file you can make clear that data of a field/cell should not match the unexpected data.
69
+ | At "Examples comparing Actual Data with Expected Data" you can find some examples how to use it.
70
+ |
67
71
  | {NOW()...:....}:
68
72
  | With {NOW()} in the expected data file you can make clear that the data of a field/cell or part of a field/cell of the actual
69
73
  data should be (a part of) a date. You can let calculate the current or a date in the past or future. Calculation is
@@ -139,34 +143,38 @@ Below there is an example of actual and expected data with some different cases.
139
143
  Based on current datetime = 2023-09-06 19:04:00 (example):
140
144
 
141
145
 
142
- +--------------------------------------------------------------------------------------------------+
143
- | Actual csv file or 2d-array |
144
- +--------------+----------+--------------+---------------------------------+---------+-------------+
145
- | id | name | city | start datetime | code | password |
146
- +==============+==========+==============+=================================+=========+=============+
147
- | 87 | John | London | 2019-09-01 10:00:15 | abc1 | xxxxxxxx |
148
- +--------------+----------+--------------+---------------------------------+---------+-------------+
149
- | 88 | Bert | Amsterdam | 2023/09/06 19:02:00 | | xxxxxxxx |
150
- +--------------+----------+--------------+---------------------------------+---------+-------------+
151
- | 89 | Klaas | Brussel | 23-8-6 12:04:17 | 5ghi | xxxxxxxx |
152
- +--------------+----------+--------------+---------------------------------+---------+-------------+
153
- | 90 | Joe | Helsinki | 08062025 12:04:17 | 99fg | xxxxxxxx |
154
- +--------------+----------+--------------+---------------------------------+---------+-------------+
155
-
156
-
157
- +--------------------------------------------------------------------------------------------------+
158
- | Expected csv file or 2d-array |
159
- +--------------+----------+--------------+---------------------------------+---------+-------------+
160
- | id | name | city | start datetime | code | password |
161
- +==============+==========+==============+=================================+=========+=============+
162
- | {INTEGER} | John | London | {NOW()-4Y5D:YYYY-MM-DD} | abc1 | {PRESENT} |
163
- +--------------+----------+--------------+---------------------------------+---------+-------------+
164
- | {INTEGER} | Bert | Amsterdam | {NOW():YYYY/MM/DD} {SKIP} | {EMPTY} | {PRESENT} |
165
- +--------------+----------+--------------+---------------------------------+---------+-------------+
166
- | {INTEGER} | Klaas | Brussel | {NOW()-1M:YY-M-D} {SKIP} | 5ghi | {PRESENT} |
167
- +--------------+----------+--------------+---------------------------------+---------+-------------+
168
- | {INTEGER} | Joe | Helsinki | {NOW()+1Y9M2D:DDMMYYYY} {SKIP} | {SKIP} | {PRESENT} |
169
- +--------------+----------+--------------+---------------------------------+---------+-------------+
146
+ +--------------+-------------+--------------+---------------------------------+------------+-------------+
147
+ | Actual csv file or 2d-array |
148
+ +--------------+-------------+--------------+---------------------------------+------------+-------------+
149
+ | id | name | city | start datetime | code | password |
150
+ +==============+=============+==============+=================================+============+=============+
151
+ | 87 | John | London | 2019-09-01 10:00:15 | abc1 | xxxxxxxx |
152
+ +--------------+-------------+--------------+---------------------------------+------------+-------------+
153
+ | 88 | Bert | Amsterdam | 2023/09/06 19:02:00 | | xxxxxxxx |
154
+ +--------------+-------------+--------------+---------------------------------+------------+-------------+
155
+ | 89 | Klaas | Brussel | 23-8-6 12:04:17 | 5ghi | xxxxxxxx |
156
+ +--------------+-------------+--------------+---------------------------------+------------+-------------+
157
+ | 90 | Joe | Helsinki | 08062025 12:04:17 | 99fg | xxxxxxxx |
158
+ +--------------+-------------+--------------+---------------------------------+------------+-------------+
159
+ | 91 | Mike | Berlin | 2023/09/06 19:02:00 | 123 | xxxxxxxx |
160
+ +--------------+-------------+--------------+---------------------------------+------------+-------------+
161
+
162
+
163
+ +--------------+-------------+--------------+---------------------------------+------------+-------------+
164
+ | Expected csv file or 2d-array |
165
+ +--------------+-------------+--------------+---------------------------------+------------+-------------+
166
+ | id | name | city | start datetime | code | password |
167
+ +==============+=============+==============+=================================+============+=============+
168
+ | {INTEGER} | John | London | {NOW()-4Y5D:YYYY-MM-DD} | abc1 | {PRESENT} |
169
+ +--------------+-------------+--------------+---------------------------------+------------+-------------+
170
+ | {INTEGER} | Bert | Amsterdam | {NOW():YYYY/MM/DD} {SKIP} | {EMPTY} | {PRESENT} |
171
+ +--------------+-------------+--------------+---------------------------------+------------+-------------+
172
+ | {INTEGER} | Klaas | Brussel | {NOW()-1M:YY-M-D} {SKIP} | 5ghi | {PRESENT} |
173
+ +--------------+-------------+--------------+---------------------------------+------------+-------------+
174
+ | {INTEGER} | Joe | Helsinki | {NOW()+1Y9M2D:DDMMYYYY} {SKIP} | {SKIP} | {PRESENT} |
175
+ +--------------+-------------+--------------+---------------------------------+------------+-------------+
176
+ | {INTEGER} | NOT("Jack"} | Berlin | {NOW():YYYY/MM/DD} {SKIP} | {NOT(456)} | {PRESENT} |
177
+ +--------------+-------------+--------------+---------------------------------+------------+-------------+
170
178
 
171
179
 
172
180
  Comparing Text
@@ -0,0 +1,34 @@
1
+ [build-system]
2
+ requires = ["pkginfo>=1.12", "setuptools>=80", "twine>=6.0.1", "wheel>=0.41.2"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+
6
+ [project]
7
+ name = "DataComparerLibrary"
8
+ description = "For comparing csv-files, 2d-array with a csv-file or 2d-arrays. For comparing text-files, text variable with a text-file or text variables. Including a sorting module."
9
+ version = "0.850"
10
+ dependencies = ["python-dateutil"]
11
+ authors = [{ name = "René Philip Zuijderduijn", email = "datacomparerlibrary@outlook.com" }]
12
+ readme = "README.rst"
13
+ license = "Apache-2.0"
14
+ license-files = ["LICENSE.txt"]
15
+ classifiers=[
16
+ "Development Status :: 5 - Production/Stable",
17
+ "Operating System :: Microsoft :: Windows :: Windows 10",
18
+ "Operating System :: Microsoft :: Windows :: Windows 11",
19
+ "Programming Language :: Python :: 3.8",
20
+ "Programming Language :: Python :: 3.9",
21
+ "Programming Language :: Python :: 3.10",
22
+ "Programming Language :: Python :: 3.11",
23
+ "Programming Language :: Python :: 3.12",
24
+ "Programming Language :: Python :: 3.13",
25
+ "Topic :: Software Development :: Testing",
26
+ ]
27
+ requires-python = ">=3.8"
28
+ keywords = ["robotframework", "Robot Framework","testing", "test-automation", "datacompare", "data compare", "compare csv files",
29
+ "compare text files", "compare txt files", "compare arrays", "compare text"]
30
+
31
+
32
+ [tool.setuptools]
33
+ package-dir = { "" = "src" }
34
+ packages = ["DataComparerLibrary"]
@@ -143,12 +143,10 @@ class Field:
143
143
  def __is_same_value_but_different_types(self, other_field_data):
144
144
  # Verify if difference is a matter of string versus integer representation.
145
145
  if str(self.field_data) == str(other_field_data):
146
- if isinstance(self.field_data, int) and isinstance(other_field_data, str):
147
- Report.show_differences_comparation_result(self.row_nr, self.column_nr, self.field_data, other_field_data, "There is a difference between actual and expected data. Actual data is an integer while expected data is a string.")
148
- return True
149
- elif isinstance(self.field_data, str) and isinstance(other_field_data, int):
150
- Report.show_differences_comparation_result(self.row_nr, self.column_nr, self.field_data, other_field_data, "There is a difference between actual and expected data. Actual data is a string while expected data is an integer.")
151
- return True
146
+ type_field_data = Tools.get_full_typename(self.field_data)
147
+ type_other_field_data = Tools.get_full_typename(other_field_data)
148
+ Report.show_differences_comparation_result(self.row_nr, self.column_nr, self.field_data, other_field_data, "There is a difference between actual and expected data. Actual data is a(n) " + type_field_data + " while expected data is a(n) " + type_other_field_data + ".")
149
+ return True
152
150
  return False
153
151
 
154
152
 
@@ -19,14 +19,12 @@ class Row:
19
19
  if column_nr >= self.number_of_columns:
20
20
  equal = False
21
21
  Report.show_differences_comparation_result(self.row_nr, column_nr, "", other_row.row_data[column_nr], "Column actual data is not PRESENT.")
22
- continue
23
22
  #
24
- if column_nr >= other_row.number_of_columns:
23
+ elif column_nr >= other_row.number_of_columns:
25
24
  equal = False
26
25
  Report.show_differences_comparation_result(self.row_nr, column_nr, self.row_data[column_nr], "", "Column expected data is not PRESENT.")
27
- continue
28
26
  #
29
- if not Field(self.row_data[column_nr], self.row_nr, column_nr).equals(Field(other_row.row_data[column_nr], self.row_nr, column_nr), template_literals_dict):
27
+ elif not Field(self.row_data[column_nr], self.row_nr, column_nr).equals(Field(other_row.row_data[column_nr], self.row_nr, column_nr), template_literals_dict):
30
28
  equal = False
31
29
  #
32
30
  return equal
@@ -0,0 +1,23 @@
1
+ class Tools:
2
+ @staticmethod
3
+ def is_integer(string):
4
+ if string[0] == '-':
5
+ # if a negative number
6
+ return string[1:].isdigit()
7
+ else:
8
+ return string.isdigit()
9
+
10
+
11
+ @staticmethod
12
+ def get_full_typename(variable):
13
+ variable_type = type(variable).__name__
14
+ match variable_type:
15
+ case 'float':
16
+ long_variable_type = "float"
17
+ case 'int':
18
+ long_variable_type = "integer"
19
+ case 'str':
20
+ long_variable_type = "string"
21
+ case _:
22
+ long_variable_type = None
23
+ return long_variable_type
@@ -20,17 +20,15 @@ class TwoDArray:
20
20
  Report.show_differences_comparation_result(row_nr, 0, "", "", "Row actual data is not PRESENT. Row expected data is EMPTY.")
21
21
  else:
22
22
  Report.show_differences_comparation_result(row_nr, 0, "", other_two_d_array.two_d_array_data[row_nr][0], "Row actual data is not PRESENT.")
23
- continue
24
23
  #
25
- if row_nr >= other_two_d_array.number_of_rows:
24
+ elif row_nr >= other_two_d_array.number_of_rows:
26
25
  equal = False
27
26
  if len(self.two_d_array_data[row_nr]) == 0:
28
27
  Report.show_differences_comparation_result(row_nr, 0, "", "", "Row actual data is EMPTY. Row expected data is not PRESENT.")
29
28
  else:
30
29
  Report.show_differences_comparation_result(row_nr, 0, self.two_d_array_data[row_nr][0], "", "Row expected data is not PRESENT.")
31
- continue
32
30
  #
33
- if not Row(self.two_d_array_data[row_nr], row_nr).equals(Row(other_two_d_array.two_d_array_data[row_nr], row_nr), template_literals_dict):
31
+ elif not Row(self.two_d_array_data[row_nr], row_nr).equals(Row(other_two_d_array.two_d_array_data[row_nr], row_nr), template_literals_dict):
34
32
  equal = False
35
33
  #
36
34
  return equal
@@ -1,13 +1,11 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: DataComparerLibrary
3
- Version: 0.849
3
+ Version: 0.850
4
4
  Summary: For comparing csv-files, 2d-array with a csv-file or 2d-arrays. For comparing text-files, text variable with a text-file or text variables. Including a sorting module.
5
- Home-page:
6
- Author: René Philip Zuijderduijn
7
- Author-email: datacomparerlibrary@outlook.com
8
- License: Apache
9
- Keywords: robotframework testing test-automation datacompare
10
- Classifier: License :: OSI Approved :: Apache Software License
5
+ Author-email: René Philip Zuijderduijn <datacomparerlibrary@outlook.com>
6
+ License-Expression: Apache-2.0
7
+ Keywords: robotframework,Robot Framework,testing,test-automation,datacompare,data compare,compare csv files,compare text files,compare txt files,compare arrays,compare text
8
+ Classifier: Development Status :: 5 - Production/Stable
11
9
  Classifier: Operating System :: Microsoft :: Windows :: Windows 10
12
10
  Classifier: Operating System :: Microsoft :: Windows :: Windows 11
13
11
  Classifier: Programming Language :: Python :: 3.8
@@ -16,17 +14,12 @@ Classifier: Programming Language :: Python :: 3.10
16
14
  Classifier: Programming Language :: Python :: 3.11
17
15
  Classifier: Programming Language :: Python :: 3.12
18
16
  Classifier: Programming Language :: Python :: 3.13
17
+ Classifier: Topic :: Software Development :: Testing
18
+ Requires-Python: >=3.8
19
19
  Description-Content-Type: text/x-rst
20
20
  License-File: LICENSE.txt
21
- Dynamic: author
22
- Dynamic: author-email
23
- Dynamic: classifier
24
- Dynamic: description
25
- Dynamic: description-content-type
26
- Dynamic: keywords
27
- Dynamic: license
21
+ Requires-Dist: python-dateutil
28
22
  Dynamic: license-file
29
- Dynamic: summary
30
23
 
31
24
  ===================
32
25
  DataComparerLibrary
@@ -94,6 +87,10 @@ The DataComparerLibrary can be used for:
94
87
  | With {INTEGER} in the expected data file you can make clear that the data of a field/cell of the actual data should be an
95
88
  integer. This can be helpful for fields that have constant changing integer values. For example integer id's.
96
89
  |
90
+ | {NOT(...)}:
91
+ | With {NOT(...)} in the expected data file you can make clear that data of a field/cell should not match the unexpected data.
92
+ | At "Examples comparing Actual Data with Expected Data" you can find some examples how to use it.
93
+ |
97
94
  | {NOW()...:....}:
98
95
  | With {NOW()} in the expected data file you can make clear that the data of a field/cell or part of a field/cell of the actual
99
96
  data should be (a part of) a date. You can let calculate the current or a date in the past or future. Calculation is
@@ -169,34 +166,38 @@ Below there is an example of actual and expected data with some different cases.
169
166
  Based on current datetime = 2023-09-06 19:04:00 (example):
170
167
 
171
168
 
172
- +--------------------------------------------------------------------------------------------------+
173
- | Actual csv file or 2d-array |
174
- +--------------+----------+--------------+---------------------------------+---------+-------------+
175
- | id | name | city | start datetime | code | password |
176
- +==============+==========+==============+=================================+=========+=============+
177
- | 87 | John | London | 2019-09-01 10:00:15 | abc1 | xxxxxxxx |
178
- +--------------+----------+--------------+---------------------------------+---------+-------------+
179
- | 88 | Bert | Amsterdam | 2023/09/06 19:02:00 | | xxxxxxxx |
180
- +--------------+----------+--------------+---------------------------------+---------+-------------+
181
- | 89 | Klaas | Brussel | 23-8-6 12:04:17 | 5ghi | xxxxxxxx |
182
- +--------------+----------+--------------+---------------------------------+---------+-------------+
183
- | 90 | Joe | Helsinki | 08062025 12:04:17 | 99fg | xxxxxxxx |
184
- +--------------+----------+--------------+---------------------------------+---------+-------------+
185
-
186
-
187
- +--------------------------------------------------------------------------------------------------+
188
- | Expected csv file or 2d-array |
189
- +--------------+----------+--------------+---------------------------------+---------+-------------+
190
- | id | name | city | start datetime | code | password |
191
- +==============+==========+==============+=================================+=========+=============+
192
- | {INTEGER} | John | London | {NOW()-4Y5D:YYYY-MM-DD} | abc1 | {PRESENT} |
193
- +--------------+----------+--------------+---------------------------------+---------+-------------+
194
- | {INTEGER} | Bert | Amsterdam | {NOW():YYYY/MM/DD} {SKIP} | {EMPTY} | {PRESENT} |
195
- +--------------+----------+--------------+---------------------------------+---------+-------------+
196
- | {INTEGER} | Klaas | Brussel | {NOW()-1M:YY-M-D} {SKIP} | 5ghi | {PRESENT} |
197
- +--------------+----------+--------------+---------------------------------+---------+-------------+
198
- | {INTEGER} | Joe | Helsinki | {NOW()+1Y9M2D:DDMMYYYY} {SKIP} | {SKIP} | {PRESENT} |
199
- +--------------+----------+--------------+---------------------------------+---------+-------------+
169
+ +--------------+-------------+--------------+---------------------------------+------------+-------------+
170
+ | Actual csv file or 2d-array |
171
+ +--------------+-------------+--------------+---------------------------------+------------+-------------+
172
+ | id | name | city | start datetime | code | password |
173
+ +==============+=============+==============+=================================+============+=============+
174
+ | 87 | John | London | 2019-09-01 10:00:15 | abc1 | xxxxxxxx |
175
+ +--------------+-------------+--------------+---------------------------------+------------+-------------+
176
+ | 88 | Bert | Amsterdam | 2023/09/06 19:02:00 | | xxxxxxxx |
177
+ +--------------+-------------+--------------+---------------------------------+------------+-------------+
178
+ | 89 | Klaas | Brussel | 23-8-6 12:04:17 | 5ghi | xxxxxxxx |
179
+ +--------------+-------------+--------------+---------------------------------+------------+-------------+
180
+ | 90 | Joe | Helsinki | 08062025 12:04:17 | 99fg | xxxxxxxx |
181
+ +--------------+-------------+--------------+---------------------------------+------------+-------------+
182
+ | 91 | Mike | Berlin | 2023/09/06 19:02:00 | 123 | xxxxxxxx |
183
+ +--------------+-------------+--------------+---------------------------------+------------+-------------+
184
+
185
+
186
+ +--------------+-------------+--------------+---------------------------------+------------+-------------+
187
+ | Expected csv file or 2d-array |
188
+ +--------------+-------------+--------------+---------------------------------+------------+-------------+
189
+ | id | name | city | start datetime | code | password |
190
+ +==============+=============+==============+=================================+============+=============+
191
+ | {INTEGER} | John | London | {NOW()-4Y5D:YYYY-MM-DD} | abc1 | {PRESENT} |
192
+ +--------------+-------------+--------------+---------------------------------+------------+-------------+
193
+ | {INTEGER} | Bert | Amsterdam | {NOW():YYYY/MM/DD} {SKIP} | {EMPTY} | {PRESENT} |
194
+ +--------------+-------------+--------------+---------------------------------+------------+-------------+
195
+ | {INTEGER} | Klaas | Brussel | {NOW()-1M:YY-M-D} {SKIP} | 5ghi | {PRESENT} |
196
+ +--------------+-------------+--------------+---------------------------------+------------+-------------+
197
+ | {INTEGER} | Joe | Helsinki | {NOW()+1Y9M2D:DDMMYYYY} {SKIP} | {SKIP} | {PRESENT} |
198
+ +--------------+-------------+--------------+---------------------------------+------------+-------------+
199
+ | {INTEGER} | NOT("Jack"} | Berlin | {NOW():YYYY/MM/DD} {SKIP} | {NOT(456)} | {PRESENT} |
200
+ +--------------+-------------+--------------+---------------------------------+------------+-------------+
200
201
 
201
202
 
202
203
  Comparing Text
@@ -1,7 +1,6 @@
1
1
  LICENSE.txt
2
2
  README.rst
3
3
  pyproject.toml
4
- setup.py
5
4
  src/DataComparerLibrary/__init__.py
6
5
  src/DataComparerLibrary/datacomparer.py
7
6
  src/DataComparerLibrary/datasorter.py
@@ -13,8 +12,8 @@ src/DataComparerLibrary/report.py
13
12
  src/DataComparerLibrary/row.py
14
13
  src/DataComparerLibrary/tools.py
15
14
  src/DataComparerLibrary/twodarray.py
16
- src/DataComparerLibrary/version.py
17
15
  src/DataComparerLibrary.egg-info/PKG-INFO
18
16
  src/DataComparerLibrary.egg-info/SOURCES.txt
19
17
  src/DataComparerLibrary.egg-info/dependency_links.txt
18
+ src/DataComparerLibrary.egg-info/requires.txt
20
19
  src/DataComparerLibrary.egg-info/top_level.txt
@@ -1,6 +0,0 @@
1
- [build-system]
2
- requires = [
3
- "setuptools>=54",
4
- "wheel"
5
- ]
6
- build-backend = "setuptools.build_meta"
@@ -1,50 +0,0 @@
1
- #!/usr/bin/env python
2
-
3
- """Setup script for DataComparerLibrary distributions"""
4
-
5
- import os
6
- import re
7
- import sys
8
- from distutils.core import setup
9
- from os.path import join, dirname, abspath
10
- from pathlib import Path
11
- from setuptools import setup
12
-
13
- sys.path.insert(0, os.path.join('src', 'DataComparerLibrary'))
14
-
15
- # read the contents of your README file
16
- this_directory = Path(__file__).parent
17
- README = (this_directory / "README.rst").read_text()
18
-
19
- with open(join(this_directory, 'src', 'DataComparerLibrary', 'version.py')) as f:
20
- VERSION = re.search("\nVERSION = '(.*)'", f.read()).group(1)
21
-
22
- def main():
23
- setup(name='DataComparerLibrary',
24
- version=VERSION,
25
- description="For comparing csv-files, 2d-array with a csv-file or 2d-arrays. For comparing text-files, text variable with a text-file or text variables. Including a sorting module.",
26
- long_description=README,
27
- long_description_content_type="text/x-rst",
28
- url="",
29
- author="René Philip Zuijderduijn",
30
- author_email="datacomparerlibrary@outlook.com",
31
- license="Apache",
32
- classifiers=[
33
- "License :: OSI Approved :: Apache Software License",
34
- "Operating System :: Microsoft :: Windows :: Windows 10",
35
- "Operating System :: Microsoft :: Windows :: Windows 11",
36
- "Programming Language :: Python :: 3.8",
37
- "Programming Language :: Python :: 3.9",
38
- "Programming Language :: Python :: 3.10",
39
- "Programming Language :: Python :: 3.11",
40
- "Programming Language :: Python :: 3.12",
41
- "Programming Language :: Python :: 3.13",
42
- ],
43
- keywords='robotframework testing test-automation datacompare',
44
- package_dir={'': 'src'},
45
- packages=['DataComparerLibrary'],
46
- )
47
-
48
-
49
- if __name__ == "__main__":
50
- main()
@@ -1,8 +0,0 @@
1
- class Tools:
2
- @staticmethod
3
- def is_integer(string):
4
- if string[0] == '-':
5
- # if a negative number
6
- return string[1:].isdigit()
7
- else:
8
- return string.isdigit()
@@ -1,3 +0,0 @@
1
- # encoding=utf-8
2
-
3
- VERSION = '0.849'