Package: pygasus
pygasusA lightweight Sqlite ORM built on top of Pydantic.InstallationThe easiest way to install Pygasus is to usepip, preferably inside a virtual environment:pip install pygasuspygasussupports Python 3.7, 3.8, 3.9 and 3.10.Getting startedPygasus allows you to create your models using type annotations.  This model will then be converted to something that can be stored (in a database):frompygasusimportModelclassUser(Model):"""An user."""id:intname:strage:intheight:floatYou then need to add this model to Pygasus:frompygasus.storageimportSQLStorageEngine# The default storage engine is SQLAlchemy, connected to Sqlite3.storage=SQLStorageEngine("test.sql")# ... you can also just create the database in memory for testing:storage=SQLStorageEngine(memory=True)# Then you need to add your models.storage.bind_models({User})# You can call `bind_models` without any argument, but in this case,# make sure to import your `User` class (and your other models)# before you do that.# Create a new user.user=User.repository.create(name="Vincent",age=33,height=5.7)# Notice that we don't specify the `id`.  This field will be set by# the storage engine Pygasus uses.# At this point, our new user has been created, stored and returned.print(user.id)# 1print(user.name)# Vincentuser.age=21# Well, why not?# This will call an immediate update in the storage.# Of course we can also query a model:queried=User.repository.get(id=1)# Due to caching, the queried user will be identical (in terms of reference).print(userisqueried)# True# You can control the cache to remove this behavior.This should show you some basic concepts.  To learn more, head over to the documentation.ContributingIf you wish to develop Pygasus, all you need is:Docker: getting a working Docker engine isn't that complicated on Linux, Windows or Mac OS.Make: getting Make is more complicated, but it's not exactly required.  If you're on Windows, don't despair.  You might rely on Bash itself, it's available (and easy to access if you have WSL installed).Pygasus relies on Docker images to make sure it remains usable on the supported Python versions: the idea is that each version will run in a diffferent Docker container, built on a different image.  This process is automated, and you don't really need to understand it to use it, but it might be worth diving into the scripts (see thescriptsdirectory).Initializes the imagesOnce you have cloned thepygasusrepository, you must create the images for the required Python versions.  This is not exactly mandatory, as other scripts will make sure the images exist (and will build them if necessary), but this might make things easier, particularly in case of errors.Pygasus supports four Python versions: 3.7, 3.8, 3.9 and 3.10.  You can initialize them all at once, though it will take time:make initGet yourself a cup of coffee and stare at the process: each image is downloaded and built in turn.  Additional packages are installed.  Pygasus will install additional dependencies, then install Poetry and let it handle other Python dependencies, so that each image uses the same versions in dependencies.If you wish to build images individually:make init version=3.7This will build the image only for Python 3.7 (called pygasus-3.7).  Running each build one at a time makes it easier to spot errors.On the other hand, only panics if a build actually fails: it's not that uncommon to see warnings and even errors during the build process, but most of the time, this can be ignored... unless the build itself fails (you will be warned if that happens, don't worry).Curious? Try to look at the images in Docker:docker images.  You should see the fourpygasus-VERSIONimages along with thepython-VERSION-slimbuild (this is the image on which Pygasus images are built).Don't have Make?  If you have Bash, you can still run the command:bash scripts/init.shInitializing isn't a "fire and forget" command.  Should Pygasus dependencies change or critical security bugs be fixed in Python images, it is recommended to runmake initonce more.TestingNow that you have your Pygasus images, you can run the test suite in all versions at once:make testThis will run the test suite in every Python version and display the result on the screen.  This might take a little while, but you should see the progress.  Obviously, if a test fails in a supported Python version, this is a big deal and something to fix for the next commit.  It is recommended to runmake testbefore committing anything.Don't have Make?  No worries:bash scripts/test.shYou can also run the test suite in a specific version, though this is less useful:make test version=3.9LinterPygasus uses black and flake8 as linters.  If you have written some code, make sure it's properly formatted before committing:make check-styleThis won't do any modification in your code, this will merely display the errors (if any).  Fix them before committing!It's also possible to format your code using black:make formatThis will actually edit your files in a proper format.  However, notice that flake8 isn't involved.  Sometimes, it sees potential errors black will ignore, so make suremake check-styleis completely empty before committing.You don't have Make?  No worries:bash scripts/check_style.sh
bash scripts/format.shDebuggingWhen coding, it can help to actually see what Pygasus does when you execute a line of code.  It is possible to start a shell inside of the container where Pygasus is installed.  You can then access topdbto debug or run some arbitrary code:make shellIf no version is specified, run in the first version (that is, 3.7).  It is assumed that it might be harder to break compatibility that way.  You can specify a version though:make shell version=3.10Once connected to the container, you can execute commands (includingpoetry,pythonand such).Don't have Make?  No worries:bash scripts/shell.shCleaning upThe started containers using the previous commands will not be maintained: once you exit them, they will go away.  However, images are kept.  Although this usually doesn't pose many problems, these images are heavy.  You can remove images without tags (usually, Pygasus images have got only one tag).make cleanThis shouldn't be necessary.  Keep an eye on the output of thedocker imagescommand to see if Docker keeps images it shouldn't.Updating imagesIt bears reminding, once built, Pygasus images aren't changed.  If a major security bug is fixed and a new Python image is pushed to Docker hub, you won't have it.  If Pygasus dependencies change, you might run into errors.At any point, you can force-update the Pygasus images:make initThis will pull the Python image from Docker and rebuild the Pygasus image even if you already have one.