Metadata-Version: 2.1
Name: filterlib
Version: 0.0.2
Summary: A filter library for python
Home-page: https://gitlab.com/Raspilot/filterlib
Author: Fabian becker
Author-email: fab.becker@outlook.de
License: UNKNOWN
Description: # filterlib
        
        A filter library for python by Fabian Becker.
        
        ## What for?
        
        With a `Filter` object you can easily check for attributes of an object to equal a given value.
        
        ## Usage
        
        ### How to create a filter
        
        #### Create a filter using __init__()
        
        `operator: str = "AND"` (`"AND"` or `"OR""`) sets the logical operator for the filter (checks all or any attributes). 
        
        `allow_missing_attributes: bool = False` sets the tolerance for missing attributes. If set to true it will skip if the attribute is missing in the object to check.
        
        #### Create a filter from its representation
        
        The return value of a filters `__repr__` attribute can be used to store and later on recreate a filter using `filter_from_repr`
        
        ```python
        from filter import Filter, filter_from_repr
        
        f = Filter()
        
        print(f == filter_from_repr(f.__repr__()))
        # f and filter_from_repr(f.__repr__()) is the same
        ```
        
        #### Additional attributes
        
        The attribute a filter checks for are variable
        ```python
        from filter import Filter
        # Use the following systax:
        f = Filter(<attibute name><attributes magic method>=1)
        
        # For example:
        f = Filter(a__eq__=1)
        
        # You can also use multiple attributes:
        f = Filter(b__lte__=5,
                   c__gt__=2)
        ```
        
        ### Use a filter
        
        Make sure you use the filters `__eq__` attribute.
        
        ```python
        # Make sure you use
        Filter() == x
        # instead of
        x == Filter()
        ```
        
        ## Example
        ```python
        from filter import Filter
        from typing import Optional
        
        
        class Person:
            def __init__(self, 
                         name: str,
                         age: int,
                         best_friend: Optional[Person] = None):
                self.name = name
                self.age = age
                self.best_fiend = best_friend
        
        
        f = Filter(name__eq__="John")
        p = Person(name="John", age=35)
        print(f == p)
        # True
        
        f = Filter(name__ne__="John")
        p = Person(name="John", age=35)
        print(f == p)
        # False
        
        f = Filter(name__eq__="John", age__lte=40)
        p = Person(name="John", age=35)
        print(f == p)
        # True
        
        f = Filter(name__eq__="John", age__lte=20)
        p = Person(name="John", age=35)
        print(f == p)
        # False
        
        f = Filter(operator="OR",
                   name__eq__="John", 
                   age__lte=20)
        p = Person(name="John", age=35)
        print(f == p)
        # True
        
        p = Person(name="John",
                   age=35,
                   best_friend=Person(name="Thomas",
                                      age=36))
        f = Filter(best_friend__name__eq__="Thomas", 
                   age__lte=40)
        print(f == p)
        # True
        ```
        
        ## SQL compatability
        You can use filters for sql statements
        ```python
        from filter import Filter
        import sqlite3
        
        db = sqlite3.connect("myDB.sqlite")
        db.execute("CREATE TABLE users(id, name)")
        f = Filter(id__eq__=1)
        db.execute(f"SELECT name FROM users WHERE {f}")
        ```
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
Classifier: Operating System :: OS Independent
Requires-Python: >=3.6
Description-Content-Type: text/markdown
