Security News
Fluent Assertions Faces Backlash After Abandoning Open Source Licensing
Fluent Assertions is facing backlash after dropping the Apache license for a commercial model, leaving users blindsided and questioning contributor rights.
A framework for managing database views based on Django, without the migrations
The package for managing database views using django, without the migrations. It can be used for generating database views and reading from them using django orm system.
They look something like this:
class MySQLView(PostgresViewFromSQL):
sql = """
SELECT col_a, col_b FROM table_1;
"""
class MyQuerysetView(PostgresViewFromQueryset):
@classmethod
def get_queryset(cls):
return (
Table1
.objects
.values('col_a', 'col_b')
)
ReadableViewFromQueryset
or ReadableViewFromSQL
. It would look like this:
class MyReadableView(ReadableViewFromQueryset):
@classmethod
def get_queryset(cls):
return (
Table1
.objects
.values('col_a', 'col_b')
)
result = MyReadableView.objects.all()
result = MyReadableView.objects.filter(name="test")
result = MyReadableView.objects.get(id=1)
The name for the view in the database is generated automatically in the base class - BasePostgresView
.
It's not possible at the moment to define a custom name in the database for a readable view. Though it's possible if the
view is not readable (not inherited from the readable view abstraction).
Since a readable view is basically a not managed django model, you might want to
set some custom meta data for it by defining a Meta class inside the readable view (
For example changing the data source - db_table
).
! Note that defining a custom Meta class is not allowed in the current version of the package and will lead to an error!
See some more examples in the tests here
This also supports the construction of materialised views via PostgresMaterialisedViewMixin
. Note that the function refresh_materialized_view
will
need to be managed by the user in order to keep these up to date where required.
db_table
Our use-case is for a database which is managed by Django in which we would like to provide an analytics-friendly representation of some of our data. This involves giving analytics direct access to our database (whilst using a permissions framework), but using views to expose the data in a more simple way, as well as obscuring data which we consider personally identifiable/sensitive.
There are other frameworks existing which do similar things, usually including reads via the ORM. We found that these packages all generate migrations (despite being unmanaged) and we wanted to remove this from the django migrations process altogether - there seemed to be no value add by including migrations and they would just muddy our migration states.
pip install django-orm-views
'django_orm_views'
to your INSTALLED_APPS
postgres_views.py
(file or package) inside any appPostgresViewFromQueryset
or PostgresViewFromSQL
to your postgres_views.py
(as above)./manage.py sync_views
A postgres_views.py
file might look something like the following:
class ComplexViewFromQueryset(PostgresViewFromQueryset):
prefix = 'test' # This is optional, but allows you to prefix the table names for views
@classmethod
def get_queryset(cls): # Return a `.values` with the query you desire
return (
TestModelWithForeignKey
.objects
.all()
.annotate(
double_integer_col=F('foreign_key__integer_col') * 2
)
.values(
'id',
'foreign_key__id',
'foreign_key__integer_col',
'foreign_key__character_col',
'foreign_key__date_col',
'foreign_key__datetime_col',
'double_integer_col',
)
)
When we run the ./manage.py sync_views
, we'll create a view called test_complexviewfromqueryset
under
the views
schema.
Note, you can put ./manage.py sync_views
into your CI/CD. It works by:
Feel free to fork the package and propose changes. The repo comes with a test django project which can be used to effectively test changes. It also demonstrates the functionality pretty well.
FAQs
A framework for managing database views based on Django, without the migrations
We found that django-orm-views demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Fluent Assertions is facing backlash after dropping the Apache license for a commercial model, leaving users blindsided and questioning contributor rights.
Research
Security News
Socket researchers uncover the risks of a malicious Python package targeting Discord developers.
Security News
The UK is proposing a bold ban on ransomware payments by public entities to disrupt cybercrime, protect critical services, and lead global cybersecurity efforts.