octue / octue-sdk-python

The python SDK for @Octue services and digital twins.
https://octue.com
Other
9 stars 3 forks source link

Make octue services easy to test and patch #658

Closed nvn-nil closed 2 days ago

nvn-nil commented 2 months ago

Feature request

Use Case

Create Google Cloud clients only as required to make it easy to test applications using octue. I recommend reviewing other uses of Google clients too.

Or maybe provide an escape hatch by providing an offline/local mode for tests.

Thanks in advance!

Current state

The clients for different google services are created in the init function. This makes patching very difficult for tests.

I'm monkey-patching this particular one in my tests. This was easier than patching many other functions that use the client when I'm only doing local unit tests.

# Monkey patch the unnecessary credential check in init
def diagnostics_init(self, cloud_path):
    self.cloud_path = cloud_path
    self.analysis_id = None
    self.configuration_values = None
    self.configuration_manifest = None
    self.input_values = None
    self.input_manifest = None
    self.questions = []

@cached_property
def diagnostic_storage_client_property(self):
    return GoogleCloudStorageClient()

Diagnostics.__init__ = diagnostics_init
Diagnostics._storage_client = diagnostic_storage_client_property

This is obviously not ideal for a variety of reasons but was easier in my case.

cortadocodes commented 2 days ago

Thanks for the idea @nvn-nil! I've applied it to:

I'd already implemented the same thing in another way in Service (I think at your request a while ago).