{"id":39746103,"url":"https://github.com/python-accelerator-middle-layer/tango-pyaml","last_synced_at":"2026-01-20T17:33:44.336Z","repository":{"id":302659497,"uuid":"1011749037","full_name":"python-accelerator-middle-layer/tango-pyaml","owner":"python-accelerator-middle-layer","description":"PyAML interface to the TANGO control system","archived":false,"fork":false,"pushed_at":"2026-01-16T16:52:35.000Z","size":97,"stargazers_count":0,"open_issues_count":3,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-17T05:28:54.740Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/python-accelerator-middle-layer.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-07-01T09:31:29.000Z","updated_at":"2025-12-18T11:26:07.000Z","dependencies_parsed_at":"2025-07-28T16:23:44.029Z","dependency_job_id":"d05d08ab-7fb3-44c2-ad64-f9cb5792481e","html_url":"https://github.com/python-accelerator-middle-layer/tango-pyaml","commit_stats":null,"previous_names":["python-accelerator-middle-layer/tango-pyaml"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/python-accelerator-middle-layer/tango-pyaml","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-accelerator-middle-layer%2Ftango-pyaml","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-accelerator-middle-layer%2Ftango-pyaml/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-accelerator-middle-layer%2Ftango-pyaml/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-accelerator-middle-layer%2Ftango-pyaml/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/python-accelerator-middle-layer","download_url":"https://codeload.github.com/python-accelerator-middle-layer/tango-pyaml/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/python-accelerator-middle-layer%2Ftango-pyaml/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28535162,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T10:13:46.436Z","status":"ssl_error","status_checked_at":"2026-01-18T10:13:11.045Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-18T11:21:05.752Z","updated_at":"2026-01-18T11:21:05.800Z","avatar_url":"https://github.com/python-accelerator-middle-layer.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# tango-pyaml\n\n**Bridge between **[**Tango Controls**](https://www.tango-controls.org/)** and PyAML**\n\n\n\n## Overview\n\n`tango-pyaml` is a Python bridge between the [Tango control system](https://www.tango-controls.org/) and the [PyAML](https://github.com/python-accelerator-middle-layer/pyaml) abstraction layer for control systems. It provides a set of classes that allow Tango attributes and devices to be accessed and controlled using PyAML concepts.\n\nThis library is part of the **Python Accelerator Middle Layer (PyAML)** ecosystem.\n\n## Features\n\n- ✅ Read and write Tango attributes via a unified PyAML interface\n- 🔁 Support for read-only and read/write attributes\n- 📊 Grouped attribute operations using `tango.Group`\n- 💥 Exception mapping from Tango exceptions to PyAML exceptions\n- 🧹 Designed to integrate seamlessly with PyAML `ControlSystem` components\n- 🧪 Mocked devices for unit testing without Tango runtime\n\n## Installation\n\n```bash\npip install tango-pyaml\n```\n\n## Requirements\n\n- Python \u003e= 3.9\n- [PyTango](https://pytango.readthedocs.io/en/latest/) \u003e= 9.5.1\n- [PyAML](https://github.com/python-accelerator-middle-layer/pyaml)\n- [pydantic](https://docs.pydantic.dev/) \u003e= 2.0\n\nFor development and testing:\n\n```bash\npip install tango-pyaml[dev]\n```\n\n## Usage Example\n\nThis is an example of an explicit call to a Tango attribute using PyAML. For more details about implicit declaration and broader configuration options, please refer to the [PyAML documentation](https://github.com/python-accelerator-middle-layer/pyaml).\n\nConfiguration file `attribute.yaml`:\n\n```yaml\nattribute: \"sys/tg_test/1/float_scalar\"\nunit: \"A\"\n```\n\nPython code:\n\n```python\nfrom tango.pyaml.attribute import Attribute\nfrom tango.pyaml.tango_attribute import ConfigModel\nimport yaml\n\nwith open(\"attribute.yaml\") as f:\n    cfg_dict = yaml.safe_load(f)\n\ncfg = ConfigModel(**cfg_dict)\nattr = Attribute(cfg)\n\nattr.set(10.0)\nvalue = attr.get()\nreadback = attr.readback()\n\nprint(f\"Value: {value}, Readback: {readback.value} [{readback.quality}]\")\n```\n\n## Available Classes\n\n- `Attribute` — Read/write access to a Tango attribute\n- `AttributeReadOnly` — Read-only attribute wrapper\n- `AttributeList` — Manage a group of attributes from multiple devices\n- `TangoControlSystem` — Adapter to configure global Tango control system context\n\n## Testing\n\nTests rely on mocked Tango devices and attributes using `unittest.mock`. To run tests:\n\n```bash\npytest\n```\n\n## Project Structure\n\n- `tango.pyaml.attribute` – Main attribute interface\n- `tango.pyaml.attribute_read_only` – Read-only attribute implementation\n- `tango.pyaml.attribute_list` – Attribute groups with `tango.Group`\n- `tango.pyaml.tango_attribute` – Base class wrapping attribute logic\n- `mocked_device_proxy.py` – In-memory mock for Tango `DeviceProxy` and `AttributeProxy`\n\n## License\n\nThis project is licensed under the MIT License.\n\n## Links\n\n- 🧺 [Repository](https://github.com/python-accelerator-middle-layer/tango-pyaml)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpython-accelerator-middle-layer%2Ftango-pyaml","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpython-accelerator-middle-layer%2Ftango-pyaml","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpython-accelerator-middle-layer%2Ftango-pyaml/lists"}