parsagon 0.14.26__tar.gz → 0.14.28__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. {parsagon-0.14.26 → parsagon-0.14.28}/PKG-INFO +1 -1
  2. {parsagon-0.14.26 → parsagon-0.14.28}/pyproject.toml +1 -1
  3. {parsagon-0.14.26 → parsagon-0.14.28}/src/parsagon/api.py +13 -1
  4. {parsagon-0.14.26 → parsagon-0.14.28}/src/parsagon/executor.py +9 -0
  5. {parsagon-0.14.26 → parsagon-0.14.28}/src/parsagon/runs.py +5 -2
  6. {parsagon-0.14.26 → parsagon-0.14.28}/src/parsagon.egg-info/PKG-INFO +1 -1
  7. {parsagon-0.14.26 → parsagon-0.14.28}/README.md +0 -0
  8. {parsagon-0.14.26 → parsagon-0.14.28}/setup.cfg +0 -0
  9. {parsagon-0.14.26 → parsagon-0.14.28}/src/__init__.py +0 -0
  10. {parsagon-0.14.26 → parsagon-0.14.28}/src/parsagon/__init__.py +0 -0
  11. {parsagon-0.14.26 → parsagon-0.14.28}/src/parsagon/assistant.py +0 -0
  12. {parsagon-0.14.26 → parsagon-0.14.28}/src/parsagon/create.py +0 -0
  13. {parsagon-0.14.26 → parsagon-0.14.28}/src/parsagon/custom_function.py +0 -0
  14. {parsagon-0.14.26 → parsagon-0.14.28}/src/parsagon/edit.py +0 -0
  15. {parsagon-0.14.26 → parsagon-0.14.28}/src/parsagon/exceptions.py +0 -0
  16. {parsagon-0.14.26 → parsagon-0.14.28}/src/parsagon/gui/__init__.py +0 -0
  17. {parsagon-0.14.26 → parsagon-0.14.28}/src/parsagon/gui/controller.py +0 -0
  18. {parsagon-0.14.26 → parsagon-0.14.28}/src/parsagon/gui/menu.py +0 -0
  19. {parsagon-0.14.26 → parsagon-0.14.28}/src/parsagon/gui/window.py +0 -0
  20. {parsagon-0.14.26 → parsagon-0.14.28}/src/parsagon/gui_entry.py +0 -0
  21. {parsagon-0.14.26 → parsagon-0.14.28}/src/parsagon/highlights.js +0 -0
  22. {parsagon-0.14.26 → parsagon-0.14.28}/src/parsagon/main.py +0 -0
  23. {parsagon-0.14.26 → parsagon-0.14.28}/src/parsagon/print.py +0 -0
  24. {parsagon-0.14.26 → parsagon-0.14.28}/src/parsagon/secrets.py +0 -0
  25. {parsagon-0.14.26 → parsagon-0.14.28}/src/parsagon/settings.py +0 -0
  26. {parsagon-0.14.26 → parsagon-0.14.28}/src/parsagon/tests/__init__.py +0 -0
  27. {parsagon-0.14.26 → parsagon-0.14.28}/src/parsagon/tests/api_mocks.py +0 -0
  28. {parsagon-0.14.26 → parsagon-0.14.28}/src/parsagon/tests/conftest.py +0 -0
  29. {parsagon-0.14.26 → parsagon-0.14.28}/src/parsagon/tests/test_executor.py +0 -0
  30. {parsagon-0.14.26 → parsagon-0.14.28}/src/parsagon/tests/test_invalid_args.py +0 -0
  31. {parsagon-0.14.26 → parsagon-0.14.28}/src/parsagon/tests/test_pipeline_operations.py +0 -0
  32. {parsagon-0.14.26 → parsagon-0.14.28}/src/parsagon/tests/test_print.py +0 -0
  33. {parsagon-0.14.26 → parsagon-0.14.28}/src/parsagon/tests/test_secrets.py +0 -0
  34. {parsagon-0.14.26 → parsagon-0.14.28}/src/parsagon.egg-info/SOURCES.txt +0 -0
  35. {parsagon-0.14.26 → parsagon-0.14.28}/src/parsagon.egg-info/dependency_links.txt +0 -0
  36. {parsagon-0.14.26 → parsagon-0.14.28}/src/parsagon.egg-info/entry_points.txt +0 -0
  37. {parsagon-0.14.26 → parsagon-0.14.28}/src/parsagon.egg-info/requires.txt +0 -0
  38. {parsagon-0.14.26 → parsagon-0.14.28}/src/parsagon.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: parsagon
3
- Version: 0.14.26
3
+ Version: 0.14.28
4
4
  Summary: Allows you to create browser automations with natural language
5
5
  Author-email: Sandy Suh <sandy@parsagon.io>
6
6
  Project-URL: Homepage, https://parsagon.io
@@ -16,7 +16,7 @@ line-length = 120
16
16
 
17
17
  [project]
18
18
  name = "parsagon"
19
- version = "0.14.26"
19
+ version = "0.14.28"
20
20
  description = "Allows you to create browser automations with natural language"
21
21
  readme = "README.md"
22
22
  requires-python = ">=3.8"
@@ -235,7 +235,19 @@ def get_pipelines():
235
235
  return _api_call(httpx.get, f"/pipelines/")
236
236
 
237
237
 
238
- def get_pipeline_code(pipeline_name, variables, headless, use_uc, optimize, use_proxy):
238
+ def get_pipeline_code(pipeline_name, variables, headless, use_uc, optimize, use_proxy, pipeline_id=None):
239
+ if pipeline_id:
240
+ return _api_call(
241
+ httpx.post,
242
+ f"/pipelines/{pipeline_id}/code/",
243
+ json={
244
+ "variables": variables,
245
+ "headless": headless,
246
+ "use_uc": use_uc,
247
+ "optimize": optimize,
248
+ "use_proxy": use_proxy,
249
+ },
250
+ )
239
251
  escaped_pipeline_name = double_quote(pipeline_name)
240
252
  with RaiseProgramNotFound(pipeline_name):
241
253
  return _api_call(
@@ -141,6 +141,7 @@ class Executor:
141
141
  "join_text": self.join_text,
142
142
  "wait": self.wait,
143
143
  "get_inner_text": self.get_inner_text,
144
+ "get_inner_text_by_id": self.get_inner_text_by_id,
144
145
  "scrape_data": self.scrape_data,
145
146
  "get_str_about_data": get_str_about_data,
146
147
  "get_bool_about_data": get_bool_about_data,
@@ -566,8 +567,16 @@ class Executor:
566
567
  self.inject_highlights_script()
567
568
 
568
569
  def get_inner_text(self, window_id):
570
+ if self.driver.current_window_handle != window_id:
571
+ self.driver.switch_to.window(window_id)
569
572
  return self.driver.execute_script("return document.body.innerText;")
570
573
 
574
+ def get_inner_text_by_id(self, elem_id, window_id):
575
+ if self.driver.current_window_handle != window_id:
576
+ self.driver.switch_to.window(window_id)
577
+ elem = self._id_to_elem(elem_id)
578
+ return elem.get_attribute("innerText")
579
+
571
580
  def scrape_data(self, schema, window_id, call_id):
572
581
  """
573
582
  Scrapes data from the current page.
@@ -22,6 +22,7 @@ logger = logging.getLogger(__name__)
22
22
 
23
23
  def run(
24
24
  program_name,
25
+ program_id=None,
25
26
  variables={},
26
27
  headless=False,
27
28
  remote=False,
@@ -42,7 +43,7 @@ def run(
42
43
  raise ParsagonException("Variables must be a dictionary")
43
44
 
44
45
  logger.info("Preparing to run program %s", program_name)
45
- pipeline_id = get_pipeline(program_name)["id"]
46
+ pipeline_id = program_id or get_pipeline(program_name)["id"]
46
47
 
47
48
  if remote:
48
49
  result = create_pipeline_run(pipeline_id, variables, False)
@@ -81,7 +82,9 @@ def run(
81
82
  time.sleep(5)
82
83
 
83
84
  run = create_pipeline_run(pipeline_id, variables, True)
84
- code = get_pipeline_code(program_name, variables, headless, undetected, optimize, use_proxy)["code"]
85
+ code = get_pipeline_code(
86
+ program_name, variables, headless, undetected, optimize, use_proxy, pipeline_id=program_id
87
+ )["code"]
85
88
  start_time = datetime.datetime.now(datetime.timezone.utc).isoformat()
86
89
  run_data = {"start_time": start_time}
87
90
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: parsagon
3
- Version: 0.14.26
3
+ Version: 0.14.28
4
4
  Summary: Allows you to create browser automations with natural language
5
5
  Author-email: Sandy Suh <sandy@parsagon.io>
6
6
  Project-URL: Homepage, https://parsagon.io
File without changes
File without changes
File without changes