pyxecm 2.0.4__tar.gz → 3.0.1__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.

Potentially problematic release.


This version of pyxecm might be problematic. Click here for more details.

Files changed (113) hide show
  1. pyxecm-3.0.1/.gitignore +25 -0
  2. pyxecm-3.0.1/PKG-INFO +126 -0
  3. pyxecm-3.0.1/README.md +76 -0
  4. pyxecm-3.0.1/pyproject.toml +88 -0
  5. {pyxecm-2.0.4 → pyxecm-3.0.1/src}/pyxecm/coreshare.py +5 -3
  6. {pyxecm-2.0.4 → pyxecm-3.0.1/src}/pyxecm/helper/data.py +4 -4
  7. pyxecm-3.0.1/src/pyxecm/helper/otel_config.py +26 -0
  8. {pyxecm-2.0.4 → pyxecm-3.0.1/src}/pyxecm/helper/web.py +1 -2
  9. pyxecm-3.0.1/src/pyxecm/otca.py +2075 -0
  10. {pyxecm-2.0.4 → pyxecm-3.0.1/src}/pyxecm/otcs.py +2354 -593
  11. {pyxecm-2.0.4 → pyxecm-3.0.1/src}/pyxecm/otds.py +1 -1
  12. {pyxecm-2.0.4 → pyxecm-3.0.1/src}/pyxecm/otmm.py +4 -5
  13. pyxecm-3.0.1/src/pyxecm/py.typed +0 -0
  14. {pyxecm-2.0.4/pyxecm/customizer/api → pyxecm-3.0.1/src/pyxecm_api}/__main__.py +1 -1
  15. pyxecm-3.0.1/src/pyxecm_api/agents/__init__.py +7 -0
  16. pyxecm-3.0.1/src/pyxecm_api/agents/app.py +13 -0
  17. pyxecm-3.0.1/src/pyxecm_api/agents/functions.py +119 -0
  18. pyxecm-3.0.1/src/pyxecm_api/agents/models.py +10 -0
  19. pyxecm-3.0.1/src/pyxecm_api/agents/otcm_knowledgegraph/functions.py +85 -0
  20. pyxecm-3.0.1/src/pyxecm_api/agents/otcm_knowledgegraph/models.py +61 -0
  21. pyxecm-3.0.1/src/pyxecm_api/agents/otcm_knowledgegraph/router.py +74 -0
  22. pyxecm-3.0.1/src/pyxecm_api/agents/otcm_user_agent/models.py +20 -0
  23. pyxecm-3.0.1/src/pyxecm_api/agents/otcm_user_agent/router.py +65 -0
  24. pyxecm-3.0.1/src/pyxecm_api/agents/otcm_workspace_agent/models.py +40 -0
  25. pyxecm-3.0.1/src/pyxecm_api/agents/otcm_workspace_agent/router.py +200 -0
  26. pyxecm-3.0.1/src/pyxecm_api/app.py +221 -0
  27. {pyxecm-2.0.4/pyxecm/customizer/api → pyxecm-3.0.1/src/pyxecm_api}/auth/functions.py +10 -2
  28. {pyxecm-2.0.4/pyxecm/customizer/api → pyxecm-3.0.1/src/pyxecm_api}/auth/router.py +4 -3
  29. {pyxecm-2.0.4/pyxecm/customizer/api → pyxecm-3.0.1/src/pyxecm_api}/common/functions.py +39 -9
  30. {pyxecm-2.0.4/pyxecm/customizer/api → pyxecm-3.0.1/src/pyxecm_api}/common/metrics.py +1 -2
  31. {pyxecm-2.0.4/pyxecm/customizer/api → pyxecm-3.0.1/src/pyxecm_api}/common/router.py +7 -8
  32. {pyxecm-2.0.4/pyxecm/customizer/api → pyxecm-3.0.1/src/pyxecm_api}/settings.py +21 -6
  33. {pyxecm-2.0.4/pyxecm/customizer/api → pyxecm-3.0.1/src/pyxecm_api}/terminal/router.py +1 -1
  34. {pyxecm-2.0.4/pyxecm/customizer/api → pyxecm-3.0.1/src/pyxecm_api}/v1_csai/router.py +39 -10
  35. pyxecm-3.0.1/src/pyxecm_api/v1_csai/statics/bindings/utils.js +189 -0
  36. pyxecm-3.0.1/src/pyxecm_api/v1_csai/statics/tom-select/tom-select.complete.min.js +356 -0
  37. pyxecm-3.0.1/src/pyxecm_api/v1_csai/statics/tom-select/tom-select.css +334 -0
  38. pyxecm-3.0.1/src/pyxecm_api/v1_csai/statics/vis-9.1.2/vis-network.css +1 -0
  39. pyxecm-3.0.1/src/pyxecm_api/v1_csai/statics/vis-9.1.2/vis-network.min.js +27 -0
  40. pyxecm-3.0.1/src/pyxecm_api/v1_maintenance/__init__.py +1 -0
  41. {pyxecm-2.0.4/pyxecm/customizer/api → pyxecm-3.0.1/src/pyxecm_api}/v1_maintenance/functions.py +3 -3
  42. {pyxecm-2.0.4/pyxecm/customizer/api → pyxecm-3.0.1/src/pyxecm_api}/v1_maintenance/router.py +8 -8
  43. pyxecm-3.0.1/src/pyxecm_api/v1_otcs/__init__.py +1 -0
  44. {pyxecm-2.0.4/pyxecm/customizer/api → pyxecm-3.0.1/src/pyxecm_api}/v1_otcs/functions.py +7 -5
  45. {pyxecm-2.0.4/pyxecm/customizer/api → pyxecm-3.0.1/src/pyxecm_api}/v1_otcs/router.py +8 -7
  46. pyxecm-3.0.1/src/pyxecm_api/v1_payload/__init__.py +1 -0
  47. {pyxecm-2.0.4/pyxecm/customizer/api → pyxecm-3.0.1/src/pyxecm_api}/v1_payload/functions.py +10 -7
  48. {pyxecm-2.0.4/pyxecm/customizer/api → pyxecm-3.0.1/src/pyxecm_api}/v1_payload/router.py +11 -10
  49. {pyxecm-2.0.4/pyxecm/customizer → pyxecm-3.0.1/src/pyxecm_customizer}/__init__.py +8 -0
  50. {pyxecm-2.0.4/pyxecm/customizer → pyxecm-3.0.1/src/pyxecm_customizer}/__main__.py +15 -21
  51. {pyxecm-2.0.4/pyxecm/customizer → pyxecm-3.0.1/src/pyxecm_customizer}/browser_automation.py +414 -103
  52. {pyxecm-2.0.4/pyxecm/customizer → pyxecm-3.0.1/src/pyxecm_customizer}/customizer.py +178 -116
  53. {pyxecm-2.0.4/pyxecm/customizer → pyxecm-3.0.1/src/pyxecm_customizer}/guidewire.py +60 -20
  54. {pyxecm-2.0.4/pyxecm/customizer → pyxecm-3.0.1/src/pyxecm_customizer}/k8s.py +4 -4
  55. pyxecm-3.0.1/src/pyxecm_customizer/knowledge_graph.py +719 -0
  56. pyxecm-3.0.1/src/pyxecm_customizer/log.py +35 -0
  57. {pyxecm-2.0.4/pyxecm/customizer → pyxecm-3.0.1/src/pyxecm_customizer}/m365.py +41 -33
  58. {pyxecm-2.0.4/pyxecm/customizer → pyxecm-3.0.1/src/pyxecm_customizer}/payload.py +2265 -1933
  59. {pyxecm-2.0.4/pyxecm/customizer/api/common → pyxecm-3.0.1/src/pyxecm_customizer}/payload_list.py +18 -55
  60. {pyxecm-2.0.4/pyxecm/customizer → pyxecm-3.0.1/src/pyxecm_customizer}/salesforce.py +1 -1
  61. {pyxecm-2.0.4/pyxecm/customizer → pyxecm-3.0.1/src/pyxecm_customizer}/sap.py +6 -2
  62. {pyxecm-2.0.4/pyxecm/customizer → pyxecm-3.0.1/src/pyxecm_customizer}/servicenow.py +2 -4
  63. {pyxecm-2.0.4/pyxecm/customizer → pyxecm-3.0.1/src/pyxecm_customizer}/settings.py +7 -6
  64. {pyxecm-2.0.4/pyxecm/customizer → pyxecm-3.0.1/src/pyxecm_customizer}/successfactors.py +40 -28
  65. {pyxecm-2.0.4/pyxecm/customizer → pyxecm-3.0.1/src/pyxecm_customizer}/translate.py +1 -1
  66. {pyxecm-2.0.4/pyxecm/maintenance_page → pyxecm-3.0.1/src/pyxecm_maintenance_page}/__main__.py +1 -1
  67. {pyxecm-2.0.4/pyxecm/maintenance_page → pyxecm-3.0.1/src/pyxecm_maintenance_page}/app.py +14 -8
  68. pyxecm-2.0.4/LICENSE +0 -202
  69. pyxecm-2.0.4/PKG-INFO +0 -119
  70. pyxecm-2.0.4/README.md +0 -66
  71. pyxecm-2.0.4/pyproject.toml +0 -202
  72. pyxecm-2.0.4/pyxecm/customizer/api/app.py +0 -157
  73. pyxecm-2.0.4/pyxecm/customizer/log.py +0 -107
  74. pyxecm-2.0.4/pyxecm/customizer/nhc.py +0 -1169
  75. pyxecm-2.0.4/pyxecm/customizer/openapi.py +0 -258
  76. pyxecm-2.0.4/pyxecm/customizer/pht.py +0 -1357
  77. pyxecm-2.0.4/pyxecm/otca.py +0 -735
  78. pyxecm-2.0.4/pyxecm.egg-info/PKG-INFO +0 -119
  79. pyxecm-2.0.4/pyxecm.egg-info/SOURCES.txt +0 -82
  80. pyxecm-2.0.4/pyxecm.egg-info/dependency_links.txt +0 -1
  81. pyxecm-2.0.4/pyxecm.egg-info/requires.txt +0 -38
  82. pyxecm-2.0.4/pyxecm.egg-info/top_level.txt +0 -1
  83. pyxecm-2.0.4/setup.cfg +0 -4
  84. pyxecm-2.0.4/setup.py +0 -3
  85. {pyxecm-2.0.4 → pyxecm-3.0.1/src}/pyxecm/__init__.py +0 -0
  86. {pyxecm-2.0.4 → pyxecm-3.0.1/src}/pyxecm/avts.py +0 -0
  87. {pyxecm-2.0.4 → pyxecm-3.0.1/src}/pyxecm/helper/__init__.py +0 -0
  88. {pyxecm-2.0.4 → pyxecm-3.0.1/src}/pyxecm/helper/assoc.py +0 -0
  89. {pyxecm-2.0.4 → pyxecm-3.0.1/src}/pyxecm/helper/logadapter.py +0 -0
  90. {pyxecm-2.0.4 → pyxecm-3.0.1/src}/pyxecm/helper/xml.py +0 -0
  91. {pyxecm-2.0.4 → pyxecm-3.0.1/src}/pyxecm/otac.py +0 -0
  92. {pyxecm-2.0.4 → pyxecm-3.0.1/src}/pyxecm/otawp.py +0 -0
  93. {pyxecm-2.0.4 → pyxecm-3.0.1/src}/pyxecm/otiv.py +0 -0
  94. {pyxecm-2.0.4 → pyxecm-3.0.1/src}/pyxecm/otkd.py +0 -0
  95. {pyxecm-2.0.4 → pyxecm-3.0.1/src}/pyxecm/otpd.py +0 -0
  96. {pyxecm-2.0.4/pyxecm/customizer/api → pyxecm-3.0.1/src/pyxecm_api}/__init__.py +0 -0
  97. {pyxecm-2.0.4/pyxecm/customizer/api/auth → pyxecm-3.0.1/src/pyxecm_api/agents/otcm_knowledgegraph}/__init__.py +0 -0
  98. {pyxecm-2.0.4/pyxecm/customizer/api/common → pyxecm-3.0.1/src/pyxecm_api/agents/otcm_user_agent}/__init__.py +0 -0
  99. {pyxecm-2.0.4/pyxecm/customizer/api/v1_csai → pyxecm-3.0.1/src/pyxecm_api/agents/otcm_workspace_agent}/__init__.py +0 -0
  100. {pyxecm-2.0.4/pyxecm/customizer/api/v1_maintenance → pyxecm-3.0.1/src/pyxecm_api/auth}/__init__.py +0 -0
  101. {pyxecm-2.0.4/pyxecm/customizer/api → pyxecm-3.0.1/src/pyxecm_api}/auth/models.py +0 -0
  102. {pyxecm-2.0.4/pyxecm/customizer/api/v1_otcs → pyxecm-3.0.1/src/pyxecm_api/common}/__init__.py +0 -0
  103. {pyxecm-2.0.4/pyxecm/customizer/api → pyxecm-3.0.1/src/pyxecm_api}/common/models.py +0 -0
  104. {pyxecm-2.0.4/pyxecm/customizer/api → pyxecm-3.0.1/src/pyxecm_api}/terminal/__init__.py +0 -0
  105. {pyxecm-2.0.4/pyxecm/customizer/api/v1_payload → pyxecm-3.0.1/src/pyxecm_api/v1_csai}/__init__.py +0 -0
  106. {pyxecm-2.0.4/pyxecm/customizer/api → pyxecm-3.0.1/src/pyxecm_api}/v1_csai/models.py +0 -0
  107. {pyxecm-2.0.4/pyxecm/customizer/api → pyxecm-3.0.1/src/pyxecm_api}/v1_maintenance/models.py +0 -0
  108. {pyxecm-2.0.4/pyxecm/customizer/api → pyxecm-3.0.1/src/pyxecm_api}/v1_payload/models.py +0 -0
  109. {pyxecm-2.0.4/pyxecm/customizer → pyxecm-3.0.1/src/pyxecm_customizer}/exceptions.py +0 -0
  110. {pyxecm-2.0.4/pyxecm/maintenance_page → pyxecm-3.0.1/src/pyxecm_maintenance_page}/__init__.py +0 -0
  111. {pyxecm-2.0.4/pyxecm/maintenance_page → pyxecm-3.0.1/src/pyxecm_maintenance_page}/settings.py +0 -0
  112. {pyxecm-2.0.4/pyxecm/maintenance_page → pyxecm-3.0.1/src/pyxecm_maintenance_page}/static/favicon.avif +0 -0
  113. {pyxecm-2.0.4/pyxecm/maintenance_page → pyxecm-3.0.1/src/pyxecm_maintenance_page}/templates/maintenance.html +0 -0
@@ -0,0 +1,25 @@
1
+ public/
2
+ dist/
3
+ pyxecm.egg-info/
4
+ pyxecm/__pycache__/
5
+ .venv/
6
+ .debug/
7
+ pyxecm/helper/__pycache__/
8
+ __pycache__
9
+ build/
10
+ .env
11
+ ~$*
12
+ debug/logs/
13
+ .env.*
14
+ .ruff_cache
15
+ uv.lock
16
+ customizerapisettings_doc.md
17
+ customizerapisettings.env
18
+ customizerapisettings.md
19
+ customizersettings_doc.md
20
+ customizersettings.env
21
+ coverage.xml
22
+ junit.xml
23
+ .coverage
24
+ lib/
25
+ /root.html
pyxecm-3.0.1/PKG-INFO ADDED
@@ -0,0 +1,126 @@
1
+ Metadata-Version: 2.4
2
+ Name: pyxecm
3
+ Version: 3.0.1
4
+ Summary: A Python library to interact with Opentext Content Management Rest API
5
+ Project-URL: Homepage, https://github.com/opentext/pyxecm
6
+ Author-email: Kai Gatzweiler <kgatzweiler@opentext.com>, "Dr. Marc Diefenbruch" <mdiefenb@opentext.com>
7
+ Keywords: appworks,archivecenter,contentserver,extendedecm,opentext,otds
8
+ Classifier: Development Status :: 4 - Beta
9
+ Classifier: Intended Audience :: Developers
10
+ Classifier: License :: OSI Approved :: Apache Software License
11
+ Classifier: Operating System :: OS Independent
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content :: Content Management System
14
+ Requires-Python: >=3.10
15
+ Requires-Dist: lxml>=6.0.0
16
+ Requires-Dist: opentelemetry-api>=1.34.1
17
+ Requires-Dist: opentelemetry-exporter-otlp>=1.34.1
18
+ Requires-Dist: opentelemetry-instrumentation-requests>=0.55b1
19
+ Requires-Dist: opentelemetry-instrumentation-threading>=0.55b1
20
+ Requires-Dist: opentelemetry-sdk>=1.34.1
21
+ Requires-Dist: pandas>=2.3.1
22
+ Requires-Dist: requests-toolbelt>=1.0.0
23
+ Requires-Dist: requests>=2.32.4
24
+ Requires-Dist: suds>=1.2.0
25
+ Requires-Dist: websockets>=15.0.1
26
+ Requires-Dist: xmltodict>=0.14.2
27
+ Provides-Extra: api
28
+ Requires-Dist: asyncio>=3.4.3; extra == 'api'
29
+ Requires-Dist: fastapi>=0.116.0; extra == 'api'
30
+ Requires-Dist: jinja2>=3.1.6; extra == 'api'
31
+ Requires-Dist: opentelemetry-api>=1.34.1; extra == 'api'
32
+ Requires-Dist: opentelemetry-instrumentation-fastapi>=0.55b1; extra == 'api'
33
+ Requires-Dist: opentelemetry-sdk>=1.34.1; extra == 'api'
34
+ Requires-Dist: prometheus-fastapi-instrumentator>=7.1.0; extra == 'api'
35
+ Requires-Dist: pydantic-settings>=2.10.1; extra == 'api'
36
+ Requires-Dist: python-multipart>=0.0.20; extra == 'api'
37
+ Requires-Dist: uvicorn>=0.35.0; extra == 'api'
38
+ Provides-Extra: customizer
39
+ Requires-Dist: kubernetes>=33.1.0; extra == 'customizer'
40
+ Requires-Dist: playwright>=1.53.0; extra == 'customizer'
41
+ Requires-Dist: pydantic>=2.11.7; extra == 'customizer'
42
+ Requires-Dist: python-hcl2>=7.2.1; extra == 'customizer'
43
+ Provides-Extra: magic
44
+ Requires-Dist: python-magic; extra == 'magic'
45
+ Provides-Extra: pyvis
46
+ Requires-Dist: pyvis>=0.3.2; extra == 'pyvis'
47
+ Provides-Extra: sap
48
+ Requires-Dist: pyrfc==3.3.1; extra == 'sap'
49
+ Description-Content-Type: text/markdown
50
+
51
+ # PYXECM
52
+
53
+ A python library to interact with Opentext Content Mangement REST API.
54
+ The product API documentation is available on [OpenText Developer](https://developer.opentext.com/ce/products/extendedecm)
55
+ Detailed documentation of this package is available [here](https://opentext.github.io/pyxecm/).
56
+
57
+ ## Quick start - Library usage
58
+
59
+ Install the latest version from pypi:
60
+
61
+ ```bash
62
+ pip install pyxecm
63
+ ```
64
+
65
+ ### Start using the package libraries
66
+
67
+ example usage of the OTCS class, more details can be found in the docs:
68
+
69
+ ```python
70
+ from pyxecm import OTCS
71
+
72
+ otcs_object = OTCS(
73
+ protocol="https",
74
+ hostname="otcs.domain.tld",
75
+ port="443",
76
+ public_url="otcs.domain.tld",
77
+ username="admin",
78
+ password="********",
79
+ base_path="/cs/llisapi.dll",
80
+ )
81
+
82
+ otcs_object.authenticate()
83
+
84
+ nodes = otcs_object.get_subnodes(2000)
85
+
86
+ for node in nodes["results"]:
87
+ print(node["data"]["properties"]["id"], node["data"]["properties"]["name"])
88
+ ```
89
+
90
+ ## Quick start - Customizer usage
91
+
92
+ - Create an `.env` file as described here: [sample-environment-variables](customizerapisettings/#sample-environment-variables)
93
+ - Create an payload file to define what the customizer should do, as described here [payload-syntax](payload-syntax)
94
+
95
+ ```bash
96
+ pip install pyxecm[customizer]
97
+
98
+ pyxecm-customizer PAYLOAD.tfvars/PAYLOAD.yaml
99
+ ```
100
+
101
+ ## Quick start - API
102
+
103
+ - Install pyxecm with api and customizer dependencies
104
+ - Launch the Rest API server
105
+ - Access the Customizer API at [http://localhost:8000/api](http://localhost:8000/api)
106
+
107
+ ```bash
108
+ pip install pyxecm[api,customizer]
109
+
110
+ pyxecm-api
111
+ ```
112
+
113
+ ## Disclaimer
114
+
115
+
116
+ Copyright © 2025 Open Text Corporation, All Rights Reserved.
117
+ The above copyright notice and this permission notice shall be included in all
118
+ copies or substantial portions of the Software.
119
+
120
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
121
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
122
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
123
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
124
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
125
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
126
+ SOFTWARE.
pyxecm-3.0.1/README.md ADDED
@@ -0,0 +1,76 @@
1
+ # PYXECM
2
+
3
+ A python library to interact with Opentext Content Mangement REST API.
4
+ The product API documentation is available on [OpenText Developer](https://developer.opentext.com/ce/products/extendedecm)
5
+ Detailed documentation of this package is available [here](https://opentext.github.io/pyxecm/).
6
+
7
+ ## Quick start - Library usage
8
+
9
+ Install the latest version from pypi:
10
+
11
+ ```bash
12
+ pip install pyxecm
13
+ ```
14
+
15
+ ### Start using the package libraries
16
+
17
+ example usage of the OTCS class, more details can be found in the docs:
18
+
19
+ ```python
20
+ from pyxecm import OTCS
21
+
22
+ otcs_object = OTCS(
23
+ protocol="https",
24
+ hostname="otcs.domain.tld",
25
+ port="443",
26
+ public_url="otcs.domain.tld",
27
+ username="admin",
28
+ password="********",
29
+ base_path="/cs/llisapi.dll",
30
+ )
31
+
32
+ otcs_object.authenticate()
33
+
34
+ nodes = otcs_object.get_subnodes(2000)
35
+
36
+ for node in nodes["results"]:
37
+ print(node["data"]["properties"]["id"], node["data"]["properties"]["name"])
38
+ ```
39
+
40
+ ## Quick start - Customizer usage
41
+
42
+ - Create an `.env` file as described here: [sample-environment-variables](customizerapisettings/#sample-environment-variables)
43
+ - Create an payload file to define what the customizer should do, as described here [payload-syntax](payload-syntax)
44
+
45
+ ```bash
46
+ pip install pyxecm[customizer]
47
+
48
+ pyxecm-customizer PAYLOAD.tfvars/PAYLOAD.yaml
49
+ ```
50
+
51
+ ## Quick start - API
52
+
53
+ - Install pyxecm with api and customizer dependencies
54
+ - Launch the Rest API server
55
+ - Access the Customizer API at [http://localhost:8000/api](http://localhost:8000/api)
56
+
57
+ ```bash
58
+ pip install pyxecm[api,customizer]
59
+
60
+ pyxecm-api
61
+ ```
62
+
63
+ ## Disclaimer
64
+
65
+
66
+ Copyright © 2025 Open Text Corporation, All Rights Reserved.
67
+ The above copyright notice and this permission notice shall be included in all
68
+ copies or substantial portions of the Software.
69
+
70
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
71
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
72
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
73
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
74
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
75
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
76
+ SOFTWARE.
@@ -0,0 +1,88 @@
1
+ [project]
2
+ name = "pyxecm"
3
+ version = "3.0.1"
4
+ description = 'A Python library to interact with Opentext Content Management Rest API'
5
+ keywords = [
6
+ 'opentext',
7
+ 'extendedecm',
8
+ 'contentserver',
9
+ 'otds',
10
+ 'appworks',
11
+ 'archivecenter',
12
+ ]
13
+ readme = "README.md"
14
+ authors = [
15
+ { name = "Kai Gatzweiler", email = "kgatzweiler@opentext.com" },
16
+ { name = "Dr. Marc Diefenbruch", email = "mdiefenb@opentext.com" },
17
+ ]
18
+ requires-python = '>=3.10'
19
+ dependencies = [
20
+ "lxml>=6.0.0",
21
+ "opentelemetry-api>=1.34.1",
22
+ "opentelemetry-exporter-otlp>=1.34.1",
23
+ "opentelemetry-instrumentation-requests>=0.55b1",
24
+ "opentelemetry-instrumentation-threading>=0.55b1",
25
+ "opentelemetry-sdk>=1.34.1",
26
+ "pandas>=2.3.1",
27
+ "requests>=2.32.4",
28
+ "requests-toolbelt>=1.0.0",
29
+ "suds>=1.2.0",
30
+ "websockets>=15.0.1",
31
+ "xmltodict>=0.14.2",
32
+ ]
33
+ classifiers = [
34
+ 'Development Status :: 4 - Beta',
35
+ 'Programming Language :: Python :: 3',
36
+ 'License :: OSI Approved :: Apache Software License',
37
+ 'Operating System :: OS Independent',
38
+ 'Intended Audience :: Developers',
39
+ 'Topic :: Internet :: WWW/HTTP :: Dynamic Content :: Content Management System',
40
+ ]
41
+
42
+ [project.optional-dependencies]
43
+ magic = ['python-magic']
44
+ sap = ['pyrfc==3.3.1']
45
+ pyvis = ["pyvis>=0.3.2"]
46
+ customizer = [
47
+ "kubernetes>=33.1.0",
48
+ "playwright>=1.53.0",
49
+ "pydantic>=2.11.7",
50
+ "python-hcl2>=7.2.1",
51
+ ]
52
+ api = [
53
+ "asyncio>=3.4.3",
54
+ "fastapi>=0.116.0",
55
+ "jinja2>=3.1.6",
56
+ "opentelemetry-api>=1.34.1",
57
+ "opentelemetry-instrumentation-fastapi>=0.55b1",
58
+ "opentelemetry-sdk>=1.34.1",
59
+ "prometheus-fastapi-instrumentator>=7.1.0",
60
+ "pydantic-settings>=2.10.1",
61
+ "python-multipart>=0.0.20",
62
+ "uvicorn>=0.35.0",
63
+ ]
64
+
65
+ [project.urls]
66
+ Homepage = 'https://github.com/opentext/pyxecm'
67
+
68
+ [build-system]
69
+ requires = ["hatchling"]
70
+ build-backend = "hatchling.build"
71
+
72
+ [tool.hatch.build.targets.wheel]
73
+ packages = [
74
+ "src/pyxecm",
75
+ "src/pyxecm_api",
76
+ "src/pyxecm_customizer",
77
+ "src/pyxecm_maintenance_page",
78
+ ]
79
+
80
+ [tool.hatch.build.targets.sdist]
81
+ exclude = [
82
+ "tests/**"
83
+ ]
84
+
85
+ [project.scripts]
86
+ pyxecm-api = "pyxecm_api:run_api"
87
+ pyxecm-customizer = "pyxecm_customizer:main"
88
+ pyxecm-maintenance-page = "pyxecm_maintenance_page:run_api"
@@ -2590,7 +2590,8 @@ class CoreShare:
2590
2590
  is_confirmed = self.get_result_value(response=user, key="isConfirmed")
2591
2591
  if not is_confirmed:
2592
2592
  self.logger.info(
2593
- "User -> %s is not yet confirmed - so it cannot have files to cleanup.",
2593
+ "User -> %s (%s) is not yet confirmed - so it cannot have files to cleanup.",
2594
+ user_login,
2594
2595
  user_id,
2595
2596
  )
2596
2597
  return True
@@ -2612,14 +2613,15 @@ class CoreShare:
2612
2613
  # Get all folders of the user:
2613
2614
  response = self.get_folders(parent_id=user_root_folder_id)
2614
2615
  if not response or not response["results"]:
2615
- self.logger.info("User -> %s has no items to cleanup!", user_id)
2616
+ self.logger.info("User -> %s (%s) has no items to cleanup!", user_login, user_id)
2616
2617
  else:
2617
2618
  items = response["results"]
2618
2619
  for item in items:
2619
2620
  if item["isShared"]:
2620
2621
  if item["owner"]["id"] == user_id:
2621
2622
  self.logger.info(
2622
- "User -> %s stops sharing item -> %s (%s)...",
2623
+ "User -> %s (%s) stops sharing item -> %s (%s)...",
2624
+ user_login,
2623
2625
  user_id,
2624
2626
  item["name"],
2625
2627
  item["id"],
@@ -1410,7 +1410,7 @@ class Data:
1410
1410
  for value in values:
1411
1411
  # Do we want a special treatment for this value (e.g. the current year)
1412
1412
  if value in special_values:
1413
- self.logger.info("Processing special value -> '%s'...", value)
1413
+ self.logger.debug("Processing special value -> '%s'...", value)
1414
1414
  if value not in special_url_templates and str(value) not in special_url_templates:
1415
1415
  self.logger.error(
1416
1416
  "Cannot find key -> '%s' in special URL templates dictionary -> %s! Skipping...",
@@ -2127,7 +2127,7 @@ class Data:
2127
2127
  )
2128
2128
  continue
2129
2129
  # Apply cleansing to dictionary values in the main column
2130
- self.logger.info(
2130
+ self.logger.debug(
2131
2131
  "Cleansing for column -> '%s' has a subfield -> '%s' configured. Do cleansing for dictionary items with key -> '%s'...",
2132
2132
  column,
2133
2133
  dict_key,
@@ -2165,7 +2165,7 @@ class Data:
2165
2165
  # Handle string columns:
2166
2166
  if self.is_string_column(self._df[column]):
2167
2167
  # Apply cleansing operations on string column
2168
- self.logger.info(
2168
+ self.logger.debug(
2169
2169
  "Column -> '%s' has string values. Do cleansing for string values...",
2170
2170
  column,
2171
2171
  )
@@ -2195,7 +2195,7 @@ class Data:
2195
2195
  elif self.is_list_column(self._df[column]):
2196
2196
  # Handle list-like columns for this we iterate over each list item
2197
2197
  # and apply the cleansing by calling _apply_string_cleansing() for item:
2198
- self.logger.info(
2198
+ self.logger.debug(
2199
2199
  "Column -> '%s' has list values. Do cleansing for each list item...",
2200
2200
  column,
2201
2201
  )
@@ -0,0 +1,26 @@
1
+ """Define OpenTelemtry configuration."""
2
+
3
+ import os
4
+
5
+ from opentelemetry import trace
6
+ from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
7
+ from opentelemetry.instrumentation.requests import RequestsInstrumentor
8
+ from opentelemetry.instrumentation.threading import ThreadingInstrumentor
9
+ from opentelemetry.sdk.resources import SERVICE_NAME, Resource
10
+ from opentelemetry.sdk.trace import TracerProvider
11
+ from opentelemetry.sdk.trace.export import BatchSpanProcessor
12
+
13
+ resource = Resource.create(attributes={SERVICE_NAME: "pyxecm"})
14
+
15
+ trace.set_tracer_provider(TracerProvider(resource=resource))
16
+
17
+ if os.getenv("OTEL_EXPORTER_OTLP_ENDPOINT"):
18
+ trace.get_tracer_provider().add_span_processor(
19
+ BatchSpanProcessor(OTLPSpanExporter()),
20
+ )
21
+
22
+ # Auto-instrument requests
23
+ RequestsInstrumentor().instrument()
24
+ ThreadingInstrumentor().instrument()
25
+
26
+ tracer = trace.get_tracer("pyxecm")
@@ -326,8 +326,7 @@ class HTTP:
326
326
  )
327
327
  os.makedirs(directory)
328
328
  with open(filename, "wb") as download_file:
329
- for chunk in response.iter_content(chunk_size=chunk_size):
330
- download_file.write(chunk)
329
+ download_file.writelines(response.iter_content(chunk_size=chunk_size))
331
330
  self.logger.debug(
332
331
  "File downloaded successfully as -> '%s' (size -> %s).",
333
332
  filename,