OpenMetadata/add_remaining_create_methods.py
Sriharsha Chintalapani bb1395fc72
Implement Modern Fluent API Pattern for OpenMetadata Java Client (#23239)
* Implement Modern Fluent API Pattern for OpenMetadata Java Client

* Add Lineage, Bulk, Search static methods

* Add all API support for Java & Python SDKs

* Add Python SDKs and mock tests

* Add Fluent APIs for sdks

* Add Fluent APIs for sdks

* Add Fluent APIs for sdks, support async import/export

* Remove unnecessary scripts

* fix py checkstyle

* fix tests with new plural form sdks

* Fix tests

* remove examples from python sdk

* remove examples from python sdk

* Fix type check

* Fix pyformat check

* Fix pyformat check

* fix python integration tests

* fix pycheck and pytests

* fix search api pycheck

* fix pycheck

* fix pycheck

* fix pycheck

* Fix test_sdk_integration

* Improvements to SDK

* Remove SDK coverage for Python 3.9

* Remove SDK coverage for Python 3.9

* Remove SDK coverage for Python 3.9
2025-09-29 16:07:02 -07:00

104 lines
4.0 KiB
Python

#!/usr/bin/env python3
"""Add create methods to remaining service classes."""
import os
import re
def add_create_method(filepath, entity, create_class):
"""Add a create method to a service class."""
with open(filepath, 'r') as f:
content = f.read()
# Check if method already exists
if f"public {entity} create({create_class} request)" in content:
return False
# Find the package for the Create class
packages = {
"CreateTag": "org.openmetadata.schema.api.classification",
"CreateClassification": "org.openmetadata.schema.api.classification",
"CreateStoredProcedure": "org.openmetadata.schema.api.data",
"CreateContainer": "org.openmetadata.schema.api.data",
"CreateGlossary": "org.openmetadata.schema.api.data",
"CreateGlossaryTerm": "org.openmetadata.schema.api.data"
}
package = packages.get(create_class, "org.openmetadata.schema.api.data")
# Add import if not present
import_line = f"import {package}.{create_class};"
if import_line not in content:
# Add after the package declaration and existing imports
lines = content.split('\n')
import_index = -1
for i, line in enumerate(lines):
if line.startswith('import org.openmetadata.'):
import_index = i
if import_index > 0:
lines.insert(import_index + 1, import_line)
content = '\n'.join(lines)
# Add create method before the closing brace
create_method = f"""
// Create {entity.lower()} using {create_class} request
public {entity} create({create_class} request) throws OpenMetadataException {{
return httpClient.execute(HttpMethod.POST, basePath, request, {entity}.class);
}}"""
# Find the last closing brace
last_brace = content.rfind('}')
if last_brace > 0:
content = content[:last_brace] + create_method + '\n' + content[last_brace:]
# Also add OpenMetadataException import if needed
if "import org.openmetadata.sdk.exceptions.OpenMetadataException;" not in content:
lines = content.split('\n')
for i, line in enumerate(lines):
if line.startswith('import org.openmetadata.sdk.'):
lines.insert(i + 1, "import org.openmetadata.sdk.exceptions.OpenMetadataException;")
content = '\n'.join(lines)
break
# Add HttpMethod import if needed
if "import org.openmetadata.sdk.network.HttpMethod;" not in content:
lines = content.split('\n')
for i, line in enumerate(lines):
if line.startswith('import org.openmetadata.sdk.network.'):
lines.insert(i + 1, "import org.openmetadata.sdk.network.HttpMethod;")
content = '\n'.join(lines)
break
with open(filepath, 'w') as f:
f.write(content)
return True
def main():
services_to_fix = [
("classification/TagService.java", "Tag", "CreateTag"),
("classification/ClassificationService.java", "Classification", "CreateClassification"),
("databases/StoredProcedureService.java", "StoredProcedure", "CreateStoredProcedure"),
("storages/ContainerService.java", "Container", "CreateContainer"),
("glossary/GlossaryService.java", "Glossary", "CreateGlossary"),
("glossary/GlossaryTermService.java", "GlossaryTerm", "CreateGlossaryTerm")
]
services_dir = "openmetadata-sdk/src/main/java/org/openmetadata/sdk/services"
fixed_count = 0
for relative_path, entity, create_class in services_to_fix:
filepath = os.path.join(services_dir, relative_path)
if os.path.exists(filepath):
if add_create_method(filepath, entity, create_class):
print(f"Added create method to {relative_path}")
fixed_count += 1
else:
print(f"Method already exists in {relative_path}")
else:
print(f"File not found: {filepath}")
print(f"\nFixed {fixed_count} service files")
if __name__ == "__main__":
main()