{"id":47808936,"url":"https://github.com/dev2forge/basicreturns","last_synced_at":"2026-04-03T18:01:14.198Z","repository":{"id":331090833,"uuid":"1114803669","full_name":"Dev2Forge/BasicReturns","owner":"Dev2Forge","description":"Python Basic Returns - Pypi Package","archived":false,"fork":false,"pushed_at":"2026-01-11T05:14:39.000Z","size":62,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-11T12:38:44.482Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://www.dev2forge.software/BasicReturns/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Dev2Forge.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-12-11T22:59:44.000Z","updated_at":"2026-01-11T05:10:59.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Dev2Forge/BasicReturns","commit_stats":null,"previous_names":["dev2forge/basicreturns"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/Dev2Forge/BasicReturns","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dev2Forge%2FBasicReturns","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dev2Forge%2FBasicReturns/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dev2Forge%2FBasicReturns/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dev2Forge%2FBasicReturns/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Dev2Forge","download_url":"https://codeload.github.com/Dev2Forge/BasicReturns/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dev2Forge%2FBasicReturns/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31368156,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-03T17:53:18.093Z","status":"ssl_error","status_checked_at":"2026-04-03T17:53:17.617Z","response_time":107,"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-04-03T18:01:06.711Z","updated_at":"2026-04-03T18:01:14.166Z","avatar_url":"https://github.com/Dev2Forge.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# BasicReturns 🐍\n\n\u003ca href=\"https://deepwiki.com/Dev2Forge/BasicReturns\"\u003e\u003cimg src=\"https://img.shields.io/badge/DeepWiki-Dev2Forge%2FBasicReturns-blue.svg?logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAyCAYAAAAnWDnqAAAAAXNSR0IArs4c6QAAA05JREFUaEPtmUtyEzEQhtWTQyQLHNak2AB7ZnyXZMEjXMGeK/AIi+QuHrMnbChYY7MIh8g01fJoopFb0uhhEqqcbWTp06/uv1saEDv4O3n3dV60RfP947Mm9/SQc0ICFQgzfc4CYZoTPAswgSJCCUJUnAAoRHOAUOcATwbmVLWdGoH//PB8mnKqScAhsD0kYP3j/Yt5LPQe2KvcXmGvRHcDnpxfL2zOYJ1mFwrryWTz0advv1Ut4CJgf5uhDuDj5eUcAUoahrdY/56ebRWeraTjMt/00Sh3UDtjgHtQNHwcRGOC98BJEAEymycmYcWwOprTgcB6VZ5JK5TAJ+fXGLBm3FDAmn6oPPjR4rKCAoJCal2eAiQp2x0vxTPB3ALO2CRkwmDy5WohzBDwSEFKRwPbknEggCPB/imwrycgxX2NzoMCHhPkDwqYMr9tRcP5qNrMZHkVnOjRMWwLCcr8ohBVb1OMjxLwGCvjTikrsBOiA6fNyCrm8V1rP93iVPpwaE+gO0SsWmPiXB+jikdf6SizrT5qKasx5j8ABbHpFTx+vFXp9EnYQmLx02h1QTTrl6eDqxLnGjporxl3NL3agEvXdT0WmEost648sQOYAeJS9Q7bfUVoMGnjo4AZdUMQku50McDcMWcBPvr0SzbTAFDfvJqwLzgxwATnCgnp4wDl6Aa+Ax283gghmj+vj7feE2KBBRMW3FzOpLOADl0Isb5587h/U4gGvkt5v60Z1VLG8BhYjbzRwyQZemwAd6cCR5/XFWLYZRIMpX39AR0tjaGGiGzLVyhse5C9RKC6ai42ppWPKiBagOvaYk8lO7DajerabOZP46Lby5wKjw1HCRx7p9sVMOWGzb/vA1hwiWc6jm3MvQDTogQkiqIhJV0nBQBTU+3okKCFDy9WwferkHjtxib7t3xIUQtHxnIwtx4mpg26/HfwVNVDb4oI9RHmx5WGelRVlrtiw43zboCLaxv46AZeB3IlTkwouebTr1y2NjSpHz68WNFjHvupy3q8TFn3Hos2IAk4Ju5dCo8B3wP7VPr/FGaKiG+T+v+TQqIrOqMTL1VdWV1DdmcbO8KXBz6esmYWYKPwDL5b5FA1a0hwapHiom0r/cKaoqr+27/XcrS5UwSMbQAAAABJRU5ErkJggg==\" alt=\"DeepWiki\"\u003e\u003c/a\u003e\n\u003c!-- DeepWiki badge generated by https://deepwiki.ryoppippi.com/ --\u003e\n\n[![PyPI Version](https://img.shields.io/pypi/v/BasicReturns.svg)](https://pypi.org/project/BasicReturns/)\n[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/BasicReturns?labelColor=black\u0026color=orange)](https://pypi.org/project/BasicReturns/)\n[![PyPI - License](https://img.shields.io/pypi/l/BasicReturns?logoColor=orange\u0026labelColor=black\u0026color=orange)\n](https://opensource.org/licenses/MIT)\n[![PyPI Downloads](https://static.pepy.tech/personalized-badge/BasicReturns?period=total\u0026units=NONE\u0026left_color=BLACK\u0026right_color=ORANGE\u0026left_text=downloads)](https://pepy.tech/projects/BasicReturns)\n\n**Standardizes function return values across Python applications to enhance code consistency, readability, and maintainability.**\n\n## 📦 Installation\n\n```bash\npip install BasicReturns\n```\n\n## 🚀 Quick Start\n\n```python\nfrom BasicReturns import BasicReturn, DataAndMsgReturn\n\ndef divide_numbers(a: float, b: float) -\u003e DataAndMsgReturn:\n    \"\"\"Safely divide two numbers with unified return structure.\"\"\"\n    response = DataAndMsgReturn()\n\n    try:\n        if b == 0:\n            raise ZeroDivisionError(\"Cannot divide by zero\")\n        response.data = a / b\n        response.msg = \"Division completed successfully\"\n    except Exception as e:\n        response.ok = False\n        response.error = e\n        response.msg = \"Division failed\"\n\n    return response\n\n# Usage example\nresult = divide_numbers(10, 2)\n\nif result.ok:\n    print(f\"{result.msg}: {result.data}\")  # Division completed successfully: 5.0\nelse:\n    print(f\"{result.msg}: {result.error}\")  # Division failed: Cannot divide by zero\n```\n\n## 🛠️ Practical Examples\n\n### File Operations Utility\n\nHere's how to implement a file utility class using unified returns:\n\n```python\nfrom io import TextIOWrapper\nfrom pathlib import Path\nimport json\nfrom typing import Any\nfrom BasicReturns import BaseReturn, DataAndMsgReturn\n\nclass FilesUtils:\n    @staticmethod\n    def file_exists(filename: str) -\u003e bool:\n        return Path(filename).is_file()\n\n    @staticmethod\n    def read_file(filename: str) -\u003e DataAndMsgReturn:\n        \"\"\"Read file content with unified return structure.\"\"\"\n        response = DataAndMsgReturn()\n\n        try:\n            if not FilesUtils.file_exists(filename):\n                response.ok = False\n                response.error = FileNotFoundError(f\"File '{filename}' not found\")\n                response.msg = \"File does not exist\"\n                return response\n\n            with open(filename, 'r', encoding='utf-8') as file:\n                response.data = file.read()\n                response.msg = f\"Successfully read file: {filename}\"\n        except Exception as e:\n            response.ok = False\n            response.error = e\n            response.msg = f\"Error reading file: {filename}\"\n\n        return response\n\n    @staticmethod\n    def read_json(filename: str) -\u003e DataAndMsgReturn:\n        \"\"\"Read and parse JSON file with unified error handling.\"\"\"\n        response = DataAndMsgReturn()\n        file_result = FilesUtils.read_file(filename)\n\n        if not file_result.ok:\n            # Propagate the error from read_file\n            response.ok = file_result.ok\n            response.error = file_result.error\n            response.msg = file_result.msg\n            return response\n\n        try:\n            response.data = json.loads(file_result.data)\n            response.msg = f\"Successfully parsed JSON from: {filename}\"\n        except json.JSONDecodeError as e:\n            response.ok = False\n            response.error = e\n            response.msg = f\"Invalid JSON format in file: {filename}\"\n\n        return response\n\n    @staticmethod\n    def write_json(filename: str, data: dict) -\u003e BaseReturn:\n        \"\"\"Write dictionary to JSON file with atomic operation handling.\"\"\"\n        response = BaseReturn()\n\n        try:\n            with open(filename, 'w', encoding='utf-8') as file:\n                json.dump(data, file, indent=2, sort_keys=True, ensure_ascii=False)\n            response.msg = f\"Successfully wrote JSON to: {filename}\"\n        except Exception as e:\n            response.ok = False\n            response.error = e\n            response.msg = f\"Failed to write JSON file: {filename}\"\n\n        return response\n```\n\n### Usage in Application\n\n```python\n# Read configuration file\nconfig_result = FilesUtils.read_json(\"config.json\")\n\nif config_result.ok:\n    config = config_result.data\n    print(\"Configuration loaded:\", config)\nelse:\n    print(\"Error loading config:\", config_result.error)\n    # Fallback to default configuration\n    config = {\"default\": \"settings\"}\n\n# Save user data\nuser_data = {\"name\": \"John Doe\", \"email\": \"john@example.com\"}\nsave_result = FilesUtils.write_json(\"users/john.json\", user_data)\n\nif save_result.ok:\n    print(\"User data saved successfully\")\nelse:\n    print(\"Failed to save user data:\", save_result.error)\n    # Handle the error appropriately\n```\n\n## 🌟 Best Practices\n\n### 1. Consistent Error Handling\n\n```python\ndef process_data(data: Any) -\u003e DataAndMsgReturn:\n    response = DataAndMsgReturn()\n\n    if not data:\n        response.ok = False\n        response.error = ValueError(\"Empty data provided\")\n        response.msg = \"Validation failed\"\n        return response\n\n    # Process data...\n    response.data = processed_data\n    response.msg = \"Data processed successfully\"\n    return response\n```\n\n### 2. Chaining Operations\n\n```python\ndef load_and_validate_config() -\u003e DataAndMsgReturn:\n    config_result = FilesUtils.read_json(\"config.json\")\n\n    if not config_result.ok:\n        return config_result  # Return the error immediately\n\n    validation_result = validate_config(config_result.data)\n\n    if not validation_result.ok:\n        return DataAndMsgReturn(\n            ok=False,\n            error=validation_result.error,\n            msg=f\"Configuration validation failed: {validation_result.msg}\"\n        )\n\n    return DataAndMsgReturn(\n        data=config_result.data,\n        msg=\"Configuration loaded and validated successfully\"\n    )\n```\n\n### 3. API Integration\n\n```python\nimport requests\nfrom BasicReturns import DataAndMsgReturn\n\ndef fetch_api_data(url: str) -\u003e DataAndMsgReturn:\n    response = DataAndMsgReturn()\n\n    try:\n        api_response = requests.get(url, timeout=10)\n        api_response.raise_for_status()\n\n        response.data = api_response.json()\n        response.msg = f\"Successfully fetched data from {url}\"\n    except requests.exceptions.RequestException as e:\n        response.ok = False\n        response.error = e\n        response.msg = f\"API request failed: {url}\"\n\n    return response\n```\n\n## 📊 Benefits\n\n✅ **Consistent Error Handling** - No more guessing return types or error formats  \n✅ **Improved Readability** - Clear success/failure states with contextual messages  \n✅ **Better Debugging** - Structured error information with stack traces when needed  \n✅ **Type Safety** - Full MyPy compatibility with proper type annotations  \n✅ **Seamless Integration** - Works with any Python framework or application  \n✅ **Serialization Ready** - Built-in `to_dict()` method for JSON/API responses\n\n## 🤝 Contributing\n\nContributions are welcome! Please feel free to submit issues, feature requests, or pull requests.\n\n1. Fork the repository\n2. Create your feature branch (`git switch -c feature/amazing-feature`)\n3. Commit your changes (`git commit -m 'Add some amazing feature'`)\n4. Push to the branch (`git push origin feature/amazing-feature`)\n5. Open a pull request\n\n## 📄 License\n\nDistributed under the MIT License. See `LICENSE` for more information.\n\n---\n\n**Made with ❤️ for Python developers who value clean, consistent code**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdev2forge%2Fbasicreturns","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdev2forge%2Fbasicreturns","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdev2forge%2Fbasicreturns/lists"}