{"id":21566779,"url":"https://github.com/eliostvs/pyoptional","last_synced_at":"2025-03-18T05:27:36.884Z","repository":{"id":77870424,"uuid":"118250455","full_name":"eliostvs/pyOptional","owner":"eliostvs","description":null,"archived":false,"fork":false,"pushed_at":"2018-01-21T14:42:20.000Z","size":15,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-24T12:13:59.417Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":false,"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/eliostvs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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}},"created_at":"2018-01-20T14:33:49.000Z","updated_at":"2019-05-29T22:12:51.000Z","dependencies_parsed_at":null,"dependency_job_id":"6d144bbd-bb0d-4dcd-bf11-203b211d68ff","html_url":"https://github.com/eliostvs/pyOptional","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eliostvs%2FpyOptional","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eliostvs%2FpyOptional/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eliostvs%2FpyOptional/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eliostvs%2FpyOptional/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eliostvs","download_url":"https://codeload.github.com/eliostvs/pyOptional/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244162494,"owners_count":20408541,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":"2024-11-24T10:28:11.306Z","updated_at":"2025-03-18T05:27:36.861Z","avatar_url":"https://github.com/eliostvs.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# pyOptional\n\n## Description\nLibrary provided implementation Optional object similar to [Java optional](https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html). Using this object, You will never check `if x is None`.\n\n## Install\n`pip install pyOptional`\n\n## Usage\n\n### Examples\n\n```python\nfrom pyOptional import Optional\n\noptional_with_value = Optional('ABC')\noptional_empty = Optional(None)\n\nprint(optional_with_value)\nprint(optional_empty)\n```\n\n**output:**\n```\nOptional of: ABC\nOptional empty\n```\n\n### Methods:\n\n#### get()\nReturns value or throw `NoneValueError` exception on empty optional\n```python\nprint(optional_with_value.get())\nprint(optional_empty.get())\n```\n\n**output**:\n```\nABC\nTraceback (most recent call last):\n...\npyOptional.exceptions.NoneValueError: Called get on empty optional\n```\n\n#### get_or_else(default_value)\nReturns value if exists or default_value when empty\n```python\nprint(optional_with_value.get_or_else('XYZ'))\nprint(optional_empty.get_or_else('XYZ'))\n```\n\n**output**:\n```\nABC\nXYZ\n```\n\n#### get_or_else_get(callable_for_generate_default_value)\nReturns value if exists, otherwise result of `callable_for_generate_default_value`\n```python\ndef gen_value():\n    return 'QWERTY'\n\nprint(optional_with_value.get_or_else_get(gen_value))\nprint(optional_empty.get_or_else_get(gen_value))\nprint(optional_empty.get_or_else_get(lambda: 'From lambda'))\n```\n\n**output**:\n```\nABC\nQWERTY\nFrom lambda\n```\n\n#### get_or_raise(exception_class, *args, **kwargs)\nReturns value if exists or raise provided exception\n```python\nprint(optional_with_value.get_or_raise(FileNotFoundError, 'Some message'))\nprint(optional_empty.get_or_raise(FileNotFoundError, 'Some message'))\n```\n\n**output**:\n```\nABC\nTraceback (most recent call last):\n...\nFileNotFoundError: Some message\n```\n\n#### map(callable_to_transform_value)\nReturns optional of other value (result returned by `callable_to_transform_value`) or Optional empty if source Optional was empty\n```python\nprint(optional_with_value.map(lambda val: val*2))\nprint(optional_empty.map(lambda val: val*2))\n```\n\n**output**:\n```\nOptional of: ABCABC\nOptional empty\n```\n\n#### flat_map(callable_to_transform_value)\nSimilar to map, but if source Optional contains another Optionals, result will contain single Optional\n```python\nnested_val_optional = Optional(Optional(Optional(8)))\nnested_empty_optional = Optional(Optional(Optional(None)))\nprint(nested_val_optional.map(lambda val: val*3))\nprint('---------------------')\nprint(nested_empty_optional.map(lambda val: val*3))\nprint('---------------------')\nprint(nested_val_optional.flat_map(lambda val: val*3))\nprint('---------------------')\nprint(nested_empty_optional.flat_map(lambda val: val*3))\n```\n\n**output**:\n```\nTraceback (most recent call last):\n...\nTypeError: unsupported operand type(s) for *: 'Optional' and 'int'\n---------------------\nTraceback (most recent call last):\n...\nTypeError: unsupported operand type(s) for *: 'Optional' and 'int'\n---------------------\nOptional of: 24\n---------------------\nOptional empty\n```\n\n#### if_present(func)\nCall func with optional value if exists. If optional is empty, do nothing.\n\n```python\noptional_with_value.if_present(lambda val: print('found value ' + val))\noptional_empty.if_present(lambda val: print('found value ' + val))\n```\n\n**output**:\n```\nfound value ABC\n```\n\n#### is_present()\nreturn True if Optional not empty, otherwise False\n\n```python\nprint(optional_with_value.is_present())\nprint(optional_empty.is_present())\n```\n\n**output**:\n```\nTrue\nFalse\n```\n\n### Static Methods:\n\n#### empty()\nreturn an empty Optional\n\n```python\nprint(Optional.empty())\n```\n\n**output**:\n```\nOptional empty\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feliostvs%2Fpyoptional","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feliostvs%2Fpyoptional","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feliostvs%2Fpyoptional/lists"}