Python Daily
2.57K subscribers
1.48K photos
53 videos
2 files
38.9K links
Daily Python News
Question, Tips and Tricks, Best Practices on Python Programming Language
Find more reddit channels over at @r_channels
Download Telegram
Project-based tables and Django

Hi everyone,
I am looking for some suggestion/input regarding how to structure the database for a web-based application I will need to develop in the following months.

Basically I will need to develop an application to organize technical information (cable connections, tags, I/O boards, etc). The main issue is that this documentation is project-based, and I'd like to avoid to have everything merged together (i.e. I don't want to have a single table with all I/O boards for all the projects, as I'll have to filter by project in any query I do, and the table size will quickly grow out of control).

My idea is to create a different DB everytime a new project is started, and to populate said DB with the required empty tables ("bootstrapping a project"). Then I'd like to access the various projects via URLs (like /myapp/project1/ will "open" project1).

Probably the easiest thing would be to just create a different instance of the web app for each project, but that would make more difficult the creation of a new project (instance a new container/VM/whatever for the app...), as well as "sharing data" functions (like "copy all this I/Os from project A to B"). So I'd like to avoid this path.



Is there a best practice for this, or do you have any suggestion from your experience? I know that this is a Django subreddit but... perhaps Django is not the best candidate for something like that, and is better to go with something more... barebone (e.g. flask)?

Thanks! :)

/r/django
https://redd.it/6adio8
Automate Everything with Python - Question

Hi Ya'll,

I'm learning Python from Automate the Boring Stuff. My first project is to download episodes of this podcast I like. Right now when I run the program is downloads all the HTML from the 'url.' Where am I going wrong?

Next question. What it is supposed to do next is Click on all the links that say "Download this Episode." I have that bit of code included in the below but it doesn't seem to be working yet. Also, any tips for someone learning how to work with python would be appreciated!

Below is the python script:

https://drive.google.com/open?id=0B_w5K7I4N0d3a0JReW1QRUNPUXM


/r/Python
https://redd.it/6ad823
Using PreFetch with DRF ViewSets to include a @property on a model that relies on reverse foreign keys.

It took me entirely too long to figure this out, so thought I would share in case others are running into the same thing. Note that I attempted to use a OneToOne, but because not every Model B can relate to a Model A, and it throws duplicate errors on Nulls... I couldn't.



Model B has a FK to Model A.
Model A has a @property to obtain a field from Model B from a single model instance. In this scenario, I know there will only be one, so I go get the first value only.



@property
get_model_B_field(self):
b = self.modelB_set.values('field').all()
if b:
return b[0].field



Of course, including this in the serializer quickly creates the N+1 problem, as Django will re-query the database for each Model A in the queryset. As I have several properties like this across a variety of models, the problem grew exponentially until I had thousands of queries running and 12+ seconds to load the api page. P.S. I highly recommend using [Django Debug Toolbar](https://django-debug-toolbar.readthedocs.io/en/stable/).



First attempt was to use prefetch_related as such in the ViewSet which calls the serializer:



queryset=ModelA.objects.prefetch_related('modelB_set').all()



Still N+1



I went back to the property and attempted to remove the "values" aspect, and also make use of the first() function.



@property
get_model_B_field(self):
b = self.modelB_set.first()
if b:
return b.field



Still N+1



Then I tried using the new Prefetch object on my view's queryset, as such:



queryset=ModelA.objects.prefetch_related(Prefetch('modelB_set',queryset=ModelB.objects.all()))



Still N+1




Finally, I read the bug report from another user indicating first() wasn't respecting the prefetch, to realize that in order for that to happen, you must explicitly set an order on the queryset in the PreFetch()



queryset=ModelA.objects.prefetch_related(Prefetch('modelB_set',queryset=ModelB.objects.order_by('field').all()))


Finally, down to 7-8 (from 5000+) queries for a rather large API returning data from across multiple models, many of which are reverse FK lookups in about 1 second. If others have a more elegant solution, I'd love to hear it. My only other option was going to be attempt to use Nested Serializers, but I didn't want to nest all of ModelB inside ModelA, and I didn't like the idea of creating multiple serializers against ModelB to just handle different field combinations. Now, I can have all my properties in one place (the model), and include the fields individually on the API as needed.



/r/django
https://redd.it/6aexjt
Asyncio event loop written in Rust language

I'd like to announce new event loop, written in Rust language.

https://github.com/PyO3/tokio

It is still in alpha stage. It provides most of asyncio event loop apis, except udp. TCP api is more or less stable, Aiohttp tests pass with tokio loop (~1800 tests). I am planing to run more tests from other libraries.

Performance wise it should be close to uvloop.

But main motivation behind this project is to be able to mix Rust code with Python. Internal implementation still requires
more thinking, but it is already possible to to wait for python task/future completion in rust code and opposite.

Project is still in early stage of development, if anyone interested, everyone welcome to join.


/r/Python
https://redd.it/6ael2m
Testing serialization independently from views (DRF)

How would one go about testing serialization independent of my views?

In other words, just hardcoding a Django model object and using the serializer.

Problem is that HyperLinkedIdentityField is throwing an error saying to add the request to the context (I am using HyperlinkedModelSerializers). I do this in my views, but I don't want to introduce views here. If I simulate a post request, then I'll have to go through my views.

Is there a way around this?

I still consider myself a noob with testing and have never done testing with API's beyond manually testing my API endpoints, so I'd appreciate any general advice.

Thanks!

/r/django
https://redd.it/6afevz
Creating CRUD Interface with SQLAlchemy

Im in the middle of doing a small project. Right now, I have a flask application that is connecting to a SQLAlchemy database and Im able to use a form to add new entries to that database. I also have a page [here](http://imgur.com/a/PJ6fK) that displays the values that are being held by the SQL database.

However, now I want to turn the page that is showing the data into a CRUD interface so i am able to not so much create new entries but to read, update current data thats being stored and delete entries as well. (More like a RUD design :P)

I have looked all over the web for a simple example of someone doing this in SQLAlchemy & Flask but haven't really come across anything decent. Does anyone know of any examples I can look at to do this simply? I've looked at the SQLAlchemy docs but it doesnt really show how to do it using Jinja templates and im relatively new to all this so need as much help as I can get.

/r/flask
https://redd.it/6adlzf
Question about Django Rest Auth and Users

I am using Django Rest Auth endpoints and DRF for learning. I created a basic To-Do app and it works just fine but after I have new users register, I would like them to be able to do basic CRUD operations on their own tasks.

Because I am using Django Rest Auth to register users, is there anything special I need to override? How would I go about achieving this goal?

I feel like this may be an easy problem to solve but I'm having trouble. I've tried adding to views.py

permission_classes = (IsAuthenticated,)

but does not work.

Thanks for any help!

/r/django
https://redd.it/6ahge2
SQLAlchemy filter similar entries

I'm asking myself how to implement a proper search function. For example in the case of a User database model created with sqlalchemy. How would I do a filter request searching for similar names as the given one?
E.g.:


User.query.filter_by(name="Tina").all()
# gets all users with the name "Tina"


But what if I want to get all users with a similar name as well? E.g. "Tine", "Lina"
Is there something more efficient than looping through the name letters replacing it with % and do like or ilike queries?



/r/flask
https://redd.it/6ajk76
Spyder causing tons of terminal/console windows to rapidly open and close. WHy and how do I fix it?

The title pretty much says it all. This happens with a whole range of things I try to do, and actually it seems like everything I do causes this.

The only other information I can provide, is that the file address in the "Title" bar of the terminal window ends in "tput.exe", but it's opening and closing so rapidly (and so many times) that I have a hard time making out anything else. Anyone know whats up?

To clarify, I just ran `x = []` and had to wait 10 seconds for a ton of terminal windows to open and close. It's SUPER annoying.

/r/IPython
https://redd.it/6al4pv
Edit form with WTForm and Sqlalchemy

Using WTForm, how can I fill all fields from Sqlalchemy? I'm improving a CRUD.
Now I use
```{{ form.name(class='form-control', value=my_contact.name) }}```

/r/flask
https://redd.it/6alei3