-
Notifications
You must be signed in to change notification settings - Fork 326
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Creating datalinks in Enso Cloud programmatically #9673
Comments
I've already adapted our data link tests to create the datalinks themelves... but I forgot it's not yet possible: Index: test/Base_Tests/data/datalinks/example-enso-file.datalink
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/test/Base_Tests/data/datalinks/example-enso-file.datalink b/test/Base_Tests/data/datalinks/example-enso-file.datalink
--- a/test/Base_Tests/data/datalinks/example-enso-file.datalink (revision 113524b039474a92844622232e9572b30f26f248)
+++ b/test/Base_Tests/data/datalinks/example-enso-file.datalink (date 1712768831228)
@@ -1,5 +1,5 @@
{
"type": "Enso_File",
"libraryName": "Standard.Base",
- "path": "enso://PLACEHOLDER_ORG_NAME/test-directory/another.txt"
+ "path": "enso://PLACEHOLDER_ORG_NAME/PLACEHOLDER_PATH"
}
Index: test/Base_Tests/src/Network/Enso_Cloud/Cloud_Data_Link_Spec.enso
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/test/Base_Tests/src/Network/Enso_Cloud/Cloud_Data_Link_Spec.enso b/test/Base_Tests/src/Network/Enso_Cloud/Cloud_Data_Link_Spec.enso
--- a/test/Base_Tests/src/Network/Enso_Cloud/Cloud_Data_Link_Spec.enso (revision 113524b039474a92844622232e9572b30f26f248)
+++ b/test/Base_Tests/src/Network/Enso_Cloud/Cloud_Data_Link_Spec.enso (date 1712769039360)
@@ -11,24 +11,40 @@
import project.Network.Enso_Cloud.Cloud_Tests_Setup.Cloud_Tests_Setup
-add_specs suite_builder setup:Cloud_Tests_Setup = setup.with_prepared_environment <|
+type Temporary_Directory
+ Value ~get
+
+ make -> Temporary_Directory = Temporary_Directory.Value <|
+ name = "test-run-Data_Link-"+(Date_Time.now.format "yyyy-MM-dd_HHmmss.fV" . replace "/" "|")
+ root = Panic.rethrow <| Enso_File.root.create_directory name
+
+ Panic.rethrow <| Data_Link_Format.write_raw_config (root / "TestDataLink-HTTP.datalink") http_data_link_content
+ Panic.rethrow <| Data_Link_Format.write_raw_config (root / "TestDataLink-S3.datalink") s3_data_link_content
+ my_target_enso_file = "Hello Enso Cloud File!".write (root / "my-file.txt")
+ Panic.rethrow <| Data_Link_Format.write_raw_config (root / "TestDataLink-EnsoFile.datalink") (enso_file_data_link_content.replace "<PATH>" my_target_enso_file.path)
+
+ root
+
+ cleanup self = self.get.delete_if_exists
+
+add_specs suite_builder setup:Cloud_Tests_Setup =
suite_builder.group "DataLinks in Enso Cloud" pending=setup.real_cloud_pending group_builder->
+ test_root = Temporary_Directory.make
+ group_builder.teardown test_root.cleanup
+
group_builder.specify "should be able to access an example HTTP data-link" <|
- ## We assume that the cloud has a sample data-link called `TestDataLink` present
- TODO in future iterations this file will be created by the test suite itself, to make it self-contained
- assets = Enso_File.root.list
- datalink = assets.find a-> a.name.starts_with "TestDataLink-HTTP"
+ datalink = test_root.get / "TestDataLink-HTTP.datalink"
datalink.should_be_a Enso_File
datalink.asset_type.should_equal Enso_Asset_Type.Data_Link
- # We assume that the datalink points to https://raw.githubusercontent.com/enso-org/enso/develop/test/Base_Tests/data/sample.txt
- r = datalink.read
- r.should_be_a Text
- r.should_contain "Cupcake"
+ Test.with_retries <|
+ # We assume that the datalink points to
+ r = datalink.read
+ r.should_be_a Text
+ r.should_contain "Cupcake"
group_builder.specify "will report which library is missing if a datalink relying on other library is accessed" <|
- assets = Enso_File.root.list
- datalink = assets.find a-> a.name.starts_with "TestDataLink-S3"
+ datalink = test_root.get / "TestDataLink-S3.datalink"
datalink.should_be_a Enso_File
datalink.asset_type.should_equal Enso_Asset_Type.Data_Link
@@ -44,14 +60,12 @@
Data_Link_Format.read_raw_config temp_file
group_builder.specify "should be able to read a local datalink to an Enso File" <|
- datalink = replace_org_name_in_data_link (enso_project.data / "datalinks" / "example-enso-file.datalink")
- datalink.read . should_equal "Hello Another!"
+ datalink = replace_placeholder_path (enso_project.data / "datalinks" / "example-enso-file.datalink") (test_root.get / "my-file.txt")
+ datalink.read . should_equal "Hello Enso Cloud File!"
group_builder.specify "should be able to read a datalink in the Cloud to Enso File" <|
- # TODO currently this link is created manually, later we should be generating it as part of the test
- datalink = Enso_File.new "enso://"+Enso_User.current.organization_name+"/TestDataLink-EnsoFile"
- datalink.read . should_equal "Hello Another!"
-
+ datalink = Enso_File.new test_root.get.path+"/TestDataLink-EnsoFile.datalink"
+ datalink.read . should_equal "Hello Enso Cloud File!"
main filter=Nothing =
setup = Cloud_Tests_Setup.prepare
@@ -61,9 +75,34 @@
## Reads the datalink as plain text and replaces the placeholder organization name.
-replace_org_name_in_data_link base_file =
- content = Data_Link_Format.read_raw_config base_file
- org_name = Enso_User.current.organization_name
- new_content = content.replace "PLACEHOLDER_ORG_NAME" org_name
- temp_file = File.create_temporary_file prefix=base_file.name suffix=base_file.extension
+replace_placeholder_path datalink_file target_file =
+ content = Data_Link_Format.read_raw_config datalink_file
+ new_content = content.replace "enso://PLACEHOLDER_ORG_NAME/PLACEHOLDER_PATH" target_file.path
+ temp_file = File.create_temporary_file prefix=datalink_file.name suffix=datalink_file.extension
Data_Link_Format.write_raw_config temp_file new_content replace_existing=True . if_not_error temp_file
+
+http_data_link_content = """
+ {
+ "type": "HTTP",
+ "libraryName": "Standard.Base",
+ "method": "GET",
+ "uri": "https://raw.githubusercontent.com/enso-org/enso/develop/test/Base_Tests/data/sample.txt"
+ }
+
+s3_data_link_content = """
+ {
+ "type": "S3",
+ "libraryName": "Standard.AWS",
+ "uri": "s3://enso-data-samples/examples/folder 2/hello.txt",
+ "auth": {
+ "type": "aws_auth",
+ "subType": "default"
+ }
+ }
+
+enso_file_data_link_content = """
+ {
+ "type": "Enso_File",
+ "libraryName": "Standard.Base",
+ "path": "<PATH>"
+ } The goal of this ticket would be to apply this patch and ensure it actually works - we need to intercept a |
Radosław Waśko reports a new STANDUP for the provided date (2024-05-09): Progress: Work on creating datalinks programmatically: updated the tests. Added the logic for creating datalink in Enso Cloud. Debugging to make it work. Work on types: learning details of method resolution, thinking how to replicate the logic in static passes. It should be finished by 2024-05-14. Next Day: Next day I will be working on the same task. Fix the datalink creation logic. Add a method to save a datalink to Postgres connection. |
Radosław Waśko reports a new STANDUP for yesterday (2024-05-13): Progress: Debugging datalink creation. Got it fixed finally. Found a problem with wrong logic when parsing responses from cloud that went undetected because dataflow error was swallowed. Fixed the problem and ensured propagation in that case. Reported #9934. Got the tests passing with now no setup needed on cloud side - a step towards being able to run the Cloud tests on a CI. Implemented logic for saving Postgres connection as a datalink, promoting a plaintext password to a secret. It should be finished by 2024-05-14. Next Day: Next day I will be working on the same task. Test the Postgres save-as-datalink logic. Put up a PR. Start next tasks. |
Radosław Waśko reports a new STANDUP for yesterday (2024-05-14): Progress: Debugging remaining issues in the PR. Fixed error propagation in JS_Object.from_pairs. Fixed reading raw datalink data from Cloud. Fixed datalink metadata getters. PR ready. It should be finished by 2024-05-14. Next Day: Next day I will be working on the #9952 task. Start work on next tasks. Create PR for cloud path resolver update. |
- Closes #9673 - Adds the ability to save an existing Postgres connection as a datalink into the Enso Cloud, automatically promoting plain-text passwords into a Secret. - Fixes dataflow error propagation in `JS_Object.from_pairs`.
- Closes #9673 - Adds the ability to save an existing Postgres connection as a datalink into the Enso Cloud, automatically promoting plain-text passwords into a Secret. - Fixes dataflow error propagation in `JS_Object.from_pairs`.
Currently there's no way to create a datalink from Enso code.
It is not only useful for users and library creators but it is also needed so that our datalink tests could be made self-sufficient, not expecting an existing setup on the test account.
The text was updated successfully, but these errors were encountered: