From 5e19d2246a64332359578555b9054457074e8366 Mon Sep 17 00:00:00 2001 From: Eric Enzler Date: Tue, 23 Jan 2024 13:27:03 +0100 Subject: [PATCH 01/27] Skeleton for anonymization --- config/postgres/sample_templated_config.xml | 16 ++ scripts/anonymizer.py | 189 ++++++++++++++++++ .../java/com/oltpbenchmark/DBWorkload.java | 40 ++++ 3 files changed, 245 insertions(+) create mode 100644 scripts/anonymizer.py diff --git a/config/postgres/sample_templated_config.xml b/config/postgres/sample_templated_config.xml index 51a701d58..2cab00084 100644 --- a/config/postgres/sample_templated_config.xml +++ b/config/postgres/sample_templated_config.xml @@ -19,6 +19,22 @@ data/templated/example.xml + + + item + i_id + i_name,i_data,i_im_id + i_price + + 1.0 + 0.5 + aim + + i_name + + + + 1 diff --git a/scripts/anonymizer.py b/scripts/anonymizer.py new file mode 100644 index 000000000..727fa9e1d --- /dev/null +++ b/scripts/anonymizer.py @@ -0,0 +1,189 @@ +"""Module that handles the full Anonymization pipeline +""" +import sys +import xml.etree.ElementTree as ET + +def rewriteFakeQueries(fakeValues, path): + """Method that rewrites existing query templates based on sensitive value replacements + + Args: + fakeValues (dict): Key-Value pairs of replacement values + path (str): Path pointing to the query template + """ + #TODO + + +def fakeColumn(dataset, col, locales, method, seed=0): + """Method that generates fake values for columns that are considered sensitive + + Args: + dataset (DataFrame): A Pandas dataframe holding anonymized data + col (str): The name of the column + locales (str[]): A list of locales + method (str): A string matching the desired faker method + seed (int, optional): Seed for the fake values. Defaults to 0. + + Returns: + dict: Mapping from original to fake values + """ + #TODO + + +def getTimestampColumns(dbTypeList): + """A helper function that returns a list of indexes of timestamp-type columns + + Args: + dbTypeList (any): A list of Database column metadata + + Returns: + int[]: A list of indexes of timestamp-type columns + """ + #TODO + + +def dfFromTable(curs, table): + """Helper function that creates a pandas DataFrame from a jaydebe connection + + Args: + curs (cursor): The connection cursor + table (str): The name of the table + + Returns: + Dataframe,int[]: The table as a DataFrame and the indexes of timestamp columns + """ + #TODO + + +def populateAnonFromDF(curs, df, table, timestampIndexes): + """Helper function to fill a DB table from a DataFrame + + Args: + curs (cursor): The connection cursor + df (DataFrame): Pandas DataFrame + table (str): The name of the table + timestampIndexes (int[]): A list of indexes of timestamp-type columns + """ + #TODO + + +def getDroppableInfo(dropCols, dataset): + """Helper function that saves droppable columns from anonymization + + Args: + dropCols (str[]): A list of column names + dataset (DataFrame): The dataset + + Returns: + DataFrame,int[]: The saved columns as a DataFrame and a list of the original indexes of the columns + """ + #TODO + + +def anonymize(dataset: str, anonConfig: dict, sensConfig: dict, templatesPath: str): + """_summary_ + + Args: + dataset (DataFrame): A pandas DataFrame containing the data + anonConfig (dict): Anonymization config + sensConfig (dict): Sensitive value config + templatesPath (str): The path pointing to the query templates + + Returns: + DataFrame: An anonymized version of the original data + """ + #TODO + + +def anonymizeDB( + jdbcConfig: dict, anonConfig: dict, sensConfig: dict, templatesPath: str +): + """Function that handles the necessary steps for anonymization. + Includes starting the JVM, Anonymizing and pushing data to the DB + + Args: + jdbcConfig (dict): JDBC connection information + anonConfig (dict): Anonymization config + sensConfig (dict): Sensitive value config + templatesPath (str): The path pointing to the query templates + """ + #TODO + + +def listFromString(string): + """Helper function creating an array of values from a string + + Args: + string (str): A string of values separated by comma (,) + + Returns: + str[]: A list of values + """ + if string: + return list(string.split(",")) + else: + return [] + + +def configFromXML(path): + tree = ET.parse(path) + parameters = tree.getroot() + jdbcConfig = { + "driver": parameters.find("driver").text, + "url": parameters.find("url").text, + "username": parameters.find("username").text, + "password": parameters.find("password").text, + } + anonConfig = {} + sensConfig = {} + + anon = parameters.find("anon") + + for table in anon.findall("anonTable"): + anonConfig["table"] = table.find("tablename").text + anonConfig["hide"] = listFromString(table.find("droppable").text) + anonConfig["cat"] = listFromString(table.find("categorical").text) + anonConfig["cont"] = listFromString(table.find("continuous").text) + anonConfig["ord"] = listFromString(table.find("ordinal").text) + anonConfig["eps"] = table.find("eps").text + anonConfig["preEps"] = table.find("preEps").text + anonConfig["alg"] = table.find("algorithm").text + + sens = table.find("sensitive") + if sens: + sensList = [] + for sensCol in sens.findall("colName"): + sensList.append( + { + "name": sensCol.text, + "method": sensCol.get("method"), + "locales": sensCol.get("locales"), + "seed":sensCol.get("seed",0) + } + ) + sensConfig["cols"] = sensList + + return jdbcConfig, anonConfig, sensConfig + + +def main(): + """Entry method""" + + #No templates provided + if len(sys.argv) == 2: + confPath = sys.argv[1] + templatesPath = "" + + elif len(sys.argv) == 3: + confPath = sys.argv[1] + templatesPath = sys.argv[2] + + else: + print("Not enough arguments provided: ") + return + + jdbcConfig, anonConfig, sensConfig = configFromXML(confPath) + anonymizeDB(jdbcConfig, anonConfig, sensConfig, templatesPath) + + +if __name__ == "__main__": + main() diff --git a/src/main/java/com/oltpbenchmark/DBWorkload.java b/src/main/java/com/oltpbenchmark/DBWorkload.java index f4108c27e..6c1a73868 100644 --- a/src/main/java/com/oltpbenchmark/DBWorkload.java +++ b/src/main/java/com/oltpbenchmark/DBWorkload.java @@ -514,6 +514,11 @@ public static void main(String[] args) throws Exception { LOG.debug("Skipping loading benchmark database records"); } + // Handle anonymization after data loading + if (xmlConfig.configurationsAt("/anon/anonTable").size() > 0) { + applyAnonymization(xmlConfig, configFile); + } + // Execute Workload if (isBooleanOptionSet(argsLine, "execute")) { // Bombs away! @@ -775,4 +780,39 @@ private static boolean isBooleanOptionSet(CommandLine argsLine, String key) { } return (false); } + + /** + * Handles the anonymization of specified tables with differential privacy and automatically + * creates an anonymized copy of the table. Adapts templated query file if sensitive values are + * present + * + * @param xmlConfig + * @param configFile + */ + private static void applyAnonymization(XMLConfiguration xmlConfig, String configFile) { + + String templatesPath = ""; + if (xmlConfig.containsKey("query_templates_file")) { + templatesPath = xmlConfig.getString("query_templates_file"); + } + + LOG.info("Starting the Anonymization process"); + LOG.info(SINGLE_LINE); + ProcessBuilder processBuilder = + new ProcessBuilder("python3", "scripts/anonymizer.py", configFile, templatesPath); + try { + // Redirect Output stream of the script to get live feedback + processBuilder.inheritIO(); + Process process = processBuilder.start(); + int exitCode = process.waitFor(); + if (exitCode != 0) { + throw new Exception("Anonymization program exited with a non-zero status code"); + } + LOG.info("Finished the Anonymization process for all tables"); + LOG.info(SINGLE_LINE); + } catch (Exception e) { + LOG.error(e.getMessage()); + return; + } + } } From a27cf197ffe01ebf2e906532b3fd6feab2bbfa44 Mon Sep 17 00:00:00 2001 From: Eric Enzler Date: Wed, 24 Jan 2024 09:35:34 +0100 Subject: [PATCH 02/27] Added anonymization flag --- src/main/java/com/oltpbenchmark/DBWorkload.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/oltpbenchmark/DBWorkload.java b/src/main/java/com/oltpbenchmark/DBWorkload.java index 6c1a73868..9dd137b25 100644 --- a/src/main/java/com/oltpbenchmark/DBWorkload.java +++ b/src/main/java/com/oltpbenchmark/DBWorkload.java @@ -514,9 +514,17 @@ public static void main(String[] args) throws Exception { LOG.debug("Skipping loading benchmark database records"); } - // Handle anonymization after data loading - if (xmlConfig.configurationsAt("/anon/anonTable").size() > 0) { - applyAnonymization(xmlConfig, configFile); + + // Anonymize Datasets + if (isBooleanOptionSet(argsLine, "anonymize")) { + try { + if (xmlConfig.configurationsAt("/anon/anonTable").size() > 0) { + applyAnonymization(xmlConfig, configFile); + } + } catch (Throwable ex) { + LOG.error("Unexpected error when anonymizing datasets",ex); + System.exit(1); + } } // Execute Workload From 0464611bae23a160fb9e7bc735fc03cb9342d209 Mon Sep 17 00:00:00 2001 From: Eric Enzler Date: Wed, 24 Jan 2024 09:52:12 +0100 Subject: [PATCH 03/27] Added anonymization flag to options --- src/main/java/com/oltpbenchmark/DBWorkload.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/oltpbenchmark/DBWorkload.java b/src/main/java/com/oltpbenchmark/DBWorkload.java index 9dd137b25..51973d512 100644 --- a/src/main/java/com/oltpbenchmark/DBWorkload.java +++ b/src/main/java/com/oltpbenchmark/DBWorkload.java @@ -514,7 +514,6 @@ public static void main(String[] args) throws Exception { LOG.debug("Skipping loading benchmark database records"); } - // Anonymize Datasets if (isBooleanOptionSet(argsLine, "anonymize")) { try { @@ -522,7 +521,7 @@ public static void main(String[] args) throws Exception { applyAnonymization(xmlConfig, configFile); } } catch (Throwable ex) { - LOG.error("Unexpected error when anonymizing datasets",ex); + LOG.error("Unexpected error when anonymizing datasets", ex); System.exit(1); } } @@ -568,6 +567,8 @@ private static Options buildOptions(XMLConfiguration pluginConfig) { options.addOption(null, "create", true, "Initialize the database for this benchmark"); options.addOption(null, "clear", true, "Clear all records in the database for this benchmark"); options.addOption(null, "load", true, "Load data using the benchmark's data loader"); + options.addOption( + null, "anonymize", true, "Anonymize specified datasets using differential privacy"); options.addOption(null, "execute", true, "Execute the benchmark workload"); options.addOption("h", "help", false, "Print this help"); options.addOption("s", "sample", true, "Sampling window"); From d21bac12f8ff6cdd646603bce76ef65bc709970a Mon Sep 17 00:00:00 2001 From: Eric Enzler Date: Thu, 1 Feb 2024 10:56:52 +0100 Subject: [PATCH 04/27] Changes to XML for easier use --- config/postgres/sample_templated_config.xml | 14 +- scripts/{ => anonymization}/anonymizer.py | 133 +++++++++++------- .../java/com/oltpbenchmark/DBWorkload.java | 7 +- 3 files changed, 90 insertions(+), 64 deletions(-) rename scripts/{ => anonymization}/anonymizer.py (64%) diff --git a/config/postgres/sample_templated_config.xml b/config/postgres/sample_templated_config.xml index 2cab00084..a9ff8c3f6 100644 --- a/config/postgres/sample_templated_config.xml +++ b/config/postgres/sample_templated_config.xml @@ -19,21 +19,17 @@ data/templated/example.xml - - - item + + i_idi_name,i_data,i_im_idi_price - 1.0 - 0.5 - aim - i_name + - - +
+
1 diff --git a/scripts/anonymizer.py b/scripts/anonymization/anonymizer.py similarity index 64% rename from scripts/anonymizer.py rename to scripts/anonymization/anonymizer.py index 727fa9e1d..6446bb56a 100644 --- a/scripts/anonymizer.py +++ b/scripts/anonymization/anonymizer.py @@ -3,6 +3,7 @@ import sys import xml.etree.ElementTree as ET + def rewriteFakeQueries(fakeValues, path): """Method that rewrites existing query templates based on sensitive value replacements @@ -10,7 +11,7 @@ def rewriteFakeQueries(fakeValues, path): fakeValues (dict): Key-Value pairs of replacement values path (str): Path pointing to the query template """ - #TODO + # TODO def fakeColumn(dataset, col, locales, method, seed=0): @@ -26,7 +27,7 @@ def fakeColumn(dataset, col, locales, method, seed=0): Returns: dict: Mapping from original to fake values """ - #TODO + # TODO def getTimestampColumns(dbTypeList): @@ -38,7 +39,7 @@ def getTimestampColumns(dbTypeList): Returns: int[]: A list of indexes of timestamp-type columns """ - #TODO + # TODO def dfFromTable(curs, table): @@ -51,7 +52,7 @@ def dfFromTable(curs, table): Returns: Dataframe,int[]: The table as a DataFrame and the indexes of timestamp columns """ - #TODO + # TODO def populateAnonFromDF(curs, df, table, timestampIndexes): @@ -63,7 +64,7 @@ def populateAnonFromDF(curs, df, table, timestampIndexes): table (str): The name of the table timestampIndexes (int[]): A list of indexes of timestamp-type columns """ - #TODO + # TODO def getDroppableInfo(dropCols, dataset): @@ -76,11 +77,11 @@ def getDroppableInfo(dropCols, dataset): Returns: DataFrame,int[]: The saved columns as a DataFrame and a list of the original indexes of the columns """ - #TODO + # TODO def anonymize(dataset: str, anonConfig: dict, sensConfig: dict, templatesPath: str): - """_summary_ + """Function that handles the data anonymization step Args: dataset (DataFrame): A pandas DataFrame containing the data @@ -91,13 +92,13 @@ def anonymize(dataset: str, anonConfig: dict, sensConfig: dict, templatesPath: s Returns: DataFrame: An anonymized version of the original data """ - #TODO + # TODO def anonymizeDB( jdbcConfig: dict, anonConfig: dict, sensConfig: dict, templatesPath: str ): - """Function that handles the necessary steps for anonymization. + """Function that handles the necessary steps for anonymization. Includes starting the JVM, Anonymizing and pushing data to the DB Args: @@ -106,11 +107,11 @@ def anonymizeDB( sensConfig (dict): Sensitive value config templatesPath (str): The path pointing to the query templates """ - #TODO + # TODO -def listFromString(string): - """Helper function creating an array of values from a string +def listFromElement(element): + """Helper function creating an array of values from a XML Element Args: string (str): A string of values separated by comma (,) @@ -118,57 +119,71 @@ def listFromString(string): Returns: str[]: A list of values """ - if string: - return list(string.split(",")) + if element and element.text: + return list(element.text.split(",")) else: return [] -def configFromXML(path): - tree = ET.parse(path) - parameters = tree.getroot() - jdbcConfig = { - "driver": parameters.find("driver").text, - "url": parameters.find("url").text, - "username": parameters.find("username").text, - "password": parameters.find("password").text, - } +def configFromXML(table): + """Method that constructs a configuration dictionary from XML for a specified table + + Args: + table (Element): The XML element that describes the table + + Returns: + (dict,dict): The configuration for the anonymization and sensitive value handling + """ + anonConfig = {} sensConfig = {} - anon = parameters.find("anon") - - for table in anon.findall("anonTable"): - anonConfig["table"] = table.find("tablename").text - anonConfig["hide"] = listFromString(table.find("droppable").text) - anonConfig["cat"] = listFromString(table.find("categorical").text) - anonConfig["cont"] = listFromString(table.find("continuous").text) - anonConfig["ord"] = listFromString(table.find("ordinal").text) - anonConfig["eps"] = table.find("eps").text - anonConfig["preEps"] = table.find("preEps").text - anonConfig["alg"] = table.find("algorithm").text - - sens = table.find("sensitive") - if sens: - sensList = [] - for sensCol in sens.findall("colName"): - sensList.append( - { - "name": sensCol.text, - "method": sensCol.get("method"), - "locales": sensCol.get("locales"), - "seed":sensCol.get("seed",0) - } - ) - sensConfig["cols"] = sensList - - return jdbcConfig, anonConfig, sensConfig + # Necessary information + tableName = table.get("name") + + if tableName == None: + sys.exit( + "There was no name provided for the table that should be anonymized. Program is exiting now!" + ) + + anonConfig["table"] = tableName + print(f"Parsing config for table: {tableName}") + + anonConfig["eps"] = table.get("epsilon", 1.0) + anonConfig["preEps"] = table.get("pre_epsilon", 0.5) + anonConfig["alg"] = table.get("algorithm", "mst") + + # Additional information + + anonConfig["hide"] = listFromElement(table.find("droppable")) + + anonConfig["cat"] = listFromElement(table.find("categorical")) + + anonConfig["cont"] = listFromElement(table.find("continuous")) + + anonConfig["ord"] = listFromElement(table.find("ordinal")) + + sens = table.find("sensitive") + if sens: + sensList = [] + for sensCol in sens.findall("column"): + sensList.append( + { + "name": sensCol.get("name"), + "method": sensCol.get("method"), + "locales": sensCol.get("locales"), + "seed": sensCol.get("seed", 0), + } + ) + sensConfig["cols"] = sensList + + return anonConfig, sensConfig def main(): """Entry method""" - #No templates provided + # No templates provided if len(sys.argv) == 2: confPath = sys.argv[1] templatesPath = "" @@ -181,8 +196,20 @@ def main(): print("Not enough arguments provided: ") return - jdbcConfig, anonConfig, sensConfig = configFromXML(confPath) - anonymizeDB(jdbcConfig, anonConfig, sensConfig, templatesPath) + tree = ET.parse(confPath) + + parameters = tree.getroot() + jdbcConfig = { + "driver": parameters.find("driver").text, + "url": parameters.find("url").text, + "username": parameters.find("username").text, + "password": parameters.find("password").text, + } + + # Loop over all specified tables and anonymize them one-by-one + for table in parameters.find("anonymization").findall("table"): + anonConfig, sensConfig = configFromXML(table) + anonymizeDB(jdbcConfig, anonConfig, sensConfig, templatesPath) if __name__ == "__main__": diff --git a/src/main/java/com/oltpbenchmark/DBWorkload.java b/src/main/java/com/oltpbenchmark/DBWorkload.java index 51973d512..731867b4c 100644 --- a/src/main/java/com/oltpbenchmark/DBWorkload.java +++ b/src/main/java/com/oltpbenchmark/DBWorkload.java @@ -515,9 +515,11 @@ public static void main(String[] args) throws Exception { } // Anonymize Datasets + // Currently, the system only parses the config but does not run any anonymization! + // Will be added in the future if (isBooleanOptionSet(argsLine, "anonymize")) { try { - if (xmlConfig.configurationsAt("/anon/anonTable").size() > 0) { + if (xmlConfig.configurationsAt("/anonymization/table").size() > 0) { applyAnonymization(xmlConfig, configFile); } } catch (Throwable ex) { @@ -808,7 +810,8 @@ private static void applyAnonymization(XMLConfiguration xmlConfig, String config LOG.info("Starting the Anonymization process"); LOG.info(SINGLE_LINE); ProcessBuilder processBuilder = - new ProcessBuilder("python3", "scripts/anonymizer.py", configFile, templatesPath); + new ProcessBuilder( + "python3", "scripts/anonymization/anonymizer.py", configFile, templatesPath); try { // Redirect Output stream of the script to get live feedback processBuilder.inheritIO(); From 79cb47c73b164de678fd26118ed9d2ec38bb1ac4 Mon Sep 17 00:00:00 2001 From: Eric Enzler Date: Thu, 1 Feb 2024 11:30:15 +0100 Subject: [PATCH 05/27] README --- scripts/anonymization/README.md | 178 ++++++++++++++++++++++++++++ scripts/anonymization/anonymizer.py | 2 +- 2 files changed, 179 insertions(+), 1 deletion(-) create mode 100644 scripts/anonymization/README.md diff --git a/scripts/anonymization/README.md b/scripts/anonymization/README.md new file mode 100644 index 000000000..4f7be411c --- /dev/null +++ b/scripts/anonymization/README.md @@ -0,0 +1,178 @@ +# Anonymization + +The anonymization module allows to apply privacy mechanisms such as differential privacy or column faking to the data. +The system will pull data from the JDBC connection, anonymize the data and push it back to the DBMS by creating a new table. + +## Config + +### Default Parameters + +The default parameters must be added inside of the ``-tag. (See below) + +| Name | Default | Possible Value | Description | +| ----------- | ------- | ----------------------------------- | -------------------------------------------------------------------------------------------- | +| name | - | Any string | The name of the table | +| epsilon | 1.0 | Any value > 0 | The privacy budget. Higher values will decrease the privacy guarantee | +| pre_epsilon | 0.5 | Any value between 0 and epsilon | The privacy budget spent on preprocessing of the data. Only necessary for continuous columns | +| algorithm | mst | One of: `mst,aim,dpctgan,patectgan` | The differential privacy mechanism applied to the data | + +```xml + +
+ +``` + +### Column Information + +The columns of a table can be split into four categories: + +1. `drop` - Columns that are omitted from the DP-mechanism +2. `categorical` - Columns that contain categorical data +3. `continuous` - Columns of data on a continuous domain. Only numerical columns +4. `ordinal` - Columns of ordinal meaning. Typically numerical columns with low amount of distinct values + +The names of the columns must be given as text. Multiple column names must be separated by comma without additional whitespace. + +The anonymization process will automatically try to infer the category best suitable category of each column. Sometimes this leads to undesired results or is unable to process the column because of other factors. To counter this, each column can be defined by hand with the suitable tags. + +--- + +**Drop the ID-column and anonymize automatically:** + +```xml + +
+ i_id +
+ +``` + +The ID-column will be removed from the anonymization process and be added back to the data in its original form! This is useful for primary key columns or columns that contain only NULL values. + +--- + +**Define the type of each column individually:** + +```xml + + + i_name,i_data,i_im_id + i_price + i_id +
+
+``` + + **Disclaimer**: As soon as the column types are defined by hand, all columns must be defined. It is not possible to only specify some of the categorical columns and let the algorithm do the rest! + +### Sensitive Values + +The anonymization module supports value faking to handle sensitive values. A ``-tag must be created to signify that column faking should be applied. Column faking can be defined individually on each column. To do so, parameters can be added inside of the ``-tag. (See below) + +| Name | Default | Possible Value | Description | +| ------- | ------- | ------------------------------------------------ | ---------------------------------------------------------------------------------------------- | +| name | - | Any string | The name of the column | +| method | pystr | Any method provided by the python faker library | The faking method of the library. If the method is not found, a random string will be inserted | +| locales | - | A string of supported locales separated by comma | The locale to produce localized values like chinese street names or english first names | +| seed | 0 | Any integer value | The privacy budget spent on preprocessing of the data. Only necessary for continuous columns | + +```xml + + + + + + + +
+
+``` + +## Examples + +### Basic + +The most basic config will need only the name of the table and apply default values for the anonymization. + +```xml + + + +``` + +It is possible to specify multiple tables for the anonymization. Each table will be anonymized on its own + +```xml + +
+
+
+ +``` + +The parameters of the process can be tuned manually + +```xml + +
+ +``` + +### Full config + +It is possible to add information about the columns to enable fine-tuning. + +```xml + +
+ i_id + i_name,i_data,i_im_id + i_price +
+
+``` + +### Sensitive value handling + +Sensitive columns can be anonymized further by replcing the values with fake values + +```xml + + + i_id + i_name,i_data,i_im_id + i_price + + + + +
+
+``` diff --git a/scripts/anonymization/anonymizer.py b/scripts/anonymization/anonymizer.py index 6446bb56a..fec91adfb 100644 --- a/scripts/anonymization/anonymizer.py +++ b/scripts/anonymization/anonymizer.py @@ -155,7 +155,7 @@ def configFromXML(table): # Additional information - anonConfig["hide"] = listFromElement(table.find("droppable")) + anonConfig["hide"] = listFromElement(table.find("drop")) anonConfig["cat"] = listFromElement(table.find("categorical")) From d6bd20358cef4141943cb7ade38f4a19eb3292cc Mon Sep 17 00:00:00 2001 From: Eric Enzler Date: Thu, 1 Feb 2024 11:32:21 +0100 Subject: [PATCH 06/27] Added disclaimer --- scripts/anonymization/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/anonymization/README.md b/scripts/anonymization/README.md index 4f7be411c..1acff267f 100644 --- a/scripts/anonymization/README.md +++ b/scripts/anonymization/README.md @@ -1,5 +1,7 @@ # Anonymization + ANONYMIZATION IS A WORK IN PROGRESS AND DOES CURRENTLY NOT ACTUALLY ANONYMIZE THE DATA. THIS FEATURE WILL BE ADDED LATER + The anonymization module allows to apply privacy mechanisms such as differential privacy or column faking to the data. The system will pull data from the JDBC connection, anonymize the data and push it back to the DBMS by creating a new table. From cef8da900aec20bb51f9cebe18a610976d03141d Mon Sep 17 00:00:00 2001 From: Eric Enzler Date: Mon, 5 Feb 2024 08:59:23 +0100 Subject: [PATCH 07/27] Continuous Column handling with fine-tuning --- config/postgres/sample_templated_config.xml | 7 ++ scripts/anonymization/README.md | 42 +++++++++++- scripts/anonymization/anonymizer.py | 71 +++++++++++++++++++-- 3 files changed, 113 insertions(+), 7 deletions(-) diff --git a/config/postgres/sample_templated_config.xml b/config/postgres/sample_templated_config.xml index a9ff8c3f6..d403ef62f 100644 --- a/config/postgres/sample_templated_config.xml +++ b/config/postgres/sample_templated_config.xml @@ -19,12 +19,19 @@ data/templated/example.xml + + i_idi_name,i_data,i_im_idi_price + + + + + diff --git a/scripts/anonymization/README.md b/scripts/anonymization/README.md index 1acff267f..bd56bd6cc 100644 --- a/scripts/anonymization/README.md +++ b/scripts/anonymization/README.md @@ -2,7 +2,7 @@ ANONYMIZATION IS A WORK IN PROGRESS AND DOES CURRENTLY NOT ACTUALLY ANONYMIZE THE DATA. THIS FEATURE WILL BE ADDED LATER -The anonymization module allows to apply privacy mechanisms such as differential privacy or column faking to the data. +The anonymization module allows to apply privacy mechanisms such as differential privacy or column faking to the data. The system will pull data from the JDBC connection, anonymize the data and push it back to the DBMS by creating a new table. ## Config @@ -72,6 +72,46 @@ The ID-column will be removed from the anonymization process and be added back t **Disclaimer**: As soon as the column types are defined by hand, all columns must be defined. It is not possible to only specify some of the categorical columns and let the algorithm do the rest! +### Continuous Columns + +The continuous columns will automatically be preprocessed by the algorithm. The lower and upper bounds of the values are inferred in a differentially private way and therefore use some of the preprocessing epsilon budget. Further, values will be binned in order to be applicable to the DP-mechanism. Automatically, the system uses only 10 bins. In order to achieve better data utility, we suggest to manually fine-tune the settings in the config + +In the following example, the amount of bins is now 1000 and the lower and upper bounds are given by hand such that no preprocessing epsilon must be spent! + +```xml + + + +``` + +The default parameters must be added inside of the ``-tag. (See below) + +| Name | Default | Possible Value | Description | +| ----- | ------- | ----------------- | ------------------------------------------- | +| name | - | Any string | The name of the column | +| bins | 10 | Any value | The amount of distinct values in the output | +| lower | - | Any value | Lower bound of the values | +| upper | - | Any value > lower | Upper bound of the values | + +--- + +A full working example could look like this: + +```xml + +
+ + i_id + i_name,i_data,i_im_id + i_price + + + + +
+
+``` + ### Sensitive Values The anonymization module supports value faking to handle sensitive values. A ``-tag must be created to signify that column faking should be applied. Column faking can be defined individually on each column. To do so, parameters can be added inside of the ``-tag. (See below) diff --git a/scripts/anonymization/anonymizer.py b/scripts/anonymization/anonymizer.py index fec91adfb..fdfa668d1 100644 --- a/scripts/anonymization/anonymizer.py +++ b/scripts/anonymization/anonymizer.py @@ -1,5 +1,6 @@ """Module that handles the full Anonymization pipeline """ + import sys import xml.etree.ElementTree as ET @@ -80,13 +81,52 @@ def getDroppableInfo(dropCols, dataset): # TODO -def anonymize(dataset: str, anonConfig: dict, sensConfig: dict, templatesPath: str): +def getTransformer( + dataset, algorithm, categorical, continuous, ordinal, continuousConfig +): + """Function that creates a custom transformer for the dp-mechanism + + Args: + dataset (DataFrame): The actual dataset + algorithm (str): The name of the DP-algorithm + categorical (str[]): A list of all categorical columns + continuous (str[]): A list of all continuous columns + ordinal (str[]): A list of all ordinal columns + continuousConfig (dict[]): A list of detailed information about how to handle certain continuous columns + + Returns: + TableTransformer: A transformer for the specific dataset + """ + + # TODO + + +def getConstraints(objects): + """A helper method that builds constraints that are used by a TableTransformer + + Args: + objects (dict): Entries of the continuous column config + + Returns: + dict: A constraint + """ + # TODO + + +def anonymize( + dataset: str, + anonConfig: dict, + sensConfig: dict, + contConfig: dict, + templatesPath: str, +): """Function that handles the data anonymization step Args: dataset (DataFrame): A pandas DataFrame containing the data anonConfig (dict): Anonymization config sensConfig (dict): Sensitive value config + contConfig (dict): Continuous value config templatesPath (str): The path pointing to the query templates Returns: @@ -96,7 +136,11 @@ def anonymize(dataset: str, anonConfig: dict, sensConfig: dict, templatesPath: s def anonymizeDB( - jdbcConfig: dict, anonConfig: dict, sensConfig: dict, templatesPath: str + jdbcConfig: dict, + anonConfig: dict, + sensConfig: dict, + contConfig: dict, + templatesPath: str, ): """Function that handles the necessary steps for anonymization. Includes starting the JVM, Anonymizing and pushing data to the DB @@ -105,6 +149,7 @@ def anonymizeDB( jdbcConfig (dict): JDBC connection information anonConfig (dict): Anonymization config sensConfig (dict): Sensitive value config + contConfig (dict): Continuous value config templatesPath (str): The path pointing to the query templates """ # TODO @@ -132,11 +177,12 @@ def configFromXML(table): table (Element): The XML element that describes the table Returns: - (dict,dict): The configuration for the anonymization and sensitive value handling + (dict,dict,dict): The configurations for the anonymization, sensitive and continuous value handling """ anonConfig = {} sensConfig = {} + contConfig = [] # Necessary information tableName = table.get("name") @@ -163,6 +209,19 @@ def configFromXML(table): anonConfig["ord"] = listFromElement(table.find("ordinal")) + cont = table.find("continuousConfig") + + if cont: + for contCol in cont.findall("column"): + contConfig.append( + { + "name": contCol.get("name"), + "bins": contCol.get("bins"), + "lower": contCol.get("bins"), + "upper": contCol.get("bins"), + } + ) + sens = table.find("sensitive") if sens: sensList = [] @@ -177,7 +236,7 @@ def configFromXML(table): ) sensConfig["cols"] = sensList - return anonConfig, sensConfig + return anonConfig, sensConfig, contConfig def main(): @@ -208,8 +267,8 @@ def main(): # Loop over all specified tables and anonymize them one-by-one for table in parameters.find("anonymization").findall("table"): - anonConfig, sensConfig = configFromXML(table) - anonymizeDB(jdbcConfig, anonConfig, sensConfig, templatesPath) + anonConfig, sensConfig, contConfig = configFromXML(table) + anonymizeDB(jdbcConfig, anonConfig, sensConfig, contConfig, templatesPath) if __name__ == "__main__": From a04fb557a51c2f6fa6bda1bea389b7e854da4bde Mon Sep 17 00:00:00 2001 From: Eric Enzler Date: Wed, 13 Mar 2024 14:05:46 +0100 Subject: [PATCH 08/27] Cleanup for easier analysis, adaptions to XML parsing --- scripts/anonymization/anonymizer.py | 105 ++++------------------------ 1 file changed, 12 insertions(+), 93 deletions(-) diff --git a/scripts/anonymization/anonymizer.py b/scripts/anonymization/anonymizer.py index fdfa668d1..0f8ef4f49 100644 --- a/scripts/anonymization/anonymizer.py +++ b/scripts/anonymization/anonymizer.py @@ -7,76 +7,36 @@ def rewriteFakeQueries(fakeValues, path): """Method that rewrites existing query templates based on sensitive value replacements - - Args: - fakeValues (dict): Key-Value pairs of replacement values - path (str): Path pointing to the query template """ # TODO def fakeColumn(dataset, col, locales, method, seed=0): """Method that generates fake values for columns that are considered sensitive - - Args: - dataset (DataFrame): A Pandas dataframe holding anonymized data - col (str): The name of the column - locales (str[]): A list of locales - method (str): A string matching the desired faker method - seed (int, optional): Seed for the fake values. Defaults to 0. - - Returns: - dict: Mapping from original to fake values """ # TODO def getTimestampColumns(dbTypeList): """A helper function that returns a list of indexes of timestamp-type columns - - Args: - dbTypeList (any): A list of Database column metadata - - Returns: - int[]: A list of indexes of timestamp-type columns """ # TODO def dfFromTable(curs, table): """Helper function that creates a pandas DataFrame from a jaydebe connection - - Args: - curs (cursor): The connection cursor - table (str): The name of the table - - Returns: - Dataframe,int[]: The table as a DataFrame and the indexes of timestamp columns """ # TODO def populateAnonFromDF(curs, df, table, timestampIndexes): """Helper function to fill a DB table from a DataFrame - - Args: - curs (cursor): The connection cursor - df (DataFrame): Pandas DataFrame - table (str): The name of the table - timestampIndexes (int[]): A list of indexes of timestamp-type columns """ # TODO def getDroppableInfo(dropCols, dataset): """Helper function that saves droppable columns from anonymization - - Args: - dropCols (str[]): A list of column names - dataset (DataFrame): The dataset - - Returns: - DataFrame,int[]: The saved columns as a DataFrame and a list of the original indexes of the columns """ # TODO @@ -85,17 +45,6 @@ def getTransformer( dataset, algorithm, categorical, continuous, ordinal, continuousConfig ): """Function that creates a custom transformer for the dp-mechanism - - Args: - dataset (DataFrame): The actual dataset - algorithm (str): The name of the DP-algorithm - categorical (str[]): A list of all categorical columns - continuous (str[]): A list of all continuous columns - ordinal (str[]): A list of all ordinal columns - continuousConfig (dict[]): A list of detailed information about how to handle certain continuous columns - - Returns: - TableTransformer: A transformer for the specific dataset """ # TODO @@ -103,12 +52,6 @@ def getTransformer( def getConstraints(objects): """A helper method that builds constraints that are used by a TableTransformer - - Args: - objects (dict): Entries of the continuous column config - - Returns: - dict: A constraint """ # TODO @@ -116,21 +59,11 @@ def getConstraints(objects): def anonymize( dataset: str, anonConfig: dict, - sensConfig: dict, - contConfig: dict, + sensConfig: list, + contConfig: list, templatesPath: str, ): """Function that handles the data anonymization step - - Args: - dataset (DataFrame): A pandas DataFrame containing the data - anonConfig (dict): Anonymization config - sensConfig (dict): Sensitive value config - contConfig (dict): Continuous value config - templatesPath (str): The path pointing to the query templates - - Returns: - DataFrame: An anonymized version of the original data """ # TODO @@ -138,31 +71,18 @@ def anonymize( def anonymizeDB( jdbcConfig: dict, anonConfig: dict, - sensConfig: dict, - contConfig: dict, + sensConfig: list, + contConfig: list, templatesPath: str, ): """Function that handles the necessary steps for anonymization. Includes starting the JVM, Anonymizing and pushing data to the DB - - Args: - jdbcConfig (dict): JDBC connection information - anonConfig (dict): Anonymization config - sensConfig (dict): Sensitive value config - contConfig (dict): Continuous value config - templatesPath (str): The path pointing to the query templates """ # TODO def listFromElement(element): """Helper function creating an array of values from a XML Element - - Args: - string (str): A string of values separated by comma (,) - - Returns: - str[]: A list of values """ if element and element.text: return list(element.text.split(",")) @@ -181,7 +101,7 @@ def configFromXML(table): """ anonConfig = {} - sensConfig = {} + sensConfig = [] contConfig = [] # Necessary information @@ -212,29 +132,28 @@ def configFromXML(table): cont = table.find("continuousConfig") if cont: - for contCol in cont.findall("column"): + for col in cont.findall("column"): contConfig.append( { - "name": contCol.get("name"), - "bins": contCol.get("bins"), - "lower": contCol.get("bins"), - "upper": contCol.get("bins"), + "name": col.get("name"), + "bins": col.get("bins"), + "lower": col.get("lower"), + "upper": col.get("upper"), } ) sens = table.find("sensitive") if sens: - sensList = [] for sensCol in sens.findall("column"): - sensList.append( + sensConfig.append( { "name": sensCol.get("name"), "method": sensCol.get("method"), + "mode": sensCol.get("mode"), "locales": sensCol.get("locales"), "seed": sensCol.get("seed", 0), } ) - sensConfig["cols"] = sensList return anonConfig, sensConfig, contConfig From 5bd852cd2957843e3fbd71ffd6714a336d2d3eba Mon Sep 17 00:00:00 2001 From: Eric Enzler Date: Wed, 13 Mar 2024 14:07:30 +0100 Subject: [PATCH 09/27] Removed Sens-Mode option, can be added back later --- scripts/anonymization/anonymizer.py | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/anonymization/anonymizer.py b/scripts/anonymization/anonymizer.py index 0f8ef4f49..20ccd6268 100644 --- a/scripts/anonymization/anonymizer.py +++ b/scripts/anonymization/anonymizer.py @@ -149,7 +149,6 @@ def configFromXML(table): { "name": sensCol.get("name"), "method": sensCol.get("method"), - "mode": sensCol.get("mode"), "locales": sensCol.get("locales"), "seed": sensCol.get("seed", 0), } From a1da5afdb733dd3925c317ea852dd6054821ffda Mon Sep 17 00:00:00 2001 From: Eric Enzler Date: Wed, 13 Mar 2024 16:45:13 +0100 Subject: [PATCH 10/27] Inserted missing closing tag in config --- config/postgres/sample_templated_config.xml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/config/postgres/sample_templated_config.xml b/config/postgres/sample_templated_config.xml index d403ef62f..c13423d51 100644 --- a/config/postgres/sample_templated_config.xml +++ b/config/postgres/sample_templated_config.xml @@ -26,11 +26,10 @@ i_id i_name,i_data,i_im_id i_price - - + From 6759ab6899c3110cb851ab25d47e7fb4990a9cff Mon Sep 17 00:00:00 2001 From: Eric Enzler Date: Thu, 14 Mar 2024 09:05:07 +0100 Subject: [PATCH 11/27] Valid XML --- config/postgres/sample_templated_config.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/postgres/sample_templated_config.xml b/config/postgres/sample_templated_config.xml index c13423d51..96293eb14 100644 --- a/config/postgres/sample_templated_config.xml +++ b/config/postgres/sample_templated_config.xml @@ -28,7 +28,7 @@ i_price - + From a8a497f98d789cd7464602631cace61846d983d1 Mon Sep 17 00:00:00 2001 From: Eric Enzler Date: Fri, 15 Mar 2024 11:30:05 +0100 Subject: [PATCH 12/27] Config + Documentation adjustments based on PR comments --- config/postgres/sample_templated_config.xml | 27 ++- scripts/anonymization/README.md | 248 ++++++++++++++------ scripts/anonymization/anonymizer.py | 113 +++++---- scripts/anonymization/architecture.png | Bin 0 -> 429837 bytes 4 files changed, 257 insertions(+), 131 deletions(-) create mode 100644 scripts/anonymization/architecture.png diff --git a/config/postgres/sample_templated_config.xml b/config/postgres/sample_templated_config.xml index 96293eb14..ec4412820 100644 --- a/config/postgres/sample_templated_config.xml +++ b/config/postgres/sample_templated_config.xml @@ -21,19 +21,26 @@ - +
+ - i_id - i_name,i_data,i_im_id - i_price + + + + + + + + - - - + + + + - - - + + +
diff --git a/scripts/anonymization/README.md b/scripts/anonymization/README.md index bd56bd6cc..5d9c39a88 100644 --- a/scripts/anonymization/README.md +++ b/scripts/anonymization/README.md @@ -1,31 +1,48 @@ # Anonymization - ANONYMIZATION IS A WORK IN PROGRESS AND DOES CURRENTLY NOT ACTUALLY ANONYMIZE THE DATA. THIS FEATURE WILL BE ADDED LATER +**NOTE:ANONYMIZATION IS A WORK IN PROGRESS AND DOES CURRENTLY NOT ACTUALLY ANONYMIZE THE DATA. THIS FEATURE WILL BE ADDED LATER** -The anonymization module allows to apply privacy mechanisms such as differential privacy or column faking to the data. +The anonymization module allows applying privacy mechanisms such as differential privacy or column faking to the data. The system will pull data from the JDBC connection, anonymize the data and push it back to the DBMS by creating a new table. ## Config -### Default Parameters +### Table selection -The default parameters must be added inside of the ``-tag. (See below) +Multiple tables can be anonymized sequentially by specifying a `
`-tag for each of them and defining the table name. -| Name | Default | Possible Value | Description | -| ----------- | ------- | ----------------------------------- | -------------------------------------------------------------------------------------------- | -| name | - | Any string | The name of the table | -| epsilon | 1.0 | Any value > 0 | The privacy budget. Higher values will decrease the privacy guarantee | -| pre_epsilon | 0.5 | Any value between 0 and epsilon | The privacy budget spent on preprocessing of the data. Only necessary for continuous columns | -| algorithm | mst | One of: `mst,aim,dpctgan,patectgan` | The differential privacy mechanism applied to the data | +```xml + +
+ +
+ + +
+ +``` + +### Differential Privacy anonymization + +In order to apply differential privacy, a corresponding ``-tag must be added to each table. + +Differential privacy can be configured with the following parameters: + +| Name | Default | Possible Value | Description | +| ----------- | ------- | -------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| epsilon | 1.0 | Any value > 0 | The privacy budget. Higher values will decrease the privacy guarantee | +| pre_epsilon | 0.5 | Any value between 0 and epsilon (epsilon excluded) | The privacy budget spent on preprocessing of the data. Only necessary for continuous columns | +| algorithm | mst | One of: `mst,aim,dpctgan,patectgan` | The differential privacy mechanism applied to the data | ```xml - +
+ + +
``` @@ -33,28 +50,37 @@ The default parameters must be added inside of the ``-tag. (See below) The columns of a table can be split into four categories: -1. `drop` - Columns that are omitted from the DP-mechanism +1. `ignore` - Columns that are ignored by the DP-mechanism. Left untouched 2. `categorical` - Columns that contain categorical data 3. `continuous` - Columns of data on a continuous domain. Only numerical columns -4. `ordinal` - Columns of ordinal meaning. Typically numerical columns with low amount of distinct values +4. `ordinal` - Columns of ordinal meaning. Typically numerical columns with low numers of distinct values + +Each type of column requires its own XML-tag with each member of a type given as a separate tag. (See exampels below for clarification) -The names of the columns must be given as text. Multiple column names must be separated by comma without additional whitespace. +If no column type information is given: -The anonymization process will automatically try to infer the category best suitable category of each column. Sometimes this leads to undesired results or is unable to process the column because of other factors. To counter this, each column can be defined by hand with the suitable tags. +- The anonymization process will automatically try to infer the category best suitable for each column. +- Automatic anonymization can lead to undesired results or failures in the process. +- To counter this, each column can be defined by hand with the suitable tags. --- -**Drop the ID-column and anonymize automatically:** +**Ignore the ID-column and anonymize automatically:** ```xml
- i_id + + + + + +
``` -The ID-column will be removed from the anonymization process and be added back to the data in its original form! This is useful for primary key columns or columns that contain only NULL values. +The ID-column will be removed from the anonymization process and be added back to the data in its original form before pushing back to the DB! This is useful for primary key columns or columns that contain only NULL values. --- @@ -63,28 +89,43 @@ The ID-column will be removed from the anonymization process and be added back t ```xml - i_name,i_data,i_im_id - i_price - i_id + + + + + + + + + + + + +
``` - **Disclaimer**: As soon as the column types are defined by hand, all columns must be defined. It is not possible to only specify some of the categorical columns and let the algorithm do the rest! + **Disclaimer**: As soon as the column types are defined by hand, all columns must be defined. It is not possible to only specify some of the categorical columns and let the algorithms do the rest! ### Continuous Columns The continuous columns will automatically be preprocessed by the algorithm. The lower and upper bounds of the values are inferred in a differentially private way and therefore use some of the preprocessing epsilon budget. Further, values will be binned in order to be applicable to the DP-mechanism. Automatically, the system uses only 10 bins. In order to achieve better data utility, we suggest to manually fine-tune the settings in the config -In the following example, the amount of bins is now 1000 and the lower and upper bounds are given by hand such that no preprocessing epsilon must be spent! +In the following example, the number of bins is increased to 1000 and the lower and upper bounds are given by hand such that no preprocessing epsilon must be spent! ```xml - - - + + + ``` -The default parameters must be added inside of the ``-tag. (See below) +The parameters must be added inside of the ``-tag. (See below) | Name | Default | Possible Value | Description | | ----- | ------- | ----------------- | ------------------------------------------- | @@ -95,26 +136,43 @@ The default parameters must be added inside of the ``-tag. (See below) --- -A full working example could look like this: +**A full working example could look like this:** ```xml - - - i_id - i_name,i_data,i_im_id - i_price - - - - +
+ + + + + + + + + + + + +
``` -### Sensitive Values +## Value faking anonymization + +The anonymization module supports value faking to handle sensitive values. The process is decoupled from differential privacy anonymization, allowing for separate or combined anonymization efforts. -The anonymization module supports value faking to handle sensitive values. A ``-tag must be created to signify that column faking should be applied. Column faking can be defined individually on each column. To do so, parameters can be added inside of the ``-tag. (See below) +**How to handle sensitive values?** + +- A ``-tag must be created to signify that column faking should be applied. +- Column faking can be defined individually on each column with the ``-tag. + +The following parameters are available for sensitive values: | Name | Default | Possible Value | Description | | ------- | ------- | ------------------------------------------------ | ---------------------------------------------------------------------------------------------- | @@ -123,10 +181,16 @@ The anonymization module supports value faking to handle sensitive values. A ` - - +
+ - +
``` @@ -143,11 +207,13 @@ The anonymization module supports value faking to handle sensitive values. A ` - +
+ +
``` @@ -155,17 +221,26 @@ It is possible to specify multiple tables for the anonymization. Each table will ```xml - -
-
+
+ +
+ + +
``` -The parameters of the process can be tuned manually +The parameters of differential privacy anonymization can be tuned manually ```xml - +
+ +
``` @@ -175,34 +250,49 @@ It is possible to add information about the columns to enable fine-tuning. ```xml - - i_id - i_name,i_data,i_im_id - i_price +
+ + + + + + + + + + + + +
``` ### Sensitive value handling -Sensitive columns can be anonymized further by replcing the values with fake values +Sensitive columns can be anonymized further by replcing the values with fake values. A combination of differential privacy and value faking could look as follows: ```xml - i_id - i_name,i_data,i_im_id - i_price - + name="item"> + + + + + + + + + + + + + + - +
``` + +## Architecture Image + +![Architecture](architecture.png) + +## More Information + +[Differential Privacy Fundamentals](https://www.cis.upenn.edu/~aaroth/Papers/privacybook.pdf) + +[Smartnoise Library (Algorithm implementations)](https://github.com/opendp/smartnoise-sdk) + +[Python Faker documentation](https://faker.readthedocs.io/en/master/) diff --git a/scripts/anonymization/anonymizer.py b/scripts/anonymization/anonymizer.py index 20ccd6268..560bce974 100644 --- a/scripts/anonymization/anonymizer.py +++ b/scripts/anonymization/anonymizer.py @@ -58,9 +58,9 @@ def getConstraints(objects): def anonymize( dataset: str, - anonConfig: dict, - sensConfig: list, - contConfig: list, + anon_config: dict, + sens_config: list, + cont_config: list, templatesPath: str, ): """Function that handles the data anonymization step @@ -70,9 +70,9 @@ def anonymize( def anonymizeDB( jdbcConfig: dict, - anonConfig: dict, - sensConfig: list, - contConfig: list, + anon_config: dict, + sens_config: list, + cont_config: list, templatesPath: str, ): """Function that handles the necessary steps for anonymization. @@ -100,61 +100,78 @@ def configFromXML(table): (dict,dict,dict): The configurations for the anonymization, sensitive and continuous value handling """ - anonConfig = {} - sensConfig = [] - contConfig = [] + anon_config = {} + sens_config = [] + cont_config = [] - # Necessary information tableName = table.get("name") + #Exit the program if not enough basic information (name of a table) is available if tableName == None: sys.exit( "There was no name provided for the table that should be anonymized. Program is exiting now!" ) - anonConfig["table"] = tableName + anon_config["table"] = tableName print(f"Parsing config for table: {tableName}") - anonConfig["eps"] = table.get("epsilon", 1.0) - anonConfig["preEps"] = table.get("pre_epsilon", 0.5) - anonConfig["alg"] = table.get("algorithm", "mst") - - # Additional information - - anonConfig["hide"] = listFromElement(table.find("drop")) - - anonConfig["cat"] = listFromElement(table.find("categorical")) - - anonConfig["cont"] = listFromElement(table.find("continuous")) - - anonConfig["ord"] = listFromElement(table.find("ordinal")) - - cont = table.find("continuousConfig") - - if cont: - for col in cont.findall("column"): - contConfig.append( - { - "name": col.get("name"), - "bins": col.get("bins"), - "lower": col.get("lower"), - "upper": col.get("upper"), - } - ) - - sens = table.find("sensitive") + dp_info = table.find("differential_privacy") + + if(dp_info): + + cat = [] + cont = [] + ord = [] + ignore = [] + + anon_config["eps"] = dp_info.get("epsilon", 1.0) + anon_config["preEps"] = dp_info.get("pre_epsilon", 0.5) + anon_config["alg"] = dp_info.get("algorithm", "mst") + + if(dp_info.find("ignore")): + for column in dp_info.find("ignore").findall("column"): + ignore.append(column.get("name")) + + if(dp_info.find("categorical")): + for column in dp_info.find("categorical").findall("column"): + cat.append(column.get("name")) + + if(dp_info.find("ordinal")): + for column in dp_info.find("ordinal").findall("column"): + ord.append(column.get("name")) + + if(dp_info.find("continuous")): + for column in dp_info.find("continuous").findall("column"): + cont.append(column.get("name")) + + if(column.get("bins") or column.get("lower") or column.get("upper")): + cont_config.append( + { + "name": column.get("name"), + "bins": column.get("bins",10), + "lower": column.get("lower"), + "upper": column.get("upper"), + } + ) + + anon_config["hide"] = ignore + anon_config["cat"] = cat + anon_config["cont"] = cont + anon_config["ord"] = ord + + sens = table.find("value_faking") if sens: - for sensCol in sens.findall("column"): - sensConfig.append( + for column in sens.findall("column"): + sens_config.append( { - "name": sensCol.get("name"), - "method": sensCol.get("method"), - "locales": sensCol.get("locales"), - "seed": sensCol.get("seed", 0), + "name": column.get("name"), + "method": column.get("method"), + "locales": column.get("locales"), + "seed": column.get("seed", 0), } ) - return anonConfig, sensConfig, contConfig + return anon_config, sens_config, cont_config def main(): @@ -185,8 +202,8 @@ def main(): # Loop over all specified tables and anonymize them one-by-one for table in parameters.find("anonymization").findall("table"): - anonConfig, sensConfig, contConfig = configFromXML(table) - anonymizeDB(jdbcConfig, anonConfig, sensConfig, contConfig, templatesPath) + anon_config, sens_config, cont_config = configFromXML(table) + anonymizeDB(jdbcConfig, anon_config, sens_config, cont_config, templatesPath) if __name__ == "__main__": diff --git a/scripts/anonymization/architecture.png b/scripts/anonymization/architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..fced6c8c4126c27f7af74235ef0fcebafc6bfaef GIT binary patch literal 429837 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
K@34xg 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%0DcM__HoxP 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�XLB(U6CbD+<=8 z==+?1f9+@=J9Yxze+5ZqFR?d!R#{5eSW{$)0ZH-Vab9M7G?9N#mH5 z7cqEf=yS-xgSzS6ruPxvp6 z)_abs1>pi56p%*xW{_*CdS&RT`<0Z4*Q>O8-1+Lw>?Y^@NQIwX0%Tx%{W3K*b30+* zBURTj>KtdY8;P2$zzn$0-qhM;^Z&c0b($vQSK4_L5j}__xH3;w4H(X9O`tq{@cFz^Eir8) zRHx0U;y(|3or7u)FHD0hgia0072W(dM<6Q`NpLyE=>xsD36U@VDT_N!QJ|ml$iI>0 z+rh31fCzh2OpNXw^|isRxB0#mcD|5QIXph5uEBFDA%iiZ6c7yl4CKFYu|NH#CsEgc z8DaeGJ?^yg>y@>PKr1*&TP>87*;o;8h_^-{rrXYR`-;&A4#~c(xVsELfh|1_inP}5 zuL5vzQ2nQu2$3=tiTbq8jNeSE>t)ESB1Gr;+A0!(R#X8LR!wB2in`83=TON{|69#Y zEO@d@V>C)hX65GUZFz-2DLh_JDDhKrDG{_dF=95`a(Ws?P)=8cVpFi{@Dy&JKv*#bpon8GdIjP9gbAkeu{Vk!V&ydaar+qQnNADaz z1OA4YoY8Or!8FS|{Mk~ecsM3BU8XZka%qe8)#+?OkJQgmslHLR88iXw_rEm zY}m^OKC@t83J7F)K25-wXfp75fPud^SqEX-G9u)=`XrS z5TdUd_t1+FmQyP!SC#Nvg_5*XWB8lh@4h7sUi6rBpEbDZc0We;7*DlVrAz8mxZ~HG z>hLjEi3PTLrE&Zj$9dYRgYx-$5xD2Z98~LHcA}kyh8_$I`{!_h|LSm&wzGG<=a2dv z84K#l5Q5Nl9k$TRC`25w0__Odxfn>5MS2qo0oRWH=IPiR z#S$fp!Y_3m9kv;2c6<`n3}aD0Z~2Dh2_%@|5>yG%xy#66vC^W_dpro)V@NY=tz|jA z-CEN0%)`q?17bn6tDDGD4Bl{$5lq>o2CG$2 z>JlJzY&=}h8@!3)4Bcx~az}(y;mu($-E~-VPZx}DC*949bt}ni|Az(h467_Bxr&L0 zGljVxTQ-`fQ5qU|Tw!=;MZb4k)bDofKZ>MdyMsw1`;7><(4bmotw_5hm*8^!gxk8S z^Hlr$4ZVF-@?$VSbhXWvUz?azOpWlob9#DZx*UrFQrYA2 zn_+RuR1Cy2?D*>jf7Dd14r+XDf9)09f5aOxkI~_Q&OlEBv^2M14f!;^sMh7Qv>z6r zu`JOPboGBY<@W^@%5eUO5&2OnG5~-H zoh3j>7QjPF$6$yP6c7c`G+f7`8UA|W>nIBp#x^I80SPsVGcCYJj3s4wBk!TvVk6 zY6%?nN(DY*@?>#zaQz`=RiuHGSdMLQC&tT1U8M-}3n=_Q9ep*&cbWQv^YRjEvXTu5@EVXP$NdBq5}jvpuLKe)SFdl|2a&b z$<{GswPh6D97?DmZb`U&zTNG*j&K~3^$;u6Rx8F%BmB?-K7k*e6c{vWLwO?p$~076 za401x+lZ)4TCwHS(;5vY{Snc)tAJN9$Q<`%nF%_J%*bBriS?CwJJfP!RRyA%NmdCo zN<5D*aX4*CN_C3>U2rOSyqKiM$FA}nfacdYW1=7QEnA$W!3scv?T_%kzR2>s&i$Yy zQaUuru8qfR(+&R#gx4qU5W+s*0vh3g-Tu-3*R*xo#~*a?h17qQmzB5<^n@`Z`2&xM z^-z5y)o72qj@kaHw*}YF{eIC^V2__sPoaY7^*%Y5)la*3y%Q^_^l~)E*K`QPLmXx? z*88F7CFK(YC3#@vK+F)@FK&3qO0e2g7L^xRrz%mq11#f;(9>u3y3vElujv6qC1EPatL-v zoO!>Pjnt_X%?)48|D#`R1$0dE>$E#6%ZWO(V-}+fg!=)Jd|t|mGT-?(`N0Mqb7*8* zLi=+rK`z(%1OYy-*bQ6EnWW-Iw9v(E~I0mDoeu(b#|*`J&zmf zcY?RNgsr8F{r+$_W_q1%73kZEZVF)?D7=R7vu9J1Bz z7X)g8mQ~l2f5?|x@CfcWEh5(xxtlXx@?v^DJ}#`Nh%-m@dg=mB9kr4%{!a_Au{ppm z_#1o(ZV#Y(#IDLo|C@bxkL}KXi1l1L@>Fx(o%;Qv*qrv!>(Twf{0qboUSFE(>%iup zjB0S3(Gw1b3p!JQaC?5=U2QW1G%W#I)Wf?v);fNmc)h)XEGo#`bgxRiJ_*Mhksb#^ z;P)-siJ`+I1y78pF zzPTg`FQ-c$M*jRv}dOCAb=BdW_TnSH9`06OBwdh~Tq$2u? zOa#B0^2wCela1%gTnArZg05lRPZT0}n(a3f-OW+S$3w~}00`(oc?D4FB0c7J)|bze z!h??EmJ~Naj2Jg|JJ7I@0K!(UT?&6k{Hc8kKj%B1NZ)L}HWP*!#?8q?68@BiZT6Vr zIaf%aKF9_#u*!N3PWum?#zcrE1&kkY2*dgM>BR{(_4spAxT>nY_-lcb_QV!96q%Fd zuTHL!&quo(bcn$^kf0j6KrE3WgxtINX?AW2QW$qjWoogFqEGx;%n?0gHcl+a0wrjq z4e)WvZ==_OdJ9j6p&)2ZkIxGS3Hu7Z)YS=_@|D|lhq7>9KK)^T={v1a{G^Qcuw^q* zPfs~9487iJ;Kls?-a!<@4i27@3>rfOi7aG`%)t2P%8G%_e&hy2#fnubeM~zWg(Vwn z=4+GlxuCR zvwss=&2!GRx!!hb{VDdpMHUXU_kwnBw!r;92bygB8VRZl|Gj@>^t$v(o~OYY9^Ap| zXt}36Lr8_>MRl^6QC7o(%HU{;RR^Ub0;8xgmja`HSd1B{tjR`V(W?A; zZgSX9bRk$43{DIH`C04%WqpD^_qk%m{PKD9XQDG$J)AbRAFsG4J(;p$Ej|kw`~UmW zbsQH55^790DNJQW1r^+<@54mDMTAP*zs_yTs?r*NN7lA4?whVM-oZqP@{~`Zg3RBlOwS&H07cAu`o9FzYEN!5Vp4RCeC>MN(m~N ze(O@N=c<3C63E3P7XtG8lwrK1xDZ{Dx$$-W=`H8rWXAE>^do72TrKO0YTUuhu@wl` zsFq1F_9}TzHEG6ojYjGUscY*bAY^~5rh;IvE(Tt0G-6A6ya*vLov#Y!9I6PLE9qqa zYdkE8L>$VR=%b682KB9%M}ug7Yc9<7ThVWF$b*GpV-hTCo7Gxs>8pW*)2dR^!QI+v za&2ZdHo5INL#XhRcv{vhB^hJ6=xQ!dw+)Qrik z`yE*;-KS{RUnf6GEq%$1dum!ndv7rUVY1PA%s7Bv>IR|4n~+kZT#ye_TJ;(4&+J69 z_v;5do?`|>xBHN4ZTSp)kM_p0J!kSCp2~P!M>2ODK^DYa3dE|O#%v;pAwj* zXp$jdp}Q>9UXsddI9SD#R{dNt3Xz<_*-7tXk?P3hx?u7h(ZY*X$zPO0lTbP@P;ftnP~_g%X3EGIobgzdjd_zbMG zs*nGKXsieb;Oe>SwIpp-u`h|5TqbQyj`}0m6sPBAfdhGU5fLmZ!_waz%cSl9r{X-& zTay~@=L-4N)DQntkIl^Vy^s9yQK*PUHR5uALGW`~n5xw22yN-Qt6yk&0Tt;xXDB3F z7U$(oSI-lC)5jt3a76IKJQc`IU@|#-sUeC3UiUsxVt)|Mx$yz~!ZDl47{7e- z`}T9^-udxqo5&d5E}DQfd!Wwl@|(bY;0z0!rrcU1k;dPp+Z{9nij=`cFo=GjEARqc**N|hQ;N*ySlTBk^oiXO71r_?jTBSp zkZ zawM*!$OXN2z0lZ9#W$EZ)PIxhdSc}DP3m%)YjSxEOYni1MmVfoN(D6)0i<&2zvR1{ zzkP1*Y{cM*zqj&M#-~H2jUHf6FlG-Gs3*04yqbINO)E%vzn$nV&pdp+qFp~nshga$ zufb?u&Ps6kdBi8=lMmBTDcF65EMl{w z$tgwS7FV@Kez8IM$wiRYcnyRD)Kw!?kiViJ*L$ntV7wU3-VY^>N`*8bm_xuBRjM}1 zTkkyh*CsN34l$iv5*>_o3jiOUEU1t&n0rD)f2_6MH%*jTB4IF)N7V(;goQb6cX5k*%$Mq0dSDFMRrkaMdC}2|N|W)%wqng7!5e z%91FTzv9^5pv~FM8Tb*EKpBx~{iQ|aJP(D6|KZp+VBc4$-t$8u$EAznn6CyyWix z?2`1@=|EVDI-&=8@7tbJDWeO86_p9MoVT<>1@IhghKB~320^_ zCpyvDt$J9hNRbI?(i;%ePa>OyOT`rj{0gcoq)8jWAXBKjO4y9f0VrXp{Laevbwb%U zY8(%^mAk>@7l%-jmK?zTO|7@Aom42%*?s0#z{^l5w_^O})jf9#_~Pob zj~S;#iwl~4kK|l7Xu4dfHPS>!fs5Ne!4(b^0_G>v*Ta%jYuccK*|DLbN(p6XqghW> zDX}UC^Fsb9g?6obM@$5`0o#0FWLUV!2{TJ=xV=2$Y3L~E42FTJb*TY3b_?1N=n&XS z)oP_`MnGq^++*DuTCFxFbpZr3@C4>Z+cK?YyMjxDx23U1_M9R4%@3nKMf^4CtBE) zR>HEBuSh#|oiozixKyxMHY4~SfT;YzRaI8f{>f3?Tpi{-ogs;vGoEz(MO32RKw==` zO|W1t2SK~A=^L`@%%kwcsPf;TIb;up9>a{TZH-W9dey$q?0{c{L^_$yANbvT`q9i{ zT9IpMIKX&8mG|W&yr)0#<0Al^xqE60ZkR4e$k^rr5o{QYxxl9`ug5-K$L}5tq?A6c z5quN?p>FnZ{jds<5e{%&36^`I`8H_w`L5XAJG%qNqvUgM50XdQ`{GHhDdhYQ_$eR@ z`scdnVpCsi`5+as@leR+C?oO+>H3V6n$~8Ao(XC(U^k>Pj6xh70<`J|lExK()S$^lA^Tt4p~u7()(GRQO8CElf6EOuT>u6r!7a~21J@3bFhT+hM@_&@)TN++7% zXM+bSfiUJ-`9gQvLZ+{y(b#dt^YP3(WbQ}*_D^50%#;5`FKi%W5x=p`$C^3U7Hfd( zx8qK#OYUPvllea!4#MPLMreV*c~S1l{NGXDo`^=;SQHT8$d*EAipCBhoZ8}F+j*?4 ztVYf504BXKniXh=N^}Mjs=sxgBJ3R+I|Pw^K2>)T4YvGA#KRt}TU2R~AeptH2a6$$ zdKB@roy@%c0!y$tt5;&-&`MJ9UyH!0?Ym5#xnMj0K$kK9kYZzzNV~S z`!MQa4}0^;?phdbR3p4mu9{3)UW_)B_j|>5+@mIE5kR6smGvb$hVM>aV{RpJB!hkh zjX(z&Wmu`Sm-lpn7DTRtJ-?W=>BlgaI&C4g^`Mfwni?KVN3hVcX6bc@0 zVfZ48qqLkkGR!O$Fr-9WckhNuHa*8t6lU|c=84XMi|M8ms>oNlfJ==m9!XO;nX=NW zPfMK7>SYMEdES3eA2lH3Zv7|5ivn0ypO&oQpF!Ui+hL?*3)?EQ+to|1h`EpzrwIDU zUIYxpwGbL=Kd7||={BW&Z+&$8iFYI8@(<_T&OYY&YR~^YQECFI zFJ4@e6h05RH}zUd*jJh00;e0^HySc}EFgHKGJqfile*;%qy()kI?*1*u9FP6G_p=p zdQY7*O1eZl!yF@VNfuQ;PnL8~Elt7Va@tUUoS1bP4}uV9j%Ea3y?tJ?NOspbeSo0! zD2n&f@a=wCCOw&WM^J{=H(-=a>cTeXpmCfXRW)2< z?Or@?(am?r|({)#coW#ZyRHn>C#+5c)9 zmkh8|L^6nUVqfoO!yd=vxlC)h;=#;`3J1h1F=xX_<&eS^$&gKkSZoa`nq1Z4Vu=Xi z97~;VlHWMRTfa(pwR+4rWrpN{bA!+|=@AInGI*7@uMd)_Pb@wK0Is3vwiu|4$=0W( zvT5D#NH1$^eDdGfwla*#1wN zG~pkzYUMwj3Zlu2kDq@&ZEuWCm&7`F_>+VhlCdyzIB1%p9~$VY(5#Z=OyyQA$mMRM zOdHZM$8B_E?>QJwHot`Kn-EefAbk(b3iv9`H~Qb}RxVi2mD4Y@u{=uuwI_$nGQS{z zurBd;Ensv8SCMqsf6c-b*@>9(qF0wPPJZL}*w9i8;~2$|9}H0Ws8T_s`=)l4kMtCr zW-ghHd{N7`u9UH-Tm@XigOt&1F-sy;%*~kazF-tob3IS(C6u`u;~s9EJM2%`T<1^6 z@|X1FAeX_P!!1hYcafxUiN=kZh5Qr~mdOaKJ=b6}Hk;?vm_*=sN7K2J7u-o*&Gb3= zR2cuBDY7(M9y3h#=JLk5N=mEYUwXs0df97yxRGPHhfR#pCfa_aI!swJ?u1=$4I_WK zF%=Flm*QGe3?8;VU5$7QRWKf1IGd4UP!d4}x!M8c!*Ofzddb_Po$+d3eteIv8#Ik^ zMc0Py9@0JsWm!-oe`2T#hx3p1Cekp|PJ=No1w|kazoNh<1duwM^yX9ct|H~QbNs?( zjyTo^d>4`ZW=tU%%W+dFR^`AL>?&?AW`kX%0{tC-*2D>hL7f!ld>k&q(k>CMb{IAa zWGY}4oofL<07e9*htivvuEy$z`eFczX4TX%nW<)cbRm|TydjL0ahlN~WY)HpqoE610&OSA&bc>lo9L6c&z?t83nos1Y91l+)E z1GM;y`O-_z-+U4cf5F(M15ij!bi)VQ`N&*s3_O6VKl<^B{8LXU)8s+{=B>MEdk^@y zZ9FT3J`zR~2^P-0b+7$HKAy}I)ui(xHMZB%PaP8%tKgkkyAUiG0qFlkX}lA~7b_GV zqLszxpYUbX#3|gEb6Tzz&{UVE<-jcS@>Eb~5G_o0B7_OWlVGec*(N@`t?H-iS2&Rd zI%U6V4AB2^=|}{n2X{z1{HiTbY6D>MGj|0;g3&zn-zZlW))ghRn+f*d;V_%J@q$vh z_r|XHTa^c%1ivWlJ-#5Qy@9PAIzwqCcIPE)np5BOLTOQ*jHVaKdi4d#LtuYK+fqq5&CxDW7!wJvF#^I zME6Dd!#=vis1Py)3dtMi6hHEzdGPz-?bm#bb47@c8vTwQn(sR1>S=Z4tzgU@t9&7X zVrS<0!BtXQSL|Q}2=`kX>#m}%t(IC(rlXp%Quq_ZwgxW|V#5)af+<#*DLR8PCs2W+ ztYrh;sM+sBENK1B(yr3@RM!0NCVL$h5BD&&hQBXMz=1KztdTSW7Y8v#d4NK2eT2!c zGsl9BN(blP__jCv6p^75G0Gv95xY09;?JceW>YU-49&q)Rf#Vd`nren_^_q;h=z0S z#%m}lw++923B9kayE5CcJ)m)G&*&O&v-2_o!RVqTWA_2QpW8l6kWFd?EB?qeZ_iff z*(<&oeP(Z<`CI-)>q|wPvT9agIfrCCJV>aXZ>!C3UTI;zwh^(|Y!VS8j`_?j|Gi#v z$?3|J)$@J2E8QZw${N+-N&c_yduFIfg)=DmZ4ZvFzYoN~I4V+KvexUqG-GoWDvPy} z1|*yO*EeF(D!?m(?kj^BQUg&gG@m05+DRYAhy>z*g4A@qPU1OdSG+Du`L(T7(1*7< zfP-8=EV94HQiO$*FA25ZL@AMjmg-b9G$4?wtSlJn#HAYNk@+WZLQ7x=(^=itt za;Dym8Js8n$+AGX5bRHt_g;Cp@bijA{>j55!+|rqp)ydps;b#(LU#8}jtq_{2-S>m zm^FzK49CIY%aPdMg}_m_Pg_=0lp#&O2`IPJ5UOyG<6$wiV6)m7zRw>_bLcTez_`;N zrLmV3#w?Sph`^KUve9Y?3;XEq*`-_o2eF%}p&z1xg8BB#5}hXc*Yg;IyOB`}We3qT zydh2JM|REb<+V>RlN*4D1QyO=TuEPl=*#PCofaEw`{k&Lri9OXf=A&V)%l#^srDZD zw4Z1sZX`R9DxdwIVLCQ$P zy~$^P84Wu}+Vf!Hk{x|$mgRLxE zT-L1iIl8Q|k%MYdnkUpREXK@(QD-~Bn6v5?APO7jSm2)y@{3e=jU6LmnAGQrX-H%E z(^U0MnN;ls>YrvH_1HTOB06e~*34}VnV5R7Y3t3NsoX{B_gPN_=pj}e_u8X0#d+V> zI2C52wR=mSgPNL;m>lz(uSyJkgk3TJ&`TZEI@@)W_V(DHpch}JO@uMGq^>TIR+ajv z^Do%DqnSUxMpcUKuy~a*=qxS*-hi0%+`e`=WBLra(H|f)(X&j#6b!x&Uy?Zf_6T3^ zcG_r(#l<5~Dj1A8L-vf;gc(}c9-{5IfMUb)cRYtaba7J@qBFDeqfNq7{Jooe~VnJ*pFeCy$tG?z2D^Rc41XM<=xGRV zRTI(~>6;pPd3(}TEd95_1$Eiwn-j&7`tXOP<2*8_~1Sie^*_+!&tTN9tdf z%hsg*-_Vct*T?#w@8D)RbE6><4?9>Raj~`DZ_0F`EcPDTbefm%nd0=q>XYA>fkS;& zsOai+d`=^bkJp4IuR(5m|KPH9;^w>?NB?Lwb)L^K8V-nd)SSZ{q_Yj7}fWQ;Ol(CBm(fPEw}`ASXq&5FCL@vjfVLnN>~FU{w=Sn2xU`jG5` zGIn)lukqhz`Bq~m{s$&{$N(N9d@!|Zy#o#LC5*3%=r0r=^lf_aLQPH&1)K;WbA}K0 zu|9X)l;Xumbnmct2lxBM=A_oVkPTZ$GvV%YK04Km-JUH;YdlCPMT)U73(PNL2zOob zmLEc>G9ss~wfT$1@%0Z(bOg4J!=QEh=OSki#z}FStu>Lg-CU!h^)9x({$xEOFX^I% z^8W7{ZA-IB`~Ae_ncbW$cZ@h5zuQeBKF23Avq@_*{VJMh3BrwaMf)eP;sTEs9UQ8o zsXR0z)+Ob{|83&m>C{BdqI+qR)r_;H0YN29r~a84AB<&EP!^U#TqvW`3)H0SRnj0@ z=o%#_Mz>6pSg#@QyvLiDH-~%j!~&e4eTEGu@F>+vdp)b|zFxiav?>kcRkVXy zHcrW8ii=C*G$G$}0BYX$c0L&+iwZb9Q%DVWc>3i=2P38`yB(OXy=Klc*xIJ3*JI>e z9*_$l9xwUF%|B1QB*LO-E=#K_42Q;9Ei9)%2qfHn(`J9W*sc%>9ZZv}_SdTWU^@Kw~rRzQZ)mk77CNL-}RB z0fH?j^i|!R866jvt)Qg{Sa5ICXJN#BQp0%Sz$R|$z!vpn~+ zn2u9w+S1SPXAEMEgXceiL(m&e3y>TB*IvmGWIGJkt;s#Q&vr6JfZX?Iz3zvmbr3^6 zJnYxa%VQ6)-ge{GM$|@BKH&2DlY8FthPhO;IhIf@90n6!=eALTB9*?ZP+Bp=Y&|Wu zb@#UHwDn?+VMZ^U2iOOYB7tUa|8_nIp8w%|#fZMaVup3eMxMudU;8D$U3>ExhK=m7 zIpfG3b^bk$w_b|yNiwg_TB$Q#VC;VRyS`HA%lY9uAf`OepJ&tW75@5awMNZx^XT54 zDqEu|?AmlKhh7qhAOdraR7fFi*ZJwj!PiDWZQ5u8KC-^$2`>sM-u)h$)p{Nad&(~m zfQFU@7?Onv+@@c>rq7YSHn`jed8ljnO*X8f{^a@@>73{?C`BHHyAQCis4S^!3cX|E z%WCP`2mL4;H4*X6;;{M4J@r?N%9t!kpwUq!ExjH~oW1`?$;M-n{;abNoHgaGu+k23 zv9A$iP0ypL?ptbwrA4KmUZQ_=1W5|AqV2{Q@^(keW=A`hU!_zT+u2Aiso~(89VQW! z9B^?^OV<3B+W%33O2O(;92-4Zu=ZHjc-s+Fr41YQUmAY@rv>o%AmaNR<$!?+D@*P) z{^J@;dNb4ABqFLBE1jhMqVIpt!|1iz79uP~NWj!_LP-5eZr5=rVD~oGdawz#;AarEvzhDK(Al-lr1@u+`!a;J~?Q3=nD@QP1tImd1=q*OPRb^3hA^;%na zVv!EUPasm9)zXWYlxdZv#Xq?}PGCa`DO+0H64dX()ab*CwU`xp5d zVIV^`(Dl9fo&>@g-CXFc35e3bCRe^|TBFx{R#CE}h8H?a>74g%NS0A+F!f>Nbd6ie zlya|**X{c{+-bUcoGUh3C{?ee?7{)v)@PsWOJ5qv;Z7{X+$bC`XY{{G9>sA?W98L= z2v&mDBcdp7=R-Lc#&BkF2uGm+XgZ2mV_3uhat)Gsjv|!vVY5ISd?@evT(V|n!*s*G z)g;f=^VFLOofaixC&KlGiMo%EZXGhrpHILm2m~0_dcy7XDO5qh02IC9 zdRZ!J>w~0`^f74N&!YxFQU8D-znp2~XavOv65;vKaE?Wu$adf=OId1}vo>6E|6n&S zW6CWEy+NHo4@xj(;fDWqaOc7IiVRL;x&Gt(X(ABkc0GI#4$bCDGiLZ3FVW4DNjahZ z6-3Y7@&+wv9=E<#!@hL%ydn%KWBm4x!i1g9Z+s+Y{FZ#cy``FW-6~$@+WD^uM@j#B zTR%scc-Gb8zeruqw&N?wIx0DY9G(Q_+w~EQCYyQzk+qdVexGw=joSAzh zYV%r6`>^wI4{j8u+yCtDK{u$=t8tJ4ykG1|nJyC>zPry&vI8crruQoW;G5ZRTeKdf>FNTt@I)+`Mb+Hfjp1#i6O>uWEtd*s`gU zKdpIUAgdJNoz?68e?+)c@^%If(B{tPQ`TT9P;QxlpXBQ;m!^kj&=DJG(#L_q6=+#l zS}+RHH#eCvggh=Gx!aFi(^~!;!xN;IDSh}{wNG4MKAW60so@?o*FE6bx57mLa}i#n z_;gpri-UGWpK$XQlHqo^@8H^v=B--6iG*N7A`$%An?A2e%Xf=mL_Y5%fUrU2x^OBVb?NBsKHo=f?VfVGLXn4SHx(L-M1gm zIDL+Zfm1=rA08C@Z@s2Jhx6ExkYnpD_rXCk6@j5#zvs)&m#1n7W|~8-t(I*!!R3z+ z)H1bkO^sV3@)MJsCYtY>`&|SsI~ZC}=Z87EA!$Lh=p(UNcAaT8zPHrC6Ov&~eJ+)8 z+1Yrkcn5GuNK+WtxSP737nV5wS1kX#r|Un}-QUa`EG{u12XK}3#t{bfjVWw2doq4h z>kXM#zi|k5Js8%4%fO0Zi^ij8>QwmekF2_Li}Bs>NPJ!~^+@a6qnl7B^!*#cK5r^^ z;DAyFoPi;YM!*P#cb zjViCrZMp(${7+G0-EwydNxWfKZ5}g{2S!`6c|Ya?{z((1 z^bLkp2Y0!U;2T}%7{BkAe5ON36?fIL&c7J_{df`>rvALrA-twFlE3&~C$g5nD&!wg>cf|Sv%qzX=)I&JOGtd6n)?o8O}r8i;ga|c*NOG5&OD1NUpMyTjHf?l z+c!X7(SDz#`px)gD)(xHO8&k?>Q*09BHsnT{LPsB8$-5~j?TB}Yh4$JgoxRE5nb}0 zCtaHKpAGPZ*yQ3y#|~6tK*Pt?DxVWpjk?`k^V5xa$(aNUM^ivKXlrolFFl_*gzR*- zh^udQ8j4zqn97W7VT7u{a59p`Kqt29bAu}~r-&jSi1_{{pmBuk??A?iqiC>C0gK0Xc6gM@>qM_L*Qa$XFK*7@$UX7STCAj= zV*Z(Nc>Yiim!x>0%eod4wG${&qE@O6gP8kVifkM%q95g86b% zvOO9$^5|f2t^68`MH?#tP_@9G=ixS)zlWLbHsFX!asr_ANoXE#@76`2A6n$9{(m%m zb6lj~AMdtpwb{10*>;<4+nmkX+HBk0Y}?kx&8|(8jr)9m_ul_!rq?v*Ip=fUoFMky z^&#r?MGkelQ)Nv0dJR#9eyUw>!zyFxG@P#&#lpfn$!4#NN&Hwku~L7}%(vt|x2#*F zR=ZyxQL@Ajnm*Y+Q&$~Zh6z(aNgey$>&?a8mj*W^6TX-_RjR_Ew474tEQ%EMh#!c3 za!-F?4h<*WnX?M5AKKqO`qKXyc5R1$~Eu*N~ZRcmv|HosYg*3$qO;Nw!dogw%lNdg}!j)Gvl=?E2Y7WCB ze@PG2&~B_4_$vqmNG6UMRmr2j{U^NI5CJyd`|AzI4F%(c1|`U*$cgHe|@1Y`4RA?y0iT?@C7U3&R z6^ol(iNrDQI?#~R8mjBqo%{Rq5-eFjPtpF-MO-38+~2| zJp{rS=W)L?I-G2nR)U3WP-(zu^at4x#Z{=CD|p4COC!UD*SuM;u!au zj%_rD1^?59xnH2T^-TTYd$iAaWXtTb?k7xu_OEoAhB=>3peP$@4EvT0w|;jcWo_%Y z{pRoU?GBODnISy&=T$feBL-)WE-VPB?E6K$=_J(C3i`$krP8M*Mx`o`k!o#a^%_lV z8ES6EeFy|v)4utVKPFzC$$pEQ^74lzI%x3Og_pUTCleNYJ{-&hdbN}+zRd^ z6!IRNAkjusg!stPE>zap$x3xBPcrp$TYIbIcZ5yVuOpK#>bSBjaTOg+uHnv&K6OXa zw5um3O+-{4&vO+nwhJd`$~CWg_*iM%`(*gkAN#bf`OZ#Toh_Hc4THaYzT5EeDiA}6 zE4@9a zUCGR<(u>E(DAMdYZ!CDDxV6_l;}ceLm@zm)s((}r?8Zop*U&X0;?-0mLp3^qi5_wh zgnJCUU&AXUas%sPBAwu}RB2SBlLJe$btA>TR)}io^Q3|p-PB|-cj3P1jH=rPRw}GE zMs$-;n4uz&v9v}pP1;^X*$_hFmY;|kJeU8g?DRnkM*S5Y%sg4}nN+h7^?aFv5h>w| z1LZ%)c^txq*MhdJIuop7QK%z^r`0&-%pvJ7XlQ2Juk?o|+MiZ;qagu{r2DRRWRprKyKrd*I%!>opq-IwtdX5aR+ zMyDOLWl!U;{_jy$Uqxv4%Q1}=YBk8|AU&uSVP$eF+9XwM?<)ymVR%|A(ti?dLM(;?Yn^o zeIN73-z+S@58@=_M8Tj?Jh&H?JRk6Y5l-r?i{vYjDZF;|+l7>8pkU&Gdq|+qMG>G; zgI!8b{QvI&Oq-|m8yM$G>oh>q^`NnX@^^HM7e!G07H{qs99vxiUSrS89qPL3$>P)+ zio~n%uY^&!3MKzj#2`=O^12h6DIT$iUp_Br%o?Y+^xP~m=r{kg;{=*h!=|(K`5Ww+ zGP&$Y5g@C(56M{b6+P&kxj!%QUw&!X@S>*rW0l+ogd{ENxlYklw_9+aQ!7|F8HG_3 zZ4JtA^+e{FQvbxU4H_ZxOEFx3qH**cNq!7!y|yUVfWQ+Wm)WBMt$lm&AoLWiVX9`B zhLbTDHp$4)nWM{W?A$AMi*hUqW=qKI_#PFM&u;PcbQnEQr(&>jklJU3KPRzB`h)Di0q_KjO}Fc51? zgJ4P10!_qTm<-8In>|IeS!GLi;@b6pY6+jS6<*#k=zc!HM?vGn-c(!6Y#LrzFe|Gr zm!|mfrC3yF&9?QvO7l9IXBVxP8<{;!v-T zFb_a-u1~ekfy!t7bM5WD4X6YRqR&ALQXSBbf3Ulc5F@icX(vUnlmz}xD=B&Yh@{q; z1JLkje78IbIXFdJHKm=!nvS3wCasGRkk!w(mza70duaT5!qWtQ7Fb$Y?LjlXX|Ur(-Q=H(M|)Af5xC z`XiZEQ_}7`idi@V4d!m;GOIf$NuqMl-(KuYXFmsuUfiR|C7IgkM^6S?Bl`0LpCk>E z>CCU_D4B62sl}YO%Dc>*&z{MS4y&I&i~{gpNqMJ$QWd}CQw z9?ocX-?^M!0by);9~OjFj3*)!*6@zjj#4Bl9>pzzqGoCb>&)W5(V0HCi9l!Sd7zs* z_s2kt!Mrl0*Jg{umLUMHj`Pb=nm|nifZIWvkK(hXnyu@ie23fld0ceLK3tZT(asQ4 z`QW6IqqdiIzbT?I8_1R9HeQoH|HS+s)%ZR#z@xN^-sY2K!R__qr>kwt{Hn%`tbvOH z8sG+w+?=oe3(iuYk{x*O67adm^%ss~nKWdM{0pL@K7(T-jQbx-As_bT_8~VOJf-#ks7O95o60@lvc^b0U>^8MjsX~wI66<7uvIlv?;scqyr86C zA+sE3nk5S%rBJ>A?wNFeiOk@+DFK+msmocKL_VFmX^(#xSAE8LY-cNOaU0n$XtY@j z+!MjrH57)F1_K*-Gpy*p*qFJw`_qcEI1;|Qn_1bFkMIo-Xx(xWVQ63VAqv8VYn4}k zf{d|7z9MDH>GzKw(+qz##>pk{w{+IJ@cAPCNqFLALa`ikh~cJfKom&=Q8u+R50#FL6l0PYe~B zxic^@?*Y_AYk?rs4FZUldxCr=8YR_Csqo#`)SMyDqujpmcjYC)?&zI(I5&-Rj}#vdn|uryg)|>U^>th=ZS*@dx7yi=5?!!ikqN|*#`!o-0b*z zLqBfkZ|`FA(9j;NjDv_bA3@a~Lv48@lQ2JAn5dU=B8NQEAu&y=@{0u~#&4!g4$493 z=dWQYOIulgV}F?n2)w5^u6o0v%&#x>HaWIMNLb1Ztg=Xd+nXYJa05MFl3L7UC&eM5 znd-nMh&Rc1a*Kkw%<_Fj1wNcMi0jU>B=)c2j@Z5VVlSWk--wU}YiZk#dbNkTyFyp$ zJ&~~uy(CpWv5$dvM-NN|?_+xu)mY?m|0)2rCOB z`d8BA70=CvE61co`?p>)b5_Svvlw;6Q>V|$(+U;d@7iVNlf&|?TRJOLl; zXriLSenF%r72ziXSzC|R-s~13(K0I$sWH%*#}g*@b$)DT>?&`MK?9@3PJwk}v)tjH z|BENx0g9&!H4GIKeltpadhG&k1mc z9x;X#e+z>AY*hMgriDp!5Fn&o+|D+Rvpp6cbG?W$wki)^k3PxY7wJT|nnk{!mhBAl zfs?)%;C=t%%*!*KSQy@PJb1ZjNX|q_?V;?G8h1KeJ)ZVThV@!J{>UL;Z}`y>EPb9>htXIME zS8CWF9IE4FLi%rIz)Pq~xE=v1cY8D+Z3SXhT`p%??o9ME6qOq{i*%|%SRHiL1P(O- zr71C{)R}#C5%m@0(o=vv}=B#aO9}$LlbB`;Z~q*!v^y|G&F=ulxPW zYYTW&6OOZbYdD^KM61mO^X7<25(ti3`FA`17^P^}z1m~+ZUWE+mK*JemHyY-7SlP~ z*ny1pHwym|Y|!fJo=GZNg>@d}%O-u7Z}<*}@{ZjROU)LQ(X%>MHq|9%o}99&Q_=}d zg3^q;9u}tt_h*7huLPt8zbk5XT^-xgo`)G$5T>6|=nzb+{T89tZ-03MS1S@{f_&GM zi)sTvYIVEjPvoOyk^PwBLAXtGnc}WD-m&$ibYx zs73d4$|(GIRn^gfW=<%`xj@|!H18@7&v{vG~_U7!F%YmZ~|KzBNt!0p8k!^nYZbqdb6AvIL}w z^?n-~B{Lbqc?~$a#v6$=AwxYdNQ{I3-L_o#wh^dG+8Rfq)EuDcOHS`!W{3cbiIge?1Pp7d z--r_rOQNemFq0@sdK)P_M~jA=pbe-vf}ZXxtV-7%5#50CG(JZ(u*ZzV!s4mXzdb9P zanO2rgXfVqxXf}m!pUxYs6T=`lw|3CFYx2*ntbxs)RVUZB4W1%J|otRH4bJ z^hDG;V-=Gb%oqQ{#=`1qtm12fB$mJl_O+IK=Qmfb`9EF|h3%3*ufY}FEauaw=sZ4~ zgSB#wh?lQ#JQP28N~O_uqEoY{uBfL5aU3Zr$>g$G5+3wCX@PAqNT08(DQSv9KtLje zzdI1BhKHa~Y*T!c-UTU!+eH$^>{<~1^MP2qE5s27(1?v=I^5V`{pP@`d#fRW1VoKT zXlz1{gAImi{9XADREFwD*1r94Yrb42_U2Qy{PCquF7YsEDTctFP=7Lm4Qor=hSUto zPOBv`l*kM1d%sz1es^8(fg@jR2$fL!9$Tu<(O%#@lIb+ZyyxxCLHBGiyCQ>jUvpI# z;2MSi@~M6O^YV&D=qu0Kw!)h)TqNnoqcV3bdJykz*U{Uuf- z$6Tew!`J<EIBg zkHm_2-cE8$G8>d)n_BIm3n>=sYi=sV zoZf45{Ql5V?7m!`=GE8_zR<9}D=EzohkgXp&gG||aMQo_uJliOVrev&+R!q5thxoo zO}#OM9lh3eRF(P-u$dwms#=+dZ4hSxBotJ8-}r5B;eBVX7T{H7;29( zbCB_aB}K(o+KV$?ZJUE*oY5nABcMu&6n%YnJ6?+ug7ciJ2U%{8n9C~?U2VO-C$JvW z$EEQDi#<)df%-z?Or85E(!~B8sL)0Sn>5w)#l*{)^OBOE?Aif`YV&dx62 zksmjQ4=sh-gC!oA4ziY+wkJU`mV;qfK&i5MY5sTI42{2_Z|W<4?h-`>656SN08)ZF(@-G(M zQJ9-&LrJmkxAkGZ-WDE<^|v8b`@1$jQf|o=ObZJ;(zSc(IiDtI%D;<2rEaDTE6<1l zXLnqQ=!uvg>Nd7V?@Pk8DF{CvMZlB5Kwsy#VG-x!n#+AklMDmk!{s54e053CgqfUn zmVfq9ne2}w$be_zntHe4r%$1ReD>^Y%E({nBB8xz+uZHj$QUwfh8;bmLbS@Hu5;r< zoa1jd`;hppJKnLzk#GAa8QgDo^YJS|IN{=C@ozznuh)i_=_W&}_*y`clw=ISm^5{^ zT2uTQ@s!Go##v2N^*QRU$GfNFHvY#wF%Znd5i8J{U>cJt^C}!IP6h+BQ#(-Vv>Q0k zc5m5|H(D4irfgO#WPVk6s&)PNF%zbYnB{pNp5?XbOyGM4JcH3wDvj5HMcgCpO_{g^ z48~Cp4mBS8x$e_^2$)05WDd_$ z`a9l2yww!ouKQ$o(>=eJaMdJPQA0zasW#qRd1kqlC=J+ba(wO=*O9^|iTIH=k*K-N z3J-@x=w`=LbEiDHGBu+}M73d&JXLh!8Z8Q)!ZM+}y z30hi$=H=DZZW&%Y~M-x1@AjSW+92}T=y{!yhcy%76dcH#5faY%slO_4If zu3bXe(!LA4SbzFmM$7D?)*)mWC2C7-a1Pn@4Jal$ETiVqpq6M{0vhL|UE1UrbDziH z4j!}(!JphW-${_a=}bqMp8~ZZ^n4xe%5+a}7r#njSfr7tH<2L5@}svN1g*FrRe)}v zvFVEqQa;FDqbSqyg}Q~sBd2NOs-fdA@kXA-bop_`%+7n?GIKn=Fq88(E6+xYIrtk~ z$W!%SogGib1DUlp7&i^b47(JBL&EaCM;si@ne{v@fip^+j0qjeirw6Hj0;CW$dNI2 z;|2atWpDJBcc7)_#qMv_;kiHS->Zj17u`p_74gOKElzLXTVY5toZ ze(yJ@Pg6CHdzYT*V@D6Wd)VRP2El5t#vyjSiPe*zE>l*Zd!)Srm?H<1o`5vz@RfWt6OfYwDxT>T^S7+74 z@%g_RoeryOVO&y3P0c%D%&UzJgE){!sN%0CO2-*egE)MLNE&s|?1E;_nbB%2@lH&c zp>hd&OdrE8oXUaXCZNK8&C&A<3b8{eR2BL(|BHBU0EQCPfJNZaqk|JvRn@n?hRxHc zVG6T!^NB ze#3%$!Pt%;do-5XwbOTgT}R!OxW_?tym91g6=kIkc=5=NjSMDS~eppi1|P_z9;U-R*hn-mQ;Lk)Z3 zNTaG|?tqT}&E5>^BFRHTiTs1*)Y!-_c9(WF zk0l_`l{OfOKy|h8PM=b9h;R7DgS_66l(U&llT4CQKGMLl>D3FI*|<@4eTqCHdblJj z3bcc;zkcB!sL-B42HqtVR8?X2k(CE&KrwYz6l{&8)gps-@JvuNP23d~xi!C-!kI0F z^qh*NBoiS_5p-{pGlu?we9v-5i_w-ZQ$u)R+T8o^d@|cAWcg~|s4$vk@*Gd7_jr%q z`jkO^yq0n`dS0P@-K%o~Pn!_fAga-b0mC{fd_+J#9KGELZ|Ss-KU{dj6GSF+?;K^k zKbwbk4AJ?>18TKQ|4zZm@2&7Sa&xFiF7l6cI>pHfE5{WLePqVu>^J%M`E^;>nm0p6 zPvXMB)XEPXpjV6g!S(3+WoxT1yXD*ARH~!#Y80c1up;`mIjwj^yqT_jpjUS;z~k!5(20tDxjbc(UliY+;zAs#jwX z&=EFts~YaC8=;I5P&ll>cY-C|7pKoDI2JH$enT$?Z(V=RhW+dq_*;Y>D#zCgGFGS= z0Tr=4==*rQl%nZwQT6PcfoK-&5;syjMpckAx@4YONdGoX0mYE?aD8z_I={Jz7F&x{ z_E2ON6)KpoTBWiHfUklB0w9w9tS}7VdYAR5muJ zDC4(hbPdLDR9nVib|YVwz{yydAnPxppDvV8`jtp4@rWX~G{nGjADw#5Vs668!lKDW zQ9-*Z2S3QmCm0lr#EBg2}|DiQC-91)@BZ#Zp=e#mLqF*3> zNn-sGV|571^+yIB$?t_2u8*P1=3E`6CY=1r0i|4=OZa*3k>%)hrc``fZA=OoXBav( zaic9Mw~@qX+Eowca?NBGUFQFhc``DhrzAe9K+vYrvIWYv!a!#$b&-m`x0wvy*F56L zffZsuPy>ax{-`K|WXXpg%`1H!=z;o1!0@O7H{xmj1ZO@@`XP#_zdQ(kVSU1P#eo+* zL`owaAj6z=BQhD*a;+TmClCHeEjPDW_+<|kJ7#BG5O&F=Jqr64-Mnt)sD_EYAvdqYPJ_Bbt-gNi>d#Abjb9b+UD)uR8YG;;#z~U~-s-NTi}H}K1@pd`#b>^tY!xZBP|-I<7&7fvtpo7Q`KgXbyY2+Somz0DR!|7 zZsKF;C+CO^9k6e8W5}%U85Dnh9nXwz4R`2rmLI~y=FQjT*ITTm%1s$V$6WAk3j2>I zUJd>`hONhEbWuGKZh&cFRR!W;njzAt53Om|? zStGE?JW1Z;^8EmKg~uNXFkgZgwwrlIuLZ0QZslD*8!)3pfVz!TJbO4eT;ElPTfb@Tvk|2jkl$7kr?s*m=D z+qsXyQI>2qGRL8n(UZxESF@m-MWWVw3fto!4QDm@kXooaW|t(50&(L*)LSZstLH!z zE6a-k5wXcCyC4y*r^^}D@V)IP)JmY*b0%d_-bH-eYe(dh5XoE z?`T)Qc6GhIzFGE6{d!=6q_jGZWK8~Ky7j$g>;S?2 zfuAgeLOGuV^`bASAir+YQ0mu*U_m;oD?yF_K={G}rIihe=aoPvI(CF;cbL;)e4-cx zogj}Ca60Yx=E?OJX`|x^)kSV@bRpbZnxzl5Arzzk(G$&BUf{wSJ+MI)2untj!MuNz z6Iub2)iagJi4(uMlWC1|X-f(= zKhRL^tdQovnn#tBv&h4k{eAJbkcSQSfh2x;96@P_XFcCuR-f7fDKEaR))Vv2B)!KZ0UmMEfmgRX!FEPR7o z^s60%6jt=oAFOV#ww@dK3cJ;OL_63*UB5!HtBUj(y-*35nm7DsRDc;6vC1AaD>JvQ zgWYa}NE4ZmL@}r5F-E(vwCFK+8m!j7BSszW$m{2so22v9AHs@diAk1$U)@2NN}C{V z%x1hEgcQT$He9=`ztxnPk0F=Ep1}g#kpDKp{$44k!P;nvD%GquUNT0XrR&oP1$8(4 z<#Bv7G5?g!4IE|U4_h4!D^rh?5T*#^l8vmc&#lZu5Z{MvUx(zuDS zol|l)B%1A354kK*%$h<_3p0EzTfgqIlXqnNZOjLx>xOZ)5%Gnqp7Xj`3CB8(SMRqr zX>Sx{R>@z!ZD{cI7;aYo;dk0HaRbv8{^-V|(4#5RyW62}-JdFbab5HyhJ#$-Dhj*V z8C3bV>kpCaaBCygQ|>YNlI*JRemu4ETbW#11>&fsFpQa*d9);Y1E;Fkno5cVnf5jzBifC$7c3Hn%ZMg!he(bhHt3cC{Zqg0#`XGt7`q7ym zAKOXNMw0bOOPa6)COO8|M|NIG3>3{@f0%M?u7X7k31)c_CH{IG5&wr3K!!^s4J~lv z!9!*Iz;h`a7tEBzr6ay5kfEtU8AIea6@O{dBtXL}|EgL@XC}(S2gr``rRN)M(%XgJ z>dE7Uxac^Wb!-8|F{}Wg`uk9RuVO$)K6KfrY;Uln*r#Y^c^o{X(S(PN6(*0ZWoevB;avfj3C*y0$Z7zX~Lf_IYo#ByfEws%{W-@?xTwNfiXp-F{UZk zuU}qPxR<^=^~@QCM@CoH0Wm**PFu<2TmHMaxo#$Lw}EQMz2O@_LjLe z$FYSzgt~3lpHsHpyU|XU9d~ikWfOp4q_cwRZejnL7D5-3zfBdnBgBSdSJaas#&1Gh zU-2fneYPt)J9kT$X}Xk3*%>^|C@XR|&brRTzF(a2pyLWT?;CuC{Mlr+UVlU-5Ojo7 z6lg=W{U%*LHr~I=f&WNE*@gjYBrB&G2e zPq=GQLlaEqumwnA2@t;CeAA)if4)?C_6{yN+-8f#cN4NkoVM5rV8#exeW?fAa8_NISDeIpTxK0|AvU4Cp!ACDO@wa%%E{+djONERf#O1?Al)EY(KVmEYM%kyg zc|?kuGnJZMH5i$`a8WN}vWyAE5*QjvWuzE`Ak!Mpho>{1I;jG%#5qg&FQ|MIGJr8} z!xFi(bLuvs%*{TyUv4PWpdu(ELu8uUn{k9dC_2;671{9RS`l!yv}~m=u`q9oHTyCS z&jtw((MesZA_#QAc-Z{Yi4nM!CqxuuwGKEehv8jg&|02YGvW{X3`K5hV&{;Snwu=|pmzTHq;2K0M@2 z3S?;5cgXR&$ zK7G2@1nId-i@Zx^hQ?|cWv@2{GdE}qyX?fBCpD)McC zcL`)NFZl`BnBIR7=q$#c+(U9IH-7NFWQ$mXv$MJMS6oo3AqTvlCCTD7Dalfrn>7xJ zSRzM=45U*aih4;DYgQ&TyKlt=-_u*>INBlYdvT&0kWdGR{oJv)9#3Lx(}yXrM44?y z!mwg^En*&$xOfJWofB$ZC)}W6U~swo)HvvS*BpyTVh)$Q0F?aS>uqSu)$KUIFpky~ zt1$%p;jWt$^x*~e_G`HrXmR#&Ew^)=ZKo)8`O8_KY?wA_+<8F&& zo6aB>7e;UYeNQxalC>lC0Ya1_;0T|dUYb?TF6`-vC4S$=b2~pnPLX@Z+ANANJ)F4% z4|sxK(G>*~Z2erAe*F?q`z)tftvA&q^aAPFw##t+#IHc%aW0hWB3*ab)&zw0isuUMLxaY=V*MI@JL-?9^HBtBIZ#Pl$rj`~IpPbk^mYlEf zv0ct*9Lz1<9c#O;xPGTk-M6X}>R9IvDN8CPMZj{sUUMq&nF{VvN5OF#MF5p6Lhn0w zXD5szH22oo`pDPq zHwI!LSwtEDA4fACi7`3PAPm!rn!9~Kyxaim4eXB*=a;DuFdv08iQ;fNtjGw~Sf5(O zi2DC`9YUfJlrz{-3(<(9g54dIB7~R@Fr{&qg5@5&bO?o=roDBVZ;cl+42+KD#M8qy z#jqztL|CxAO=|Ya|AxST(Bu89^1$2X7)RI}cC_emjknqIH6>)gy^DK$ykJS-RNA74_ ze>eCJxBF1kIs#5~hb~Xl3XLk$>7B$h7F)6>p8&!&_nX0l1OEGC)wA`T0i&VkUg;#$ zzA`Ch`{y*0KhVUWz1ELzN}tnHp`%uGq`j4=hIBqhs;5rUR4$t0QC1I=D>&dz6$95y z^*v%K1C^Xl#HaS)cQvPh_u*Bg*F7H7Hs8mN#}Q%V<9aFE=G6r}4x3vL7`hqj2m=z5 z66l1=;B)Yel0arSJn{D+zEQOMjkB1?tggs47=-*8e{ig8J&LYJP&8Z~-|gmjKygP8 zwiv2PMbeeSdGeJfOg03wxi2&xjn{}uk#LGKHG3Sn=Yg-jUIPE)lUerVgsr3L+?y=m z`^E#J&I-EoLjZqf3WHySxni}&-gCBKmIlw(RRu||YUjVHBNjhVOIJ^CoD1ZSl%&0U z3B{W$WdC3AOgzc7^XGC_SC7JR}6R=op%XgN_0BFNy`7&i@xqUg7ys4{&cpe$>Qwd zi_u2t)uN)je{`yTH(YS8ARn^l}v^%r)?w6Px ze;m$+O2eLD%UpvAYk1(>zIuo=SY~;map}3k=yJM~lX0U$!?0GrPxgRzDB-m)GujrG za5Wg#{`=lj1ur>BBl010uyL2q@CtePbyPv!7Npzi_i2)ssyI5-G*C;t3F0snl^=wG z<_8f?uji%RW9y!5JO_>BX|5}3C-`thWn}V*2lcgQW9oKW&G16ng`dPSWUZ{NuSr!& zgUab%BB7*}+oOJ?(WllNpc6mA0lFG2HjC(dtsk!^A$)CDsV&B0mfc(DDJ-TVtlk%9 z{zQ=l)yI_t%e^3OfElG3g%_U_L$wDlGLA(#wn*Bdc417a@y}tHefTGn9&1o0j3RjK${fwa$z8u zlFYL=i5|c!&Z?th%X7Mp4)~B9iuA6Rm5$imH@bs9ZpLb^@7?u#)11$X%7irQ>w!V~ zu&lTO@Uo70UWX@leu$+yt>Q{)lrsFsm!a{X{AR}0Yc zj8AS^^sZt+PlwC?k{W-wH6_c?0xb?Ajy&8BsH%JJ4JzpqDPXk^nI%p2aSL5rdwGYW z2}iuQ9XuIvo3RTCcq+)|!6InsD>RHpyOC-;b}pPiaS+jBI0!Igt^bxE3MpfiKC2I|^4n@Snx1Ez zzn(mIunfEJXujTd)wJd%!$O6T9cB6RJ9hezN~>t!%PN0H)J}2U>Ouxcu-M0Ht5RV~ zj~Yz;&K-0(j(!R3TzP#l2z#G72?)S&-nl1m)NmVK`gbuqfDV$<4P5`a>|TA;ZtGxt zwxYbSw4};_^rx#Kb1Ji$joS!fAn9L~mgZ*$8FmE%nHLzTLKRl*`|NoVJZEj1PVO%^ z1#2W#95*ppVvLToSoCg;DV16iJs)dL>s~ixynK8sO%0*R^qTVx9Z{_d*a|J0)_w$C-@`%&c^)AC{b>uuJX=S6_xt73A z&%ODY66~{QyPS{=(b@CX-lY39-t)@!ai4rCh#8jD&n^v6;;V9-NMW}3eRRqHm z$dB%nPf_9V&k2oJa^x%O-yi)Ts$wrrFyCnZ28`LshFc!^Pd->`^fQ{D=hTMY!wny5 zADA9SG(>~ep0MfhEDk|Fhdo$!voQ{Ey(du<0ru7cv~kLjsUGjBjti~HM_6)z49{0% z__NH_JB+A%e2Py&FJ=k?)+y|FG3f7|sgb}Xbu^&pny0!P3w@>sd2R1#5xfBJhvjL$ zYtO(pOn?)62Jq%55`)3RQy8ZaB(Od0?-12bf202^hd*$&BqqxGOeb;jHsOc;lKUW1 z!5%`TvLQ8Re;pWfUHqs*P#BLQTALgZa;5xmx@*zuw&Mt@RVgO;1xcwr2gBP%ilVT`~cOxS$MHv>Z+(6*}uPnxUGzcMU}3RAH1v*6st>hO9I5O+llutu7*U z&W|r}zm}k~=(`^8Sod#oC^nyqKxUA+kCS|~SZo(6qek6EvugsR~43L64U>LxGrDLWVCL%?B7CfSHsg59G|*R&w+ zhr80a3HFF7YNkQnD0Fe9kKcy8bNR0b{=Pq4a-g} z6K1mOXp-~3qgwh55y2$A-76(;YecI+IpH!PSh*?SuvJGxl}_y~Z3%@m&_*E4y_u!& zjZte{2UQ|$9#f*J&V-lB_aEaqJZ+%KnK)NREtP?F26VNpt5|Gtd>sD27JyeOo-b_I%-c%G4ASMs zdUxJo*GU&wM_zJ)sW>F@)5=;JzkSj}B^TbQjGv04d75})b5QuWGykn?k@b1BTCX3NU=M8*&T2dX|DaJbi+jv)D;yGY2H{5xk^_n%3$ zsw$sH`c^fi_ns2@IPL$=1$c-3qfs0m64R3ElTVD~y5lY{dfJns@wsj;3rgSo+{`i1 z_@8}2g&@i#R;%L9jo530w`o|(CxSo#(R+F<-5mIM+F$l`xI1*30@O7nYOIx7-O$BL zB%(A(c;c8W(livUjjIy4|KURa$+E=BYUnV24y=Aj>>a+_c-^&Zxt_c}zkQ&vNfkKzf8oAR07Z)^`A5-h~;5l7Z#VVcVfGvWBpI` zH5~Hpv8FPAtQ6N%J5c{?Hs-G#wQ%Z3g{=*9sekMmTpXx4W zl@a?)v-7AcC{C^T+b{)5$ndb2BcYj|Qx1zd%U}0vd@yynk7heIiec0rEVcNm%ofnh z2J+`!C_CviR@cv=Q|V`XQ?g1>DqVnRRDAffZGs2JCV&to3;*O}gJ>8X?Ut>Jj zaNm&XJO?SQ_MBM1XW&^(W=%>7IYZ?>pYZ|i!7nbP!uQ3_{nAp-2QZs*vbIDYEXA`W zL1B`rp$R&T0f~w{S+Ty?G8q{++^O+tjqMKFDRC5@n;uX9UguLcXR_K7Uoo^tt!L>V zqzBNNklnD*&-56o?57qmPJER`DvadWj+ezS2d;{I84+QZG~lRsrKU$o(ssZY zM0Gv=peLFichmRB>YibeyAEd$1y_8u*ILNrH())DiS>VG@|a1+o?lwM0MRufJG(Be zfz>usn{Z{|sk8WF{hv-oxGx5^Y0T$%V?p^eWPaW{^f*<*x=L85GG7fCG)@k%o+yJP zUTg#VVFqoI^9DSR8Prb+GI4cu@E#-Gv&Q(gKoC^84nnj-o`qjXOc zUW-DnxokLZ*5)mpzDf~u1BzAn@4X}Op7u(>nd8r%Zk5>@|fw%8}7GTZ_ zWQxj|T*74gDTEJWakE)X%wV2GcWVmE%(9#^@9hP00eqy%%HcMIpZEeD$N zU8)~1e7`kuqvGMI>gb%jwqf#70HVbIJw)-N6$r2nL&G$K#p_NR_WbuNXou68Q|XqB zw@)5w>;-Q#5LTsIY(Bj`W$f15tHhgQnmyOw4vF0{K3)&#EBd_tgGxh)YcRg<=896A zGkWd8GH}}?wQRnUJZ!viD}M7v%7h&<;qmaNci|z1;{lJRXWcv}rtvpLK8Iw?ihw&d z5-}>jg*y05*cy0K{I`l-CZ-bAeVrD3V5d?z zAxo`cuU?%Ul3#4LSOrGhw^*>nKlB-w`5N%iT&U)s`FYtkJLjeRMoD^7!|%8(< zf*Fa}1Y--hg-(n&P>Ad@JaDclSLnLOVB1@fYDQBtOKgtd!!A34Uj-o}#QLH~VMwcM zRoFxF!?>1&fHwt?3a`EkBOX)RLd?DHT7!Ex5?6kTXVYuQGt1?qj{kLA^>ydrq1J0r zC*qfAnb!SI>uOvPkBu!zE^}_Etdtng(h^A9>Y`hhi(U1uwIDpTd^oqepKY(-R2xmN zhrjNJ`fu;RXe!YmdF8M5jw)AmUc9OTM_WyPQx(LKjMdx@j!NI5B>A*4+Rnb}5sUAz z8j+V13)kDB8^E*>zP;gU{|$aPfph@z3<3JzbpO|#EU)LfMtAm4-T3^{K7NB?@!4`2 z{KJuNj1oVPv&m0=sd@0IDa8?Vx=4OWT8kT<+}8QLM`~W}5pRxWw+IYYXaDk0UW%v3 zk&L!Ec!kGyIpi6cThN=BlR8RwzwN3tT#F7fpIl)~LTf}a?ipuNl?H~hn3nE0J;_+2 zp&36f$kQded_An54K*3Y+&@bO1Gtts<3Ztto%TtPrq|q>CB;=KJwD4&Sw1JIuNPeI zpdhpJn3A?)76OU(49xt-0qscXpgB|Ce-}i1 zVwG29Ub3P9|=g|UEAEdzpZ_qPKo!X*N9C3t>eGbZ-DHzl|k!%dlVZ1F&YX; z4US-&<_-7@8cCe^*A)V5YY(h6mXLq|zZiZSPQ#Z&%eKQ(F6SBj$bYAVgVOO7!NBSR zlpn0v`YxR3*@!=j(MrxB3%h3CpRjXBTf@(NK021`OrCUPhVXzXWeEI?*y#V$b6s`~a+lhDQLQ?=~c1yj> z6R`GQF``IgUKps%-Wo06_?~XG&2lne7&THFbt}l1$Az&j zPX~^a6AZZ@f4n`;({Gf=Jw>L^QFGAXKLPv6Croi2och1gbK_4)X6yhg)!-`21rV)T znej{%>|9)cG>=+Z<=^04U?JAdB1#dYs&peoim3EnqI9GQSU}KF zq=|G8k&sA}-a$H%F493dB=k-Yk*@UKLQfzhdHdY|zWeSu?`LF;Fi2Q?ueH}&bFMkR z@0<0vHhqfOFpfJSe;p*v>YVMcWv?hGBUr7qMuWy{Z^&zYkIzeb@N52h%;7WX@E_`& z#M*D3x8x0*J#b_!AOSV_CDrA67LEve(R{E?MkuA$Si=`2RRKv~P{12F47 z*@@jR=BA=Ap%6-Y$ekOxZz|B)dK6Xx$;iW3$MN(tUhf(8FQ@Y|itwE2)X*inkYF#V z_;;uN3>QSr0FHm&lRF6mY-wp*8|!a#k;vLJc9Qx?+S^t{MDPb7eX(wbIPkS(R-0f>qc*XRFeslS&xfEYDO!yk?C@ z#zIGrj*cpQ4yDiVc%iGGwGV}^UiI?y{Ql#|6RLOjkXlP6EK!*r%EBL;>rS#cPeSNs zck(UTj8D(mk&c|^3>{bfl-L}{%W})>5Kv`JM>F2sMtRZh@@fmelyYWp8ySqPaan?g zujt(u;l3roY}L?mk59*2wN=)5XFwd{R7J(tmnJjQi8bNS_)7K?N8jnjg?vA|TERqd z+N0#D?`|}I6q+7NdU;6!2JGkb`0_CK<L-(Qptbf7)o(?V`-#mWi7XqgTpDyS@ z7ceM;$|rf^hT?8NwUC54M1FDc)wW8l|GcfId2`#lQqWGy6gviW;b#Bu?lFq(2|%f%PLTM-a?b-JUEBI1u^SG(49a8Z^m zVAP|@n&OZlj=GTRf~wJHt?t(g%s3a6o;RMBB4pXO>)!sZ z$ecy~p{2Vq@|Uitj+w8-J*OJh+>W3~Fy{QVE+5mWwYk>{OT&sx%pOuCt9yZ_+fvQi zjay6dFE{ls0~rFZnz(hN_!@OI1d4Zq5n42T=0ff-_R}{{fw4EM7~9wrfxG|$-gxF~ z4&V7>?zzu_YeL}_kG;IcsMnLNt?@=FavlYBAODo=kY$PJ0*~8qTz3}Nt#ewAfgwOJ zk_H_@Av5k})YzS#9~7ay3vs=|ARm9(Z;$WL*r6~KE^o^6iyGcx;M}3Quk5*)YOcRo z7taYueuqOANLvEw!q(81(q|0hAz}7D^3q+mqZoO%Dd~N?S ziDs+dLDC8CB`9mFWd#y><=MUaujv4aK#oz{iKfbP5-7WBCu!Q+%#ixZSI;xw?8fZM z2dYacE$6qJdTeHA7I4qgzz*g^aw^J!0L0hVSHfvWuLH_?$*{T6_tSRTr}2gZ--Wg5 zpOa6%R64j|{J*^ntMA{x7A~K1>qW@UP3URsKQ zzdvqP<%?fmXuW-1HNWC6voqB5sl_;Zcl6fl?RvB&@txc@a|jq!^=-_+MoC@#ic~ld zs1miDJXHM@uCidVzxL(Z4Su!wZ&WWC^MlT6~b%9BH3$FJBfAQ&N zocEN+jcr+9JNqv`je!v%;e*N4IX#Z@9+CPW>EgFF^R>9RbhV93>jY&-dIdnq&sQMC z%M!NwYi;TV2TP<=uEp~XTlEWj?W)lCk^eb4{m1vq4mJuOv;`v7s@EvFo}2GKTOCS& z?qw+ZgHy5+bPY(2EPX3he!xA~>NW9u(9atHEHcSvBrsfLQ2;Pk|8^k%^XC3_VJBve zls$m!pCJ0{i1_6qm{_JT<4PTFKRRKM$;TNVHZKBt$tv&O&JEQePs!iC#XKwy$9nx& zFaKX->)br{nLnnc(CRF&w2Y0bhd=yQT?faqW6AcmK{r9~fdDulG@6OAn5xRx1qeIw zPul6bD2YI<4rs&2CihduPb{uy6I;2>0T6Wjn3KLye0a|I4G0G9T;h%ERnCiVF+A09 zg>O&%yC<(M(<*rgP4Rjee8NYmlC`bl}K-h>jXF!&$ z^a5?pBgOLLM@6a+c%D%O7~RPG_*30QQ^e-LmNU$m<3m zus~>Jlt*`#5&s&DU|tG=07E4I{fpfnN&3MLIL^O6zlP_5?0+DMmQSp84V~qn4gk1T zrq)am1)no+hK+bVxkL>7^X>iPP8i7i3qs&1LiYQk-t_w!JG>rEd+Geq-+@eauW%BO zk9|#~4za9O0@FVb;-Xj%=y{2|&ot$YGpEXL4O^+0T9SKd5qm3wGs&b$9PU_BRjB>6}oLpV1|rT=#S?vG!AHR2^7Y-vab!5H^5 zwjTG5E*F83V_GS}Gz(q$9v>-idm$Lwb~pNFj*}|TTyy-0tbkzY zgYP2e>Ml```9+JF7>q* zkkN_+rC7Gl{(RZWLqDTym+07KwFa7qJILbp4 z@=#zro?oa6`GhIod4+lW5cl<5H2hYaUxdm+3F!)-BqpT12+9?q``7ImX>AGpavU%H zJ=Azz$$q6U^Zzc#vF-i!{A;1CZ{B$1InXf%kI$<;ru-^oF4XpdTU&CR`jOG26*43? zlLJR^!Mxs{+=m`4A@Y%B+($)Qn~k9D?qgNqod>6kly1~7WIQmL!+WU)eo=ix@@iPK(xo}0day>8tr7+|TI|Hb?G(Nc!Gqo0=N$A1x^ zn8G+;;3!%*Bzm%I)HCXS$UPp7<++kz|F+<9ceZC(I_&hq9AOv|ufuV=ECBA?o~mZZ zpueUZBpcKTyPU(2fwhZQ)Etyca$AD6FZO)iZ!myIz)z>@lGeG74v+V!nGk{s5 z<=@F`iVZ~&#&e>m-+5K`{);^Y0MdhSrjAbET1+T^o;>cv<~fp^Qo!psV8r8yIdUWA z^Mx4K)ztFa+LD}BDqv0{D?n2+m;FZRbs*)kuvrWq2q`<0jZr$FCE>j1RwbUJ($Q%C z*h%95cq)I*SYjjt!kE`tFy&_0jr@Oa^24eDrQZZgYWTw1v`;_Ud~+ym9xJ|6d0tcl zB|zY4^ez)%JoxW7ZCm~Poh@+iTsE&0R;u!>^1wgpg>ZC+H!Xtjy9X%X0v>RZ0c%(< z#hgwS&g!dLFIbd2|IaG5E(kjy|+*=!FdHmHs43 zA1}W5&*=VapJBKrUg156CoZIDB=P2bztJfu&Sh35dp!H;O*eMK74jQD8UE$5{p-qb z`Ge*`X}OONJ^nok@cUF>l1|2z?s$e&qr}ahGHeId~}o;;YDjScmUxEu+MZO>d(U=H!bnZp*Iy&{*oUisT>LiQHuM zA3x1bBLA)|Sqh~StAxwmeZ-ddsD7_K0uZ{jY)_O=OLH{5L-w>gj8}|;MZ)+0H{AzJ zqVgfJmYyoM_rm%XG7v~zJz<|eVe!zKT+-vU;RoB4j$AK<5=Sz;R!u`U?QYF{OyUyE zAGvc|82@YU3-ez(1hAl(xjVz_x@VL8B}1!f)!1zg!C)TtjR2&AM0`cu{RUnNhQGgmsuC32A;+zq0lF(nry1}JC;Z=63eQmlSA=z` ziABTSZ7cQ`y5Q-NM3*^k1VY?VnOOc)0eJ-2E z(fIx-4&ecWJq~}38XP8<9(vGI#HTC~~$&HEeQ`k*?x0I2Ya}}67 zEk}sEt8uu%@lxinQ^b!+lhzlc=>#bcs8N|6?;;}3TMjma8=Tj=E42V;X2`=j-diBrD%rQ>oq!J|c~M@wr`0reSd^^j9fZ|H90{6&qZ zw<|=--L<%oXVvaq8r@MCi|zV%kz%rUS6_3b{dfQV`aPP1QIm7U-kDw9W0Y$4xD4w) zZfeJ@$v8>H-7YUmpqG;?Vg6S15d9bGD^F>y2n%I|r!yd1uu`TnK|pq1#0A;^JF zdo_KQ<3i+iN}QG5@OX!tw&&AeDTBxF(2K4DQwzp_@2(G$m)KAimz|Lqn$x@Hn@KHa zL1X2HE)3??U>psrj*`5QW>A|!j2%pqqG6OXo!A~$(MmoJTT1DQ5V7h{blz<~grvf4 zh4nf($4!H%c^Q{d#$G3mx7`zX{YCw7a^MV=wd zRX@OS;hOeIVG^P6SHc_hyedTlPP{hFDU`h7J>O7+GmiopuO6#01yf1Qt=o~>qN|D1 z*Z)5I1q&s|13ZYR-eoz@ie3QP>oiM#;8n`HGj&+Hd z5JLC49+OP(ffqmy_Fqr8x9|0sYe~mNfFVI~0q{zRThX3EIOBUG^o1r>;8L{rf_4i} zKnG7szrRSQldOhC|Il0CHxd}1o}t7?)XAi-{N^JY9S5i3C3D*QF}bYcPT%71Gw1!| z+UF;Xj3s&zja*c+!mP{-<^iEspAw><3dBk?Fs`B+iwZrw8I5X5cDMx;Y4 z(xcY)X|l0M8)QHzY1^QvbekpY4U!I09|~1W%Y%z>aV`1a7BuVkts#pX5IlD|aVEKH zFTlssD~ey7!jY2yL~5k`@3(RAmRnYU)w*KbO7~jU@EbvakkA}O=`gwXUy^6Q``3{N z`Iw)+lRy6`g$)o_V;UBdo{K`?>)dV=v2rcrmw{dpI5+5fO&VbkGoktOXB6<#T-Fr4 z;UNa_GYLf^ZmAiYiLeCZ(axs^L~J)`(0L6F`wg?^f7^l#6W6XP!_6*nj;pgWFPR6# zbytMzsL086e(RBDO67k=JQ%273`f20j@(e==b^5?cy8g(R=>_m^29%_$f-rblsa-ayWK!F0?k`=2Yv?t0wgk{$QZls&yE(r>wg zeJ!5pUUja)OfKulHdEKcibS`R#{`!N=D%NDu1`B*D=1{+ zrqD(z5zS(4mVAqq4zvrT-{0*efWW=Oa2P$JnUE_f&B5cqV<#VK&mHbA%Y-^ZMra*2 zhpIAgj&YV2_jP1_Q!E$8w>?2VigDXvPL1jtos6ZtB|fV4oBPo_0UKY2t#H}ri&+R_ z8iKG4BjT!72D22BWY-M(1;gE>GcqW8WwSE_1^W%}CyP>z^Q(=F=)?Xo8RkH0e0S@X z7<=7;;)>;W>;5kmAm97lu57Cx%DfLwnom|d_;IK9 zt#W7>z5&Bh?6Z(R5XQD7OkjNQHLv#epU;~zMu!Zu#&Uh&lr@Jc(tFWP@o-u8;HdD# zKQ~JhI@gp5PB)w3N^`h6gc!_-29C?gA2bsU>@%KTXO)Oo$!1*3*+vO|$}{H=rwvf0 zH37;E!CL+?l`tIWsS35|hoP>rZ!hvNx^2T$F2!4lpV5 zD|S$fuXnZc5S{ZYf)sliPk~-~Z%IRf&x}-gfx{#NHFQ7sKT zccj5`((%dl1K1#M(w0p+}VswH*^gGMDw?(vGjN8&-zxM?hRBUV2x$ zEolIR!uGv5F)(hQOD&kZK99)fnaF6}nkHJ!mobn2)$;7`Hf#l(@CN-vt$oysYb6h% z)P${cafw6DDi>fqPOtHao-h(SvOJx{`m6jcKb|lUbh|ZQP7tjp&_k zJf6PopEZ}~c;Z+^vX_m3*x&JcQ;mRKyk%8!qt);}i_bydy%N*vaI4b`$>txFZG1m= z?iAw_il4n*;UEzqo>73f*kE7e#v7aVJh5dD`4N@B-C|+_xmYaU=Rkm<(r81ub#rcz z*+8+2nZtYUm+_3xo2^%AX~Fc+<*307DK^!t$;eyrmaGo#T6ElNlo$B?Qpzl7Ws~PY z%^cQm-sJg3Kf9pgRk3h7ba+nI(&PV2c~C}i{^2*BLmabS?;6MYZq_4j?61u)7wCRl zGEEo=O&KiGE#)Bq=3@tH78p@?HA6b)hnzILn$cFjadgDZeipZppQG)9&k0mxX=CY= zNI!aXn&`z<&AN=JkD*ypOZFJno5*tT)bq0U8Go9vOK+bvh<5VHrjrLX914v5oR-WZ z?Wq>aR-jlM^;j#bL!S^v(c8ATz4lmQAnL_K%t8*9OpK1NZA!75st_@yXY8RoY7ieZ zcYY>z_CZJ1v7P(dS%Z0Jz-Zx*A1TF(VNIU_6gq$fO#@K>IDFZnHO)14tJQlcYT4YN zbAL|d-#xi8CD~8DFA$t$)tOu`1JH=URB#+rIe7zna#Fon>BXu1q!fcE>=&1vZRW0B%#K!#>`oK{(m0V8uYB2~%mVgpop6zn?B0DM$9i8((t z_1W|Z_|dz^C}%sAs>Qj+z&xg8@nH^0Uh<;B-#zRhQr+HS`Rm2%RozxKIk+?Ji_|y6 zS$=2OW|GBYGvtz$lUVA9VW}tY>z>$g5ea=Je1Rnafw+IZ;AiJmK~KG z4O5_0B-dPjV$sWwLq{?$v+V%QWsBfyoGIIo2^`?hHLl9TxuW$rqz{*w@q`ZV^{YWv{<>BVnYNeL=&^y8*=x4|%}be_hi=2M~CB)^~PjU}P03^O|uBB_1Du z1+w+~7Yf4?V{|9UHIW-<$d{NP?)KW`eVcg@r|E!z{8~LWE5wbDc-Tn68HOFOxpGx( z?QRD7{gBt&c%!00z-Ex~5gYR_@PHYeF+u8G}YgeXV5J=c{U{==EfjYT?x_*|V zWQRBRMeUsFPoWtbAo*Xz{ns5gFv1kz=S7!Y%Lext^?<^DndbLr=1?TjVvw0896sez zw;YJEqltdQ);*Zz&{^5{8}9oKWHFR>6(DLvU*ZjRrQe6mtjFmhM)a=f*oHQF^eEqi zG{x~%nj~8Y&Q~NI*5&3V6^-&UU)^8-QizxyI`c}e9Jk8sip46^34AUqdspCT(3!Hm zLRIHH)dnCbUD0(-8V9$=@FtF1RJKRD+~MN2uQ;3DZQG3X-?OyMJD!Nyuf7}QKeCgX zBIe<~id5w^aGB{^a?ENsJm|UGcX_?C&c``P(E zvwW&-k)sxT>C6cz@5iA7jtkT3XEc1P%@iRf>eK(eJK7P{UZ;q(6*d6Z&^zKob3VYQ zBej8iD;=OvQknXvi7tNfRgR#hk@Qn=KvtIX3(c58Meh=w_iwwHw`V+3I**xBIkiop zzj*>evzvT*th;OD$DB>gYzd7!iY-no`ey_$0l8Z^eyg*izVF_VgGUK@oxt5&twp!A z$z-Pu;JeiZw^JWEnt61Ot2UTh9b21CHravo!?{nSa9fW)dI+!>ppM0 zZ0R^{a)b zfoB`039HT`T7l8m{boeU7S|3h1Ed@2hQW%yk%{MvGW5#&@rkZwROshFEV?a1k(`FLp)N~-pSojtC9^(fSFug?C1 z7=KJ$$|1`TP4E+P%uIAp9xbXFJL1~H-{##W5<7fd*4NS?bczCRbLPuM{~N^=R|Th^ zm|yAvFuGE1)2X8>2%XLIK+1l_qph)9w@DIat)X2%L*gz1rov)3Ks!|omD@S1r2b6# zKvqBe<9z%@{wkA+kT?pU#Nv9YgtUaMN8)5dOR`k4^n6~ZMTIsQb5dm)i1(^zG~3Yk zjZE4aam?<^5R;ZST;u%N1`JCXE}C7}S^p@9J4iH!=G=t<+&_@xgmdTBJ)KauP~jg_ zV;b0Bbdh~0bxwbVJ{=o88F%aMN_xkdY|L$G`XPBUz~ zUfp#NL!l@2t0~IW5ooc}h4WJEM9FL~n#;HHbA`scAT{;5Xr@sKUrwi;TyX-QTZw5+ z+ZwI;`@MoF2IEdS)z|JvgEtLywy3HW(MCd+L*K4$|M3;|Ec&_m2bK}h*CqF1HPUXm zm(lC~12{Z&ta#kRf@GPY1FCXpuZiVN9so*;UHU{1`V3gT8>TI9$N?ef0Nin#I<5X0 z)XG%BMNW3yJ$Y%AaHbi-DiCQ*k%=Y!YYeg?xIyZJje?(#RMc) zyQo9xj`!2&6vJzbmXiH`zp?BLwOzfp&ekroJ>&gR6ZA5wCLm7mEj)DL?)TcL*W=p` zQ_7!SDqt(#j5RWNs4Z~b;nr{+9~qhIk7P3zKl4?VsfCkZH+}5=LXCMdjwcdPFsm0c z8sc`&-rc^waO|#93DlEWxrcFq(_}3)hiQCuopZDufM$tfx#BDQ@b||{KKyh+L|DXv zottCKs-rWt+Q&<0OtCoWNLdo6p@2y;gSt)05FoF|%CFC!u#+yHj(8sqRKcX%(P(53 z!?^ITaQ+#cVU;Nxh0l8CGf~nFWRrj1D#uHb2n0&OWajuhgy0=ft4>jkx;in-^Goi! zRwht(jc?ZpHAC{~SIXEfdbi!v>IZKN zNZD9;97JhPw4we2RoFetd!4`+I?nMg>wqa&|3mhwXK8gaK5fRd$<}X=yVBhEXoTvUh&`{Jb;(LB&xsn~4(uAKhcf%-QB} zwY1HfuQsy!lVHCDY>`Ttluth@Rm-4EY8?l7@tNj??sS0FrQr62s?9OrDsgZs6S`SF zF*+MJaOC}VuICtYdKd85%6(+REci5wGDLF=GdWy*1pbWnJhP4cRdw9=vKh~XumH@D zvZZy7>)|kPeoXbAzU17z@}gUhHFLwo9F^%f`+<3;cKh4@<+v30hR!LPLO?fc;^%l) z2rYc)n^W`YRgleaSs?L~CC}SUf!jCkWer8unGaMjPW2rm#VGcH&k2;W(61Q_ET*u& zjo7`lMG2coX=5toZhoM3q-O5? zkzQ>4Iz><6^&CSqpQ16Mnz)jkq!iR$|8kfuv-Q^b0BG4F-xl;%-5VFr38D{^ss(GuWe5oq= zKACaZAs#;fl;4_L1e2BoSedOOd4+0yHwOE{;&uSCuA6VgW2n0MUy3(z{CA5CCX2Qdw{8j-7V)`&@ zZlL@*G*HD_NW#Ig)OF=Lrv3I%=mz=V1=NrEdW;ODtFud&H1Drm*1V`xpU2${Z-o0X z%#FXA*MYS7yD^90!($(APqif1p;jn>a08X)7vVp{8nn#(F^iC0oPd0fG|w*)RGrh- zX!8zGAqHRDVL}&DTfK=Lsv72i*jA)I>hbu%so1EeJDO&0o{8Zb5K?X4+zBT z0PVjnCbJXmcH02mTlNFhhkw!#r!<4ZhRM&Dyby)uGHvo08j3aAZWH3saI)KuZy6tY zN|&SwZcdJY?hPdBjN_L(l-6GtaWKh0jKsvV~O;O^*_NHb~-F2wr zh;R($APZ6R^)qzYl=)0R4iBEc zx>!q`zL(65#5K4a9G9Qdk2h4nif{3lI0{Odlr<4C@B0RB*qjjvx1C9y$)~$@7%b8) z2{-v7+lLjp#|tcg{6aiIEVLs8-*DP3vR4f%Z*A-Z|G0-kU*XkIhn}xG%DRjU>XKUh zUnw7C&-m;iqfDNk;4j?4%*o65I3bYHr-gchM}Tqb1!lNJ@pI+O1y#G}%!rmH&_>qy zD-6x{Y)y>g98nBl49657a#;&R&ZEm=L1HgEwr2GI#YO%s1O50%AwpLB{FaRJO&KQZ zKbE@<7~${H&R>YgjSA_-ZxhJm4$8|RTwFrgK>d? zM;iif`Hb=zYYNj(7y)b>@Wd!Jy0p9&b3l=l5Qm2=}#s z7!vKX*xr3CY0s{C_c(dtx{QB^cKZZr$5|O))Fc{DAGq{n2BKYm(g=ummY)ZHfSf-# z;X>dkAf)~nG5(NHl*F_g4Rsnx&e zm%x9Y&~k)u@#PqJ!?_{ta-m-Nq23eQwdg<1q(611wG$LzCa{GyFTa7)%BS>l+trc+UHI1L z9l)J{+b%WwnLO`qfa$)zLmZUL1on!VRK}n9cGsZtLzi^P;hL(vy@P#D zb#d4X7|sQVkM|yVW42eO>;81EM)^|Wh{U0`;&bKBl(Je{RBv=4{a!(_a{q27 zLD|-w=yCe6ngTdLv^_`pkn_49BS7JbHC`g+zC)DjTT;MjiN*DDV_}`^gtu~>;p=%< zzPHo$nG@$@_*QA!1HbL>^O5_1;o1d?|GYC=t-Nk<3H5ltD-l{5Jy7}HfgW)_=(`1l zgvRf+`W5>CyESWB(l3!uIElqBxVtpzsItzs86^_%k}zp(e%ik!#;<9mvtW}Q@EgFF zw`-pdaDh5mTE^mUb?5wUi#pFV4diNIn`5!ag!cj}&; zeMLs?S0cEFSKvN3Ct66~8h2Q<8T>JGeqa!>l?(Qz|LVc*o}}`oMELtdVTp6`ThOIB zSpQC)p9H4?Bx56kTN|4FImS$+_$-O6A+)<&G55tMF_@J=f`EQ*q1}xH0Rzi(oEv}^ zmT>+po0i6|s_>2a%#K;_1U#d)NFs|3)dDK2$tGN;LGx+f)sBzlyA2$YTN}MNroKCn z+aVM}EKl7`>?)5w(N)rrUf2#RX9nVVA=!5K44)WZzH__VQ@^|3Q2FaXugU!sxO63( zdOV-(mS|jgmA-K2%!?jI?FbO{;NGzOq2lz5?u0~UPUO$l=cafK=<=REkHgi6D-R~* zdfGiiUiatS?6*O=MDC9zNmoirUg=0vILF)Jf}zZ7_sj>s@4ie-n2)gFft)H-<;Sgl zddI_-+CUhJ5@X4Liz#^T@@uO+ZJ;u|w8CepJ0ZwUlN)C9o>d979>Z#D>eBZW9sEO`X<*v#?@06UDP~(IS>l9DfY6l9ZmzG|L~21z|IsR zCa@y?%)9Z+~Jzp8Fb~O(hKMPOIX}cUyxubunu+qP33Vl@5JJG;XOr z9_Rw>1Lcm8?$yxf6Y6DM#{xhx%j3-9uIV&G?G&ZtI6wD7s@-DH%}B>$xjILv@L;MR zfBr08#yx+nD3E0i=Tc(<*9h2&*dV#qL{JS=i;eX>gz4hfg;-_eN9&%+ZVeu8yaC59 z^rQ&pc>TJ>BcnKD5EM+qQtkaAtn-Fnd*0%jXq;%X&)v9)kRuU5hs6r6YqX2KZfkTz z&U@eBnyNLDocgJR7Xr0yQuSIcPSW@emig*IdfMUg(#e~y*;@y0{+A%TjNv0QGk&)=pNOgICar5z^8zMYfonjqs2{OgUl5?b!*(d2 zp~g70??@mrvoAQ}#^~HyC=VoS)tuUq@I`Mpax{_sy~0>KeLVA2*Lt0${@4j=WRSg z7~w=GfHAOInM~5==kNK#F=KLqsl;0KYi%Z`?XHSvMbsFGZTsZSNUru6T937?wrqkP zYuNd*OZ;OYR_mOgGW15M6Swp+byIhRcb^Nwt*L6QYv+rNg(<(WBA!>TD~aCy?eQq7GdMQa$0VzEJZw29 zx`h4m6*qFb3>aO!CqozG_zkiMFN&A~asZh^rd)uKPwOyPE=N^~3>!@`kmQ8c*lZ$gdyz%KZ~B@jM?R8gMx) zM_kg`@``O_8s`s`3SxlWBaz>q0v9dFQu%g@rcK(yX_3-%76&g;B7@4s!ftA$KZe20Ec5>shfbyxE2Eu)iCCG&vVoMrpgK~#>+w!^O;puYnj`rl_{osi13(Rrm+nSu+q zh5842P-wOfZXAZ@1qU0jLp=(Lg7FyKS)wLJ$9@5)6)+&>8HwR&W-wb$3E7|pZPqt6SfvAu@Fkp*8q zMCX%Y5&N6g8eoNvP=gb1FMYP3F^8vN0)6oALy#`0>*{MrHY_pzBnjx z|BILm?28EO1P^3Mcbu5R^tww#lYcz1U*4|1F(M9iTu(@@pk_^=w6k||vG5!S;wD%| zT}CU}iCIs3RB#phxpXgA;<#oUp=VP3n=3tXk#1quN6lKSFpkEEhAn zqHMR*hqQLFV0s!PS4CO-EO|8JO$zi<4FXfc=ZAITWNCxcw2TMwvwk$%i-(DB+je_+ ze@YhRT(AKJe76m3oW<5?ORCoE9{h5|SFW@$`nm~WyL`vEWAwG{aWl3puO|At`^)w~ zk&lms9ux3WERhC-c&s7}T-yH?+eLY1)bhC6kE8hrlj5&@L(HMdTM*S4G-NSn*>QE> z9%(TC>rA?tBymi*p!*q9QMS#YvM(VWM8y(a=M}`K%fyauLqY;9wdRbpRl>x6iLB2j zTePP7ubF?sC`houzP>2C31>bDe1fLL*j?V$rjn#Q<38gpJ(Bx|p=An2pSa=9uh_&9a-_*4>4bjrhoCIu=DDP z-_w!m6@|B7&m%&bPlS<=jj5N54P$z+gq&}PS}r=4T6iqx=fJOF`90%>2+KD)<=2?@ zuW#`Lr=c>D-nh6Ua*G5C-CrT4cSCOYABB7oaD3!6=1q0K&pL-VAL6KY#%Q$(l6~Tk zvtNA$`gCj`Pp1j4XGP6gj$z4_{iuAZ3P$m4>qUr;;okKQphRrIJWJIu*VZ{f1SgAl z{p}2GQ2P0z>F5Fhk4Lj>-(=8zaw)k(9+en{TID+=xIJOIiq0?BVHmtHN1t=E&3j%Y zQ>{S6bf*A(AzHGH4PR>pHQUT64`7!~lIln{vaimWFT^T^fcA9D)3@=`*TJ+0!M^4% zc6gJvR;gf%CDI*zYIBwiaH*6oIvmAy#Gx-GY�zx>Fui$7jjFv_E=6T%ky>6s`6uU8EFO zzqd5?KrJIv3q^V!j4hCD+CX?w?GCjlFY;$eW3l;dYLgh6z&G>7PgQNa@)_in-rb+^ zj_xeL4%#g$K-2;tDplhK5du}p@LG{1=^fnp(byPn4%3t!gTexSHa7DY--P)} z9D4rq!-lxl7~MOKcCqvOFDVM-g_k;^%w@k{2F9etYdg&k`*pAlb`f~=k-*G?(ly3WYtsLFIA2-Abz zI;P%v@EK!=IO9==FeWW5;kgVos-}itxwRSCWf%HIdv*nWN6CH1;5!Uc`WDYiJ}lHj znQi^;&Sb&XB1O-yeMMk{}F2{bS{lPTNh4O*u{UOg>ihb%Gxa%>{TFRLV#=;I&F zjZhi~yUqw>1eZ!bL}1gosZE!EXZo;APj6+iCnX;d*B)7F%_Yin6&LIW)ad zL^bSmG2EqfMZ8I27DMCqNV&7#0gu@WmcPn9}t|R9%|aa-HM;*S?Vun$Eaq;m=(xj#(nFRtA*w zzmv+0X5MpJ-+m^KuYtvAur@lJ#C@kbZgK zqxfSJKWeyin94iT+pQg%w2MUMV+bgE|aB>$882Rfw8s4(cdtICiE*ISZ~-H znepQL7+WI$SZQ3pQ zhjRtji5uTveWE=NInd)?6 zb0E|;l}iS`?HDfnvvxFp?R6-1^eEOWzDR2kMH^IFr{u- zBzwRfHM^+3TNDMoC5 zf};#8JV7)(Kic9Za8F0S07oU9OL2}rpx5cA9eXGH2Ku$r0Yw8^tKc4qpB2eW=$D#@ zFnvOZ_k^iLio|wnCbfO501;|hd)RvUlSNf-zuhTDzw}z_4ZU7P zN+c-uWbOCxUTV zXF|Wl`%;W`+@{ibFO2<0$fr?``0kHwpd3`n%JcHBH2A2_wjgru#QK;(y`{Aj@x4Cy zF&pHHU-$H|F@BZ1n|(fn`woY{5Vz$Q@g@{+UY8@%fItgnIbFf;Rb~y-C$4Bg^vQB#=6m^L1+5om=d>y(l*ZANdMBjW zMGC)6u9oNWV-Jo4zB&z75nml2tKtKT&8i6gD20Y||EomItbxmYB8Vg4m3WM%bP?j& z2{;6)L+M*JT*yt>!*3GVn?(@!;PV)R&T_O>Y@_e;{DaLpOySIqOVDt*0lVV)2|@C) zu0r}T*P-=(5ntq{wf}VViUpVeb9JAjJCl1t-qwcvb-t?wyRlJgb6Nw(;?Bv)X=y{z zl#CQ76qlQjSLL69zfIMl^uXVctFnY6XbG3(aQB=+ae2|yrv!BQ_uoXB;Z}o$cRkAr zs<->j%=W0^E9=L|WDnrqf`lc8l$BEnT&)e2acN`su)sMIS9C-_D z`cCv@EqHCX>s;J;F*saiFhs~6H^6fX?1Biti)XRlI0)uv$2+Y*lxY=r$%pg5gWX>1 z+khWdiMODn;1x7AJM$ywM?@1PqQmbyQdo5M((Kx_0k%zIUszaLi+z9W%ysz?q7vzI z4m++!q(GXkjx9krP}=VktoI%9VKo@JU&jdIu08Rw6EHKUHSA7JXI|l(UVx|q18;&A ztZr=}sY&&ou78Gqu$sJ1s@c(;LG)MV^!)=+drkc>@Gn7=gYN0yF~Nq{RBQb%wbo==~nn+CeUt5Ug$6x Date: Wed, 27 Mar 2024 12:09:12 +0100 Subject: [PATCH 13/27] Java-Like python classes, unit testing --- .github/workflows/python.yml | 31 +++ .gitignore | 6 +- scripts/anonymization/anonymizer.py | 220 +++++------------- .../configuration/config_parser.py | 94 ++++++++ .../configuration/configurations.py | 34 +++ scripts/anonymization/modules/jdbc_handler.py | 87 +++++++ scripts/anonymization/requirements.txt | 10 + scripts/anonymization/test.py | 69 ++++++ 8 files changed, 389 insertions(+), 162 deletions(-) create mode 100644 .github/workflows/python.yml create mode 100644 scripts/anonymization/configuration/config_parser.py create mode 100644 scripts/anonymization/configuration/configurations.py create mode 100644 scripts/anonymization/modules/jdbc_handler.py create mode 100644 scripts/anonymization/requirements.txt create mode 100644 scripts/anonymization/test.py diff --git a/.github/workflows/python.yml b/.github/workflows/python.yml new file mode 100644 index 000000000..9c92a83c9 --- /dev/null +++ b/.github/workflows/python.yml @@ -0,0 +1,31 @@ +name: Test Anonymization (Python) + +on: + push: + branches: [ main ] + tags: + - 'v*' + pull_request: + branches: [ main ] + +jobs: + build: + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ["3.10"] + + steps: + - uses: actions/checkout@v3 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + - name: Install dependencies + working-directory: ./scripts/anonymization + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + - name: Test with pytest + working-directory: ./scripts/anonymization + run: pytest test.py diff --git a/.gitignore b/.gitignore index da45607e2..5725b3dcc 100644 --- a/.gitignore +++ b/.gitignore @@ -55,4 +55,8 @@ build/ # vim swap files .*.swp -.env \ No newline at end of file +.env + +# Python +__pycache__/ +*.py[cod] diff --git a/scripts/anonymization/anonymizer.py b/scripts/anonymization/anonymizer.py index 560bce974..270d960cd 100644 --- a/scripts/anonymization/anonymizer.py +++ b/scripts/anonymization/anonymizer.py @@ -4,174 +4,69 @@ import sys import xml.etree.ElementTree as ET +from configuration.configurations import DPConfig, SensitiveConfig, ContinuousConfig +from modules.jdbc_handler import JDBCHandler +from scripts.anonymization.configuration.config_parser import XML_parser +#from modules.dp_anonymizer import DifferentialPrivacyAnonymizer +#from modules.sensitive_anonymizer import SensitiveAnonymizer -def rewriteFakeQueries(fakeValues, path): - """Method that rewrites existing query templates based on sensitive value replacements - """ - # TODO +"""Module that handles the full Anonymization pipeline +""" -def fakeColumn(dataset, col, locales, method, seed=0): - """Method that generates fake values for columns that are considered sensitive - """ - # TODO - - -def getTimestampColumns(dbTypeList): - """A helper function that returns a list of indexes of timestamp-type columns - """ - # TODO - - -def dfFromTable(curs, table): - """Helper function that creates a pandas DataFrame from a jaydebe connection - """ - # TODO - - -def populateAnonFromDF(curs, df, table, timestampIndexes): - """Helper function to fill a DB table from a DataFrame - """ - # TODO - - -def getDroppableInfo(dropCols, dataset): - """Helper function that saves droppable columns from anonymization - """ - # TODO - +import sys +import pandas as pd -def getTransformer( - dataset, algorithm, categorical, continuous, ordinal, continuousConfig +""" +def anonymize( + dataset: pd.DataFrame, + anon_config: DPConfig, + cont_config: ContinuousConfig, + sens_config: SensitiveConfig, + templates_path: str, ): - """Function that creates a custom transformer for the dp-mechanism - """ - - # TODO + dp_data = dataset + if anon_config: + dp_anonymizer = DifferentialPrivacyAnonymizer(dataset, anon_config, cont_config) + dp_data = dp_anonymizer.run_anonymization() + if sens_config: + sens_anonymizer = SensitiveAnonymizer(dp_data,sens_config,templates_path) + dp_data = sens_anonymizer.run_anonymization() -def getConstraints(objects): - """A helper method that builds constraints that are used by a TableTransformer - """ - # TODO - - -def anonymize( - dataset: str, - anon_config: dict, - sens_config: list, - cont_config: list, - templatesPath: str, -): - """Function that handles the data anonymization step - """ - # TODO + return dp_data def anonymizeDB( - jdbcConfig: dict, - anon_config: dict, - sens_config: list, - cont_config: list, - templatesPath: str, + jdbc_handler: JDBCHandler, + anon_config: DPConfig, + sensConfig: SensitiveConfig, + contConfig: ContinuousConfig, + templates_path: str, ): - """Function that handles the necessary steps for anonymization. - Includes starting the JVM, Anonymizing and pushing data to the DB - """ - # TODO + jdbc_handler.start_JVM() + conn = jdbc_handler.get_connection() -def listFromElement(element): - """Helper function creating an array of values from a XML Element - """ - if element and element.text: - return list(element.text.split(",")) - else: - return [] - - -def configFromXML(table): - """Method that constructs a configuration dictionary from XML for a specified table - - Args: - table (Element): The XML element that describes the table - - Returns: - (dict,dict,dict): The configurations for the anonymization, sensitive and continuous value handling - """ - - anon_config = {} - sens_config = [] - cont_config = [] - - tableName = table.get("name") - - #Exit the program if not enough basic information (name of a table) is available - if tableName == None: - sys.exit( - "There was no name provided for the table that should be anonymized. Program is exiting now!" - ) - - anon_config["table"] = tableName - print(f"Parsing config for table: {tableName}") + table = anon_config.table_name + dataset, timestamps = jdbc_handler.data_from_table(conn, table) - dp_info = table.find("differential_privacy") + datasetAnon = anonymize( + dataset, anon_config, contConfig, sensConfig, templates_path + ) - if(dp_info): + ## TODO: Throw in Sensitive Anonmization - cat = [] - cont = [] - ord = [] - ignore = [] - - anon_config["eps"] = dp_info.get("epsilon", 1.0) - anon_config["preEps"] = dp_info.get("pre_epsilon", 0.5) - anon_config["alg"] = dp_info.get("algorithm", "mst") + # Create empty table + anon_table_name = jdbc_handler.create_anonymized_table(conn, table) - if(dp_info.find("ignore")): - for column in dp_info.find("ignore").findall("column"): - ignore.append(column.get("name")) + # Populate new table + jdbc_handler.populate_anonymized_table( + conn, datasetAnon, anon_table_name, timestamps + ) - if(dp_info.find("categorical")): - for column in dp_info.find("categorical").findall("column"): - cat.append(column.get("name")) - - if(dp_info.find("ordinal")): - for column in dp_info.find("ordinal").findall("column"): - ord.append(column.get("name")) - - if(dp_info.find("continuous")): - for column in dp_info.find("continuous").findall("column"): - cont.append(column.get("name")) - - if(column.get("bins") or column.get("lower") or column.get("upper")): - cont_config.append( - { - "name": column.get("name"), - "bins": column.get("bins",10), - "lower": column.get("lower"), - "upper": column.get("upper"), - } - ) - - anon_config["hide"] = ignore - anon_config["cat"] = cat - anon_config["cont"] = cont - anon_config["ord"] = ord - - sens = table.find("value_faking") - if sens: - for column in sens.findall("column"): - sens_config.append( - { - "name": column.get("name"), - "method": column.get("method"), - "locales": column.get("locales"), - "seed": column.get("seed", 0), - } - ) - - return anon_config, sens_config, cont_config + conn.close() +""" def main(): @@ -180,30 +75,33 @@ def main(): # No templates provided if len(sys.argv) == 2: confPath = sys.argv[1] - templatesPath = "" + templates_path = "" elif len(sys.argv) == 3: confPath = sys.argv[1] - templatesPath = sys.argv[2] + templates_path = sys.argv[2] else: - print("Not enough arguments provided: ") + print("Not enough arguments provided: ") return tree = ET.parse(confPath) parameters = tree.getroot() - jdbcConfig = { - "driver": parameters.find("driver").text, - "url": parameters.find("url").text, - "username": parameters.find("username").text, - "password": parameters.find("password").text, - } + + jdbc_handler = JDBCHandler( + parameters.find("driver").text, + parameters.find("url").text, + parameters.find("username").text, + parameters.find("password").text, + ) # Loop over all specified tables and anonymize them one-by-one for table in parameters.find("anonymization").findall("table"): - anon_config, sens_config, cont_config = configFromXML(table) - anonymizeDB(jdbcConfig, anon_config, sens_config, cont_config, templatesPath) + config_parser = XML_parser(table) + anon_config, sens_config, cont_config = config_parser.get_config() + + #anonymizeDB(jdbc_handler, anon_config, sens_config, cont_config, templates_path) if __name__ == "__main__": diff --git a/scripts/anonymization/configuration/config_parser.py b/scripts/anonymization/configuration/config_parser.py new file mode 100644 index 000000000..dc57dea57 --- /dev/null +++ b/scripts/anonymization/configuration/config_parser.py @@ -0,0 +1,94 @@ +import sys +import xml.etree.ElementTree as ET + +from .configurations import ( + DPConfig, + SensitiveConfig, + SensitiveEntry, + ContinuousConfig, + ContinuousEntry, +) + + +class XML_parser: + + def __init__(self, table: ET.Element): + self.table = table + + def get_config(self): + + anon_config = None + cont_config = None + sens_config = None + continuous_entries = [] + sensitive_entries = [] + + table_name = self.table.get("name") + + # Exit the program if not enough basic information (name of a table) is available + if table_name is None: + sys.exit( + "There was no name provided for the table that should be anonymized. Program is exiting now!" + ) + + print(f"Parsing config for table: {table_name}") + + dp_info = self.table.find("differential_privacy") + + if dp_info is not None: + cat = [] + cont = [] + ord = [] + ignore = [] + + eps = dp_info.get("epsilon", "1.0") + pre_eps = dp_info.get("pre_epsilon", "0.5") + alg = dp_info.get("algorithm", "mst") + + if dp_info.find("ignore"): + for column in dp_info.find("ignore").findall("column"): + ignore.append(column.get("name")) + + if dp_info.find("categorical"): + for column in dp_info.find("categorical").findall("column"): + cat.append(column.get("name")) + + if dp_info.find("ordinal"): + for column in dp_info.find("ordinal").findall("column"): + ord.append(column.get("name")) + + if dp_info.find("continuous"): + for column in dp_info.find("continuous").findall("column"): + cont.append(column.get("name")) + + if column.get("bins") or column.get("lower") or column.get("upper"): + continuous_entries.append( + ContinuousEntry( + column.get("name"), + column.get("bins", "10"), + column.get("lower"), + column.get("upper"), + ) + ) + + anon_config = DPConfig( + table_name, eps, pre_eps, alg, ignore, cat, cont, ord + ) + + if len(cont) > 0: + cont_config = ContinuousConfig(continuous_entries) + + sens = self.table.find("value_faking") + if sens is not None: + for column in sens.findall("column"): + sensitive_entries.append( + SensitiveEntry( + column.get("name"), + column.get("method"), + column.get("locales"), + column.get("seed", "0"), + ) + ) + sens_config = SensitiveConfig(sensitive_entries) + + return anon_config, sens_config, cont_config diff --git a/scripts/anonymization/configuration/configurations.py b/scripts/anonymization/configuration/configurations.py new file mode 100644 index 000000000..7838f28f9 --- /dev/null +++ b/scripts/anonymization/configuration/configurations.py @@ -0,0 +1,34 @@ +class DPConfig: + def __init__(self,table_name:str,epsilon:str,preproc_eps:str,algorithm:str,hidden:list[str],categorical:list[str],continuous:list[str],ordinal:list[str]): + self.epsilon = epsilon + self.table_name = table_name + self.preproc_eps = preproc_eps + self.algorithm = algorithm + self.hidden = hidden + self.categorical = categorical + self.continuous = continuous + self.ordinal = ordinal + +class ContinuousEntry: + def __init__(self,name:str,bins:str,lower:str,upper:str): + self.name=name + self.bins=bins + self.lower=lower + self.upper=upper + +class ContinuousConfig: + def __init__(self,columns:list[ContinuousEntry]): + self.columns=columns + +class SensitiveEntry: + def __init__(self,name:str,method:str,locales:list[str],seed:str): + self.name=name + self.method=method + self.locales=locales + self.seed=seed + +class SensitiveConfig: + def __init__(self,columns:list[SensitiveEntry]): + self.columns=columns + + diff --git a/scripts/anonymization/modules/jdbc_handler.py b/scripts/anonymization/modules/jdbc_handler.py new file mode 100644 index 000000000..600c6b769 --- /dev/null +++ b/scripts/anonymization/modules/jdbc_handler.py @@ -0,0 +1,87 @@ +import jpype +import jpype.imports +import jaydebeapi +import pandas as pd +import numpy as np + + +class JDBCHandler: + JAR_PATH = "benchbase.jar" + + def __init__(self, driver: str, url: str, username: str, password: str): + self.driver = driver + self.url = url + self.username = username + self.password = password + + def start_JVM(self): + jpype.startJVM(classpath=[self.JAR_PATH]) + + def get_connection(self): + return jaydebeapi.connect(self.driver, self.url, [self.username, self.password]) + + def data_from_table(self, conn:jaydebeapi.Connection, table: str): + curs = conn.cursor() + curs.execute(f"SELECT * FROM {table}") + + res = curs.fetchall() + meta = curs.description + curs.close() + + cols = [] + col_types = [] + for entry in meta: + cols.append(str(entry[0])) + col_types.append(entry[1]) + timestamp_indexes = self.get_timestamp_indexes(col_types) + + frame = pd.DataFrame(res, columns=cols) + + return frame, timestamp_indexes + + + def get_timestamp_indexes(self, col_types: list): + indexes = [] + for i, entry in enumerate(col_types): + for d_type in entry.values: + if d_type == "TIMESTAMP" or d_type == "DATE" or d_type == "TIME": + indexes.append(i) + return indexes + + def create_anonymized_table(self,conn:jaydebeapi.Connection,table:str): + curs = conn.cursor() + anon_table_name = table + "_anonymized" + curs.execute(f"DROP TABLE IF EXISTS {anon_table_name}") + curs.execute(f"CREATE TABLE {anon_table_name} AS TABLE {table} WITH NO DATA") + curs.close() + return anon_table_name + + def populate_anonymized_table(self, conn:jaydebeapi.Connection, df:pd.DataFrame, table: str, timestamp_indexes): + # NaN replacement with NONE + df = df.replace(np.nan, None) + + # Parsing timestamps to datetime format + for ind in timestamp_indexes: + name = df.columns[ind] + df[name] = pd.to_datetime(df[name], format="mixed") + + tuples = [tuple(x) for x in df.values] + + if len(timestamp_indexes): + import java + + for i, tup in enumerate(tuples): + li = list(tup) + for j in timestamp_indexes: + if pd.isnull(li[j]): + li[j] = None + else: + li[j] = java.sql.Timestamp @ li[j] + tuples[i] = tuple(li) + + column_slots = f"({','.join('?' for _ in df.columns)})" + insert_query = f"insert into {table} values {column_slots}" + + curs = conn.cursor() + curs.executemany(insert_query, tuples) + curs.close() diff --git a/scripts/anonymization/requirements.txt b/scripts/anonymization/requirements.txt new file mode 100644 index 000000000..7be96e4e9 --- /dev/null +++ b/scripts/anonymization/requirements.txt @@ -0,0 +1,10 @@ +Faker~=15.3.4 +JayDeBeApi~=1.2.3 +JPype1~=1.5.0 +lxml~=4.9.3 +numpy~=1.26.4 +pandas~=2.2.1 +pytest~=8.1.1 +smartnoise-sql~=1.0.3 +smartnoise-synth~=1.0.3 +private-pgm @ git+https://github.com/ryan112358/private-pgm.git@5b9126295c110b741e5426ddbff419ea1e60e788 diff --git a/scripts/anonymization/test.py b/scripts/anonymization/test.py new file mode 100644 index 000000000..5b24d098d --- /dev/null +++ b/scripts/anonymization/test.py @@ -0,0 +1,69 @@ +import pytest +import xml.etree.ElementTree as ET +from configuration.config_parser import XML_parser + + +MINIMAL_CONFIG = """ + + + +
+
+""" + +FULL_CONFIG = """ + + + + + + + + + + + + + + + + + + + + + +
+
+""" + + +def test_full_config(): + + parameters = ET.fromstring(FULL_CONFIG) + + full_anon = parameters.find("table") + config_parser = XML_parser(full_anon) + anon_config, sens_config, cont_config = config_parser.get_config() + + assert anon_config is not None + assert sens_config is not None + assert cont_config is not None + + assert anon_config.table_name == "item" + assert anon_config.epsilon == "1.0" + assert anon_config.preproc_eps == "0.0" + assert anon_config.algorithm == "aim" + + +def test_minimal_config(): + + parameters = ET.fromstring(MINIMAL_CONFIG) + + only_dp_auto = parameters.find("table") + config_parser = XML_parser(only_dp_auto) + anon_config, sens_config, cont_config = config_parser.get_config() + + assert anon_config is not None + assert sens_config is None + assert cont_config is None From 9138eab83255669bcaf5bf117f9d609c022be273 Mon Sep 17 00:00:00 2001 From: Eric Enzler Date: Thu, 28 Mar 2024 10:19:51 +0100 Subject: [PATCH 14/27] Python linting + pipeline integration --- .github/workflows/python.yml | 10 +- scripts/anonymization/.pylintrc | 628 ++++++++++++++++++ scripts/anonymization/README.md | 62 +- .../configuration/configurations.py | 34 - scripts/anonymization/modules/jdbc_handler.py | 87 --- scripts/anonymization/requirements.txt | 1 + scripts/anonymization/{ => src}/anonymizer.py | 37 +- .../{ => src}/configuration/config_parser.py | 77 ++- .../src/configuration/configurations.py | 119 ++++ .../anonymization/src/modules/jdbc_handler.py | 152 +++++ scripts/anonymization/{ => src}/test.py | 13 +- .../java/com/oltpbenchmark/DBWorkload.java | 3 +- 12 files changed, 1031 insertions(+), 192 deletions(-) create mode 100644 scripts/anonymization/.pylintrc delete mode 100644 scripts/anonymization/configuration/configurations.py delete mode 100644 scripts/anonymization/modules/jdbc_handler.py rename scripts/anonymization/{ => src}/anonymizer.py (84%) rename scripts/anonymization/{ => src}/configuration/config_parser.py (51%) create mode 100644 scripts/anonymization/src/configuration/configurations.py create mode 100644 scripts/anonymization/src/modules/jdbc_handler.py rename scripts/anonymization/{ => src}/test.py (84%) diff --git a/.github/workflows/python.yml b/.github/workflows/python.yml index 9c92a83c9..0068ec0f5 100644 --- a/.github/workflows/python.yml +++ b/.github/workflows/python.yml @@ -1,4 +1,4 @@ -name: Test Anonymization (Python) +name: BenchBase (Python) on: push: @@ -26,6 +26,10 @@ jobs: run: | python -m pip install --upgrade pip pip install -r requirements.txt - - name: Test with pytest - working-directory: ./scripts/anonymization + - name: Check anonymization files with pylint + working-directory: ./scripts/anonymization + run: | + pylint --rcfile=.pylintrc src/ + - name: Test anonymization with pytest + working-directory: ./scripts/anonymization/src run: pytest test.py diff --git a/scripts/anonymization/.pylintrc b/scripts/anonymization/.pylintrc new file mode 100644 index 000000000..5bec6b23a --- /dev/null +++ b/scripts/anonymization/.pylintrc @@ -0,0 +1,628 @@ +[MAIN] + +# Analyse import fallback blocks. This can be used to support both Python 2 and +# 3 compatible code, which means that the block might have code that exists +# only in one or another interpreter, leading to false positives when analysed. +analyse-fallback-blocks=no + +# Clear in-memory caches upon conclusion of linting. Useful if running pylint +# in a server-like mode. +clear-cache-post-run=no + +# Load and enable all available extensions. Use --list-extensions to see a list +# all available extensions. +#enable-all-extensions= + +# In error mode, messages with a category besides ERROR or FATAL are +# suppressed, and no reports are done by default. Error mode is compatible with +# disabling specific errors. +#errors-only= + +# Always return a 0 (non-error) status code, even if lint errors are found. +# This is primarily useful in continuous integration scripts. +#exit-zero= + +# A comma-separated list of package or module names from where C extensions may +# be loaded. Extensions are loading into the active Python interpreter and may +# run arbitrary code. +extension-pkg-allow-list= + +# A comma-separated list of package or module names from where C extensions may +# be loaded. Extensions are loading into the active Python interpreter and may +# run arbitrary code. (This is an alternative name to extension-pkg-allow-list +# for backward compatibility.) +extension-pkg-whitelist= + +# Return non-zero exit code if any of these messages/categories are detected, +# even if score is above --fail-under value. Syntax same as enable. Messages +# specified are enabled, while categories only check already-enabled messages. +fail-on= + +# Specify a score threshold under which the program will exit with error. +fail-under=10 + +# Interpret the stdin as a python script, whose filename needs to be passed as +# the module_or_package argument. +#from-stdin= + +# Files or directories to be skipped. They should be base names, not paths. +ignore=CVS + +# Add files or directories matching the regular expressions patterns to the +# ignore-list. The regex matches against paths and can be in Posix or Windows +# format. Because '\\' represents the directory delimiter on Windows systems, +# it can't be used as an escape character. +ignore-paths= + +# Files or directories matching the regular expression patterns are skipped. +# The regex matches against base names, not paths. The default value ignores +# Emacs file locks +ignore-patterns=^\.# + +# List of module names for which member attributes should not be checked +# (useful for modules/projects where namespaces are manipulated during runtime +# and thus existing member attributes cannot be deduced by static analysis). It +# supports qualified module names, as well as Unix pattern matching. +ignored-modules= + +# Python code to execute, usually for sys.path manipulation such as +# pygtk.require(). +#init-hook= + +# Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the +# number of processors available to use, and will cap the count on Windows to +# avoid hangs. +jobs=1 + +# Control the amount of potential inferred values when inferring a single +# object. This can help the performance when dealing with large functions or +# complex, nested conditions. +limit-inference-results=100 + +# List of plugins (as comma separated values of python module names) to load, +# usually to register additional checkers. +load-plugins= + +# Pickle collected data for later comparisons. +persistent=yes + +# Minimum Python version to use for version dependent checks. Will default to +# the version used to run pylint. +py-version=3.10 + +# Discover python modules and packages in the file system subtree. +recursive=no + +# Add paths to the list of the source roots. Supports globbing patterns. The +# source root is an absolute path or a path relative to the current working +# directory used to determine a package namespace for modules located under the +# source root. +source-roots= + +# When enabled, pylint would attempt to guess common misconfiguration and emit +# user-friendly hints instead of false-positive error messages. +suggestion-mode=yes + +# Allow loading of arbitrary C extensions. Extensions are imported into the +# active Python interpreter and may run arbitrary code. +unsafe-load-any-extension=no + +# In verbose mode, extra non-checker-related info will be displayed. +#verbose= + + +[BASIC] + +# Naming style matching correct argument names. +argument-naming-style=snake_case + +# Regular expression matching correct argument names. Overrides argument- +# naming-style. If left empty, argument names will be checked with the set +# naming style. +#argument-rgx= + +# Naming style matching correct attribute names. +attr-naming-style=snake_case + +# Regular expression matching correct attribute names. Overrides attr-naming- +# style. If left empty, attribute names will be checked with the set naming +# style. +#attr-rgx= + +# Bad variable names which should always be refused, separated by a comma. +bad-names=foo, + bar, + baz, + toto, + tutu, + tata + +# Bad variable names regexes, separated by a comma. If names match any regex, +# they will always be refused +bad-names-rgxs= + +# Naming style matching correct class attribute names. +class-attribute-naming-style=any + +# Regular expression matching correct class attribute names. Overrides class- +# attribute-naming-style. If left empty, class attribute names will be checked +# with the set naming style. +#class-attribute-rgx= + +# Naming style matching correct class constant names. +class-const-naming-style=UPPER_CASE + +# Regular expression matching correct class constant names. Overrides class- +# const-naming-style. If left empty, class constant names will be checked with +# the set naming style. +#class-const-rgx= + +# Naming style matching correct class names. +class-naming-style=PascalCase + +# Regular expression matching correct class names. Overrides class-naming- +# style. If left empty, class names will be checked with the set naming style. +#class-rgx= + +# Naming style matching correct constant names. +const-naming-style=UPPER_CASE + +# Regular expression matching correct constant names. Overrides const-naming- +# style. If left empty, constant names will be checked with the set naming +# style. +#const-rgx= + +# Minimum line length for functions/classes that require docstrings, shorter +# ones are exempt. +docstring-min-length=-1 + +# Naming style matching correct function names. +function-naming-style=snake_case + +# Regular expression matching correct function names. Overrides function- +# naming-style. If left empty, function names will be checked with the set +# naming style. +#function-rgx= + +# Good variable names which should always be accepted, separated by a comma. +good-names=i, + j, + k, + ex, + Run, + _ + +# Good variable names regexes, separated by a comma. If names match any regex, +# they will always be accepted +good-names-rgxs= + +# Include a hint for the correct naming format with invalid-name. +include-naming-hint=no + +# Naming style matching correct inline iteration names. +inlinevar-naming-style=any + +# Regular expression matching correct inline iteration names. Overrides +# inlinevar-naming-style. If left empty, inline iteration names will be checked +# with the set naming style. +#inlinevar-rgx= + +# Naming style matching correct method names. +method-naming-style=snake_case + +# Regular expression matching correct method names. Overrides method-naming- +# style. If left empty, method names will be checked with the set naming style. +#method-rgx= + +# Naming style matching correct module names. +module-naming-style=snake_case + +# Regular expression matching correct module names. Overrides module-naming- +# style. If left empty, module names will be checked with the set naming style. +#module-rgx= + +# Colon-delimited sets of names that determine each other's naming style when +# the name regexes allow several styles. +name-group= + +# Regular expression which should only match function or class names that do +# not require a docstring. +no-docstring-rgx=^_ + +# List of decorators that produce properties, such as abc.abstractproperty. Add +# to this list to register other decorators that produce valid properties. +# These decorators are taken in consideration only for invalid-name. +property-classes=abc.abstractproperty + +# Regular expression matching correct type alias names. If left empty, type +# alias names will be checked with the set naming style. +#typealias-rgx= + +# Regular expression matching correct type variable names. If left empty, type +# variable names will be checked with the set naming style. +#typevar-rgx= + +# Naming style matching correct variable names. +variable-naming-style=snake_case + +# Regular expression matching correct variable names. Overrides variable- +# naming-style. If left empty, variable names will be checked with the set +# naming style. +#variable-rgx= + + +[CLASSES] + +# Warn about protected attribute access inside special methods +check-protected-access-in-special-methods=no + +# List of method names used to declare (i.e. assign) instance attributes. +defining-attr-methods=__init__, + __new__, + setUp, + asyncSetUp, + __post_init__ + +# List of member names, which should be excluded from the protected access +# warning. +exclude-protected=_asdict,_fields,_replace,_source,_make,os._exit + +# List of valid names for the first argument in a class method. +valid-classmethod-first-arg=cls + +# List of valid names for the first argument in a metaclass class method. +valid-metaclass-classmethod-first-arg=mcs + + +[DESIGN] + +# List of regular expressions of class ancestor names to ignore when counting +# public methods (see R0903) +exclude-too-few-public-methods= + +# List of qualified class names to ignore when counting class parents (see +# R0901) +ignored-parents= + +# Maximum number of arguments for function / method. +max-args=9 + +# Maximum number of attributes for a class (see R0902). +max-attributes=10 + +# Maximum number of boolean expressions in an if statement (see R0916). +max-bool-expr=5 + +# Maximum number of branch for function / method body. +max-branches=12 + +# Maximum number of locals for function / method body. +max-locals=20 + +# Maximum number of parents for a class (see R0901). +max-parents=7 + +# Maximum number of public methods for a class (see R0904). +max-public-methods=20 + +# Maximum number of return / yield for function / method body. +max-returns=6 + +# Maximum number of statements in function / method body. +max-statements=50 + +# Minimum number of public methods for a class (see R0903). +min-public-methods=0 + + +[EXCEPTIONS] + +# Exceptions that will emit a warning when caught. +overgeneral-exceptions=builtins.BaseException,builtins.Exception + + +[FORMAT] + +# Expected format of line ending, e.g. empty (any line ending), LF or CRLF. +expected-line-ending-format= + +# Regexp for a line that is allowed to be longer than the limit. +ignore-long-lines=^\s*(# )??$ + +# Number of spaces of indent required inside a hanging or continued line. +indent-after-paren=4 + +# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 +# tab). +indent-string=' ' + +# Maximum number of characters on a single line. +max-line-length=120 + +# Maximum number of lines in a module. +max-module-lines=1000 + +# Allow the body of a class to be on the same line as the declaration if body +# contains single statement. +single-line-class-stmt=no + +# Allow the body of an if to be on the same line as the test if there is no +# else. +single-line-if-stmt=no + + +[IMPORTS] + +# List of modules that can be imported at any level, not just the top level +# one. +allow-any-import-level= + +# Allow explicit reexports by alias from a package __init__. +allow-reexport-from-package=no + +# Allow wildcard imports from modules that define __all__. +allow-wildcard-with-all=no + +# Deprecated modules which should not be used, separated by a comma. +deprecated-modules= + +# Output a graph (.gv or any supported image format) of external dependencies +# to the given file (report RP0402 must not be disabled). +ext-import-graph= + +# Output a graph (.gv or any supported image format) of all (i.e. internal and +# external) dependencies to the given file (report RP0402 must not be +# disabled). +import-graph= + +# Output a graph (.gv or any supported image format) of internal dependencies +# to the given file (report RP0402 must not be disabled). +int-import-graph= + +# Force import order to recognize a module as part of the standard +# compatibility libraries. +known-standard-library= + +# Force import order to recognize a module as part of a third party library. +known-third-party=enchant + +# Couples of modules and preferred modules, separated by a comma. +preferred-modules= + + +[LOGGING] + +# The type of string formatting that logging methods do. `old` means using % +# formatting, `new` is for `{}` formatting. +logging-format-style=old + +# Logging modules to check that the string format arguments are in logging +# function parameter format. +logging-modules=logging + + +[MESSAGES CONTROL] + +# Only show warnings with the listed confidence levels. Leave empty to show +# all. Valid levels: HIGH, CONTROL_FLOW, INFERENCE, INFERENCE_FAILURE, +# UNDEFINED. +confidence=HIGH, + CONTROL_FLOW, + INFERENCE, + INFERENCE_FAILURE, + UNDEFINED + +# Disable the message, report, category or checker with the given id(s). You +# can either give multiple identifiers separated by comma (,) or put this +# option multiple times (only on the command line, not in the configuration +# file where it should appear only once). You can also use "--disable=all" to +# disable everything first and then re-enable specific checks. For example, if +# you want to run only the similarities checker, you can use "--disable=all +# --enable=similarities". If you want to run only the classes checker, but have +# no Warning level messages displayed, use "--disable=all --enable=classes +# --disable=W". +disable=raw-checker-failed, + bad-inline-option, + locally-disabled, + file-ignored, + suppressed-message, + useless-suppression, + deprecated-pragma, + use-symbolic-message-instead, + use-implicit-booleaness-not-comparison-to-string, + use-implicit-booleaness-not-comparison-to-zero + +# Enable the message, report, category or checker with the given id(s). You can +# either give multiple identifier separated by comma (,) or put this option +# multiple time (only on the command line, not in the configuration file where +# it should appear only once). See also the "--disable" option for examples. +enable= + + +[METHOD_ARGS] + +# List of qualified names (i.e., library.method) which require a timeout +# parameter e.g. 'requests.api.get,requests.api.post' +timeout-methods=requests.api.delete,requests.api.get,requests.api.head,requests.api.options,requests.api.patch,requests.api.post,requests.api.put,requests.api.request + + +[MISCELLANEOUS] + +# List of note tags to take in consideration, separated by a comma. +notes=FIXME, + XXX, + TODO + +# Regular expression of note tags to take in consideration. +notes-rgx= + + +[REFACTORING] + +# Maximum number of nested blocks for function / method body +max-nested-blocks=5 + +# Complete name of functions that never returns. When checking for +# inconsistent-return-statements if a never returning function is called then +# it will be considered as an explicit return statement and no message will be +# printed. +never-returning-functions=sys.exit,argparse.parse_error + + +[REPORTS] + +# Python expression which should return a score less than or equal to 10. You +# have access to the variables 'fatal', 'error', 'warning', 'refactor', +# 'convention', and 'info' which contain the number of messages in each +# category, as well as 'statement' which is the total number of statements +# analyzed. This score is used by the global evaluation report (RP0004). +evaluation=max(0, 0 if fatal else 10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)) + +# Template used to display messages. This is a python new-style format string +# used to format the message information. See doc for all details. +msg-template= + +# Set the output format. Available formats are: text, parseable, colorized, +# json2 (improved json format), json (old json format) and msvs (visual +# studio). You can also give a reporter class, e.g. +# mypackage.mymodule.MyReporterClass. +#output-format= + +# Tells whether to display a full report or only the messages. +reports=no + +# Activate the evaluation score. +score=yes + + +[SIMILARITIES] + +# Comments are removed from the similarity computation +ignore-comments=yes + +# Docstrings are removed from the similarity computation +ignore-docstrings=yes + +# Imports are removed from the similarity computation +ignore-imports=yes + +# Signatures are removed from the similarity computation +ignore-signatures=yes + +# Minimum lines number of a similarity. +min-similarity-lines=4 + + +[SPELLING] + +# Limits count of emitted suggestions for spelling mistakes. +max-spelling-suggestions=4 + +# List of comma separated words that should be considered directives if they +# appear at the beginning of a comment and should not be checked. +spelling-ignore-comment-directives=fmt: on,fmt: off,noqa:,noqa,nosec,isort:skip,mypy: + +# List of comma separated words that should not be checked. +spelling-ignore-words= + + +# Tells whether to store unknown words to the private dictionary (see the +# --spelling-private-dict-file option) instead of raising a message. +spelling-store-unknown-words=no + + +[STRING] + +# This flag controls whether inconsistent-quotes generates a warning when the +# character used as a quote delimiter is used inconsistently within a module. +check-quote-consistency=no + +# This flag controls whether the implicit-str-concat should generate a warning +# on implicit string concatenation in sequences defined over several lines. +check-str-concat-over-line-jumps=no + + +[TYPECHECK] + +# List of decorators that produce context managers, such as +# contextlib.contextmanager. Add to this list to register other decorators that +# produce valid context managers. +contextmanager-decorators=contextlib.contextmanager + +# List of members which are set dynamically and missed by pylint inference +# system, and so shouldn't trigger E1101 when accessed. Python regular +# expressions are accepted. +generated-members= + +# Tells whether to warn about missing members when the owner of the attribute +# is inferred to be None. +ignore-none=yes + +# This flag controls whether pylint should warn about no-member and similar +# checks whenever an opaque object is returned when inferring. The inference +# can return multiple potential results while evaluating a Python object, but +# some branches might not be evaluated, which results in partial inference. In +# that case, it might be useful to still emit no-member and other checks for +# the rest of the inferred objects. +ignore-on-opaque-inference=yes + +# List of symbolic message names to ignore for Mixin members. +ignored-checks-for-mixins=no-member, + not-async-context-manager, + not-context-manager, + attribute-defined-outside-init + +# List of class names for which member attributes should not be checked (useful +# for classes with dynamically set attributes). This supports the use of +# qualified names. +ignored-classes=optparse.Values,thread._local,_thread._local,argparse.Namespace + +# Show a hint with possible names when a member name was not found. The aspect +# of finding the hint is based on edit distance. +missing-member-hint=yes + +# The minimum edit distance a name should have in order to be considered a +# similar match for a missing member name. +missing-member-hint-distance=1 + +# The total number of similar names that should be taken in consideration when +# showing a hint for a missing member. +missing-member-max-choices=1 + +# Regex pattern to define which classes are considered mixins. +mixin-class-rgx=.*[Mm]ixin + +# List of decorators that change the signature of a decorated function. +signature-mutators= + + +[VARIABLES] + +# List of additional names supposed to be defined in builtins. Remember that +# you should avoid defining new builtins when possible. +additional-builtins= + +# Tells whether unused global variables should be treated as a violation. +allow-global-unused-variables=yes + +# List of names allowed to shadow builtins +allowed-redefined-builtins= + +# List of strings which can identify a callback function by name. A callback +# name must start or end with one of those strings. +callbacks=cb_, + _cb + +# A regular expression matching the name of dummy variables (i.e. expected to +# not be used). +dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_ + +# Argument names that match this expression will be ignored. +ignored-argument-names=_.*|^ignored_|^unused_ + +# Tells whether we should check for unused import in __init__ files. +init-import=no + +# List of qualified module names which can have objects that can redefine +# builtins. +redefining-builtins-modules=six.moves,past.builtins,future.builtins,builtins,io diff --git a/scripts/anonymization/README.md b/scripts/anonymization/README.md index 5d9c39a88..57f478889 100644 --- a/scripts/anonymization/README.md +++ b/scripts/anonymization/README.md @@ -5,7 +5,37 @@ The anonymization module allows applying privacy mechanisms such as differential privacy or column faking to the data. The system will pull data from the JDBC connection, anonymize the data and push it back to the DBMS by creating a new table. -## Config +## Setup + +### Requirements + +**Python**: Python 3.10 + +Requirements can be found inside of the `requirements.txt` file. + +Install with pip: + +```bash +pip install -r requirements.txt +``` + +### Pylint - Linting + +Pylint is automatically added by the requirements and can be run as follows: +```bash +pylint --rcfile=.pylintrc src/ +``` + +### Pytest - Testing +Pytest is automatically added by the requirements and can be run as follows: + +```bash +pytest ./src/test.py +``` + + + +## Configuration files (XML) ### Table selection @@ -30,9 +60,9 @@ Differential privacy can be configured with the following parameters: | Name | Default | Possible Value | Description | | ----------- | ------- | -------------------------------------------------- | -------------------------------------------------------------------------------------------- | -| epsilon | 1.0 | Any value > 0 | The privacy budget. Higher values will decrease the privacy guarantee | -| pre_epsilon | 0.5 | Any value between 0 and epsilon (epsilon excluded) | The privacy budget spent on preprocessing of the data. Only necessary for continuous columns | -| algorithm | mst | One of: `mst,aim,dpctgan,patectgan` | The differential privacy mechanism applied to the data | +| epsilon | 1.0 | Any value > 0 | The privacy budget. Higher values will decrease the privacy guarantee. | +| pre_epsilon | 0.5 | Any value between 0 and epsilon (epsilon excluded) | The privacy budget spent on preprocessing of the data. Only necessary for continuous columns. | +| algorithm | mst | One of: `mst,aim,dpctgan,patectgan` | The differential privacy mechanism applied to the data. | ```xml @@ -50,10 +80,10 @@ Differential privacy can be configured with the following parameters: The columns of a table can be split into four categories: -1. `ignore` - Columns that are ignored by the DP-mechanism. Left untouched -2. `categorical` - Columns that contain categorical data -3. `continuous` - Columns of data on a continuous domain. Only numerical columns -4. `ordinal` - Columns of ordinal meaning. Typically numerical columns with low numers of distinct values +1. `ignore` - Columns that are ignored by the DP-mechanism. Left untouched. +2. `categorical` - Columns that contain categorical data. +3. `continuous` - Columns of data on a continuous domain. Only numerical columns. +4. `ordinal` - Columns of ordinal meaning. Typically numerical columns with low numers of distinct values. Each type of column requires its own XML-tag with each member of a type given as a separate tag. (See exampels below for clarification) @@ -129,10 +159,10 @@ The parameters must be added inside of the ``-tag. (See below) | Name | Default | Possible Value | Description | | ----- | ------- | ----------------- | ------------------------------------------- | -| name | - | Any string | The name of the column | -| bins | 10 | Any value | The amount of distinct values in the output | -| lower | - | Any value | Lower bound of the values | -| upper | - | Any value > lower | Upper bound of the values | +| name | - | Any string | The name of the column. | +| bins | 10 | Any value | The amount of distinct values in the output.| +| lower | - | Any value | Lower bound of the values. | +| upper | - | Any value > lower | Upper bound of the values. | --- @@ -176,10 +206,10 @@ The following parameters are available for sensitive values: | Name | Default | Possible Value | Description | | ------- | ------- | ------------------------------------------------ | ---------------------------------------------------------------------------------------------- | -| name | - | Any string | The name of the column | -| method | pystr | Any method provided by the python faker library | The faking method of the library. If the method is not found, a random string will be inserted | -| locales | - | A string of supported locales separated by comma | The locale to produce localized values like chinese street names or english first names | -| seed | 0 | Any integer value | The privacy budget spent on preprocessing of the data. Only necessary for continuous columns | +| name | - | Any string | The name of the column. | +| method | pystr | Any method provided by the python faker library | The faking method of the library. If the method is not found, a random string will be inserted. | +| locales | - | A string of supported locales, separated by comma | The locale to produce localized values like chinese street names or english first names. | +| seed | 0 | Any integer value | The privacy budget spent on preprocessing of the data. Only necessary for continuous columns. | ### Faker categories diff --git a/scripts/anonymization/configuration/configurations.py b/scripts/anonymization/configuration/configurations.py deleted file mode 100644 index 7838f28f9..000000000 --- a/scripts/anonymization/configuration/configurations.py +++ /dev/null @@ -1,34 +0,0 @@ -class DPConfig: - def __init__(self,table_name:str,epsilon:str,preproc_eps:str,algorithm:str,hidden:list[str],categorical:list[str],continuous:list[str],ordinal:list[str]): - self.epsilon = epsilon - self.table_name = table_name - self.preproc_eps = preproc_eps - self.algorithm = algorithm - self.hidden = hidden - self.categorical = categorical - self.continuous = continuous - self.ordinal = ordinal - -class ContinuousEntry: - def __init__(self,name:str,bins:str,lower:str,upper:str): - self.name=name - self.bins=bins - self.lower=lower - self.upper=upper - -class ContinuousConfig: - def __init__(self,columns:list[ContinuousEntry]): - self.columns=columns - -class SensitiveEntry: - def __init__(self,name:str,method:str,locales:list[str],seed:str): - self.name=name - self.method=method - self.locales=locales - self.seed=seed - -class SensitiveConfig: - def __init__(self,columns:list[SensitiveEntry]): - self.columns=columns - - diff --git a/scripts/anonymization/modules/jdbc_handler.py b/scripts/anonymization/modules/jdbc_handler.py deleted file mode 100644 index 600c6b769..000000000 --- a/scripts/anonymization/modules/jdbc_handler.py +++ /dev/null @@ -1,87 +0,0 @@ -import jpype -import jpype.imports -import jaydebeapi -import pandas as pd -import numpy as np - - -class JDBCHandler: - JAR_PATH = "benchbase.jar" - - def __init__(self, driver: str, url: str, username: str, password: str): - self.driver = driver - self.url = url - self.username = username - self.password = password - - def start_JVM(self): - jpype.startJVM(classpath=[self.JAR_PATH]) - - def get_connection(self): - return jaydebeapi.connect(self.driver, self.url, [self.username, self.password]) - - def data_from_table(self, conn:jaydebeapi.Connection, table: str): - curs = conn.cursor() - curs.execute(f"SELECT * FROM {table}") - - res = curs.fetchall() - meta = curs.description - curs.close() - - cols = [] - col_types = [] - for entry in meta: - cols.append(str(entry[0])) - col_types.append(entry[1]) - timestamp_indexes = self.get_timestamp_indexes(col_types) - - frame = pd.DataFrame(res, columns=cols) - - return frame, timestamp_indexes - - - def get_timestamp_indexes(self, col_types: list): - indexes = [] - for i, entry in enumerate(col_types): - for d_type in entry.values: - if d_type == "TIMESTAMP" or d_type == "DATE" or d_type == "TIME": - indexes.append(i) - return indexes - - def create_anonymized_table(self,conn:jaydebeapi.Connection,table:str): - curs = conn.cursor() - anon_table_name = table + "_anonymized" - curs.execute(f"DROP TABLE IF EXISTS {anon_table_name}") - curs.execute(f"CREATE TABLE {anon_table_name} AS TABLE {table} WITH NO DATA") - curs.close() - return anon_table_name - - def populate_anonymized_table(self, conn:jaydebeapi.Connection, df:pd.DataFrame, table: str, timestamp_indexes): - # NaN replacement with NONE - df = df.replace(np.nan, None) - - # Parsing timestamps to datetime format - for ind in timestamp_indexes: - name = df.columns[ind] - df[name] = pd.to_datetime(df[name], format="mixed") - - tuples = [tuple(x) for x in df.values] - - if len(timestamp_indexes): - import java - - for i, tup in enumerate(tuples): - li = list(tup) - for j in timestamp_indexes: - if pd.isnull(li[j]): - li[j] = None - else: - li[j] = java.sql.Timestamp @ li[j] - tuples[i] = tuple(li) - - column_slots = f"({','.join('?' for _ in df.columns)})" - insert_query = f"insert into {table} values {column_slots}" - - curs = conn.cursor() - curs.executemany(insert_query, tuples) - curs.close() diff --git a/scripts/anonymization/requirements.txt b/scripts/anonymization/requirements.txt index 7be96e4e9..1702d2858 100644 --- a/scripts/anonymization/requirements.txt +++ b/scripts/anonymization/requirements.txt @@ -5,6 +5,7 @@ lxml~=4.9.3 numpy~=1.26.4 pandas~=2.2.1 pytest~=8.1.1 +pylint~=3.0.2 smartnoise-sql~=1.0.3 smartnoise-synth~=1.0.3 private-pgm @ git+https://github.com/ryan112358/private-pgm.git@5b9126295c110b741e5426ddbff419ea1e60e788 diff --git a/scripts/anonymization/anonymizer.py b/scripts/anonymization/src/anonymizer.py similarity index 84% rename from scripts/anonymization/anonymizer.py rename to scripts/anonymization/src/anonymizer.py index 270d960cd..924d61a32 100644 --- a/scripts/anonymization/anonymizer.py +++ b/scripts/anonymization/src/anonymizer.py @@ -3,21 +3,14 @@ import sys import xml.etree.ElementTree as ET - -from configuration.configurations import DPConfig, SensitiveConfig, ContinuousConfig +import pandas as pd from modules.jdbc_handler import JDBCHandler -from scripts.anonymization.configuration.config_parser import XML_parser +from configuration.config_parser import XMLParser +from configuration.configurations import DPConfig, SensitiveConfig, ContinuousConfig #from modules.dp_anonymizer import DifferentialPrivacyAnonymizer #from modules.sensitive_anonymizer import SensitiveAnonymizer -"""Module that handles the full Anonymization pipeline -""" - -import sys -import pandas as pd - -""" def anonymize( dataset: pd.DataFrame, anon_config: DPConfig, @@ -25,6 +18,7 @@ def anonymize( sens_config: SensitiveConfig, templates_path: str, ): + ''' dp_data = dataset if anon_config: dp_anonymizer = DifferentialPrivacyAnonymizer(dataset, anon_config, cont_config) @@ -35,15 +29,18 @@ def anonymize( dp_data = sens_anonymizer.run_anonymization() return dp_data + ''' + return -def anonymizeDB( +def anonymize_db( jdbc_handler: JDBCHandler, anon_config: DPConfig, - sensConfig: SensitiveConfig, - contConfig: ContinuousConfig, + sens_config: SensitiveConfig, + cont_config: ContinuousConfig, templates_path: str, ): + ''' jdbc_handler.start_JVM() conn = jdbc_handler.get_connection() @@ -66,7 +63,9 @@ def anonymizeDB( ) conn.close() -""" + ''' + return + def main(): @@ -74,18 +73,18 @@ def main(): # No templates provided if len(sys.argv) == 2: - confPath = sys.argv[1] + xml_config_path = sys.argv[1] templates_path = "" elif len(sys.argv) == 3: - confPath = sys.argv[1] + xml_config_path = sys.argv[1] templates_path = sys.argv[2] else: print("Not enough arguments provided: ") return - tree = ET.parse(confPath) + tree = ET.parse(xml_config_path) parameters = tree.getroot() @@ -98,10 +97,10 @@ def main(): # Loop over all specified tables and anonymize them one-by-one for table in parameters.find("anonymization").findall("table"): - config_parser = XML_parser(table) + config_parser = XMLParser(table) anon_config, sens_config, cont_config = config_parser.get_config() - #anonymizeDB(jdbc_handler, anon_config, sens_config, cont_config, templates_path) + anonymize_db(jdbc_handler, anon_config, sens_config, cont_config, templates_path) if __name__ == "__main__": diff --git a/scripts/anonymization/configuration/config_parser.py b/scripts/anonymization/src/configuration/config_parser.py similarity index 51% rename from scripts/anonymization/configuration/config_parser.py rename to scripts/anonymization/src/configuration/config_parser.py index dc57dea57..315e7831e 100644 --- a/scripts/anonymization/configuration/config_parser.py +++ b/scripts/anonymization/src/configuration/config_parser.py @@ -1,7 +1,10 @@ +"""Module that handles all things related to configuration parsing +""" + import sys import xml.etree.ElementTree as ET -from .configurations import ( +from configuration.configurations import ( DPConfig, SensitiveConfig, SensitiveEntry, @@ -10,12 +13,24 @@ ) -class XML_parser: +class XMLParser: + """A class to represent a specific XML parser for BenchBase configuration files + + Attributes + ---------- + table : ET.Element + XML element with the - tag + """ def __init__(self, table: ET.Element): self.table = table def get_config(self): + """Function that extracts the different types of configuration classes from the XML tree + + Returns: + (DPConfig,ContinuousConfig,SensitiveConfig): The three configuration classes + """ anon_config = None cont_config = None @@ -36,43 +51,33 @@ def get_config(self): dp_info = self.table.find("differential_privacy") if dp_info is not None: - cat = [] - cont = [] - ord = [] - ignore = [] + + cat = self.__get_column_type("ignore", dp_info) + ordi = self.__get_column_type("ordinal", dp_info) + ignore = self.__get_column_type("continuous", dp_info) eps = dp_info.get("epsilon", "1.0") pre_eps = dp_info.get("pre_epsilon", "0.5") alg = dp_info.get("algorithm", "mst") - if dp_info.find("ignore"): - for column in dp_info.find("ignore").findall("column"): - ignore.append(column.get("name")) - - if dp_info.find("categorical"): - for column in dp_info.find("categorical").findall("column"): - cat.append(column.get("name")) - - if dp_info.find("ordinal"): - for column in dp_info.find("ordinal").findall("column"): - ord.append(column.get("name")) - - if dp_info.find("continuous"): + # Specific handling for continuous columns to incorporate a separate config + cont = [] + if dp_info.find("continuous") is not None: for column in dp_info.find("continuous").findall("column"): cont.append(column.get("name")) - if column.get("bins") or column.get("lower") or column.get("upper"): - continuous_entries.append( - ContinuousEntry( - column.get("name"), - column.get("bins", "10"), - column.get("lower"), - column.get("upper"), + if column.get("bins") or column.get("lower") or column.get("upper"): + continuous_entries.append( + ContinuousEntry( + column.get("name"), + column.get("bins", "10"), + column.get("lower"), + column.get("upper"), + ) ) - ) anon_config = DPConfig( - table_name, eps, pre_eps, alg, ignore, cat, cont, ord + table_name, eps, pre_eps, alg, ignore, cat, cont, ordi ) if len(cont) > 0: @@ -92,3 +97,19 @@ def get_config(self): sens_config = SensitiveConfig(sensitive_entries) return anon_config, sens_config, cont_config + + def __get_column_type(self, keyword: str, subtree: ET.Element): + """Helper method to extract column types + + Args: + keyword (str): Column type keyword + subtree (ET.Element): The subtree in which to search + + Returns: + list[str]: A list of column names with the specific type + """ + tmp = [] + if subtree.find(keyword) is not None: + for column in subtree.find(keyword).findall("column"): + tmp.append(column.get("name")) + return tmp diff --git a/scripts/anonymization/src/configuration/configurations.py b/scripts/anonymization/src/configuration/configurations.py new file mode 100644 index 000000000..07b0a2052 --- /dev/null +++ b/scripts/anonymization/src/configuration/configurations.py @@ -0,0 +1,119 @@ +"""Module that contains all configuration classes +""" + + +class DPConfig: + """A class to represent a config that handles DP-Anonymization + + Attributes + ---------- + table_name : str + Table name + epsilon : str + Privacy budget + preproc_eps : str + Privacy budget for preprocessing + algorithm : str + Name of the DP-algorithm + hidden : list[str] + List of column names that will not be anonymized + categorical : list[str] + List of categorical column names + continuous : list[str] + List of continuous column names + ordinal : list[str] + List of ordinal column names + + """ + + def __init__( + self, + table_name: str, + epsilon: str, + preproc_eps: str, + algorithm: str, + hidden: list[str], + categorical: list[str], + continuous: list[str], + ordinal: list[str], + ): + self.epsilon = epsilon + self.table_name = table_name + self.preproc_eps = preproc_eps + self.algorithm = algorithm + self.hidden = hidden + self.categorical = categorical + self.continuous = continuous + self.ordinal = ordinal + + +class ContinuousEntry: + """A class to represent a continuous column entry + + Attributes + ---------- + name : str + Name of the column + bins : str + Number of bins + lower : str + Lower bound of values + upper : str + Upper bound of values + + """ + + def __init__(self, name: str, bins: str, lower: str, upper: str): + self.name = name + self.bins = bins + self.lower = lower + self.upper = upper + + +class ContinuousConfig: + """A class to represent a continuous column config + + Attributes + ---------- + columns : list[ContinuousEntry] + A list of continuous entries + """ + + def __init__(self, columns: list[ContinuousEntry]): + self.columns = columns + + +class SensitiveEntry: + """A class to represent a sensitive column entry + + Attributes + ---------- + name : str + Name of the column + method : str + Faking method + locales : list[str] + List of locales + seed : str + Randomization seed + + """ + + def __init__(self, name: str, method: str, locales: list[str], seed: str): + self.name = name + self.method = method + self.locales = locales + self.seed = seed + + +class SensitiveConfig: + """A class to represent a continuous column config + + Attributes + ---------- + columns : list[SensitiveEntry] + Name of the column + """ + + def __init__(self, columns: list[SensitiveEntry]): + self.columns = columns diff --git a/scripts/anonymization/src/modules/jdbc_handler.py b/scripts/anonymization/src/modules/jdbc_handler.py new file mode 100644 index 000000000..79132aa91 --- /dev/null +++ b/scripts/anonymization/src/modules/jdbc_handler.py @@ -0,0 +1,152 @@ +"""JDBCHandler. A class that handles all things related to database connections +""" + +import jpype +import jpype.imports +import jaydebeapi +import pandas as pd +import numpy as np + + +class JDBCHandler: + """ + A class to represent a JDBC connection handler + + Attributes + ---------- + driver : str + jdbc driver + url : str + database url + username : str + database username + password : str + database password + """ + + JAR_PATH = "benchbase.jar" + + def __init__(self, driver: str, url: str, username: str, password: str): + self.driver = driver + self.url = url + self.username = username + self.password = password + + def start_jvm(self): + """Function that starts the Java Virtual Machine based on the JAR file created by BenchBase""" + jpype.startJVM(classpath=[self.JAR_PATH]) + + def get_connection(self): + """Function that returns a database connection based on the class attributes + + Returns: + jaydebeapi.Connection: A connection to the database service + """ + return jaydebeapi.connect(self.driver, self.url, [self.username, self.password]) + + def data_from_table(self, conn: jaydebeapi.Connection, table: str): + """Function that pulls data from a specific table of the database + + Args: + conn (jaydebeapi.Connection): Connection to the database + table (str): Name of the table + + Returns: + (pd.DataFrame,list[int]): The table as a DataFrame and a list of indexes for all time-related columns + """ + curs = conn.cursor() + curs.execute(f"SELECT * FROM {table}") + + res = curs.fetchall() + meta = curs.description + curs.close() + + cols = [] + col_types = [] + for entry in meta: + cols.append(str(entry[0])) + col_types.append(entry[1]) + timestamp_indexes = self.__get_timestamp_indexes(col_types) + + frame = pd.DataFrame(res, columns=cols) + + return frame, timestamp_indexes + + def __get_timestamp_indexes(self, col_types: list): + """Function that analyzes table metadata and returns a list of indexes of time-related columns + + Args: + col_types (list): A list of column types + + Returns: + list[int]: A list of indexes + """ + indexes = [] + for i, entry in enumerate(col_types): + for d_type in entry.values: + if d_type in ("TIMESTAMP", "DATE", "TIME"): + indexes.append(i) + return indexes + + def create_anonymized_table(self, conn: jaydebeapi.Connection, table: str): + """Function that creates an empty copy of an existing table on the database + + Args: + conn (jaydebeapi.Connection): Connection to the database + table (str): Name of the original table + + Returns: + str: The name of the copied version + """ + curs = conn.cursor() + anon_table_name = table + "_anonymized" + curs.execute(f"DROP TABLE IF EXISTS {anon_table_name}") + curs.execute(f"CREATE TABLE {anon_table_name} AS TABLE {table} WITH NO DATA") + curs.close() + return anon_table_name + + def populate_anonymized_table( + self, + conn: jaydebeapi.Connection, + df: pd.DataFrame, + table: str, + timestamp_indexes, + ): + """Function that pushed data to a table on the database + + Args: + conn (jaydebeapi.Connection): Connection to the database + df (pd.DataFrame): Data to push + table (str): Name of the table that receives the data + timestamp_indexes (list[int]): A list of indexes of time-related + """ + # NaN replacement with NONE + df = df.replace(np.nan, None) + + # Parsing timestamps to datetime format + for ind in timestamp_indexes: + name = df.columns[ind] + df[name] = pd.to_datetime(df[name], format="mixed") + + tuples = [tuple(x) for x in df.values] + + if len(timestamp_indexes): + + # This is a dynamic import that only works once the JVM is running + import java # pylint: disable=import-outside-toplevel,import-error + + for i, tup in enumerate(tuples): + li = list(tup) + for j in timestamp_indexes: + if pd.isnull(li[j]): + li[j] = None + else: + li[j] = java.sql.Timestamp @ li[j] + tuples[i] = tuple(li) + + column_slots = f"({','.join('?' for _ in df.columns)})" + insert_query = f"insert into {table} values {column_slots}" + + curs = conn.cursor() + curs.executemany(insert_query, tuples) + curs.close() diff --git a/scripts/anonymization/test.py b/scripts/anonymization/src/test.py similarity index 84% rename from scripts/anonymization/test.py rename to scripts/anonymization/src/test.py index 5b24d098d..f1f973f05 100644 --- a/scripts/anonymization/test.py +++ b/scripts/anonymization/src/test.py @@ -1,6 +1,8 @@ -import pytest +"""Testing suite +""" + import xml.etree.ElementTree as ET -from configuration.config_parser import XML_parser +from configuration.config_parser import XMLParser MINIMAL_CONFIG = """ @@ -39,11 +41,12 @@ def test_full_config(): + """Test method for a full config with dp-anonymization, continuous and sensitive values""" parameters = ET.fromstring(FULL_CONFIG) full_anon = parameters.find("table") - config_parser = XML_parser(full_anon) + config_parser = XMLParser(full_anon) anon_config, sens_config, cont_config = config_parser.get_config() assert anon_config is not None @@ -57,11 +60,13 @@ def test_full_config(): def test_minimal_config(): + """Test method for a minimal config where only dp-anonymization is applied + """ parameters = ET.fromstring(MINIMAL_CONFIG) only_dp_auto = parameters.find("table") - config_parser = XML_parser(only_dp_auto) + config_parser = XMLParser(only_dp_auto) anon_config, sens_config, cont_config = config_parser.get_config() assert anon_config is not None diff --git a/src/main/java/com/oltpbenchmark/DBWorkload.java b/src/main/java/com/oltpbenchmark/DBWorkload.java index 731867b4c..5c107a7d2 100644 --- a/src/main/java/com/oltpbenchmark/DBWorkload.java +++ b/src/main/java/com/oltpbenchmark/DBWorkload.java @@ -809,9 +809,10 @@ private static void applyAnonymization(XMLConfiguration xmlConfig, String config LOG.info("Starting the Anonymization process"); LOG.info(SINGLE_LINE); + String osCommand = System.getProperty("os.name").startsWith("Windows") ? "python" : "python3"; ProcessBuilder processBuilder = new ProcessBuilder( - "python3", "scripts/anonymization/anonymizer.py", configFile, templatesPath); + osCommand, "scripts/anonymization/src/anonymizer.py", configFile, templatesPath); try { // Redirect Output stream of the script to get live feedback processBuilder.inheritIO(); From ff7a1f082f7e4627a36149348027b19513de11be Mon Sep 17 00:00:00 2001 From: Eric Enzler Date: Thu, 28 Mar 2024 10:32:22 +0100 Subject: [PATCH 15/27] Pylint failure condition --- .github/workflows/python.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/python.yml b/.github/workflows/python.yml index 0068ec0f5..23938f539 100644 --- a/.github/workflows/python.yml +++ b/.github/workflows/python.yml @@ -29,7 +29,7 @@ jobs: - name: Check anonymization files with pylint working-directory: ./scripts/anonymization run: | - pylint --rcfile=.pylintrc src/ + pylint --rcfile=.pylintrc --fail-under=9.0 src/ - name: Test anonymization with pytest working-directory: ./scripts/anonymization/src run: pytest test.py From 9ed30a9ca0366c868be04e2ffc2267efc419a5ee Mon Sep 17 00:00:00 2001 From: Eric Enzler Date: Thu, 28 Mar 2024 11:00:23 +0100 Subject: [PATCH 16/27] Testing JAVA integration of anon script --- .github/workflows/maven.yml | 16 +++- config/mysql/sample_anonymization_config.xml | 84 ++++++++++++++++++++ 2 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 config/mysql/sample_anonymization_config.xml diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 345c52b86..0f2f1bc4b 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -35,6 +35,7 @@ env: POM_VERSION: 2023-SNAPSHOT JAVA_VERSION: 21 ERRORS_THRESHOLD: 0.01 + PYTHON_VERSION: 3.10 jobs: compile-and-test: @@ -239,7 +240,7 @@ jobs: strategy: fail-fast: false matrix: - benchmark: [ 'auctionmark', 'epinions', 'hyadapt', 'noop', 'otmetrics', 'resourcestresser', 'seats', 'sibench', 'smallbank', 'tatp', 'templated', 'tpcc', 'tpcc-with-reconnects', 'tpch', 'twitter', 'voter', 'wikipedia', 'ycsb' ] + benchmark: [ 'anonymization', 'auctionmark', 'epinions', 'hyadapt', 'noop', 'otmetrics', 'resourcestresser', 'seats', 'sibench', 'smallbank', 'tatp', 'templated', 'tpcc', 'tpcc-with-reconnects', 'tpch', 'twitter', 'voter', 'wikipedia', 'ycsb' ] services: mysql: # https://hub.docker.com/_/mysql image: mysql:latest @@ -275,6 +276,16 @@ jobs: java-version: ${{env.JAVA_VERSION}} distribution: 'temurin' + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: ${{env.PYTHON_VERSION}} + - name: Install Python dependencies + working-directory: ./scripts/anonymization + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + - name: Run benchmark env: MYSQL_PORT: ${{ job.services.mysql.ports[3306] }} @@ -286,6 +297,9 @@ jobs: if [[ ${{matrix.benchmark}} == templated ]]; then java -jar benchbase.jar -b tpcc -c config/mysql/sample_tpcc_config.xml --create=true --load=true --execute=false --json-histograms results/histograms.json java -jar benchbase.jar -b ${{matrix.benchmark}} -c config/mysql/sample_${{matrix.benchmark}}_config.xml --create=false --load=false --execute=true --json-histograms results/histograms.json + elif [[ ${{matrix.benchmark}} == anonymization ]]; then + java -jar benchbase.jar -b tpcc -c config/mysql/sample_tpcc_config.xml --create=true --load=true --execute=false --json-histograms results/histograms.json + java -jar benchbase.jar -b ${{matrix.benchmark}} -c config/mysql/sample_${{matrix.benchmark}}_config.xml --create=false --load=false --anonymize=true --execute=true --json-histograms results/histograms.json elif [[ ${{matrix.benchmark}} == tpcc-with-reconnects ]]; then # See Also: WITH_SERVICE_INTERRUPTIONS=true docker/build-run-benchmark-with-docker.sh java -jar benchbase.jar -b tpcc -c config/mysql/sample_tpcc_config.xml --create=true --load=true diff --git a/config/mysql/sample_anonymization_config.xml b/config/mysql/sample_anonymization_config.xml new file mode 100644 index 000000000..9e0cb44be --- /dev/null +++ b/config/mysql/sample_anonymization_config.xml @@ -0,0 +1,84 @@ + + + + + MYSQL + com.mysql.cj.jdbc.Driver + jdbc:mysql://localhost:3306/benchbase?rewriteBatchedStatements=true&allowPublicKeyRetrieval=True&sslMode=DISABLED + admin + password + true + TRANSACTION_SERIALIZABLE + 128 + + + + data/templated/example.xml + + + +
+ + + + + + + + + + + + + + + + + + + +
+
+ + + 1 + + + + 100 + 20,20,10,10,10,10,10,10 + + + + + + + GetOrder + + + GetCust + + + GetCustNull + + + GetWarehouse + + + GetItemByPrice + + + UpdateItemPrice + + + DeleteItem + + + InsertItem + + + From 644f8d32d258d33ec889df8551254a4766ac6bf5 Mon Sep 17 00:00:00 2001 From: Eric Enzler Date: Thu, 28 Mar 2024 11:08:30 +0100 Subject: [PATCH 17/27] Python version --- .github/workflows/maven.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 0f2f1bc4b..6aaffe6ed 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -35,7 +35,7 @@ env: POM_VERSION: 2023-SNAPSHOT JAVA_VERSION: 21 ERRORS_THRESHOLD: 0.01 - PYTHON_VERSION: 3.10 + PYTHON_VERSION: "3.10" jobs: compile-and-test: From c7534783601f4c36ca5795a043a9fa493eb24e0d Mon Sep 17 00:00:00 2001 From: Eric Enzler Date: Thu, 28 Mar 2024 11:23:09 +0100 Subject: [PATCH 18/27] Anoymization is not a plugin, use original tpcc instead --- .github/workflows/maven.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 6aaffe6ed..9ec095d9b 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -299,7 +299,7 @@ jobs: java -jar benchbase.jar -b ${{matrix.benchmark}} -c config/mysql/sample_${{matrix.benchmark}}_config.xml --create=false --load=false --execute=true --json-histograms results/histograms.json elif [[ ${{matrix.benchmark}} == anonymization ]]; then java -jar benchbase.jar -b tpcc -c config/mysql/sample_tpcc_config.xml --create=true --load=true --execute=false --json-histograms results/histograms.json - java -jar benchbase.jar -b ${{matrix.benchmark}} -c config/mysql/sample_${{matrix.benchmark}}_config.xml --create=false --load=false --anonymize=true --execute=true --json-histograms results/histograms.json + java -jar benchbase.jar -b tpcc -c config/mysql/sample_${{matrix.benchmark}}_config.xml --create=false --load=false --anonymize=true --execute=true --json-histograms results/histograms.json elif [[ ${{matrix.benchmark}} == tpcc-with-reconnects ]]; then # See Also: WITH_SERVICE_INTERRUPTIONS=true docker/build-run-benchmark-with-docker.sh java -jar benchbase.jar -b tpcc -c config/mysql/sample_tpcc_config.xml --create=true --load=true From 2f796a5fadb7026d383174860fa2349ff0dc399a Mon Sep 17 00:00:00 2001 From: Eric Enzler Date: Thu, 28 Mar 2024 11:41:15 +0100 Subject: [PATCH 19/27] Install python only for anonymization run --- .github/workflows/maven.yml | 5 ++- config/mysql/sample_anonymization_config.xml | 46 +------------------- 2 files changed, 6 insertions(+), 45 deletions(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 9ec095d9b..0b3c5b62e 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -277,10 +277,13 @@ jobs: distribution: 'temurin' - name: Set up Python + if: ${{${{matrix.benchmark}} == anonymization}} uses: actions/setup-python@v4 with: python-version: ${{env.PYTHON_VERSION}} + - name: Install Python dependencies + if: ${{${{matrix.benchmark}} == anonymization}} working-directory: ./scripts/anonymization run: | python -m pip install --upgrade pip @@ -299,7 +302,7 @@ jobs: java -jar benchbase.jar -b ${{matrix.benchmark}} -c config/mysql/sample_${{matrix.benchmark}}_config.xml --create=false --load=false --execute=true --json-histograms results/histograms.json elif [[ ${{matrix.benchmark}} == anonymization ]]; then java -jar benchbase.jar -b tpcc -c config/mysql/sample_tpcc_config.xml --create=true --load=true --execute=false --json-histograms results/histograms.json - java -jar benchbase.jar -b tpcc -c config/mysql/sample_${{matrix.benchmark}}_config.xml --create=false --load=false --anonymize=true --execute=true --json-histograms results/histograms.json + java -jar benchbase.jar -b tpcc -c config/mysql/sample_${{matrix.benchmark}}_config.xml --anonymize=true elif [[ ${{matrix.benchmark}} == tpcc-with-reconnects ]]; then # See Also: WITH_SERVICE_INTERRUPTIONS=true docker/build-run-benchmark-with-docker.sh java -jar benchbase.jar -b tpcc -c config/mysql/sample_tpcc_config.xml --create=true --load=true diff --git a/config/mysql/sample_anonymization_config.xml b/config/mysql/sample_anonymization_config.xml index 9e0cb44be..08843f66a 100644 --- a/config/mysql/sample_anonymization_config.xml +++ b/config/mysql/sample_anonymization_config.xml @@ -11,14 +11,10 @@ TRANSACTION_SERIALIZABLE 128 - - data/templated/example.xml - @@ -43,42 +39,4 @@
- - - 1 - - - - 100 - 20,20,10,10,10,10,10,10 - - - - - - - GetOrder - - - GetCust - - - GetCustNull - - - GetWarehouse - - - GetItemByPrice - - - UpdateItemPrice - - - DeleteItem - - - InsertItem - - From 16f897973cd35fff52e5534e1ca36ba23a6879ee Mon Sep 17 00:00:00 2001 From: Eric Enzler Date: Thu, 28 Mar 2024 12:19:18 +0100 Subject: [PATCH 20/27] If condition failure in yaml --- .github/workflows/maven.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 0b3c5b62e..7624cf3a4 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -277,13 +277,13 @@ jobs: distribution: 'temurin' - name: Set up Python - if: ${{${{matrix.benchmark}} == anonymization}} + if: ${{matrix.benchmark}} == anonymization uses: actions/setup-python@v4 with: python-version: ${{env.PYTHON_VERSION}} - name: Install Python dependencies - if: ${{${{matrix.benchmark}} == anonymization}} + if: ${{matrix.benchmark}} == anonymization working-directory: ./scripts/anonymization run: | python -m pip install --upgrade pip From 41b3a437fff4272967ad78150e1ac3c75311b438 Mon Sep 17 00:00:00 2001 From: Eric Enzler Date: Thu, 28 Mar 2024 12:41:02 +0100 Subject: [PATCH 21/27] Early exit of pipeline for anonymization testing --- .github/workflows/maven.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 7624cf3a4..6fd885a87 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -300,9 +300,11 @@ jobs: if [[ ${{matrix.benchmark}} == templated ]]; then java -jar benchbase.jar -b tpcc -c config/mysql/sample_tpcc_config.xml --create=true --load=true --execute=false --json-histograms results/histograms.json java -jar benchbase.jar -b ${{matrix.benchmark}} -c config/mysql/sample_${{matrix.benchmark}}_config.xml --create=false --load=false --execute=true --json-histograms results/histograms.json + # For anonymization, we load tpcc and anonymize a single table. The workload itself is not executed elif [[ ${{matrix.benchmark}} == anonymization ]]; then java -jar benchbase.jar -b tpcc -c config/mysql/sample_tpcc_config.xml --create=true --load=true --execute=false --json-histograms results/histograms.json java -jar benchbase.jar -b tpcc -c config/mysql/sample_${{matrix.benchmark}}_config.xml --anonymize=true + exit 0 elif [[ ${{matrix.benchmark}} == tpcc-with-reconnects ]]; then # See Also: WITH_SERVICE_INTERRUPTIONS=true docker/build-run-benchmark-with-docker.sh java -jar benchbase.jar -b tpcc -c config/mysql/sample_tpcc_config.xml --create=true --load=true From 23e998226a39cb2e39fe9e9f505209d6849b0eeb Mon Sep 17 00:00:00 2001 From: Eric Enzler Date: Mon, 1 Apr 2024 08:40:53 +0200 Subject: [PATCH 22/27] Global pylint with overrides --- .github/workflows/maven.yml | 4 +- .github/workflows/python.yml | 3 +- .pylintrc | 45 +++ scripts/anonymization/.pylintrc | 628 -------------------------------- 4 files changed, 48 insertions(+), 632 deletions(-) create mode 100644 .pylintrc delete mode 100644 scripts/anonymization/.pylintrc diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 6fd885a87..cf3ac37e4 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -277,13 +277,13 @@ jobs: distribution: 'temurin' - name: Set up Python - if: ${{matrix.benchmark}} == anonymization + if: ${{matrix.benchmark == "anonymization"}} uses: actions/setup-python@v4 with: python-version: ${{env.PYTHON_VERSION}} - name: Install Python dependencies - if: ${{matrix.benchmark}} == anonymization + if: ${{matrix.benchmark == "anonymization"}} working-directory: ./scripts/anonymization run: | python -m pip install --upgrade pip diff --git a/.github/workflows/python.yml b/.github/workflows/python.yml index 23938f539..a9e0d2f1e 100644 --- a/.github/workflows/python.yml +++ b/.github/workflows/python.yml @@ -27,9 +27,8 @@ jobs: python -m pip install --upgrade pip pip install -r requirements.txt - name: Check anonymization files with pylint - working-directory: ./scripts/anonymization run: | - pylint --rcfile=.pylintrc --fail-under=9.0 src/ + pylint --rcfile=.pylintrc ./scripts/anonymization/src - name: Test anonymization with pytest working-directory: ./scripts/anonymization/src run: pytest test.py diff --git a/.pylintrc b/.pylintrc new file mode 100644 index 000000000..c3daa833d --- /dev/null +++ b/.pylintrc @@ -0,0 +1,45 @@ +[MAIN] + +# Specify a score threshold under which the program will exit with error. +fail-under=0.9 + +[DESIGN] + +# Maximum number of arguments for function / method. +max-args=9 + +# Maximum number of locals for function / method body. +max-locals=20 + +# Maximum number of return / yield for function / method body. +max-returns=6 + +# Maximum number of statements in function / method body. +max-statements=50 + +# Minimum number of public methods for a class (see R0903). +min-public-methods=0 + + +[FORMAT] + +# Maximum number of characters on a single line. +max-line-length=120 + +# Maximum number of lines in a module. +max-module-lines=1000 + +[REPORTS] + +# Python expression which should return a score less than or equal to 10. You +# have access to the variables 'fatal', 'error', 'warning', 'refactor', +# 'convention', and 'info' which contain the number of messages in each +# category, as well as 'statement' which is the total number of statements +# analyzed. This score is used by the global evaluation report (RP0004). +evaluation=max(0, 0 if fatal else 10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)) + +# Tells whether to display a full report or only the messages. +reports=no + +# Activate the evaluation score. +score=yes diff --git a/scripts/anonymization/.pylintrc b/scripts/anonymization/.pylintrc deleted file mode 100644 index 5bec6b23a..000000000 --- a/scripts/anonymization/.pylintrc +++ /dev/null @@ -1,628 +0,0 @@ -[MAIN] - -# Analyse import fallback blocks. This can be used to support both Python 2 and -# 3 compatible code, which means that the block might have code that exists -# only in one or another interpreter, leading to false positives when analysed. -analyse-fallback-blocks=no - -# Clear in-memory caches upon conclusion of linting. Useful if running pylint -# in a server-like mode. -clear-cache-post-run=no - -# Load and enable all available extensions. Use --list-extensions to see a list -# all available extensions. -#enable-all-extensions= - -# In error mode, messages with a category besides ERROR or FATAL are -# suppressed, and no reports are done by default. Error mode is compatible with -# disabling specific errors. -#errors-only= - -# Always return a 0 (non-error) status code, even if lint errors are found. -# This is primarily useful in continuous integration scripts. -#exit-zero= - -# A comma-separated list of package or module names from where C extensions may -# be loaded. Extensions are loading into the active Python interpreter and may -# run arbitrary code. -extension-pkg-allow-list= - -# A comma-separated list of package or module names from where C extensions may -# be loaded. Extensions are loading into the active Python interpreter and may -# run arbitrary code. (This is an alternative name to extension-pkg-allow-list -# for backward compatibility.) -extension-pkg-whitelist= - -# Return non-zero exit code if any of these messages/categories are detected, -# even if score is above --fail-under value. Syntax same as enable. Messages -# specified are enabled, while categories only check already-enabled messages. -fail-on= - -# Specify a score threshold under which the program will exit with error. -fail-under=10 - -# Interpret the stdin as a python script, whose filename needs to be passed as -# the module_or_package argument. -#from-stdin= - -# Files or directories to be skipped. They should be base names, not paths. -ignore=CVS - -# Add files or directories matching the regular expressions patterns to the -# ignore-list. The regex matches against paths and can be in Posix or Windows -# format. Because '\\' represents the directory delimiter on Windows systems, -# it can't be used as an escape character. -ignore-paths= - -# Files or directories matching the regular expression patterns are skipped. -# The regex matches against base names, not paths. The default value ignores -# Emacs file locks -ignore-patterns=^\.# - -# List of module names for which member attributes should not be checked -# (useful for modules/projects where namespaces are manipulated during runtime -# and thus existing member attributes cannot be deduced by static analysis). It -# supports qualified module names, as well as Unix pattern matching. -ignored-modules= - -# Python code to execute, usually for sys.path manipulation such as -# pygtk.require(). -#init-hook= - -# Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the -# number of processors available to use, and will cap the count on Windows to -# avoid hangs. -jobs=1 - -# Control the amount of potential inferred values when inferring a single -# object. This can help the performance when dealing with large functions or -# complex, nested conditions. -limit-inference-results=100 - -# List of plugins (as comma separated values of python module names) to load, -# usually to register additional checkers. -load-plugins= - -# Pickle collected data for later comparisons. -persistent=yes - -# Minimum Python version to use for version dependent checks. Will default to -# the version used to run pylint. -py-version=3.10 - -# Discover python modules and packages in the file system subtree. -recursive=no - -# Add paths to the list of the source roots. Supports globbing patterns. The -# source root is an absolute path or a path relative to the current working -# directory used to determine a package namespace for modules located under the -# source root. -source-roots= - -# When enabled, pylint would attempt to guess common misconfiguration and emit -# user-friendly hints instead of false-positive error messages. -suggestion-mode=yes - -# Allow loading of arbitrary C extensions. Extensions are imported into the -# active Python interpreter and may run arbitrary code. -unsafe-load-any-extension=no - -# In verbose mode, extra non-checker-related info will be displayed. -#verbose= - - -[BASIC] - -# Naming style matching correct argument names. -argument-naming-style=snake_case - -# Regular expression matching correct argument names. Overrides argument- -# naming-style. If left empty, argument names will be checked with the set -# naming style. -#argument-rgx= - -# Naming style matching correct attribute names. -attr-naming-style=snake_case - -# Regular expression matching correct attribute names. Overrides attr-naming- -# style. If left empty, attribute names will be checked with the set naming -# style. -#attr-rgx= - -# Bad variable names which should always be refused, separated by a comma. -bad-names=foo, - bar, - baz, - toto, - tutu, - tata - -# Bad variable names regexes, separated by a comma. If names match any regex, -# they will always be refused -bad-names-rgxs= - -# Naming style matching correct class attribute names. -class-attribute-naming-style=any - -# Regular expression matching correct class attribute names. Overrides class- -# attribute-naming-style. If left empty, class attribute names will be checked -# with the set naming style. -#class-attribute-rgx= - -# Naming style matching correct class constant names. -class-const-naming-style=UPPER_CASE - -# Regular expression matching correct class constant names. Overrides class- -# const-naming-style. If left empty, class constant names will be checked with -# the set naming style. -#class-const-rgx= - -# Naming style matching correct class names. -class-naming-style=PascalCase - -# Regular expression matching correct class names. Overrides class-naming- -# style. If left empty, class names will be checked with the set naming style. -#class-rgx= - -# Naming style matching correct constant names. -const-naming-style=UPPER_CASE - -# Regular expression matching correct constant names. Overrides const-naming- -# style. If left empty, constant names will be checked with the set naming -# style. -#const-rgx= - -# Minimum line length for functions/classes that require docstrings, shorter -# ones are exempt. -docstring-min-length=-1 - -# Naming style matching correct function names. -function-naming-style=snake_case - -# Regular expression matching correct function names. Overrides function- -# naming-style. If left empty, function names will be checked with the set -# naming style. -#function-rgx= - -# Good variable names which should always be accepted, separated by a comma. -good-names=i, - j, - k, - ex, - Run, - _ - -# Good variable names regexes, separated by a comma. If names match any regex, -# they will always be accepted -good-names-rgxs= - -# Include a hint for the correct naming format with invalid-name. -include-naming-hint=no - -# Naming style matching correct inline iteration names. -inlinevar-naming-style=any - -# Regular expression matching correct inline iteration names. Overrides -# inlinevar-naming-style. If left empty, inline iteration names will be checked -# with the set naming style. -#inlinevar-rgx= - -# Naming style matching correct method names. -method-naming-style=snake_case - -# Regular expression matching correct method names. Overrides method-naming- -# style. If left empty, method names will be checked with the set naming style. -#method-rgx= - -# Naming style matching correct module names. -module-naming-style=snake_case - -# Regular expression matching correct module names. Overrides module-naming- -# style. If left empty, module names will be checked with the set naming style. -#module-rgx= - -# Colon-delimited sets of names that determine each other's naming style when -# the name regexes allow several styles. -name-group= - -# Regular expression which should only match function or class names that do -# not require a docstring. -no-docstring-rgx=^_ - -# List of decorators that produce properties, such as abc.abstractproperty. Add -# to this list to register other decorators that produce valid properties. -# These decorators are taken in consideration only for invalid-name. -property-classes=abc.abstractproperty - -# Regular expression matching correct type alias names. If left empty, type -# alias names will be checked with the set naming style. -#typealias-rgx= - -# Regular expression matching correct type variable names. If left empty, type -# variable names will be checked with the set naming style. -#typevar-rgx= - -# Naming style matching correct variable names. -variable-naming-style=snake_case - -# Regular expression matching correct variable names. Overrides variable- -# naming-style. If left empty, variable names will be checked with the set -# naming style. -#variable-rgx= - - -[CLASSES] - -# Warn about protected attribute access inside special methods -check-protected-access-in-special-methods=no - -# List of method names used to declare (i.e. assign) instance attributes. -defining-attr-methods=__init__, - __new__, - setUp, - asyncSetUp, - __post_init__ - -# List of member names, which should be excluded from the protected access -# warning. -exclude-protected=_asdict,_fields,_replace,_source,_make,os._exit - -# List of valid names for the first argument in a class method. -valid-classmethod-first-arg=cls - -# List of valid names for the first argument in a metaclass class method. -valid-metaclass-classmethod-first-arg=mcs - - -[DESIGN] - -# List of regular expressions of class ancestor names to ignore when counting -# public methods (see R0903) -exclude-too-few-public-methods= - -# List of qualified class names to ignore when counting class parents (see -# R0901) -ignored-parents= - -# Maximum number of arguments for function / method. -max-args=9 - -# Maximum number of attributes for a class (see R0902). -max-attributes=10 - -# Maximum number of boolean expressions in an if statement (see R0916). -max-bool-expr=5 - -# Maximum number of branch for function / method body. -max-branches=12 - -# Maximum number of locals for function / method body. -max-locals=20 - -# Maximum number of parents for a class (see R0901). -max-parents=7 - -# Maximum number of public methods for a class (see R0904). -max-public-methods=20 - -# Maximum number of return / yield for function / method body. -max-returns=6 - -# Maximum number of statements in function / method body. -max-statements=50 - -# Minimum number of public methods for a class (see R0903). -min-public-methods=0 - - -[EXCEPTIONS] - -# Exceptions that will emit a warning when caught. -overgeneral-exceptions=builtins.BaseException,builtins.Exception - - -[FORMAT] - -# Expected format of line ending, e.g. empty (any line ending), LF or CRLF. -expected-line-ending-format= - -# Regexp for a line that is allowed to be longer than the limit. -ignore-long-lines=^\s*(# )??$ - -# Number of spaces of indent required inside a hanging or continued line. -indent-after-paren=4 - -# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 -# tab). -indent-string=' ' - -# Maximum number of characters on a single line. -max-line-length=120 - -# Maximum number of lines in a module. -max-module-lines=1000 - -# Allow the body of a class to be on the same line as the declaration if body -# contains single statement. -single-line-class-stmt=no - -# Allow the body of an if to be on the same line as the test if there is no -# else. -single-line-if-stmt=no - - -[IMPORTS] - -# List of modules that can be imported at any level, not just the top level -# one. -allow-any-import-level= - -# Allow explicit reexports by alias from a package __init__. -allow-reexport-from-package=no - -# Allow wildcard imports from modules that define __all__. -allow-wildcard-with-all=no - -# Deprecated modules which should not be used, separated by a comma. -deprecated-modules= - -# Output a graph (.gv or any supported image format) of external dependencies -# to the given file (report RP0402 must not be disabled). -ext-import-graph= - -# Output a graph (.gv or any supported image format) of all (i.e. internal and -# external) dependencies to the given file (report RP0402 must not be -# disabled). -import-graph= - -# Output a graph (.gv or any supported image format) of internal dependencies -# to the given file (report RP0402 must not be disabled). -int-import-graph= - -# Force import order to recognize a module as part of the standard -# compatibility libraries. -known-standard-library= - -# Force import order to recognize a module as part of a third party library. -known-third-party=enchant - -# Couples of modules and preferred modules, separated by a comma. -preferred-modules= - - -[LOGGING] - -# The type of string formatting that logging methods do. `old` means using % -# formatting, `new` is for `{}` formatting. -logging-format-style=old - -# Logging modules to check that the string format arguments are in logging -# function parameter format. -logging-modules=logging - - -[MESSAGES CONTROL] - -# Only show warnings with the listed confidence levels. Leave empty to show -# all. Valid levels: HIGH, CONTROL_FLOW, INFERENCE, INFERENCE_FAILURE, -# UNDEFINED. -confidence=HIGH, - CONTROL_FLOW, - INFERENCE, - INFERENCE_FAILURE, - UNDEFINED - -# Disable the message, report, category or checker with the given id(s). You -# can either give multiple identifiers separated by comma (,) or put this -# option multiple times (only on the command line, not in the configuration -# file where it should appear only once). You can also use "--disable=all" to -# disable everything first and then re-enable specific checks. For example, if -# you want to run only the similarities checker, you can use "--disable=all -# --enable=similarities". If you want to run only the classes checker, but have -# no Warning level messages displayed, use "--disable=all --enable=classes -# --disable=W". -disable=raw-checker-failed, - bad-inline-option, - locally-disabled, - file-ignored, - suppressed-message, - useless-suppression, - deprecated-pragma, - use-symbolic-message-instead, - use-implicit-booleaness-not-comparison-to-string, - use-implicit-booleaness-not-comparison-to-zero - -# Enable the message, report, category or checker with the given id(s). You can -# either give multiple identifier separated by comma (,) or put this option -# multiple time (only on the command line, not in the configuration file where -# it should appear only once). See also the "--disable" option for examples. -enable= - - -[METHOD_ARGS] - -# List of qualified names (i.e., library.method) which require a timeout -# parameter e.g. 'requests.api.get,requests.api.post' -timeout-methods=requests.api.delete,requests.api.get,requests.api.head,requests.api.options,requests.api.patch,requests.api.post,requests.api.put,requests.api.request - - -[MISCELLANEOUS] - -# List of note tags to take in consideration, separated by a comma. -notes=FIXME, - XXX, - TODO - -# Regular expression of note tags to take in consideration. -notes-rgx= - - -[REFACTORING] - -# Maximum number of nested blocks for function / method body -max-nested-blocks=5 - -# Complete name of functions that never returns. When checking for -# inconsistent-return-statements if a never returning function is called then -# it will be considered as an explicit return statement and no message will be -# printed. -never-returning-functions=sys.exit,argparse.parse_error - - -[REPORTS] - -# Python expression which should return a score less than or equal to 10. You -# have access to the variables 'fatal', 'error', 'warning', 'refactor', -# 'convention', and 'info' which contain the number of messages in each -# category, as well as 'statement' which is the total number of statements -# analyzed. This score is used by the global evaluation report (RP0004). -evaluation=max(0, 0 if fatal else 10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)) - -# Template used to display messages. This is a python new-style format string -# used to format the message information. See doc for all details. -msg-template= - -# Set the output format. Available formats are: text, parseable, colorized, -# json2 (improved json format), json (old json format) and msvs (visual -# studio). You can also give a reporter class, e.g. -# mypackage.mymodule.MyReporterClass. -#output-format= - -# Tells whether to display a full report or only the messages. -reports=no - -# Activate the evaluation score. -score=yes - - -[SIMILARITIES] - -# Comments are removed from the similarity computation -ignore-comments=yes - -# Docstrings are removed from the similarity computation -ignore-docstrings=yes - -# Imports are removed from the similarity computation -ignore-imports=yes - -# Signatures are removed from the similarity computation -ignore-signatures=yes - -# Minimum lines number of a similarity. -min-similarity-lines=4 - - -[SPELLING] - -# Limits count of emitted suggestions for spelling mistakes. -max-spelling-suggestions=4 - -# List of comma separated words that should be considered directives if they -# appear at the beginning of a comment and should not be checked. -spelling-ignore-comment-directives=fmt: on,fmt: off,noqa:,noqa,nosec,isort:skip,mypy: - -# List of comma separated words that should not be checked. -spelling-ignore-words= - - -# Tells whether to store unknown words to the private dictionary (see the -# --spelling-private-dict-file option) instead of raising a message. -spelling-store-unknown-words=no - - -[STRING] - -# This flag controls whether inconsistent-quotes generates a warning when the -# character used as a quote delimiter is used inconsistently within a module. -check-quote-consistency=no - -# This flag controls whether the implicit-str-concat should generate a warning -# on implicit string concatenation in sequences defined over several lines. -check-str-concat-over-line-jumps=no - - -[TYPECHECK] - -# List of decorators that produce context managers, such as -# contextlib.contextmanager. Add to this list to register other decorators that -# produce valid context managers. -contextmanager-decorators=contextlib.contextmanager - -# List of members which are set dynamically and missed by pylint inference -# system, and so shouldn't trigger E1101 when accessed. Python regular -# expressions are accepted. -generated-members= - -# Tells whether to warn about missing members when the owner of the attribute -# is inferred to be None. -ignore-none=yes - -# This flag controls whether pylint should warn about no-member and similar -# checks whenever an opaque object is returned when inferring. The inference -# can return multiple potential results while evaluating a Python object, but -# some branches might not be evaluated, which results in partial inference. In -# that case, it might be useful to still emit no-member and other checks for -# the rest of the inferred objects. -ignore-on-opaque-inference=yes - -# List of symbolic message names to ignore for Mixin members. -ignored-checks-for-mixins=no-member, - not-async-context-manager, - not-context-manager, - attribute-defined-outside-init - -# List of class names for which member attributes should not be checked (useful -# for classes with dynamically set attributes). This supports the use of -# qualified names. -ignored-classes=optparse.Values,thread._local,_thread._local,argparse.Namespace - -# Show a hint with possible names when a member name was not found. The aspect -# of finding the hint is based on edit distance. -missing-member-hint=yes - -# The minimum edit distance a name should have in order to be considered a -# similar match for a missing member name. -missing-member-hint-distance=1 - -# The total number of similar names that should be taken in consideration when -# showing a hint for a missing member. -missing-member-max-choices=1 - -# Regex pattern to define which classes are considered mixins. -mixin-class-rgx=.*[Mm]ixin - -# List of decorators that change the signature of a decorated function. -signature-mutators= - - -[VARIABLES] - -# List of additional names supposed to be defined in builtins. Remember that -# you should avoid defining new builtins when possible. -additional-builtins= - -# Tells whether unused global variables should be treated as a violation. -allow-global-unused-variables=yes - -# List of names allowed to shadow builtins -allowed-redefined-builtins= - -# List of strings which can identify a callback function by name. A callback -# name must start or end with one of those strings. -callbacks=cb_, - _cb - -# A regular expression matching the name of dummy variables (i.e. expected to -# not be used). -dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_ - -# Argument names that match this expression will be ignored. -ignored-argument-names=_.*|^ignored_|^unused_ - -# Tells whether we should check for unused import in __init__ files. -init-import=no - -# List of qualified module names which can have objects that can redefine -# builtins. -redefining-builtins-modules=six.moves,past.builtins,future.builtins,builtins,io From bdc3f9bab182f97556a8e39bee6d5b907c6bf6fd Mon Sep 17 00:00:00 2001 From: Eric Enzler Date: Mon, 1 Apr 2024 08:49:42 +0200 Subject: [PATCH 23/27] Maven pipeline string quotes removed --- .github/workflows/maven.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index cf3ac37e4..0ce75b2a2 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -277,13 +277,13 @@ jobs: distribution: 'temurin' - name: Set up Python - if: ${{matrix.benchmark == "anonymization"}} + if: ${{matrix.benchmark == anonymization}} uses: actions/setup-python@v4 with: python-version: ${{env.PYTHON_VERSION}} - name: Install Python dependencies - if: ${{matrix.benchmark == "anonymization"}} + if: ${{matrix.benchmark == anonymization}} working-directory: ./scripts/anonymization run: | python -m pip install --upgrade pip From d4a9e4f4c4d0121c891fc4b952c0f0afa985e463 Mon Sep 17 00:00:00 2001 From: Eric Enzler Date: Mon, 1 Apr 2024 09:05:06 +0200 Subject: [PATCH 24/27] Pipeline error for IF-statement, Pylint score increase --- .github/workflows/maven.yml | 4 +- .../src/configuration/config_parser.py | 5 +- .../src/configuration/configurations.py | 49 +++++++++++++------ 3 files changed, 39 insertions(+), 19 deletions(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 0ce75b2a2..b545f09bb 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -277,13 +277,13 @@ jobs: distribution: 'temurin' - name: Set up Python - if: ${{matrix.benchmark == anonymization}} + if: matrix.benchmark == anonymization uses: actions/setup-python@v4 with: python-version: ${{env.PYTHON_VERSION}} - name: Install Python dependencies - if: ${{matrix.benchmark == anonymization}} + if: matrix.benchmark == anonymization working-directory: ./scripts/anonymization run: | python -m pip install --upgrade pip diff --git a/scripts/anonymization/src/configuration/config_parser.py b/scripts/anonymization/src/configuration/config_parser.py index 315e7831e..bbe6e492a 100644 --- a/scripts/anonymization/src/configuration/config_parser.py +++ b/scripts/anonymization/src/configuration/config_parser.py @@ -6,6 +6,7 @@ from configuration.configurations import ( DPConfig, + DPColumnConfig, SensitiveConfig, SensitiveEntry, ContinuousConfig, @@ -76,8 +77,10 @@ def get_config(self): ) ) + column_classes = DPColumnConfig(ignore,cat,cont,ordi) + anon_config = DPConfig( - table_name, eps, pre_eps, alg, ignore, cat, cont, ordi + table_name, eps, pre_eps, alg, column_classes ) if len(cont) > 0: diff --git a/scripts/anonymization/src/configuration/configurations.py b/scripts/anonymization/src/configuration/configurations.py index 07b0a2052..5938116df 100644 --- a/scripts/anonymization/src/configuration/configurations.py +++ b/scripts/anonymization/src/configuration/configurations.py @@ -2,6 +2,35 @@ """ +class DPColumnConfig: + """A class to represent the classification of columns for DP anonymization + + Attributes + ---------- + hidden : list[str] + List of column names that will not be anonymized + categorical : list[str] + List of categorical column names + continuous : list[str] + List of continuous column names + ordinal : list[str] + List of ordinal column names + + """ + + def __init__( + self, + hidden: list[str], + categorical: list[str], + continuous: list[str], + ordinal: list[str], + ): + self.hidden = hidden + self.categorical = categorical + self.continuous = continuous + self.ordinal = ordinal + + class DPConfig: """A class to represent a config that handles DP-Anonymization @@ -15,14 +44,8 @@ class DPConfig: Privacy budget for preprocessing algorithm : str Name of the DP-algorithm - hidden : list[str] - List of column names that will not be anonymized - categorical : list[str] - List of categorical column names - continuous : list[str] - List of continuous column names - ordinal : list[str] - List of ordinal column names + column_classification : DPColumnConfig + lassification of table columns """ @@ -32,19 +55,13 @@ def __init__( epsilon: str, preproc_eps: str, algorithm: str, - hidden: list[str], - categorical: list[str], - continuous: list[str], - ordinal: list[str], + column_classification: DPColumnConfig, ): self.epsilon = epsilon self.table_name = table_name self.preproc_eps = preproc_eps self.algorithm = algorithm - self.hidden = hidden - self.categorical = categorical - self.continuous = continuous - self.ordinal = ordinal + self.column_classification = column_classification class ContinuousEntry: From c448543e7f9921365a5aa809eda65e3e37e4ce25 Mon Sep 17 00:00:00 2001 From: Eric Enzler Date: Mon, 1 Apr 2024 09:13:45 +0200 Subject: [PATCH 25/27] If statement --- .github/workflows/maven.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index b545f09bb..6fd885a87 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -277,13 +277,13 @@ jobs: distribution: 'temurin' - name: Set up Python - if: matrix.benchmark == anonymization + if: ${{matrix.benchmark}} == anonymization uses: actions/setup-python@v4 with: python-version: ${{env.PYTHON_VERSION}} - name: Install Python dependencies - if: matrix.benchmark == anonymization + if: ${{matrix.benchmark}} == anonymization working-directory: ./scripts/anonymization run: | python -m pip install --upgrade pip From ee257754a54a8f5b2e51e7b564842186d57870a9 Mon Sep 17 00:00:00 2001 From: Eric Enzler Date: Mon, 1 Apr 2024 09:32:10 +0200 Subject: [PATCH 26/27] If-Else in run statement instead of keywork --- .github/workflows/maven.yml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 6fd885a87..e407eaae4 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -277,17 +277,19 @@ jobs: distribution: 'temurin' - name: Set up Python - if: ${{matrix.benchmark}} == anonymization uses: actions/setup-python@v4 with: python-version: ${{env.PYTHON_VERSION}} - name: Install Python dependencies - if: ${{matrix.benchmark}} == anonymization working-directory: ./scripts/anonymization run: | - python -m pip install --upgrade pip - pip install -r requirements.txt + if [[ ${{matrix.benchmark}} == anonymization ]]; then + python -m pip install --upgrade pip + pip install -r requirements.txt + else + echo "Dependency installation not necessary for benchmark" + fi - name: Run benchmark env: From c7ebc119cd84df2cef00b3d0a5a2724f3fc10703 Mon Sep 17 00:00:00 2001 From: Eric Enzler Date: Mon, 1 Apr 2024 11:19:25 +0200 Subject: [PATCH 27/27] Removed anonymization from Templated config in postgresql --- config/postgres/sample_templated_config.xml | 25 --------------------- 1 file changed, 25 deletions(-) diff --git a/config/postgres/sample_templated_config.xml b/config/postgres/sample_templated_config.xml index ec4412820..51a701d58 100644 --- a/config/postgres/sample_templated_config.xml +++ b/config/postgres/sample_templated_config.xml @@ -19,31 +19,6 @@ data/templated/example.xml - - - - - - - - - - - - - - - - - - - - - - -
-
- 1