Metadata-Version: 2.1
Name: fireorm
Version: 0.0.7
Summary: Firestore ORM for python.
Home-page: https://github.com/jerber/FireORM
Author: Jeremy
Author-email: kellycup8@gmail.com
License: Apache 2.0
Description: # FireORM
        The easiest way to use Firestore with python.
        
        ## Instalation
        ```
        pip install fireorm
        ```
        
        ## Example
        ```python
        from fireorm.Models import Model
        from fireorm.Fields import TextField
        
        class Salesman(Model):
            name = TextField()
            company = TextField()
        
        s = Salesman()
        s.name = 'Jim'
        s.save()
        
        # Get Salesman
        s = Salesman.collection.get(s.id)
        print(s.name) # Jim
        ```
        
        ## Fields
        There are 9 types of builtin fields, consistant with Firestore: `BooleanField`, `DateField`, `ListField`, `MapField`, `NullField`, `ReferenceField`, `TextField`, and `NestedModel` (which we'll get in a bit).
        
        Each field takes the optional parameters `default ` and `required`. If the field is not set, it will default to the value of `default`. If there is no `default`, the field is not set, and `required == True`, an `Exception` will be raised.
        
        
        #### Fields Example
        ```python
        class Manager(Model):
        	name = TextField(required=True)
        	age = NumberField(required=True)
        	company = TextField(required=True, default='Dunder Mifflin')
        	startedWorkingAt = DateField()
        
        m = Manager(name='Michael Scott') # you can pass in fields or set them later
        m.age = 45
        m.save() # Success! New doc in collection "manager" as: { name: Michael Scott, age: 45, company: Dunder Mifflin }
        
        m = Manager()
        m.name = 'Dwight Schrute'
        m.save() # Exception since age is required but not given
        
        ```
        
        You can also add a NestedModel which lets you add a defined class as a Field.
        
        ### NestedModel Example
        ```python
        class Dog(Model):
        	age = NumberField()
        	owner = Manager(required=True)
        
        dog = Dog()
        dog.age = 3
        dog.owner = Manager(name='Robert California', age=59)
        dog.save()
        
        ```
        
        
        ## Collections
        The collection name for a class defaults to the class' name in lowercase. To set the collection name, use the `Meta` class. You can also specify which fields print when printing the class.
        
        ### Meta Example
        
        ```python
        class Student(Model):
        	name = TextField()
        	school = TextField(required=True, default='UPenn')
        	
        	class Meta:
        		collection_name = 'students'
        		fields_to_print = ['name']
        
        s = Student(name='Amy Gutman')
        s.save() # creates a new document in the "students" collection
        print(s) # <*Student* key: students/9AJ5DeSvzfD04uqyhhpL, id: 9AJ5DeSvzfD04uqyhhpL, name: Amy Gutman>
        
        ```
        
        You can also inheret classes.
        
        ### Inheritance Example
        ```python
        class ExchangeStudent(Student):
        	originalCountry = TextField(required=True)
        	
        	class Meta:
        		collection_name = 'exchangeStudents'
        		fields_to_print = None # when this is None or does not exist, it prints all fields. When it is [] it only prints the defaults (key and id).
        
        e = ExchangeStudent(originalCountry='UK')
        print(e.school) # UPenn
        e.save()
        print(e) # <*ExchangeStudent* key: exchangeStudents/XbGdMjo9x9166MvZ79Zr, id: XbGdMjo9x9166MvZ79Zr, name: None, originalCountry: UK, school: UPenn>
        ```
        
        ## Queries
        You can make queries with the same syntax you would using the Python firebase-admin SDK. But FireORM returns the objects.
        
        ### Queries Example
        ```python
        managers = Manager.collection.where('name', '==', 'Michael Scott').limit(1).stream()
        print(managers) # [<*Manager* key: manager/Z8S75KU2n7QQnIm2cExy, id: Z8S75KU2n7QQnIm2cExy, age: 45, company: Dunder Mifflin, name: Michael Scott, startedWorkingAt: None>]
        
        manager = Manager.collection.get('Z8S75KU2n7QQnIm2cExy')
        print(manager) # <*Manager* key: manager/Z8S75KU2n7QQnIm2cExy, id: Z8S75KU2n7QQnIm2cExy, age: 45, company: Dunder Mifflin, name: Michael Scott, startedWorkingAt: None>
        ```
        
Keywords: Firestore Python ORM Models Firebase
Platform: UNKNOWN
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Description-Content-Type: text/markdown
