REST Anti-Patterns – A lot of people (or companies) pretend to have a REST API. Read this article and you will understand that not all the API’s that implement GET and POST methods are REST APIs. It is an old article (from 2008), but still valid.
Tag: python
Example for singleton decorator pattern in python
I know there is not very common in Python to use the singleton pattern, but I found a nice implementation of this pattern in Python 3 Patterns, Recipes and Idioms book. Starting with that example I implemented an equivalent of the well known PHP getConnection example.
You have the code below:
This is the class that implements the Singleton pattern.
class Singleton: def __init__(self, klass): self.klass = klass self.instance = None def __call__(self, *args, **kwds): if self.instance == None: self.instance = self.klass(*args, **kwds) return self.instance
Now, we create a class and we decorate it with the Singleton class. Let’s import also MySQLdb module *.
import MySQLdb @Singleton class Database: connection = None def get_connection(self): if self.connection is None: self.connection = MySQLdb.connect(host="localhost", user="root", passwd="razvan", db="mydatabase") return self.connection
Let’s test this:
db1 = Database().get_connection() db2 = Database().get_connection() print (db2) print (db1)
You will see something like:
<_mysql.connection open to 'localhost' at 16b4800> <_mysql.connection open to 'localhost' at 16b4800>
As you can see there is only one object.
For fun, let’s remove the line “@Singleton” and re-run the example. This time you will see different objects:
<_mysql.connection open to 'localhost' at c91e20> <_mysql.connection open to 'localhost' at bccba0>
You can find the fully example here.
* If you don’t know how to install MySQLdb, you can check the previous post.
Install MySQLdb for Python 2.x
If you want to install MySQLdb for Python 2.x, without using the package manager of your Linux distro (Ubuntu in our case), you can do it through pip like this:
First you must to have installed libmysqlclient-dev (and, of course pip)
sudo apt-get install libmysqlclient-dev
After that execute this two commands:
sudo easy_install -U distribute sudo pip install mysql-python
Test if is working:
Type in the command line:
python
and in the python console:
import MySQLdb help(MySQLdb)
That’s all. Enjoy!
Tip: List vs. Set in Python
In Python, if you have a “list” with a lot of members and you need to do many membership checks, it will be better to use a “set” instead, because the checks are linear for lists and constant for sets.