iomate-base 0.1.0a0__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. iomate_base-0.1.0a0/LICENSE +21 -0
  2. iomate_base-0.1.0a0/PKG-INFO +620 -0
  3. iomate_base-0.1.0a0/README.md +607 -0
  4. iomate_base-0.1.0a0/pyproject.toml +45 -0
  5. iomate_base-0.1.0a0/src/iomate_base/__init__.py +5 -0
  6. iomate_base-0.1.0a0/src/iomate_base/actions/__init__.py +11 -0
  7. iomate_base-0.1.0a0/src/iomate_base/actions/action.py +174 -0
  8. iomate_base-0.1.0a0/src/iomate_base/actions/action_group.py +91 -0
  9. iomate_base-0.1.0a0/src/iomate_base/actions/metadata.py +39 -0
  10. iomate_base-0.1.0a0/src/iomate_base/contracts/__init__.py +21 -0
  11. iomate_base-0.1.0a0/src/iomate_base/contracts/action_contract.py +175 -0
  12. iomate_base-0.1.0a0/src/iomate_base/contracts/compatibility.py +117 -0
  13. iomate_base-0.1.0a0/src/iomate_base/contracts/definition_validation.py +136 -0
  14. iomate_base-0.1.0a0/src/iomate_base/packages/__init__.py +15 -0
  15. iomate_base-0.1.0a0/src/iomate_base/packages/deployment.py +57 -0
  16. iomate_base-0.1.0a0/src/iomate_base/packages/manifest.py +51 -0
  17. iomate_base-0.1.0a0/src/iomate_base/packages/package.py +76 -0
  18. iomate_base-0.1.0a0/src/iomate_base/packages/registry.py +48 -0
  19. iomate_base-0.1.0a0/src/iomate_base/py.typed +0 -0
  20. iomate_base-0.1.0a0/src/iomate_base/registry/__init__.py +3 -0
  21. iomate_base-0.1.0a0/src/iomate_base/registry/action_registry.py +83 -0
  22. iomate_base-0.1.0a0/src/iomate_base/runtime/__init__.py +46 -0
  23. iomate_base-0.1.0a0/src/iomate_base/runtime/context.py +50 -0
  24. iomate_base-0.1.0a0/src/iomate_base/runtime/definition.py +209 -0
  25. iomate_base-0.1.0a0/src/iomate_base/runtime/execution.py +28 -0
  26. iomate_base-0.1.0a0/src/iomate_base/runtime/graph.py +580 -0
  27. iomate_base-0.1.0a0/src/iomate_base/runtime/problems.py +25 -0
  28. iomate_base-0.1.0a0/src/iomate_base/runtime/protocol.py +76 -0
  29. iomate_base-0.1.0a0/src/iomate_base/types/__init__.py +34 -0
  30. iomate_base-0.1.0a0/src/iomate_base/types/resolver.py +182 -0
  31. iomate_base-0.1.0a0/src/iomate_base/types/type_definition.py +135 -0
  32. iomate_base-0.1.0a0/src/iomate_base/types/type_registry.py +65 -0
  33. iomate_base-0.1.0a0/src/iomate_base/types/values.py +116 -0
  34. iomate_base-0.1.0a0/src/iomate_base/variables/__init__.py +13 -0
  35. iomate_base-0.1.0a0/src/iomate_base/variables/flags.py +40 -0
  36. iomate_base-0.1.0a0/src/iomate_base/variables/runtime_reference.py +49 -0
  37. iomate_base-0.1.0a0/src/iomate_base/variables/variable.py +92 -0
  38. iomate_base-0.1.0a0/src/iomate_base/version.py +111 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) [year] [fullname]
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,620 @@
1
+ Metadata-Version: 2.4
2
+ Name: iomate-base
3
+ Version: 0.1.0a0
4
+ Summary: Core SDK and runtime contracts for the IOMate ecosystem
5
+ License-File: LICENSE
6
+ Author: IOMate
7
+ Requires-Python: >=3.12,<=3.14.4
8
+ Classifier: Programming Language :: Python :: 3
9
+ Classifier: Programming Language :: Python :: 3.12
10
+ Classifier: Programming Language :: Python :: 3.13
11
+ Classifier: Programming Language :: Python :: 3.14
12
+ Description-Content-Type: text/markdown
13
+
14
+ <div align="center">
15
+ <h1><strong>IOMATE-BASE</strong></h1>
16
+ </div>
17
+
18
+ <p align="center">
19
+ <a href="https://github.com/iomateapp/iomate-base/actions?query=branch%staging">
20
+ <img src="https://github.com/iomateapp/iomate-base/actions/workflows/quality-and-tests.yaml/badge.svg?branch=staging" />
21
+ </a>
22
+ <a href="https://codecov.io/gh/iomateapp/iomate-base">
23
+ <img src="https://codecov.io/gh/iomateapp/iomate-base/branch/staging/graph/badge.svg" />
24
+ </a>
25
+ <img src="https://img.shields.io/pypi/dm/iomate-base" />
26
+ <img src="https://img.shields.io/github/license/iomateapp/iomate-base" />
27
+ <img src="https://img.shields.io/github/v/release/iomateapp/iomate-base" />
28
+ <img src="https://img.shields.io/github/stars/iomateapp/iomate-base?style=flat" />
29
+ </p>
30
+
31
+ Core SDK and framework for building IOMate Packages.
32
+
33
+ `iomate-base` provides the foundational abstractions, contracts, type system, and runtime definitions used throughout the IOMate Package ecosystem.
34
+
35
+ It is designed to be independent of specific IOMate Packages.
36
+
37
+ ```text
38
+ iomate-base
39
+ ↑
40
+ │
41
+ IOMate Packages
42
+ │
43
+ └── Actions
44
+ ```
45
+
46
+ ## Features
47
+
48
+ `iomate-base` provides:
49
+
50
+ - Action definitions
51
+ - Action Groups
52
+ - Action Contracts
53
+ - Action registration and discovery
54
+ - Variables
55
+ - Variable flags
56
+ - Type definitions
57
+ - Python type resolution
58
+ - Runtime references
59
+ - Package metadata
60
+ - Package definitions
61
+ - Runtime execution contracts
62
+ - Version compatibility definitions
63
+
64
+ The core architecture is based on:
65
+
66
+ ```text
67
+ Types
68
+ ↓
69
+ Variables
70
+ ↓
71
+ Actions
72
+ ↓
73
+ Contracts
74
+ ↓
75
+ Packages
76
+ ```
77
+
78
+ ---
79
+
80
+ ## Requirements
81
+
82
+ - Python 3.12+
83
+ - Poetry
84
+
85
+ The supported Python version range is defined in `pyproject.toml`.
86
+
87
+ ---
88
+
89
+ ## Installation
90
+
91
+ Install from PyPI:
92
+
93
+ ```bash
94
+ pip install iomate-base
95
+ ```
96
+
97
+ Or add it to a Poetry project:
98
+
99
+ ```bash
100
+ poetry add iomate-base
101
+ ```
102
+
103
+ ---
104
+
105
+ ## Development Setup
106
+
107
+ Clone the repository and install the development dependencies:
108
+
109
+ ```bash
110
+ poetry install
111
+ ```
112
+
113
+ Activate the Poetry environment if required:
114
+
115
+ ```bash
116
+ poetry shell
117
+ ```
118
+
119
+ Or execute commands directly through Poetry:
120
+
121
+ ```bash
122
+ poetry run <command>
123
+ ```
124
+
125
+ ---
126
+
127
+ ## Project Structure
128
+
129
+ ```text
130
+ iomate-base/
131
+ ├── pyproject.toml
132
+ ├── poetry.lock
133
+ │
134
+ ├── src/
135
+ │ └── iomate_base/
136
+ │ ├── actions/
137
+ │ ├── contracts/
138
+ │ ├── packages/
139
+ │ ├── registry/
140
+ │ ├── runtime/
141
+ │ ├── types/
142
+ │ └── variables/
143
+ │
144
+ ├── tests/
145
+ │ ├── actions/
146
+ │ ├── contracts/
147
+ │ ├── packages/
148
+ │ ├── registry/
149
+ │ ├── runtime/
150
+ │ ├── types/
151
+ │ └── variables/
152
+ │
153
+ └── README.md
154
+ ```
155
+
156
+ ---
157
+
158
+ ## Core Concepts
159
+
160
+ ### Actions
161
+
162
+ Actions are the primary executable abstraction in IOMate.
163
+
164
+ An Action defines:
165
+
166
+ - Stable key
167
+ - Version
168
+ - Name
169
+ - Description
170
+ - Inputs
171
+ - Outputs
172
+ - Metadata
173
+ - Handler
174
+
175
+ Examples:
176
+
177
+ ```text
178
+ workflow.if
179
+ browser.open
180
+ browser.click
181
+ http.request
182
+ ```
183
+
184
+ `iomate-base` defines the Action abstraction but does not implement Package-specific Actions.
185
+
186
+ ---
187
+
188
+ ### Action Groups
189
+
190
+ Actions can be organized into Action Groups.
191
+
192
+ The hierarchy is:
193
+
194
+ ```text
195
+ Package
196
+ ↓
197
+ Action Group
198
+ ↓
199
+ Action
200
+ ```
201
+
202
+ Example:
203
+
204
+ ```text
205
+ iomate-workflow
206
+ ├── Workflow
207
+ │ ├── workflow.if
208
+ │ ├── workflow.else_if
209
+ │ └── workflow.else
210
+ │
211
+ └── Error Handling
212
+ ├── error_handling.try
213
+ ├── error_handling.except
214
+ └── error_handling.finally
215
+ ```
216
+
217
+ ---
218
+
219
+ ### Variables
220
+
221
+ Variables represent values flowing between Actions.
222
+
223
+ A Variable contains, conceptually:
224
+
225
+ ```text
226
+ name
227
+ type
228
+ value
229
+ flags
230
+ ```
231
+
232
+ Variables are the interoperability layer between IOMate Packages.
233
+
234
+ For example:
235
+
236
+ ```text
237
+ iomate-selenium
238
+ │
239
+ │ creates
240
+ ▼
241
+ SeleniumDriver Variable
242
+ │
243
+ │ consumed by
244
+ ▼
245
+ iomate-claude
246
+ ```
247
+
248
+ This allows Packages to communicate without directly depending on each other.
249
+
250
+ ---
251
+
252
+ ### Variable Flags
253
+
254
+ Variables can expose behavioral and runtime flags such as:
255
+
256
+ ```text
257
+ required
258
+ nullable
259
+ mutable
260
+ readonly
261
+ runtime_reference
262
+ scope
263
+ ```
264
+
265
+ These flags define how a Variable can be created, consumed, modified, and managed during execution.
266
+
267
+ ---
268
+
269
+ ### Type System
270
+
271
+ `iomate-base` provides a normalized type system based on Python type annotations.
272
+
273
+ Initial supported types include:
274
+
275
+ ```text
276
+ str
277
+ int
278
+ float
279
+ bool
280
+ bytes
281
+ None
282
+ list
283
+ tuple
284
+ set
285
+ dict
286
+ Any
287
+ ```
288
+
289
+ Parameterized types are also supported:
290
+
291
+ ```python
292
+ list[str]
293
+ list[int]
294
+ dict[str, int]
295
+ tuple[str, int]
296
+ set[str]
297
+ ```
298
+
299
+ For example:
300
+
301
+ ```python
302
+ def process(items: list[str]) -> int:
303
+ ...
304
+ ```
305
+
306
+ can be represented as:
307
+
308
+ ```json
309
+ {
310
+ "type": "list",
311
+ "items": {
312
+ "type": "string"
313
+ }
314
+ }
315
+ ```
316
+
317
+ ---
318
+
319
+ ### Any
320
+
321
+ `Any` represents an unrestricted input type.
322
+
323
+ For example:
324
+
325
+ ```python
326
+ def analyze(value: Any, prompt: str) -> Any:
327
+ ...
328
+ ```
329
+
330
+ means that the Action does not impose an input type restriction.
331
+
332
+ It does not mean that the runtime Variable has no type.
333
+
334
+ A runtime Variable may still contain:
335
+
336
+ ```text
337
+ type: SeleniumDriver
338
+ value: <runtime object>
339
+ ```
340
+
341
+ while being accepted by an Action with an `Any` input.
342
+
343
+ ---
344
+
345
+ ### Runtime References
346
+
347
+ Some values represent objects that must remain inside the Robot process.
348
+
349
+ Examples include:
350
+
351
+ ```text
352
+ SeleniumDriver
353
+ BrowserSession
354
+ DatabaseConnection
355
+ FileHandle
356
+ ```
357
+
358
+ These values can be represented as runtime references.
359
+
360
+ A runtime reference should not automatically be serialized.
361
+
362
+ The actual object remains managed by the execution environment.
363
+
364
+ ---
365
+
366
+ ## Action Contracts
367
+
368
+ An Action Contract defines the interface of an Action.
369
+
370
+ A contract includes:
371
+
372
+ ```text
373
+ Action key
374
+ Contract version
375
+ Inputs
376
+ Outputs
377
+ Type constraints
378
+ Variable flags
379
+ ```
380
+
381
+ Example:
382
+
383
+ ```json
384
+ {
385
+ "key": "workflow.if",
386
+ "version": "2.0.0",
387
+ "inputs": [
388
+ {
389
+ "name": "condition",
390
+ "type": "boolean",
391
+ "required": true
392
+ }
393
+ ],
394
+ "outputs": []
395
+ }
396
+ ```
397
+
398
+ Action Contracts are independently versioned from Package versions.
399
+
400
+ This allows the runtime to determine whether an Action is compatible with an Automation.
401
+
402
+ ---
403
+
404
+ ## Package Architecture
405
+
406
+ `iomate-base` is the foundation for IOMate Packages.
407
+
408
+ Examples of Packages include:
409
+
410
+ ```text
411
+ iomate-workflow
412
+ iomate-selenium
413
+ iomate-browser
414
+ iomate-http
415
+ iomate-excel
416
+ iomate-database
417
+ iomate-claude
418
+ ```
419
+
420
+ Packages depend on `iomate-base`.
421
+
422
+ `iomate-base` must remain independent of those Packages.
423
+
424
+ The dependency direction is:
425
+
426
+ ```text
427
+ iomate-base
428
+ ↑
429
+ │
430
+ IOMate Packages
431
+ ```
432
+
433
+ Package-to-Package communication should happen through shared Variables and runtime references rather than direct Package dependencies.
434
+
435
+ ---
436
+
437
+ ## Example Package
438
+
439
+ A Package built using `iomate-base` may expose:
440
+
441
+ ```text
442
+ iomate-example
443
+ └── Example
444
+ ├── example.create
445
+ └── example.process
446
+ ```
447
+
448
+ Its dependency can be declared through Poetry:
449
+
450
+ ```toml
451
+ [tool.poetry.dependencies]
452
+ python = ">=3.12,<3.13"
453
+ iomate-base = ">=0.1.0,<1.0.0"
454
+ ```
455
+
456
+ The Package then uses the abstractions provided by `iomate-base` to define its Actions, Inputs, Outputs, Variables, and Contracts.
457
+
458
+ ---
459
+
460
+ ## Testing
461
+
462
+ Run the complete test suite:
463
+
464
+ ```bash
465
+ poetry run pytest
466
+ ```
467
+
468
+ Run tests with coverage:
469
+
470
+ ```bash
471
+ poetry run pytest --cov=src/iomate_base --cov-report=term
472
+ ```
473
+
474
+ The project requires a minimum coverage of:
475
+
476
+ ```text
477
+ 90%
478
+ ```
479
+
480
+ ---
481
+
482
+ ## Code Quality
483
+
484
+ Run Ruff:
485
+
486
+ ```bash
487
+ poetry run ruff check .
488
+ ```
489
+
490
+ Check formatting:
491
+
492
+ ```bash
493
+ poetry run ruff format --check .
494
+ ```
495
+
496
+ Format the project:
497
+
498
+ ```bash
499
+ poetry run ruff format .
500
+ ```
501
+
502
+ Run MyPy:
503
+
504
+ ```bash
505
+ poetry run mypy src
506
+ ```
507
+
508
+ ---
509
+
510
+ ## Pre-commit
511
+
512
+ Install the project's pre-commit hooks:
513
+
514
+ ```bash
515
+ poetry run pre-commit install
516
+ ```
517
+
518
+ Run all hooks:
519
+
520
+ ```bash
521
+ poetry run pre-commit run --all-files
522
+ ```
523
+
524
+ ---
525
+
526
+ ## Documentation
527
+
528
+ Documentation should be updated when changes affect:
529
+
530
+ - Public APIs
531
+ - Actions
532
+ - Action Contracts
533
+ - Variables
534
+ - Types
535
+ - Runtime References
536
+ - Package interfaces
537
+ - Compatibility behavior
538
+ - Versioning
539
+
540
+ Public abstractions should include clear documentation and type annotations.
541
+
542
+ ---
543
+
544
+ ## Versioning
545
+
546
+ `iomate-base` follows Semantic Versioning:
547
+
548
+ ```text
549
+ MAJOR.MINOR.PATCH
550
+ ```
551
+
552
+ ### MAJOR
553
+
554
+ Breaking changes to public APIs or contracts.
555
+
556
+ ### MINOR
557
+
558
+ Backward-compatible functionality.
559
+
560
+ ### PATCH
561
+
562
+ Backward-compatible fixes.
563
+
564
+ Because `iomate-base` is consumed by multiple Packages, backward compatibility is a critical requirement.
565
+
566
+ ---
567
+
568
+ ## Contributing
569
+
570
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for:
571
+
572
+ - Branching strategy
573
+ - Development workflow
574
+ - Pull Request requirements
575
+ - Testing requirements
576
+ - Commit conventions
577
+ - Release process
578
+
579
+ See [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) for the project's community standards.
580
+
581
+ ---
582
+
583
+ ## License
584
+
585
+ See [LICENSE](LICENSE) for licensing information.
586
+
587
+ ---
588
+
589
+ ## Ecosystem
590
+
591
+ `iomate-base` is the foundation of the IOMate Package ecosystem.
592
+
593
+ ```text
594
+ IOMate
595
+ │
596
+ ┌─────────┴─────────┐
597
+ │ │
598
+ Control Plane Execution Plane
599
+ │ │
600
+ └─────────┬─────────┘
601
+ │
602
+ iomate-base
603
+ │
604
+ ┌──────────────┼──────────────┐
605
+ │ │ │
606
+ workflow selenium claude
607
+ │ │ │
608
+ └──────────────┼──────────────┘
609
+ │
610
+ Actions
611
+ ```
612
+
613
+ The core principles are:
614
+
615
+ ```text
616
+ Packages → Capabilities
617
+ Variables → Interoperability
618
+ Contracts → Compatibility
619
+ iomate-base → Foundation
620
+ ```