Metadata-Version: 2.1
Name: ecmind-blue-client
Version: 0.9.1
Summary: A client wrapper for blue
Author-email: Roland Koller <info@ecmind.ch>, Ulrich Wohlfeil <info@ecmind.ch>, Anja Genser <info@ecmind.ch>
License: MIT License
        
        Copyright (c) 2020 Roland Koller
        
        Permission is hereby granted, free of charge, to any person obtaining a copy
        of this software and associated documentation files (the "Software"), to deal
        in the Software without restriction, including without limitation the rights
        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
        copies of the Software, and to permit persons to whom the Software is
        furnished to do so, subject to the following conditions:
        
        The above copyright notice and this permission notice shall be included in all
        copies or substantial portions of the Software.
        
        THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
        SOFTWARE.
Project-URL: Homepage, https://gitlab.ecmind.ch/open/ecmind_blue_client
Project-URL: Documentation, https://gitlab.ecmind.ch/open/ecmind_blue_client/-/wikis/home
Project-URL: Repository, https://gitlab.ecmind.ch/open/ecmind_blue_client.git
Project-URL: Issues, https://ecm.community/c/python/9
Classifier: Programming Language :: Python :: 3
Classifier: Operating System :: OS Independent
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: System Administrators
Classifier: Topic :: System :: Archiving
Requires-Python: >=3.11
Description-Content-Type: text/markdown
Provides-Extra: development
Provides-Extra: TcpClient
Provides-Extra: tcp
Provides-Extra: manage
Provides-Extra: objdef
Provides-Extra: portfolio
Provides-Extra: workflow
License-File: LICENSE

# ECMind blue client

A client wrapper for blue.

## Deprecation warning

- From Mai 2024, `ecmind_blue_client.com_client` is no longer supported nor tested.
- From Mai 2024, `ecmind_blue_client.soap_client` is no longer supported nor tested.

## Installation

`pip install ecmind_blue_client`

## Usage

The workflow consists roughly of the following:

- Create a new Client() connection using a client implementation. There are four implementations:
    - `SoapClient()` in the module `ecmind_blue_client.soap_client`: Connect with a SOAP connection string
    - `ComClient()` in the module `ecmind_blue_client.com_client`: Connect by using the COM class on Windows
    - `TcpClient()` in the module `ecmind_blue_client.tcp_client`: Directly talk to a server via protlib.
       - Use `TcpClient.Connection()` in a with block/context.
    - `TcpPoolClient()` in the module `ecmind_blue_client.tcp_pool_client`
- Create a new Job() with a job name and provide/add job input parameters and optional job input file parameters
- Execute the Job() with the Client() instance and consume the result 
   - `result.result_code` returns the blue result code
   - `result.values` is a dict of output parameters
   - `result.files` is a list of output file parameters
   - `result.error_messages` is a string of the servers error response or None if `result_code` == 0

```
>>> from ecmind_blue_client.soap_client import SoapClient
>>> client = SoapClient(self.endpoint, 'TestApp', 'root', 'optimal')
>>> test_job = Job('krn.GetServerInfo', Flags=0, Info=6)
>>> result = client.execute(test_job)
>>> print(result.values['Value'])
oxtrodbc.dll
```

## Example

```python
from ecmind_blue_client import SystemFields
from ecmind_blue_client.tcp_pool_client import TcpPoolClient as Client

# Connect with DMS
client = Client(
    connection_string="localhost:4000:100", # Balancing setup for the used Client class `TcpPoolClient`
    appname="Test-Script",                  # Instance name, visible in the enterprise manager
    username="root",
    password="optimal"
)

# Query a folder
query = client.lol_query(
    object_name="Dossier",
    result_fields=[
        SystemFields.OBJECT_CRDATE, 
        "LastName", 
        "FirstName"
    ]
)

# Iterate over folder results
for dossier in query:
    print(                                                 # Output some infos
        dossier["OBJECT_ID"],                              # OBJECT_ID is added per defaults
        dossier['OBJECT_CRDATE'].strftime("%Y-%m-%d"),     # Manually added system field from line 16
        (f"{dossier['FirstName']} {dossier['LastName']}"), # Manually added objdef fields from line 17 & 18
    )

# Check that we have found a least one folder
assert dossier and "OBJECT_ID" in dossier

# Import a test document into the last found folder
import_result = client.xml_import(
    object_name="Dokument", 
    folder_id=dossier["OBJECT_ID"], 
    search_fields={
        "Type": "Invoice"
    },
    import_fields={
        "Type": "Invoice"
    },
    files = ["invoice.pdf"]
)

# Check if the import was successful and output OSID
assert import_result, import_result.error_message
print(import_result.import_action, import_result.object_id)
```
