mirror of
				https://github.com/kevinveenbirkenbach/baserow-ifto.git
				synced 2025-10-31 09:49:04 +00:00 
			
		
		
		
	Refactored and transformed to mvc modell
This commit is contained in:
		| @@ -6,8 +6,8 @@ class BaserowAPI: | |||||||
|         self.base_url = base_url |         self.base_url = base_url | ||||||
|         self.api_key = api_key |         self.api_key = api_key | ||||||
|         self.verbose = verbose |         self.verbose = verbose | ||||||
|         self.headers = create_headers(self) |         self.headers = self.create_headers() | ||||||
|         self.print_verbose_message("Headers:", headers) |         self.print_verbose_message(f"Headers:{self.headers}") | ||||||
|  |  | ||||||
|     def create_headers(self): |     def create_headers(self): | ||||||
|         """Create headers for API requests.""" |         """Create headers for API requests.""" | ||||||
| @@ -23,11 +23,12 @@ class BaserowAPI: | |||||||
|     def handle_api_response(self, response): |     def handle_api_response(self, response): | ||||||
|         """Handle API response, check for errors and decode JSON.""" |         """Handle API response, check for errors and decode JSON.""" | ||||||
|         self.print_verbose_message("[INFO] Handling API response...") |         self.print_verbose_message("[INFO] Handling API response...") | ||||||
|         self.print_verbose_message("Response Status Code:", response.status_code) |         self.print_verbose_message(f"Response Status Code: {response.status_code}") | ||||||
|         self.print_verbose_message("Response Headers:", response.headers) |         self.print_verbose_message(f"Response Headers: {response.headers}") | ||||||
|         if response.status_code != 200: |         if response.status_code != 200: | ||||||
|             print(f"Error: Received status code {response.status_code} from Baserow API.") |             print(f"Error: Received status code {response.status_code} from Baserow API.") | ||||||
|             print("Response content:", response.content.decode()) |             response_content=response.content.decode() | ||||||
|  |             print("Response content: {response_content}") | ||||||
|             return None |             return None | ||||||
|  |  | ||||||
|         try: |         try: | ||||||
| @@ -40,11 +41,11 @@ class BaserowAPI: | |||||||
|         if self.verbose: |         if self.verbose: | ||||||
|             print(f"[INFO] Fetching all rows from table with ID: {table_id}...") |             print(f"[INFO] Fetching all rows from table with ID: {table_id}...") | ||||||
|         rows = [] |         rows = [] | ||||||
|         next_url = "database/rows/table/{table_id}/" |         next_url = f"database/rows/table/{table_id}/" | ||||||
|  |  | ||||||
|         while next_url: |         while next_url: | ||||||
|             request_response(next_url) |             response=self.request_response(next_url) | ||||||
|             self.print_verbose_message("Requesting:", next_url) |             self.print_verbose_message(f"Requesting: {next_url}") | ||||||
|             data = self.handle_api_response(response) |             data = self.handle_api_response(response) | ||||||
|             if not data: |             if not data: | ||||||
|                 break |                 break | ||||||
| @@ -58,7 +59,7 @@ class BaserowAPI: | |||||||
|  |  | ||||||
|     def get_all_tables_from_database(self, database_id): |     def get_all_tables_from_database(self, database_id): | ||||||
|         self.print_verbose_message("[INFO] Fetching all tables from database with ID: {database_id}...") |         self.print_verbose_message("[INFO] Fetching all tables from database with ID: {database_id}...") | ||||||
|         response = request_response("database/tables/database/{database_id}/") |         response = self.request_response(f"database/tables/database/{database_id}/") | ||||||
|         return self.handle_api_response(response) or [] |         return self.handle_api_response(response) or [] | ||||||
|  |  | ||||||
|     def get_all_data_from_database(self, database_id): |     def get_all_data_from_database(self, database_id): | ||||||
| @@ -75,7 +76,7 @@ class BaserowAPI: | |||||||
|  |  | ||||||
|     def fetch_fields_for_table(self, table_id): |     def fetch_fields_for_table(self, table_id): | ||||||
|         """Fetch fields for a given table.""" |         """Fetch fields for a given table.""" | ||||||
|         response = requests.get(f"{self.base_url}database/fields/table/{table_id}/", headers=self.headers) |         response = self.request_response(f"database/fields/table/{table_id}/") | ||||||
|         if response.status_code == 200: |         if response.status_code == 200: | ||||||
|             return response.json() |             return response.json() | ||||||
|         raise Exception(f"Failed to fetch fields for table {table_id}. Status code: {response.status_code}") |         raise Exception(f"Failed to fetch fields for table {table_id}. Status code: {response.status_code}") | ||||||
| @@ -85,12 +86,12 @@ class BaserowAPI: | |||||||
|         indexed_data = self.index_tables_by_id(tables_data) |         indexed_data = self.index_tables_by_id(tables_data) | ||||||
|         link_fields = self.get_link_fields_for_all_tables(tables_data) |         link_fields = self.get_link_fields_for_all_tables(tables_data) | ||||||
|         self.embed_referenced_data_into_tables(tables_data, indexed_data, link_fields) |         self.embed_referenced_data_into_tables(tables_data, indexed_data, link_fields) | ||||||
|         self.print_verbose_message("Merged Tables Data:", tables_data) |         self.print_verbose_message(f"Merged Tables Data: {tables_data}") | ||||||
|         return tables_data |         return tables_data | ||||||
|  |  | ||||||
|     def index_tables_by_id(self, tables_data): |     def index_tables_by_id(self, tables_data): | ||||||
|         indexed_data = {table_name: {row['id']: row for row in rows} for table_name, rows in tables_data.items()} |         indexed_data = {table_name: {row['id']: row for row in rows} for table_name, rows in tables_data.items()} | ||||||
|         self.print_verbose_message("Indexed Data: {indexed_data}") |         self.print_verbose_message(f"Indexed Data: {indexed_data}") | ||||||
|         return indexed_data |         return indexed_data | ||||||
|  |  | ||||||
|     def get_link_fields_for_all_tables(self, tables_data): |     def get_link_fields_for_all_tables(self, tables_data): | ||||||
| @@ -98,8 +99,8 @@ class BaserowAPI: | |||||||
|         for table_name in tables_data: |         for table_name in tables_data: | ||||||
|             link_fields_for_table = self.get_link_fields_for_table(table_name) |             link_fields_for_table = self.get_link_fields_for_table(table_name) | ||||||
|             link_fields[table_name] = link_fields_for_table |             link_fields[table_name] = link_fields_for_table | ||||||
|             self.print_verbose_message("Link Fields For Table: {link_fields_for_table}") |             self.print_verbose_message(f"Link Fields For Table: {link_fields_for_table}") | ||||||
|         self.print_verbose_message("Link Fields: {link_fields}") |         self.print_verbose_message(f"Link Fields: {link_fields}") | ||||||
|         return link_fields |         return link_fields | ||||||
|  |  | ||||||
|     def get_link_fields_for_table(self, table_name): |     def get_link_fields_for_table(self, table_name): | ||||||
|   | |||||||
							
								
								
									
										51
									
								
								controller.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								controller.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,51 @@ | |||||||
|  | # controller.py | ||||||
|  |  | ||||||
|  | import argparse | ||||||
|  | import json | ||||||
|  | from baserow_api import BaserowAPI | ||||||
|  | import view | ||||||
|  |  | ||||||
|  | def main(): | ||||||
|  |     args = parse_arguments() | ||||||
|  |     api = BaserowAPI(args.base_url, args.api_key, args.verbose) | ||||||
|  |  | ||||||
|  |     if not args.database_id and not args.table_ids: | ||||||
|  |         view.print_error_message("Either database_id or table_ids must be provided.") | ||||||
|  |         exit(1) | ||||||
|  |  | ||||||
|  |     if args.table_ids: | ||||||
|  |         tables_data = fetch_table_data(api, args.table_ids) | ||||||
|  |         if args.matrix: | ||||||
|  |             merged_data = api.merge_tables_on_reference(tables_data) | ||||||
|  |             if not args.quiet: | ||||||
|  |                 view.print_json_output(merged_data) | ||||||
|  |         else: | ||||||
|  |             if not args.quiet: | ||||||
|  |                 view.print_json_output(tables_data) | ||||||
|  |     else: | ||||||
|  |         all_data = api.get_all_data_from_database(args.database_id) | ||||||
|  |         if not args.quiet: | ||||||
|  |             view.print_json_output(all_data) | ||||||
|  |  | ||||||
|  | def parse_arguments(): | ||||||
|  |     parser = argparse.ArgumentParser(description="Fetch all data from a Baserow database.") | ||||||
|  |     parser.add_argument("base_url", help="Base URL of your Baserow instance, e.g., https://YOUR_BASEROW_INSTANCE_URL/api/") | ||||||
|  |     parser.add_argument("api_key", help="Your Baserow API key.") | ||||||
|  |     parser.add_argument("--database_id", help="ID of the Baserow database you want to fetch data from.", default=None) | ||||||
|  |     parser.add_argument("--table_ids", help="IDs of the Baserow tables you want to fetch data from, separated by commas.", default=None) | ||||||
|  |     parser.add_argument("--matrix", action="store_true", help="Merge tables based on references.") | ||||||
|  |     parser.add_argument("-v", "--verbose", action="store_true", help="Enable verbose mode for debugging.") | ||||||
|  |     parser.add_argument("--linked_fields", action="store_true", help="Outputs the linked tables") | ||||||
|  |     parser.add_argument("--quiet", action="store_true", help="Suppress output of json") | ||||||
|  |     return parser.parse_args() | ||||||
|  |  | ||||||
|  | def fetch_table_data(api, table_ids_str): | ||||||
|  |     table_ids = table_ids_str.split(',') | ||||||
|  |     tables_data = {} | ||||||
|  |     for table_id in table_ids: | ||||||
|  |         table_data = api.get_all_rows_from_table(table_id.strip()) | ||||||
|  |         tables_data[table_id] = table_data | ||||||
|  |     return tables_data | ||||||
|  |  | ||||||
|  | if __name__ == "__main__": | ||||||
|  |     main() | ||||||
							
								
								
									
										38
									
								
								main.py
									
									
									
									
									
								
							
							
						
						
									
										38
									
								
								main.py
									
									
									
									
									
								
							| @@ -1,38 +1,4 @@ | |||||||
| import argparse | import controller | ||||||
| import json |  | ||||||
|  |  | ||||||
| from baserow_api import BaserowAPI |  | ||||||
|  |  | ||||||
| if __name__ == "__main__": | if __name__ == "__main__": | ||||||
|     parser = argparse.ArgumentParser(description="Fetch all data from a Baserow database.") |     controller.main() | ||||||
|     parser.add_argument("base_url", help="Base URL of your Baserow instance, e.g., https://YOUR_BASEROW_INSTANCE_URL/api/") |  | ||||||
|     parser.add_argument("api_key", help="Your Baserow API key.") |  | ||||||
|     parser.add_argument("--database_id", help="ID of the Baserow database you want to fetch data from.", default=None) |  | ||||||
|     parser.add_argument("--table_ids", help="IDs of the Baserow tables you want to fetch data from, separated by commas.", default=None) |  | ||||||
|     parser.add_argument("--matrix", action="store_true", help="Merge tables based on references.") |  | ||||||
|     parser.add_argument("-v", "--verbose", action="store_true", help="Enable verbose mode for debugging.") |  | ||||||
|     parser.add_argument("--linked_fields", action="store_true", help="Outputs the linked tables") |  | ||||||
|     parser.add_argument("--quiet", action="store_true", help="Suppress output of json") |  | ||||||
|  |  | ||||||
|     args = parser.parse_args() |  | ||||||
|     api = BaserowAPI(args.base_url, args.api_key, args.verbose) |  | ||||||
|  |  | ||||||
|     if not args.database_id and not args.table_ids: |  | ||||||
|         print("Error: Either database_id or table_ids must be provided.") |  | ||||||
|         exit(1) |  | ||||||
|  |  | ||||||
|     if args.table_ids: |  | ||||||
|         table_ids = args.table_ids.split(',') |  | ||||||
|         tables_data = {} |  | ||||||
|         for table_id in table_ids: |  | ||||||
|             table_data = api.get_all_rows_from_table(table_id.strip()) |  | ||||||
|             tables_data[table_id] = table_data |  | ||||||
|  |  | ||||||
|         if args.matrix: |  | ||||||
|             merged_data = api.merge_tables_on_reference(tables_data) |  | ||||||
|             if not args.quiet: print(json.dumps(merged_data, indent=4)) |  | ||||||
|         else: |  | ||||||
|             if not args.quiet: print(json.dumps(tables_data, indent=4)) |  | ||||||
|     else: |  | ||||||
|         all_data = api.get_all_data_from_database(args.database_id) |  | ||||||
|         if not args.quiet: print(json.dumps(all_data, indent=4)) |  | ||||||
		Reference in New Issue
	
	Block a user