<jupyter_start><jupyter_text>sourceFor source, I am going to use fixer-io, https://github.com/huseinzol05/dynamic-singer/tree/master/tap-fixerioMake sure we already installed the module in our local,```bashgit clone https://github.com/huseinzol05/dynamic-singer.gitcd dynamic-singerpip install -e tap-fixerio```And if we check in https://github.com/huseinzol05/dynamic-singer/tree/master/tap-fixerio Readme, we need to build a json config,```json{    "base": "USD",    "start_date": "",    "access_key": "",    "symbols": ["USD","EUR","GBP","JPY"]}```So we need to create one. Just get our `access_token` at https://fixer.io/quickstart<jupyter_code>import json

config = {
    'base': 'USD',
    'start_date': '2020-05-05',
    'access_key': '6b3f8a3cd7843530014751f7e6a8066d',
    'symbols': ['GBP']
}

with open('fixer-config.json', 'w') as fopen:
    json.dump(config, fopen)<jupyter_output><empty_output><jupyter_text>startSo to dynamic-singer, we need to initiate `Source` object.<jupyter_code>source = dsinger.Source('tap-fixerio --config fixer-config.json')<jupyter_output><empty_output><jupyter_text>We are not yet able to run it, because we do not add any data sources to sink. So, let's add one.  gsheetFor target, I am going to use gsheet, https://github.com/singer-io/target-gsheet, In this example, I am not going to share my gcp secret.This is the spreadsheet, https://docs.google.com/spreadsheets/d/1fgajBprxaLxVH9GMg25BzD8xYiWCkEKDSxE9Ze28ArY/edit?usp=sharingMake sure we already installed the module in our local,```bashpip3 install target-gsheet```<jupyter_code>config = {
    'spreadsheet_id': '<KEY>'
}
with open('gsheet-config.json', 'w') as fopen:
    json.dump(config, fopen)
source.add('target-gsheet --config gsheet-config.json')<jupyter_output><empty_output><jupyter_text>write to fileGoing to create a simple class to save to file.<jupyter_code>class Target:
    def __init__(self, filename):
        self.f = open(filename, 'a')
        
    def parse(self, row):
        self.f.write(row)
        return row
target = Target('test.txt')
source.add(target)<jupyter_output><empty_output><jupyter_text>BigqueryFor bigquery target, I am going to use target-bigquery, https://github.com/huseinzol05/dynamic-singer/tree/master/target-bigqueryMake sure we already installed the module in our local,```bashgit clone https://github.com/huseinzol05/dynamic-singer.gitcd dynamic-singerpip install -e target-bigquery```After that download service account json powerful enough to insert into BQ from GCP IAM and give any name, mine is `bq-account.json`.And please insert your own `project_id` below.<jupyter_code>config = {
    'project_id': '',
    'dataset_id': 'fixerio',
    'key_path': 'bq-account.json',
}

with open('bigquery-config.json', 'w') as fopen:
    json.dump(config, fopen)
source.add('target-bigquery --config bigquery-config.json')<jupyter_output><empty_output><jupyter_text>List targets<jupyter_code>source.get_targets()<jupyter_output><empty_output><jupyter_text>Here you can delete any targets using `source.delete_target`,```pythondef delete_target(self, index: int):    """    Parameters    ----------    index: int        target index from `get_targets()`.    """```  startIn this example, I am going to emit to targets in async manner. Default emitting from first target until last target.<jupyter_code>source.start(asynchronous = True)<jupyter_output>INFO {"type": "SCHEMA", "stream": "exchange_rate", "schema": {"type": "object", "properties": {"date": {"type": "string", "format": "date-time"}}, "additionalProperties": true}, "key_properties": ["date"]}
INFO None
INFO {"type": "RECORD", "stream": "exchange_rate", "record": {"GBP": "0.871002", "EUR": "1.0", "date": "2020-05-05T00:00:00Z"}}
INFO None
INFO {"type": "RECORD", "stream": "exchange_rate", "record": {"GBP": "0.873037", "EUR": "1.0", "date": "2020-05-06T00:00:00Z"}}
INFO None
INFO {"type": "STATE", "value": {"start_date": "2020-05-06"}}
INFO None
{'fraction_non_alphanumeric': 0.15444893832153692, 'fraction_numerical': 0.0262891809908999, 'mean_word_length': 5.300955414012739, 'pattern_counts': {'":': 29, '<': 29, '<?xml version=': 0, '>': 29, 'https://': 8, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 1, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '7', 'dir': 'jupyter-structured-clean-dedup', 'id': '623260', 'license': 'MIT', 'n_tokens_mistral': 1437, 'n_tokens_neox': 1349, 'n_words': 339, 'path': 'example/fixerio-gsheet-writefile-bq.ipynb', 'repo_name': 'kfit-dev/dynamic-singer', 'size': '3995'}